@polycode-projects/the-mechanical-code-talker 6.0.12 → 6.0.13

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 iR=Object.defineProperty;var P=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Lt=(e,t)=>{for(var n in t)iR(e,n,{get:t[n],enumerable:!0})};var yt,qB,YB,XB,JB,QB,ZB,eU,tU,nU,sU,oU,rU,iU,aU,cU,lU,ne,$e,Gt,Ku,og,uU,dU,fU,Qe=P(()=>{yt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},qB=yt("createRequire"),YB=yt("readFileSync"),XB=yt("access"),JB=yt("readFile"),QB=yt("writeFile"),ZB=yt("appendFile"),eU=yt("mkdir"),tU=yt("mkdtemp"),nU=yt("rename"),sU=yt("unlink"),oU=yt("rm"),rU=yt("stat"),iU=yt("copyFile"),aU=yt("readdir"),cU=yt("createReadStream"),lU=yt("createWriteStream"),ne=(...e)=>e.join("/"),$e=e=>String(e).replace(/\/[^/]*$/,""),Gt=(...e)=>e.join("/"),Ku=e=>String(e).startsWith("/"),og="/",uU=yt("randomBytes"),dU=yt("spawnSync"),fU=yt("createInterface")});var $t,mU,hU,Hu,Oe,vr,aR,qn,rg,za,qu,ig,cR,gU,lR,bU,wU,yU,$U,vU,Pt=P(()=>{$t=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},mU=$t("createRequire"),hU=$t("readFileSync"),Hu=$t("access"),Oe=$t("readFile"),vr=$t("writeFile"),aR=$t("appendFile"),qn=$t("mkdir"),rg=$t("mkdtemp"),za=$t("rename"),qu=$t("unlink"),ig=$t("rm"),cR=$t("stat"),gU=$t("copyFile"),lR=$t("readdir"),bU=$t("createReadStream"),wU=$t("createWriteStream"),yU=$t("randomBytes"),$U=$t("spawnSync"),vU=$t("createInterface")});function Er(e){let t=fR.exec(String(e||""));return t?t[1].toLowerCase():null}function pR(e){return/(?:[sxz]|ch|sh)$/i.test(e)?`${e}es`:/[^aeiou]y$/i.test(e)?`${e.slice(0,-1)}ies`:`${e}s`}function dg(e){let t=String(e||""),n=To[t]||t.endsWith("Symbol")&&To[t.slice(0,-6)]||null;if(!n)return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase();let[s,...o]=n.bare.split(" ");return[pR(s),...o].join(" ")}function Xs(e,t){return!e||!mR.has(t)?e:e.shape==="ask"?{...e,subject:e.object,object:e.subject}:e.shape==="reverse"?{...e,shape:"forward"}:e.shape==="forward"?{...e,shape:"reverse"}:e}function Ba(e){return String(e||"").replace(hR,"$1")}function Js(e){return e.replace(gR,"").trim()}function gn(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(wR,"").trim();if(s=s.replace($R,"").trim(),s===t)break;t=s}return t}var ag,cg,uR,To,Ao,lg,ug,dR,fR,fg,mR,hn,Yu,hR,Fn,Xu,gR,bR,wR,yR,$R,he,gi,Ua,vR,pg,nt,bn,Qs,Wa,Ju,Qu,Zu,mg,bi,Co,hg,gg,Oo,Sn,Ss,Zs,Ve,bg,Io,No,Yn,Xn,wg,wi,xr,Ga,Sr,yg,Jn=P(()=>{ag=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],cg=["belongs to","belong to","is part of","are part of","is defined in","are defined in"],uR=["lives in","live in","sits in","sit in","sits inside","sit inside"],To={imports:{bare:"import",comment:"Module -> Module: subject's import graph references object (usesComplexType).",verbs:["couples to","couple to","depends on","imports","import","relies on","rely on","requires","require","references","reference","pulls in","pull in","built on","builds on","build on","uses code from","grabs","grab","pulls from","pull from","leans on","lean on","is wired to","are wired to","is hooked up to","are hooked up to","importing"]},uses:{bare:"use",comment:"query-side union: imports (Module->Module) + calls (Module->Module) + callsSymbol (fn->fn).",verbs:["uses","use","makes use of","make use of","talks to","talk to","using"]},calls:{bare:"call",comment:"Function/Method -> Function/Class (symbol-grain) or Module -> Module (coarse): subject invokes object.",verbs:["invokes","invoke","calls","call","runs","run","executes","execute","hits","hit","triggers","trigger","fires","fire","kicks off","kick off","calling"]},defines:{bare:"define",comment:"Module -> top-level Function/Class/Method/Attribute: subject declares object.",verbs:["defines","define","declares","declare","has","have","holds","hold","defining"]},contains:{bare:"contain",comment:"Class -> Method/Attribute: subject's membership includes object.",verbs:["contains","contain","containing",...cg,...uR]},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",...ag]},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"]}},Ao=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"})}),lg=Object.freeze(Object.fromEntries(Object.entries(Ao).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),ug=Object.freeze(Object.values(Ao).map(e=>e.predicate)),dR=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),fR=new RegExp(`^mgx:[a-z]+-(${dR.join("|")})$`,"i");fg=Object.freeze([...ag,"is the superclass of","are the superclass of","is the parent class of"]),mR=Object.freeze(new Set([...fg,...cg]));hn=Object.freeze(["defined","declared","located","implemented"]),Yu=Object.freeze(["now","currently","right now","at the moment","these days","today"]),hR=new RegExp(`\\s+(?:${[...Yu].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");Fn=Object.freeze(["mentioned","referenced"]),Xu=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),gR=new RegExp(`\\s+(?:${Xu.join("|")})\\s*[?.!]*$`,"i");bR=Object.freeze(["then","though","too"]),wR=new RegExp(`\\s+(?:${bR.join("|")})\\s*[?.!]*$`,"i"),yR=Object.freeze(["please explain","explain"]),$R=new RegExp(`,\\s*(?:${yR.join("|")})\\s*[?.!]*$`,"i");he=Object.freeze(Object.fromEntries(Object.entries(To).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),gi=Object.freeze(new Set(["has","have","holds","hold"])),Ua=Object.freeze(new Set(["search","describe","signature","impact","members","subclasses","exports","callers","callees","calls","tests","untested","history","cochanges","architecture","arch","related","sprite"])),vR=e=>!fg.includes(e),pg=Object.freeze([...new Set(Object.keys(he).filter(vR).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),nt=Object.freeze({function:"Function",functions:"Function",method:"Method",methods:"Method",class:"Class",classes:"Class",module:"Module",modules:"Module",mod:"Module",mods:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),bn=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),Qs=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"}),Wa=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"}}),Ju=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"}),Qu=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"}),Zu=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"}),mg=/\b([a-z]{3,})in'/gi,bi=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"]),Co=Object.freeze(["this","it","that","here","this one","that one"]),hg=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]}`}]),gg=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`}]),Oo=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),Sn=Object.freeze(["that","which","who"]),Ss=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),Zs=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"}),Ve=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}}),bg=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Io=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"]),No=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"]),Yn=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"}),Xn=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"}}),wg=Object.freeze({tests:"Module",test:"Module"}),wi=Object.freeze(["those","them","these"]),xr=Object.freeze(["contains","defines"]),Ga=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"]),Sr=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),yg=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var st,eo,Va=P(()=>{st="#000000",eo=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${st}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${st}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var ER,jn,$g,vg,ed,Eg,RU,_U,xg=P(()=>{Jn();Va();ER=()=>Object.keys(eo).sort(),jn=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),$g=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),vg=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),ed=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:hn}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:jn("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:jn("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:$g("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:vg("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:vg("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:ER(),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:$g("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:jn("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:jn("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:jn("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:jn("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:jn("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:jn("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:jn("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:jn("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:jn("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:jn("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}}]),Eg=ed.filter(e=>e.tier==="hot"),RU=ed.filter(e=>e.tier==="cold"),_U=Object.freeze(ed.map(e=>e.name))});var Sg,Ne,Xt=P(()=>{Qe();Sg=ne(".tmct","graph.json"),Ne=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function xR(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 jg(e){let t=(Array.isArray(e)?e:[]).map((c,l)=>({file:c?.file,payload:c?.payload||{},name:c?.name!=null&&String(c.name).length?String(c.name):String(l)})),n=t.map(({payload:c})=>xR(c)),s=new Map;for(let c of n)for(let l of c)s.set(l,(s.get(l)||0)+1);let o=new Set([...s.entries()].filter(([,c])=>c>1).map(([c])=>c)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:c,name:l}of t){a=a&&!!c.bootstrap,typeof c.generated_at=="string"&&c.generated_at>i&&(i=c.generated_at);let u=p=>o.has(p)?`${l}/${p}`:p;Array.isArray(c.classes)&&r.classes.push(...c.classes),Array.isArray(c.vocabulary)&&r.vocabulary.push(...c.vocabulary);for(let p of Array.isArray(c.individuals)?c.individuals:[]){if(!p)continue;let f={...p};f.id&&(f.id=u(f.id)),Array.isArray(f.derived_from)&&(f.derived_from=f.derived_from.map(m=>u(m))),Array.isArray(f.mentions)&&(f.mentions=f.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),r.individuals.push(f)}for(let p of Array.isArray(c.objectProperties)?c.objectProperties:[]){if(!p)continue;let f={...p};Array.isArray(f.examples)&&(f.examples=f.examples.map(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(f)}let d=c.proseIndex&&typeof c.proseIndex=="object"?c.proseIndex:{};for(let[p,f]of Object.entries(d)){let m=r.proseIndex[p]||(r.proseIndex[p]=[]);for(let h of Array.isArray(f)?f:[]){let b=u(h);m.includes(b)||m.push(b)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var kg=P(()=>{});var kr={};Lt(kr,{clearCache:()=>SR,emptyEntities:()=>Ha,fetchEntities:()=>_R,registerProvider:()=>jR});function SR(){jr=null,yi=null}function jR(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Ka;return Ka=e??null,jr=null,t}function Ha(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function kR(e){let t;try{t=await Oe(e,"utf8")}catch(n){if(n?.code==="ENOENT")return Ha();throw new Ne(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Ne(`graph artifact ${e} is not valid JSON`)}}async function RR(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(yi&&yi.key===n)return yi.payload;let s=[];for(let r=0;r<t.length;r++){let i=await kR(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=jg(s);return yi={key:n,payload:o},o}async function _R(e){let t=e||{};if(Ka){let o;try{o=await Ka(t)}catch(r){throw r instanceof Ne?r:new Ne(`graph provider failed (${r?.message||r})`)}if(!o||typeof o!="object")throw new Ne("graph provider returned no entities payload");return o}if(Array.isArray(t.graphFiles)&&t.graphFiles.length>1)return RR(t);if(!t.graphFile)return Ha();if(jr&&jr.file===t.graphFile)return jr.payload;let n;try{n=await Oe(t.graphFile,"utf8")}catch(o){if(o?.code==="ENOENT")return Ha();throw new Ne(`cannot read graph artifact at ${t.graphFile} (${o?.code||o?.message||o})`)}let s;try{s=JSON.parse(n)}catch{throw new Ne(`graph artifact ${t.graphFile} is not valid JSON`)}return jr={file:t.graphFile,payload:s},s}var jr,yi,Ka,$i=P(()=>{Pt();Xt();kg();jr=null,yi=null,Ka=null});function Dn(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<=_g)}function td(e){if(!e)return[];let t=[],n=new Set;for(let s of String(e).toLowerCase().split(/[^a-z0-9]+/))if(!(s.length<2||s.length>_g||Rg.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=TR))break;return t}function qa({name:e,doc:t}={}){return[...new Set([...Dn(e),...td(t)])].sort()}function Ya(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 Lo(e,t,{limit:n=10}={}){let s=[...new Set([...Dn(t),...td(t)])];if(!s.length)return[];let o=new Map;for(let r of s)for(let i of e?.[r]||[])o.set(i,(o.get(i)||0)+1);return[...o.entries()].sort((r,i)=>i[1]-r[1]||String(r[0]).localeCompare(i[0])).slice(0,n).map(([r,i])=>({id:r,score:i}))}function Ag(e,t){let n=e&&(e["tmct:layers"]?e:e.proseIndex),s=n&&n["tmct:layers"],o=String(t||"").toLowerCase(),r={ids:[],via:null};if(!o||!s||typeof s!="object")return r;let i=new Set,a=new Set;for(let c of Object.keys(s)){let l=s[c];if(!l||typeof l!="object")continue;let u=l[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let p of d)i.add(p);a.add(c)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var Rg,_g,TR,Tg,zn=P(()=>{Rg=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+/)),_g=40,TR=120;Tg=e=>/^[a-z0-9]+$/.test(e)&&!Rg.has(e)});function Cg(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 AR(e){if(!e.startsWith(Ig))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Og);if(o<0)return null;let r=n.slice(o+Og.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Ig.length,o),createdAt:s}:null}function Bn(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:OR(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",...Cg(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=AR(s);return o||{kind:"teach",...Cg(s)}}return n.startsWith("web:")?{kind:"web",url:n.slice(4)}:n.startsWith("url:")?{kind:"web",url:n.slice(4)}:n.startsWith("news-fixture:")?{kind:"corpus",name:n.slice(13).split("@")[0]||"unknown"}:n.startsWith("extracted:news:")?{kind:"web",url:n.slice(10)}:n.startsWith("news:")?{kind:"web",url:n}: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 Fg(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Lg;let n=Number(t);return Number.isFinite(n)?Math.max(nd,Math.min(Mg,n)):Lg}function Dg(e,t=Date.now(),n=IR){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Ng+(1-Ng)*Math.pow(.5,o/n)}function zg(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let f of o){if(r.has(f))continue;r.add(f);let m=t[f],h=NR(m);if(!h)continue;i.push(h);let b=(ks[h]??0)*Fg(m);a.push(Math.max(0,Math.min(1,b)))}let c=0,l=1;for(let f of a)l*=1-f;if(a.length&&(c=Math.min(1,1-l)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let f=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;c=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*f))}let u=Dg(e?.createdAt,s,n.halfLifeMs),d=Rr(Math.min(1,c*u)),p={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Rr(u)};return{score:d,inputs:p}}function Ja(e,t){let n=(ks[e]??0)*Fg(t);return Rr(Math.max(0,Math.min(1,n)))}function LR(e){if(e==="operator")return 1;let t=ks[e];return t===void 0?1:(t+1)/2}function Qa(e,t={}){let n=typeof t.now=="number"?t.now:Date.now(),s=Array.isArray(e)?e:[],o=new Map,r=[];for(let a of s){let c=Dg(a?.assertedAt,n,t.halfLifeMs),l=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,l*c)),p=o.get(u)||{complement:1,strongest:0};p.complement*=1-d,p.strongest=Math.max(p.strongest,d),o.set(u,p),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:l,recency:Rr(c)})}let i=1;for(let[a,c]of o){let l=Math.max(LR(a),c.strongest);i*=1-Math.min(1-c.complement,l)}return{score:s.length?Rr(Math.min(1,1-i)):0,inputs:r}}function Bg(e){return Qa(e,{halfLifeMs:PR})}function Ug({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+MR),i=(o*r+1)/2;return Rr(nd+(Mg-nd)*i)}var _r,Xa,ut,js,Og,Ig,CR,OR,ks,sd,Pg,IR,Ng,nd,Mg,Lg,Rr,NR,PR,MR,Un=P(()=>{_r="mgx:trustScore",Xa="mgx:trustInputs",ut="mgx:createdAt",js="mgx:updatedAt";Og="#node:",Ig="peer:";CR="wikipedia-live",OR=e=>e===CR?"referenceLive":"reference";ks=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),sd=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"}}),Pg=new Set(Object.entries(sd).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),IR=720*60*60*1e3,Ng=.9,nd=.5,Mg=1.5,Lg=1,Rr=(e,t=6)=>Number(e.toFixed(t)),NR=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";PR=1/0;MR=19});var Po,od=P(()=>{Po=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function rd(e,t){return Math.log(1+e/(1+t))}var vi=P(()=>{});var ec={};Lt(ec,{bfsLevels:()=>Za,findActionPath:()=>Ei,findReachableSet:()=>id});function Wg(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function Gg(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 Ei(e,t,n,{maxDepth:s=50,stateKey:o=Wg}={}){if(t(e))return{actions:[],states:[e]};let r=Gg(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let l of r)if(t(l.state))return{actions:l.actions,states:l.states};if(a===s)break;let c=[];for(let l of r){let u=o(l.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:p}of n(l.state)||[]){let f=o(p);i.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}}r=c}return null}function id(e,t,{maxDepth:n=50,stateKey:s=Wg}={}){let o=Gg(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let c=[];for(let l of o){let u=s(l.state);if(!r.has(u)&&(r.add(u),i.push({node:l.state,path:{actions:l.actions,states:l.states}}),a!==n))for(let{action:d,nextState:p}of t(l.state)||[]){let f=s(p);r.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}o=c}return i}function*Za(e,t,{maxDepth:n=8,keyOf:s=o=>o}={}){let o=new Set([e]),r=[e];for(let i=1;i<=n&&r.length;i+=1){let a=[],c=[];for(let l of r)for(let u of t(l)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),c.push(d))}r=c,yield a}}var Rs=P(()=>{});function nc(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 xi(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function As(e){let t=String(e?.prop||"").toLowerCase();if(Vg[t])return Vg[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":/denot/.test(n)?"denotes":/\bserve/.test(n)?"serves":null}function Jt(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function ad(e){let t=Jt(e).split("/");return t[t.length-1]}function FR(e){return(e?.derived_from||[]).filter(ob).length}function Kg(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+FR(e)}function wn(e,t){let n=Jt(t);if(!n)return{match:null,candidates:[]};let s=ad(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Jt(i.label),c=String(i.id||"").toLowerCase(),l=0;a===n||c===n?l=100:a.endsWith(`/${n}`)||o&&(ad(a)===s||ad(a).replace(/\.[a-z]+$/,"")===s)?l=80:a.includes(n)&&(l=Math.max(10,50-(a.length-n.length))),l>0&&r.push({ind:i,score:l})}return r.sort((i,a)=>a.score-i.score||Kg(a.ind)-Kg(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 Vt(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 DR(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 Hg(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Ts(e){let t=e||"Entity",n=Dn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function vt(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function pd(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Ts(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(ob);o.length&&s.push(`attestation: ${o.length} provenance ref(s)`);for(let c of t.attributes||[])s.push(`attribute: ${c.key} = ${c.value}${c.prop?` [${c.prop}]`:""}`);let{out:r,incoming:i}=DR(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:c,edges:l}of r)s.push(` ${Hg(c)} (${l.length}) \u2192 ${vt(l.map(u=>u.objectLabel||u.object),qg)}`);for(let{group:c,edges:l}of i)s.push(` \u2190 ${Hg(c)} (${l.length}) by ${vt(l.map(u=>u.subjectLabel||u.subject),qg)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${vt(a,zR)}`),n.length&&s.push(`other matches: ${n.map(c=>`${c.label} (${Ts(c.class)})`).join(", ")}`),e.truncated.length&&s.push(BR(e)),s.join(`
2
- `)}function BR(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 Ar(e,t,{maxDepth:n=8,includeCycleReturn:s=!1}={}){let o=new Map,r=new Map,i=(c,l,u,d)=>{!c||!l||c===l||(o.has(c)||o.set(c,[]),o.get(c).push({id:l,label:u,via:d}))};for(let c of e.relations){let l=As(c);if(l==="imports"||l==="calls")for(let u of c.edges)i(u.object,u.subject,u.subjectLabel||u.subject,c.predicate);else if(l==="callsSymbol")for(let u of c.edges){let d=_s(e,u.subject),p=_s(e,u.object);if(!d||!p)continue;let f=e.byId.get(d)?.label||d;i(p,d,f,c.predicate),d!==p&&i(u.object,d,f,c.predicate)}else if(l==="tests")for(let u of c.edges)r.has(u.object)||r.set(u.object,[]),r.get(u.object).push(u.subjectLabel||u.subject);else if(l==="serves")for(let u of c.edges)i(u.subject,u.object,u.objectLabel||u.object,c.predicate)}let a=[];for(let c of Za(t.id,l=>o.get(l)||[],{maxDepth:n,keyOf:l=>l.id})){if(!c.length)continue;let l=c.map(u=>({...u,tests:r.get(u.id)||[]})).sort((u,d)=>String(u.label).localeCompare(String(d.label)));a.push(l)}for(let c=0;s&&c<a.length;c+=1){let l=a[c].flatMap(d=>(o.get(d.id)||[]).filter(p=>p.id===t.id)).sort((d,p)=>String(d.via).localeCompare(String(p.via)));if(!l.length)continue;let u={...l[0],tests:r.get(t.id)||[]};a[c+1]||(a[c+1]=[]),a[c+1]=[...a[c+1],u].sort((d,p)=>String(d.label).localeCompare(String(p.label)));break}return a}function rb(e,t,{maxDepth:n=8}={}){let s=Ar(e,t,{maxDepth:n}),o=[`Impact of changing ${t.label} (reverse closure over imports/calls edges, module- and function-level):`];s.length||o.push("no dependents found in the current artifact \u2014 nothing imports or calls it (or its edges are not in the extracted graph yet).");let r=s.reduce((a,c)=>a+c.length,0);s.length&&o.push(`total: ${r} dependent(s) across ${s.length} depth level(s) (lists capped for brevity).`),s.forEach((a,c)=>{if(c>=UR){o.push(`depth ${c+1}: ${a.length} more dependent(s) (not listed)`);return}o.push(c===0?`depth 1 (${a.length} direct dependents):`:`depth ${c+1} (${a.length}):`);for(let l of a.slice(0,cd)){let u=l.tests.length?`tests: ${vt(l.tests,WR)}`:"tests: none recorded",d=c===0?`${l.via} it`:"reaches it through an intermediary";o.push(` - ${l.label} (${d}) \u2014 ${u}`)}a.length>cd&&o.push(` \u2026+${a.length-cd} more at depth ${c+1}`)});let i=e.truncated.filter(a=>{let c=As({predicate:a.predicate});return c==="imports"||c==="calls"||c==="callsSymbol"||c==="tests"||c==="serves"});return i.length&&o.push("warning: partial edge lists ("+i.map(a=>`${a.predicate}: ${a.shown}/${a.count}`).join(", ")+") \u2014 this closure may be missing edges. Cross-check critical results with a lexical search (/find <term>)."),o.join(`
3
- `)}function ib(e){let t=new Map;for(let n of e.relations)if(As(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 Xg(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function db(e,t,n=null){let s=n||(i=>_s(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 Te(e,i))r(s(a.subject),s(a.object));return o}function j_(e,t,n){if(t.length<2)return;let s=new Map(t.map(l=>[l.ind.id,l])),o=new Map(t.map(l=>[l.ind.id,l.score])),r=l=>{if(!l.size)return[[],[]];let u=0;for(let m of l.values())u=Math.max(u,m);let d=[...l.entries()].sort((m,h)=>h[1]-m[1]),p=[],f=[];for(let[m,h]of d)h>=u*h_&&p.length<n?p.push([m,h]):f.length<Yg&&f.push([m,h]);return[p,f]},[i,a]=r(new Map(t.map(l=>[l.ind.id,l.score]))),c=new Set(i.map(([l])=>l));for(let l=0;l<w_&&i.length;l++){let u=new Map,d=[];for(let p of y_){let f=db(e,p),m=new Map;for(let[g,$]of i)for(let w of f.get(g)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,$));let[h,b]=r(m);for(let[g,$]of h)u.set(g,Math.max(u.get(g)||0,$));d.push(...b)}a.push(...d);for(let[p,f]of u){if(c.has(p))continue;let m=s.get(p);m&&(m.score+=Math.min(f*g_,m.score*b_),c.add(p))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,Yg).filter(([p])=>!c.has(p)))}}function k_(e,t=[],{depth:n=cb,q:s=ub,nodeLimit:o=lb,kinds:r=$_,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:c=null,hubDegree:l=1/0}={}){let u=new Map(t.map(S=>[S.ind.id,S])),d=0;for(let S of t)d=Math.max(d,S.score);let p=t.length>0&&d>0,f=new Set(c??u.keys());if(!f.size)return[];let m=db(e,r,a),h=S=>m.get(S)?.size||0,b=[],g=(S,_)=>S.hop!==_.hop?S.hop<_.hop:S.deg!==_.deg?S.deg<_.deg:S.id<_.id,$=(S,_)=>{let y=b[S];b[S]=b[_],b[_]=y},w=S=>{b.push(S);let _=b.length-1;for(;_>0;){let y=_-1>>1;if(g(b[_],b[y]))$(_,y),_=y;else break}},x=()=>{let S=b[0],_=b.pop();if(b.length){b[0]=_;let y=0;for(;;){let T=2*y+1,C=2*y+2,v=y;if(T<b.length&&g(b[T],b[v])&&(v=T),C<b.length&&g(b[C],b[v])&&(v=C),v===y)break;$(y,v),y=v}}return S},R=new Set(f);for(let S of f)w({id:S,hop:0,deg:h(S)});let E=null,k=0,O=[];for(;b.length&&k<o;){let S=x();if(O.push({id:S.id,hop:S.hop}),!f.has(S.id)){if(p){let T=d*v_*Math.pow(E_,S.hop-1),C=u.get(S.id);if(C)C.score+=Math.min(T*x_,C.score*S_);else{let v=e.byId?.get?.(S.id);if(v&&i(v)){E||(E=ib(e));let j=E.get(v.id)||[],M={ind:v,score:T,defineCount:j.length,matching:[],density:0};t.push(M),u.set(S.id,M)}}}k++}if(S.hop>=n||S.hop>0&&h(S.id)>l)continue;let _=[];for(let T of m.get(S.id)||[]){if(R.has(T))continue;let C=e.byId?.get?.(T);!C||!i(C)||_.push({id:T,deg:h(T)})}if(!_.length)continue;_.sort((T,C)=>T.deg-C.deg||(T.id<C.id?-1:T.id>C.id?1:0));let y=Math.max(1,Math.floor(s*_.length));for(let T=0;T<y;T++){let C=_[T];R.add(C.id),w({id:C.id,hop:S.hop+1,deg:C.deg})}}return O}function fb(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:c=!1,proseLayers:l=!1,literalMention:u=!1,rawQuery:d=""}=n,p=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,f=ib(e),m=[];for(let x of e.individuals){if((x.class||"")!=="Module")continue;let R=String(x.label),E=R.toLowerCase(),k=f.get(x.id)||[],O=new Set(k.map(y=>y.toLowerCase())),S=new Set;for(let y of k)for(let T of Xg(y))S.add(T);let _=u?String((x.attributes||[]).find(y=>y.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:x,label:R,labelLc:E,defines:k,symSet:O,symComps:S,dotted:_})}let h=m.length||1,b=new Map,g=x=>{let R=0;for(let E of m)(E.labelLc.includes(x)||E.symComps.has(x)||E.symSet.has(x))&&R++;return R},$=x=>(b.has(x)||b.set(x,rd(h,g(x))),b.get(x));for(let x of t)$(x);let w=[];for(let x of m){let R=0,E=0,k=0,O=[];for(let C of t){let v=b.get(C)||0;v&&(x.symSet.has(C)?(R+=v*ab,k++):x.symComps.has(C)&&(O.push(v),k++),x.labelLc.includes(C)&&(E+=v*VR))}O.sort((C,v)=>v-C);let S=0;for(let C=0;C<Math.min(O.length,HR);C++)S+=O[C]*KR;let _=R+E+S;if(!_)continue;s&&(Po(x.labelLc)||JR(x.labelLc))?_*=XR:Po(x.labelLc)&&(_*=.4);let y=x.defines.filter(C=>{let v=C.toLowerCase(),j=Xg(C);return t.some(M=>v===M||j.has(M))}),T=x.defines.length?k/x.defines.length:0;w.push({ind:x.ind,score:_,defineCount:x.defines.length,matching:y,density:T})}if(u&&d&&w.length){let x=String(d).toLowerCase(),R=S=>S!=null&&/[a-z0-9_./]/.test(S),E=S=>{for(let _=x.indexOf(S);_!==-1;_=x.indexOf(S,_+1))if(!R(x[_-1])&&!R(x[_+S.length]))return!0;return!1},k=new Map(m.map(S=>[S.ind.id,S])),O=0;for(let S of w)O=Math.max(O,S.score);for(let S of w){let _=k.get(S.ind.id);if(!_)continue;let y=0;for(let T of new Set([_.dotted,_.labelLc])){if(!T||T.split(/[./]+/).filter(Boolean).length<d_||!E(T))continue;let C=[...new Set(T.split(/[^a-z0-9_]+/).filter(Boolean))].map($).sort((j,M)=>M-j),v=0;for(let j=0;j<Math.min(C.length,f_);j++)v+=C[j]*u_;y=Math.max(y,v)}y&&(S.score+=Math.min(y*p_,O*m_))}}if(w.length>1){let x=new Map(w.map(E=>[E.ind.id,E.score])),R=new Map;for(let E of Te(e,"imports"))!x.has(E.subject)&&!x.has(E.object)||(R.has(E.subject)||R.set(E.subject,new Set),R.has(E.object)||R.set(E.object,new Set),R.get(E.subject).add(E.object),R.get(E.object).add(E.subject));for(let E of w){let k=0;for(let O of R.get(E.ind.id)||[])k=Math.max(k,x.get(O)||0);E.score+=Math.min(k*qR,E.score*YR)}}if(o&&w.length>1){let x=new Map(w.map(E=>[E.ind.id,E.score])),R=new Map;for(let E of["calls","callsSymbol"])for(let k of Te(e,E)){let O=_s(e,k.subject),S=_s(e,k.object);!O||!S||O===S||!x.has(O)&&!x.has(S)||(R.has(O)||R.set(O,new Set),R.has(S)||R.set(S,new Set),R.get(O).add(S),R.get(S).add(O))}for(let E of w){let k=0;for(let O of R.get(E.ind.id)||[])k=Math.max(k,x.get(O)||0);E.score+=Math.min(k*QR,E.score*ZR)}}if(r&&w.length>1){let x=new Map(w.map(E=>[E.ind.id,E.score])),R=new Map;for(let E of e.individuals)(E.class||"")==="Class"&&E.label&&R.set(String(E.label),E);for(let E of w){if(!n_(E.ind.label))continue;let k=0;for(let O of Te(e,"inherits")){if(_s(e,O.subject)!==E.ind.id||!s_(O.objectLabel))continue;let _=_s(e,O.object);if(!_){let y=R.get(String(O.objectLabel||""));y&&(_=Qn(e,y))}_&&(k=Math.max(k,x.get(_)||0))}E.score+=Math.min(k*e_,E.score*t_)}}if(c&&w.length&&e.proseIndex){let x=Lo(e.proseIndex,t.join(" "),{limit:i_});if(x.length){let R=new Map;for(let{id:E,score:k}of x){let O=_s(e,E);O&&R.set(O,(R.get(O)||0)+k)}for(let E of w){let k=R.get(E.ind.id)||0;k&&(E.score+=Math.min(k*o_,E.score*r_))}}}if(l&&w.length&&e.proseIndex){let x=new Map(w.map(k=>[k.ind.id,k])),R=new Map(m.map(k=>[k.ind.id,k])),E=new Map;for(let k of new Set(t)){let O=b.get(k)||0;if(!O)continue;let{ids:S}=Ag(e.proseIndex,k);if(!S.length)continue;let _=new Set;for(let y of S){let T=_s(e,y);if(!T||_.has(T)||(_.add(T),!x.has(T)))continue;let C=R.get(T);C&&(C.symSet.has(k)||C.symComps.has(k)||C.labelLc.includes(k))||E.set(T,(E.get(T)||0)+O*l_)}}for(let k of w){let O=E.get(k.ind.id)||0;O&&(k.score+=Math.min(O*a_,k.score*c_))}}return i&&w.length>1&&j_(e,w,p),a&&w.length&&k_(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:cb,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:ub,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:lb}),w.sort((x,R)=>R.score-x.score||R.density-x.density||x.defineCount-R.defineCount||String(x.ind.label).length-String(R.ind.label).length),w}function pb(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 fb(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function __(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let c=0;c<e.length;c++){let l=e[c];if(l==="\\"){let u=e[c+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),c+=1,r="",i=!1;continue}if(o){l==="]"&&(o=!1,r="]",i=!1);continue}if(l==="["){o=!0,r="[",i=!1;continue}if(l==="?"&&(r==="("||i)){r="?",i=!1;continue}if(l==="*"||l==="+"||l==="?"){a(),r=l;continue}if(l==="{"){let u=e.indexOf("}",c),d=u===-1?"":e.slice(c+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),c=u,r="}";continue}r="{",i=!1;continue}r=l,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function md(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Jg)return{error:`name pattern is ${n.length} characters; the limit is ${Jg}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=__(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>Qg)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${Qg}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(c){if(a===null)a=t()+Zg;else if(t()>a)throw new tc(`name pattern "${n}" exceeded its ${Zg}ms matching budget.`);return i.test(String(c).slice(0,R_))}}}function mb(e,t,{limit:n=sc,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),c=String(s||"").trim().toLowerCase(),l=String(o||"").trim().toLowerCase(),u=null;if(r){let m=md(r);if(m.error)return m.error;u=m}if(c&&c!=="module")try{return I_(e,a,{limit:n,kind:c,decFilter:l,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof tc)return m.message;throw m}if(!a.length&&!u&&!l)return"empty query";let d=fb(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let p=d.slice(0,n),f=[`${d.length} module(s) match "${t}" (top ${p.length}):`];for(let{ind:m,defineCount:h,matching:b}of p){let g=b.length?` \u2014 matching: ${vt([...new Set(b)],GR)}`:"";f.push(`- ${m.label} (defines ${h} symbol(s))${g}`)}return f.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),f.join(`
4
- `)}function Te(e,t){let n=eb.get(e);n||(n=new Map,eb.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(As(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function _s(e,t){let n=e.byId?.get?.(t);if(n)return Qn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Qn(e,t){if((t?.class||"")==="Module")return t.id;let n=Vt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function hd(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function Tr(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function hb(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Ts(t.class)} (id: ${t.id})`],o=Te(e,"contains").filter(a=>a.subject===t.id);if(!o.length)return s.push(`members: none recorded (empty class, or members not in the extracted graph). Use ${n}describe for its edges.`),s.join(`
5
- `);let r=[],i=[];for(let a of o){let c=e.byId.get(a.object),l=hd(c?Vt(c):null),u=c?Tr(c):"",d=`${a.objectLabel||a.object}${l}${u?` @${u}`:""}`;((c?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${vt(r,tb)}`),i.length&&s.push(`attributes (${i.length}): ${vt(i,tb)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
- `)}function gb(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Vt(t),o=[`${t.label} \u2014 ${Ts(t.class)}${hd(s)}`],r=qe(t,"params"),i=qe(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];qe(t,"isStatic")&&a.push("static"),qe(t,"isAbstract")&&a.push("abstract"),qe(t,"isConstant")&&a.push("constant");let c=qe(t,"visibility");c&&a.push(c),a.length&&o.push(`flags: ${a.join(", ")}`);let l=Tr(t);l&&o.push(`decorators: @${l.split(", ").join(", @")}`);let u=qe(t,"raises");u&&o.push(`raises: ${u}`);let d=qe(t,"catches");d&&o.push(`catches: ${d}`);let p=qe(t,"self_fields");p&&o.push(`self fields: ${p}`);let f=qe(t,"value");f&&o.push(`value: ${f}`);let m=qe(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 bb(e,t){let n=Te(e,"inherits"),s=n.filter(c=>c.subject===t.id).map(c=>c.objectLabel||c.object),o=new Map;for(let c of n)o.has(c.object)||o.set(c.object,[]),o.get(c.object).push({id:c.subject,label:c.subjectLabel||c.subject});let r=[`${t.label} \u2014 ${Ts(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${vt(s,nb)}`:"extends: (no internal/recorded base classes)");let i=[];for(let c of Za(t.id,l=>o.get(l)||[],{maxDepth:8,keyOf:l=>l.id}))c.length&&i.push(c.map(l=>l.label).sort((l,u)=>String(l).localeCompare(String(u))));let a=i.reduce((c,l)=>c+l.length,0);return a?(r.push(`subclasses: ${a} total across ${i.length} level(s).`),i.forEach((c,l)=>r.push(` depth ${l+1} (${c.length}): ${vt(c,nb)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
- `)}function oc(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 rc(e,t=""){let n=Jt(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Jt(s.label).startsWith(n)))}function wb(e,{pkg:t=""}={}){let n=Jt(t),s=rc(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=oc(s),r=new Map;for(let u of Te(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,A_).map(([u,d])=>`${e.byId.get(u)?.label||u} (${d} importers)`),c=[...o.entries()].sort((u,d)=>d[1]-u[1]),l=[`Architecture${n?` of ${t}`:""}: ${s.length} module(s) in ${c.length} package(s).`];return l.push(`packages (by module count): ${vt(c.map(([u,d])=>`${u} (${d})`),T_)}`),l.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),l.join(`
9
- `)}function $b(e,t){let n=Qn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||Vt(t)?.path||n,o=[...new Set(Te(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
- ${vt(o,yb,`
1
+ (()=>{var iR=Object.defineProperty;var P=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Lt=(e,t)=>{for(var n in t)iR(e,n,{get:t[n],enumerable:!0})};var yt,XB,JB,QB,ZB,eU,tU,nU,sU,oU,rU,iU,aU,cU,lU,uU,dU,ne,$e,Gt,Ku,rg,fU,pU,mU,Qe=P(()=>{yt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},XB=yt("createRequire"),JB=yt("readFileSync"),QB=yt("access"),ZB=yt("readFile"),eU=yt("writeFile"),tU=yt("appendFile"),nU=yt("mkdir"),sU=yt("mkdtemp"),oU=yt("rename"),rU=yt("unlink"),iU=yt("rm"),aU=yt("stat"),cU=yt("copyFile"),lU=yt("readdir"),uU=yt("createReadStream"),dU=yt("createWriteStream"),ne=(...e)=>e.join("/"),$e=e=>String(e).replace(/\/[^/]*$/,""),Gt=(...e)=>e.join("/"),Ku=e=>String(e).startsWith("/"),rg="/",fU=yt("randomBytes"),pU=yt("spawnSync"),mU=yt("createInterface")});var $t,gU,bU,Hu,Oe,Er,aR,Xn,ig,Ba,qu,ag,cR,wU,lR,yU,$U,vU,EU,xU,Pt=P(()=>{$t=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},gU=$t("createRequire"),bU=$t("readFileSync"),Hu=$t("access"),Oe=$t("readFile"),Er=$t("writeFile"),aR=$t("appendFile"),Xn=$t("mkdir"),ig=$t("mkdtemp"),Ba=$t("rename"),qu=$t("unlink"),ag=$t("rm"),cR=$t("stat"),wU=$t("copyFile"),lR=$t("readdir"),yU=$t("createReadStream"),$U=$t("createWriteStream"),vU=$t("randomBytes"),EU=$t("spawnSync"),xU=$t("createInterface")});function xr(e){let t=fR.exec(String(e||""));return t?t[1].toLowerCase():null}function pR(e){return/(?:[sxz]|ch|sh)$/i.test(e)?`${e}es`:/[^aeiou]y$/i.test(e)?`${e.slice(0,-1)}ies`:`${e}s`}function fg(e){let t=String(e||""),n=To[t]||t.endsWith("Symbol")&&To[t.slice(0,-6)]||null;if(!n)return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase();let[s,...o]=n.bare.split(" ");return[pR(s),...o].join(" ")}function Xs(e,t){return!e||!mR.has(t)?e:e.shape==="ask"?{...e,subject:e.object,object:e.subject}:e.shape==="reverse"?{...e,shape:"forward"}:e.shape==="forward"?{...e,shape:"reverse"}:e}function Ua(e){return String(e||"").replace(hR,"$1")}function Js(e){return e.replace(gR,"").trim()}function gn(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(wR,"").trim();if(s=s.replace($R,"").trim(),s===t)break;t=s}return t}var cg,lg,uR,To,Ao,ug,dg,dR,fR,pg,mR,hn,Yu,hR,Dn,Xu,gR,bR,wR,yR,$R,he,bi,Wa,vR,mg,nt,bn,Qs,Ga,Ju,Qu,Zu,hg,wi,Co,gg,bg,Oo,Sn,Ss,Zs,Ve,wg,Io,No,Jn,Qn,yg,yi,Sr,Va,jr,$g,Zn=P(()=>{cg=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],lg=["belongs to","belong to","is part of","are part of","is defined in","are defined in"],uR=["lives in","live in","sits in","sit in","sits inside","sit inside"],To={imports:{bare:"import",comment:"Module -> Module: subject's import graph references object (usesComplexType).",verbs:["couples to","couple to","depends on","imports","import","relies on","rely on","requires","require","references","reference","pulls in","pull in","built on","builds on","build on","uses code from","grabs","grab","pulls from","pull from","leans on","lean on","is wired to","are wired to","is hooked up to","are hooked up to","importing"]},uses:{bare:"use",comment:"query-side union: imports (Module->Module) + calls (Module->Module) + callsSymbol (fn->fn).",verbs:["uses","use","makes use of","make use of","talks to","talk to","using"]},calls:{bare:"call",comment:"Function/Method -> Function/Class (symbol-grain) or Module -> Module (coarse): subject invokes object.",verbs:["invokes","invoke","calls","call","runs","run","executes","execute","hits","hit","triggers","trigger","fires","fire","kicks off","kick off","calling"]},defines:{bare:"define",comment:"Module -> top-level Function/Class/Method/Attribute: subject declares object.",verbs:["defines","define","declares","declare","has","have","holds","hold","defining"]},contains:{bare:"contain",comment:"Class -> Method/Attribute: subject's membership includes object.",verbs:["contains","contain","containing",...lg,...uR]},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",...cg]},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"]}},Ao=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"})}),ug=Object.freeze(Object.fromEntries(Object.entries(Ao).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),dg=Object.freeze(Object.values(Ao).map(e=>e.predicate)),dR=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),fR=new RegExp(`^mgx:[a-z]+-(${dR.join("|")})$`,"i");pg=Object.freeze([...cg,"is the superclass of","are the superclass of","is the parent class of"]),mR=Object.freeze(new Set([...pg,...lg]));hn=Object.freeze(["defined","declared","located","implemented"]),Yu=Object.freeze(["now","currently","right now","at the moment","these days","today"]),hR=new RegExp(`\\s+(?:${[...Yu].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");Dn=Object.freeze(["mentioned","referenced"]),Xu=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),gR=new RegExp(`\\s+(?:${Xu.join("|")})\\s*[?.!]*$`,"i");bR=Object.freeze(["then","though","too"]),wR=new RegExp(`\\s+(?:${bR.join("|")})\\s*[?.!]*$`,"i"),yR=Object.freeze(["please explain","explain"]),$R=new RegExp(`,\\s*(?:${yR.join("|")})\\s*[?.!]*$`,"i");he=Object.freeze(Object.fromEntries(Object.entries(To).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),bi=Object.freeze(new Set(["has","have","holds","hold"])),Wa=Object.freeze(new Set(["search","describe","signature","impact","members","subclasses","exports","callers","callees","calls","tests","untested","history","cochanges","architecture","arch","related","sprite"])),vR=e=>!pg.includes(e),mg=Object.freeze([...new Set(Object.keys(he).filter(vR).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),nt=Object.freeze({function:"Function",functions:"Function",method:"Method",methods:"Method",class:"Class",classes:"Class",module:"Module",modules:"Module",mod:"Module",mods:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),bn=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),Qs=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"}),Ga=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"}}),Ju=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"}),Qu=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"}),Zu=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"}),hg=/\b([a-z]{3,})in'/gi,wi=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"]),Co=Object.freeze(["this","it","that","here","this one","that one"]),gg=Object.freeze([{re:/\bthere\s+is\s+not\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bthere\s+is\s+no\s+\S+\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bis\s+not\s+there\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\b(?:nobody|nothing|no one)\s+(\S.*?)(?:,?\s+does\s+it\??|,?\s+do\s+they\??)?$/i,to:e=>`what ${e[1]}`}]),bg=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`}]),Oo=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),Sn=Object.freeze(["that","which","who"]),Ss=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),Zs=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"}),Ve=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}}),wg=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Io=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"]),No=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"]),Jn=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"}),Qn=Object.freeze({imports:{kind:"imports",dir:"out"},dependencies:{kind:"imports",dir:"out"},importers:{kind:"imports",dir:"in"},dependents:{kind:"imports",dir:"in"},callers:{kind:"calls",dir:"in",sibling:"callsSymbol"},callees:{kind:"calls",dir:"out",sibling:"callsSymbol"},calls:{kind:"calls",dir:"out",sibling:"callsSymbol"},methods:{kind:"contains",dir:"out",filter:"Method"},members:{kind:"contains",dir:"out"},tests:{kind:"tests",dir:"in"},test:{kind:"tests",dir:"in"},subclasses:{kind:"inherits",dir:"in"},connections:{kind:"*",dir:"both"},edges:{kind:"*",dir:"both"},connected:{kind:"*",dir:"both"},imported:{kind:"imports",dir:"in"},"depended-on":{kind:"imports",dir:"in"},depended:{kind:"imports",dir:"in"},used:{kind:"imports",dir:"in",sibling:"callsSymbol"},called:{kind:"calls",dir:"in",sibling:"callsSymbol"}}),yg=Object.freeze({tests:"Module",test:"Module"}),yi=Object.freeze(["those","them","these"]),Sr=Object.freeze(["contains","defines"]),Va=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"]),jr=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),$g=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var st,eo,Ka=P(()=>{st="#000000",eo=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${st}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${st}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${st}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${st}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${st}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${st}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${st}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${st}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${st}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${st}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var ER,jn,vg,Eg,ed,xg,TU,AU,Sg=P(()=>{Zn();Ka();ER=()=>Object.keys(eo).sort(),jn=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),vg=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Eg=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),ed=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:hn}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:jn("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:jn("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:vg("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:Eg("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:Eg("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:ER(),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:vg("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:jn("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:jn("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:jn("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:jn("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:jn("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:jn("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:jn("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:jn("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:jn("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:jn("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}}]),xg=ed.filter(e=>e.tier==="hot"),TU=ed.filter(e=>e.tier==="cold"),AU=Object.freeze(ed.map(e=>e.name))});var jg,Ne,Xt=P(()=>{Qe();jg=ne(".tmct","graph.json"),Ne=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function xR(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 kg(e){let t=(Array.isArray(e)?e:[]).map((c,l)=>({file:c?.file,payload:c?.payload||{},name:c?.name!=null&&String(c.name).length?String(c.name):String(l)})),n=t.map(({payload:c})=>xR(c)),s=new Map;for(let c of n)for(let l of c)s.set(l,(s.get(l)||0)+1);let o=new Set([...s.entries()].filter(([,c])=>c>1).map(([c])=>c)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:c,name:l}of t){a=a&&!!c.bootstrap,typeof c.generated_at=="string"&&c.generated_at>i&&(i=c.generated_at);let u=p=>o.has(p)?`${l}/${p}`:p;Array.isArray(c.classes)&&r.classes.push(...c.classes),Array.isArray(c.vocabulary)&&r.vocabulary.push(...c.vocabulary);for(let p of Array.isArray(c.individuals)?c.individuals:[]){if(!p)continue;let f={...p};f.id&&(f.id=u(f.id)),Array.isArray(f.derived_from)&&(f.derived_from=f.derived_from.map(m=>u(m))),Array.isArray(f.mentions)&&(f.mentions=f.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),r.individuals.push(f)}for(let p of Array.isArray(c.objectProperties)?c.objectProperties:[]){if(!p)continue;let f={...p};Array.isArray(f.examples)&&(f.examples=f.examples.map(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(f)}let d=c.proseIndex&&typeof c.proseIndex=="object"?c.proseIndex:{};for(let[p,f]of Object.entries(d)){let m=r.proseIndex[p]||(r.proseIndex[p]=[]);for(let h of Array.isArray(f)?f:[]){let b=u(h);m.includes(b)||m.push(b)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var Rg=P(()=>{});var Rr={};Lt(Rr,{clearCache:()=>SR,emptyEntities:()=>qa,fetchEntities:()=>_R,registerProvider:()=>jR});function SR(){kr=null,$i=null}function jR(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Ha;return Ha=e??null,kr=null,t}function qa(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function kR(e){let t;try{t=await Oe(e,"utf8")}catch(n){if(n?.code==="ENOENT")return qa();throw new Ne(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Ne(`graph artifact ${e} is not valid JSON`)}}async function RR(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if($i&&$i.key===n)return $i.payload;let s=[];for(let r=0;r<t.length;r++){let i=await kR(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=kg(s);return $i={key:n,payload:o},o}async function _R(e){let t=e||{};if(Ha){let o;try{o=await Ha(t)}catch(r){throw r instanceof Ne?r:new Ne(`graph provider failed (${r?.message||r})`)}if(!o||typeof o!="object")throw new Ne("graph provider returned no entities payload");return o}if(Array.isArray(t.graphFiles)&&t.graphFiles.length>1)return RR(t);if(!t.graphFile)return qa();if(kr&&kr.file===t.graphFile)return kr.payload;let n;try{n=await Oe(t.graphFile,"utf8")}catch(o){if(o?.code==="ENOENT")return qa();throw new Ne(`cannot read graph artifact at ${t.graphFile} (${o?.code||o?.message||o})`)}let s;try{s=JSON.parse(n)}catch{throw new Ne(`graph artifact ${t.graphFile} is not valid JSON`)}return kr={file:t.graphFile,payload:s},s}var kr,$i,Ha,vi=P(()=>{Pt();Xt();Rg();kr=null,$i=null,Ha=null});function zn(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<=Tg)}function td(e){if(!e)return[];let t=[],n=new Set;for(let s of String(e).toLowerCase().split(/[^a-z0-9]+/))if(!(s.length<2||s.length>Tg||_g.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=TR))break;return t}function Ya({name:e,doc:t}={}){return[...new Set([...zn(e),...td(t)])].sort()}function Xa(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 Lo(e,t,{limit:n=10}={}){let s=[...new Set([...zn(t),...td(t)])];if(!s.length)return[];let o=new Map;for(let r of s)for(let i of e?.[r]||[])o.set(i,(o.get(i)||0)+1);return[...o.entries()].sort((r,i)=>i[1]-r[1]||String(r[0]).localeCompare(i[0])).slice(0,n).map(([r,i])=>({id:r,score:i}))}function Cg(e,t){let n=e&&(e["tmct:layers"]?e:e.proseIndex),s=n&&n["tmct:layers"],o=String(t||"").toLowerCase(),r={ids:[],via:null};if(!o||!s||typeof s!="object")return r;let i=new Set,a=new Set;for(let c of Object.keys(s)){let l=s[c];if(!l||typeof l!="object")continue;let u=l[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let p of d)i.add(p);a.add(c)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var _g,Tg,TR,Ag,Bn=P(()=>{_g=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+/)),Tg=40,TR=120;Ag=e=>/^[a-z0-9]+$/.test(e)&&!_g.has(e)});function Og(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 AR(e){if(!e.startsWith(Ng))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Ig);if(o<0)return null;let r=n.slice(o+Ig.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Ng.length,o),createdAt:s}:null}function Un(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:OR(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",...Og(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=AR(s);return o||{kind:"teach",...Og(s)}}return n.startsWith("web:")?{kind:"web",url:n.slice(4)}:n.startsWith("url:")?{kind:"web",url:n.slice(4)}:n.startsWith("news-fixture:")?{kind:"corpus",name:n.slice(13).split("@")[0]||"unknown"}:n.startsWith("extracted:news:")?{kind:"web",url:n.slice(10)}:n.startsWith("news:")?{kind:"web",url:n}: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 Dg(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Pg;let n=Number(t);return Number.isFinite(n)?Math.max(nd,Math.min(Fg,n)):Pg}function zg(e,t=Date.now(),n=IR){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Lg+(1-Lg)*Math.pow(.5,o/n)}function Bg(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let f of o){if(r.has(f))continue;r.add(f);let m=t[f],h=NR(m);if(!h)continue;i.push(h);let b=(ks[h]??0)*Dg(m);a.push(Math.max(0,Math.min(1,b)))}let c=0,l=1;for(let f of a)l*=1-f;if(a.length&&(c=Math.min(1,1-l)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let f=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;c=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*f))}let u=zg(e?.createdAt,s,n.halfLifeMs),d=_r(Math.min(1,c*u)),p={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:_r(u)};return{score:d,inputs:p}}function Qa(e,t){let n=(ks[e]??0)*Dg(t);return _r(Math.max(0,Math.min(1,n)))}function LR(e){if(e==="operator")return 1;let t=ks[e];return t===void 0?1:(t+1)/2}function Za(e,t={}){let n=typeof t.now=="number"?t.now:Date.now(),s=Array.isArray(e)?e:[],o=new Map,r=[];for(let a of s){let c=zg(a?.assertedAt,n,t.halfLifeMs),l=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,l*c)),p=o.get(u)||{complement:1,strongest:0};p.complement*=1-d,p.strongest=Math.max(p.strongest,d),o.set(u,p),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:l,recency:_r(c)})}let i=1;for(let[a,c]of o){let l=Math.max(LR(a),c.strongest);i*=1-Math.min(1-c.complement,l)}return{score:s.length?_r(Math.min(1,1-i)):0,inputs:r}}function Ug(e){return Za(e,{halfLifeMs:PR})}function Wg({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+MR),i=(o*r+1)/2;return _r(nd+(Fg-nd)*i)}var Tr,Ja,ut,js,Ig,Ng,CR,OR,ks,sd,Mg,IR,Lg,nd,Fg,Pg,_r,NR,PR,MR,Wn=P(()=>{Tr="mgx:trustScore",Ja="mgx:trustInputs",ut="mgx:createdAt",js="mgx:updatedAt";Ig="#node:",Ng="peer:";CR="wikipedia-live",OR=e=>e===CR?"referenceLive":"reference";ks=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),sd=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"}}),Mg=new Set(Object.entries(sd).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),IR=720*60*60*1e3,Lg=.9,nd=.5,Fg=1.5,Pg=1,_r=(e,t=6)=>Number(e.toFixed(t)),NR=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";PR=1/0;MR=19});var Po,od=P(()=>{Po=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function rd(e,t){return Math.log(1+e/(1+t))}var Ei=P(()=>{});var tc={};Lt(tc,{bfsLevels:()=>ec,findActionPath:()=>xi,findReachableSet:()=>id});function Gg(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function Vg(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 xi(e,t,n,{maxDepth:s=50,stateKey:o=Gg}={}){if(t(e))return{actions:[],states:[e]};let r=Vg(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let l of r)if(t(l.state))return{actions:l.actions,states:l.states};if(a===s)break;let c=[];for(let l of r){let u=o(l.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:p}of n(l.state)||[]){let f=o(p);i.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}}r=c}return null}function id(e,t,{maxDepth:n=50,stateKey:s=Gg}={}){let o=Vg(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let c=[];for(let l of o){let u=s(l.state);if(!r.has(u)&&(r.add(u),i.push({node:l.state,path:{actions:l.actions,states:l.states}}),a!==n))for(let{action:d,nextState:p}of t(l.state)||[]){let f=s(p);r.has(f)||c.push({state:p,actions:[...l.actions,d],states:[...l.states,p]})}}o=c}return i}function*ec(e,t,{maxDepth:n=8,keyOf:s=o=>o}={}){let o=new Set([e]),r=[e];for(let i=1;i<=n&&r.length;i+=1){let a=[],c=[];for(let l of r)for(let u of t(l)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),c.push(d))}r=c,yield a}}var Rs=P(()=>{});function sc(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 Si(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function As(e){let t=String(e?.prop||"").toLowerCase();if(Kg[t])return Kg[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":/denot/.test(n)?"denotes":/\bserve/.test(n)?"serves":null}function Jt(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function ad(e){let t=Jt(e).split("/");return t[t.length-1]}function FR(e){return(e?.derived_from||[]).filter(rb).length}function Hg(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+FR(e)}function wn(e,t){let n=Jt(t);if(!n)return{match:null,candidates:[]};let s=ad(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Jt(i.label),c=String(i.id||"").toLowerCase(),l=0;a===n||c===n?l=100:a.endsWith(`/${n}`)||o&&(ad(a)===s||ad(a).replace(/\.[a-z]+$/,"")===s)?l=80:a.includes(n)&&(l=Math.max(10,50-(a.length-n.length))),l>0&&r.push({ind:i,score:l})}return r.sort((i,a)=>a.score-i.score||Hg(a.ind)-Hg(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 Vt(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 DR(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 qg(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Ts(e){let t=e||"Entity",n=zn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function vt(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function pd(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Ts(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(rb);o.length&&s.push(`attestation: ${o.length} provenance ref(s)`);for(let c of t.attributes||[])s.push(`attribute: ${c.key} = ${c.value}${c.prop?` [${c.prop}]`:""}`);let{out:r,incoming:i}=DR(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:c,edges:l}of r)s.push(` ${qg(c)} (${l.length}) \u2192 ${vt(l.map(u=>u.objectLabel||u.object),Yg)}`);for(let{group:c,edges:l}of i)s.push(` \u2190 ${qg(c)} (${l.length}) by ${vt(l.map(u=>u.subjectLabel||u.subject),Yg)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${vt(a,zR)}`),n.length&&s.push(`other matches: ${n.map(c=>`${c.label} (${Ts(c.class)})`).join(", ")}`),e.truncated.length&&s.push(BR(e)),s.join(`
2
+ `)}function BR(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 Cr(e,t,{maxDepth:n=8,includeCycleReturn:s=!1}={}){let o=new Map,r=new Map,i=(c,l,u,d)=>{!c||!l||c===l||(o.has(c)||o.set(c,[]),o.get(c).push({id:l,label:u,via:d}))};for(let c of e.relations){let l=As(c);if(l==="imports"||l==="calls")for(let u of c.edges)i(u.object,u.subject,u.subjectLabel||u.subject,c.predicate);else if(l==="callsSymbol")for(let u of c.edges){let d=_s(e,u.subject),p=_s(e,u.object);if(!d||!p)continue;let f=e.byId.get(d)?.label||d;i(p,d,f,c.predicate),d!==p&&i(u.object,d,f,c.predicate)}else if(l==="tests")for(let u of c.edges)r.has(u.object)||r.set(u.object,[]),r.get(u.object).push(u.subjectLabel||u.subject);else if(l==="serves")for(let u of c.edges)i(u.subject,u.object,u.objectLabel||u.object,c.predicate)}let a=[];for(let c of ec(t.id,l=>o.get(l)||[],{maxDepth:n,keyOf:l=>l.id})){if(!c.length)continue;let l=c.map(u=>({...u,tests:r.get(u.id)||[]})).sort((u,d)=>String(u.label).localeCompare(String(d.label)));a.push(l)}for(let c=0;s&&c<a.length;c+=1){let l=a[c].flatMap(d=>(o.get(d.id)||[]).filter(p=>p.id===t.id)).sort((d,p)=>String(d.via).localeCompare(String(p.via)));if(!l.length)continue;let u={...l[0],tests:r.get(t.id)||[]};a[c+1]||(a[c+1]=[]),a[c+1]=[...a[c+1],u].sort((d,p)=>String(d.label).localeCompare(String(p.label)));break}return a}function ib(e,t,{maxDepth:n=8}={}){let s=Cr(e,t,{maxDepth:n}),o=[`Impact of changing ${t.label} (reverse closure over imports/calls edges, module- and function-level):`];s.length||o.push("no dependents found in the current artifact \u2014 nothing imports or calls it (or its edges are not in the extracted graph yet).");let r=s.reduce((a,c)=>a+c.length,0);s.length&&o.push(`total: ${r} dependent(s) across ${s.length} depth level(s) (lists capped for brevity).`),s.forEach((a,c)=>{if(c>=UR){o.push(`depth ${c+1}: ${a.length} more dependent(s) (not listed)`);return}o.push(c===0?`depth 1 (${a.length} direct dependents):`:`depth ${c+1} (${a.length}):`);for(let l of a.slice(0,cd)){let u=l.tests.length?`tests: ${vt(l.tests,WR)}`:"tests: none recorded",d=c===0?`${l.via} it`:"reaches it through an intermediary";o.push(` - ${l.label} (${d}) \u2014 ${u}`)}a.length>cd&&o.push(` \u2026+${a.length-cd} more at depth ${c+1}`)});let i=e.truncated.filter(a=>{let c=As({predicate:a.predicate});return c==="imports"||c==="calls"||c==="callsSymbol"||c==="tests"||c==="serves"});return i.length&&o.push("warning: partial edge lists ("+i.map(a=>`${a.predicate}: ${a.shown}/${a.count}`).join(", ")+") \u2014 this closure may be missing edges. Cross-check critical results with a lexical search (/find <term>)."),o.join(`
3
+ `)}function ab(e){let t=new Map;for(let n of e.relations)if(As(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 Jg(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function fb(e,t,n=null){let s=n||(i=>_s(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 Te(e,i))r(s(a.subject),s(a.object));return o}function j_(e,t,n){if(t.length<2)return;let s=new Map(t.map(l=>[l.ind.id,l])),o=new Map(t.map(l=>[l.ind.id,l.score])),r=l=>{if(!l.size)return[[],[]];let u=0;for(let m of l.values())u=Math.max(u,m);let d=[...l.entries()].sort((m,h)=>h[1]-m[1]),p=[],f=[];for(let[m,h]of d)h>=u*h_&&p.length<n?p.push([m,h]):f.length<Xg&&f.push([m,h]);return[p,f]},[i,a]=r(new Map(t.map(l=>[l.ind.id,l.score]))),c=new Set(i.map(([l])=>l));for(let l=0;l<w_&&i.length;l++){let u=new Map,d=[];for(let p of y_){let f=fb(e,p),m=new Map;for(let[g,$]of i)for(let w of f.get(g)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,$));let[h,b]=r(m);for(let[g,$]of h)u.set(g,Math.max(u.get(g)||0,$));d.push(...b)}a.push(...d);for(let[p,f]of u){if(c.has(p))continue;let m=s.get(p);m&&(m.score+=Math.min(f*g_,m.score*b_),c.add(p))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,Xg).filter(([p])=>!c.has(p)))}}function k_(e,t=[],{depth:n=lb,q:s=db,nodeLimit:o=ub,kinds:r=$_,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:c=null,hubDegree:l=1/0}={}){let u=new Map(t.map(S=>[S.ind.id,S])),d=0;for(let S of t)d=Math.max(d,S.score);let p=t.length>0&&d>0,f=new Set(c??u.keys());if(!f.size)return[];let m=fb(e,r,a),h=S=>m.get(S)?.size||0,b=[],g=(S,_)=>S.hop!==_.hop?S.hop<_.hop:S.deg!==_.deg?S.deg<_.deg:S.id<_.id,$=(S,_)=>{let y=b[S];b[S]=b[_],b[_]=y},w=S=>{b.push(S);let _=b.length-1;for(;_>0;){let y=_-1>>1;if(g(b[_],b[y]))$(_,y),_=y;else break}},x=()=>{let S=b[0],_=b.pop();if(b.length){b[0]=_;let y=0;for(;;){let T=2*y+1,C=2*y+2,v=y;if(T<b.length&&g(b[T],b[v])&&(v=T),C<b.length&&g(b[C],b[v])&&(v=C),v===y)break;$(y,v),y=v}}return S},R=new Set(f);for(let S of f)w({id:S,hop:0,deg:h(S)});let E=null,k=0,O=[];for(;b.length&&k<o;){let S=x();if(O.push({id:S.id,hop:S.hop}),!f.has(S.id)){if(p){let T=d*v_*Math.pow(E_,S.hop-1),C=u.get(S.id);if(C)C.score+=Math.min(T*x_,C.score*S_);else{let v=e.byId?.get?.(S.id);if(v&&i(v)){E||(E=ab(e));let j=E.get(v.id)||[],M={ind:v,score:T,defineCount:j.length,matching:[],density:0};t.push(M),u.set(S.id,M)}}}k++}if(S.hop>=n||S.hop>0&&h(S.id)>l)continue;let _=[];for(let T of m.get(S.id)||[]){if(R.has(T))continue;let C=e.byId?.get?.(T);!C||!i(C)||_.push({id:T,deg:h(T)})}if(!_.length)continue;_.sort((T,C)=>T.deg-C.deg||(T.id<C.id?-1:T.id>C.id?1:0));let y=Math.max(1,Math.floor(s*_.length));for(let T=0;T<y;T++){let C=_[T];R.add(C.id),w({id:C.id,hop:S.hop+1,deg:C.deg})}}return O}function pb(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:c=!1,proseLayers:l=!1,literalMention:u=!1,rawQuery:d=""}=n,p=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,f=ab(e),m=[];for(let x of e.individuals){if((x.class||"")!=="Module")continue;let R=String(x.label),E=R.toLowerCase(),k=f.get(x.id)||[],O=new Set(k.map(y=>y.toLowerCase())),S=new Set;for(let y of k)for(let T of Jg(y))S.add(T);let _=u?String((x.attributes||[]).find(y=>y.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:x,label:R,labelLc:E,defines:k,symSet:O,symComps:S,dotted:_})}let h=m.length||1,b=new Map,g=x=>{let R=0;for(let E of m)(E.labelLc.includes(x)||E.symComps.has(x)||E.symSet.has(x))&&R++;return R},$=x=>(b.has(x)||b.set(x,rd(h,g(x))),b.get(x));for(let x of t)$(x);let w=[];for(let x of m){let R=0,E=0,k=0,O=[];for(let C of t){let v=b.get(C)||0;v&&(x.symSet.has(C)?(R+=v*cb,k++):x.symComps.has(C)&&(O.push(v),k++),x.labelLc.includes(C)&&(E+=v*VR))}O.sort((C,v)=>v-C);let S=0;for(let C=0;C<Math.min(O.length,HR);C++)S+=O[C]*KR;let _=R+E+S;if(!_)continue;s&&(Po(x.labelLc)||JR(x.labelLc))?_*=XR:Po(x.labelLc)&&(_*=.4);let y=x.defines.filter(C=>{let v=C.toLowerCase(),j=Jg(C);return t.some(M=>v===M||j.has(M))}),T=x.defines.length?k/x.defines.length:0;w.push({ind:x.ind,score:_,defineCount:x.defines.length,matching:y,density:T})}if(u&&d&&w.length){let x=String(d).toLowerCase(),R=S=>S!=null&&/[a-z0-9_./]/.test(S),E=S=>{for(let _=x.indexOf(S);_!==-1;_=x.indexOf(S,_+1))if(!R(x[_-1])&&!R(x[_+S.length]))return!0;return!1},k=new Map(m.map(S=>[S.ind.id,S])),O=0;for(let S of w)O=Math.max(O,S.score);for(let S of w){let _=k.get(S.ind.id);if(!_)continue;let y=0;for(let T of new Set([_.dotted,_.labelLc])){if(!T||T.split(/[./]+/).filter(Boolean).length<d_||!E(T))continue;let C=[...new Set(T.split(/[^a-z0-9_]+/).filter(Boolean))].map($).sort((j,M)=>M-j),v=0;for(let j=0;j<Math.min(C.length,f_);j++)v+=C[j]*u_;y=Math.max(y,v)}y&&(S.score+=Math.min(y*p_,O*m_))}}if(w.length>1){let x=new Map(w.map(E=>[E.ind.id,E.score])),R=new Map;for(let E of Te(e,"imports"))!x.has(E.subject)&&!x.has(E.object)||(R.has(E.subject)||R.set(E.subject,new Set),R.has(E.object)||R.set(E.object,new Set),R.get(E.subject).add(E.object),R.get(E.object).add(E.subject));for(let E of w){let k=0;for(let O of R.get(E.ind.id)||[])k=Math.max(k,x.get(O)||0);E.score+=Math.min(k*qR,E.score*YR)}}if(o&&w.length>1){let x=new Map(w.map(E=>[E.ind.id,E.score])),R=new Map;for(let E of["calls","callsSymbol"])for(let k of Te(e,E)){let O=_s(e,k.subject),S=_s(e,k.object);!O||!S||O===S||!x.has(O)&&!x.has(S)||(R.has(O)||R.set(O,new Set),R.has(S)||R.set(S,new Set),R.get(O).add(S),R.get(S).add(O))}for(let E of w){let k=0;for(let O of R.get(E.ind.id)||[])k=Math.max(k,x.get(O)||0);E.score+=Math.min(k*QR,E.score*ZR)}}if(r&&w.length>1){let x=new Map(w.map(E=>[E.ind.id,E.score])),R=new Map;for(let E of e.individuals)(E.class||"")==="Class"&&E.label&&R.set(String(E.label),E);for(let E of w){if(!n_(E.ind.label))continue;let k=0;for(let O of Te(e,"inherits")){if(_s(e,O.subject)!==E.ind.id||!s_(O.objectLabel))continue;let _=_s(e,O.object);if(!_){let y=R.get(String(O.objectLabel||""));y&&(_=es(e,y))}_&&(k=Math.max(k,x.get(_)||0))}E.score+=Math.min(k*e_,E.score*t_)}}if(c&&w.length&&e.proseIndex){let x=Lo(e.proseIndex,t.join(" "),{limit:i_});if(x.length){let R=new Map;for(let{id:E,score:k}of x){let O=_s(e,E);O&&R.set(O,(R.get(O)||0)+k)}for(let E of w){let k=R.get(E.ind.id)||0;k&&(E.score+=Math.min(k*o_,E.score*r_))}}}if(l&&w.length&&e.proseIndex){let x=new Map(w.map(k=>[k.ind.id,k])),R=new Map(m.map(k=>[k.ind.id,k])),E=new Map;for(let k of new Set(t)){let O=b.get(k)||0;if(!O)continue;let{ids:S}=Cg(e.proseIndex,k);if(!S.length)continue;let _=new Set;for(let y of S){let T=_s(e,y);if(!T||_.has(T)||(_.add(T),!x.has(T)))continue;let C=R.get(T);C&&(C.symSet.has(k)||C.symComps.has(k)||C.labelLc.includes(k))||E.set(T,(E.get(T)||0)+O*l_)}}for(let k of w){let O=E.get(k.ind.id)||0;O&&(k.score+=Math.min(O*a_,k.score*c_))}}return i&&w.length>1&&j_(e,w,p),a&&w.length&&k_(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:lb,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:db,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:ub}),w.sort((x,R)=>R.score-x.score||R.density-x.density||x.defineCount-R.defineCount||String(x.ind.label).length-String(R.ind.label).length),w}function mb(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 pb(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function __(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let c=0;c<e.length;c++){let l=e[c];if(l==="\\"){let u=e[c+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),c+=1,r="",i=!1;continue}if(o){l==="]"&&(o=!1,r="]",i=!1);continue}if(l==="["){o=!0,r="[",i=!1;continue}if(l==="?"&&(r==="("||i)){r="?",i=!1;continue}if(l==="*"||l==="+"||l==="?"){a(),r=l;continue}if(l==="{"){let u=e.indexOf("}",c),d=u===-1?"":e.slice(c+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),c=u,r="}";continue}r="{",i=!1;continue}r=l,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function md(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Qg)return{error:`name pattern is ${n.length} characters; the limit is ${Qg}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=__(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>Zg)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${Zg}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(c){if(a===null)a=t()+eb;else if(t()>a)throw new nc(`name pattern "${n}" exceeded its ${eb}ms matching budget.`);return i.test(String(c).slice(0,R_))}}}function hb(e,t,{limit:n=oc,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),c=String(s||"").trim().toLowerCase(),l=String(o||"").trim().toLowerCase(),u=null;if(r){let m=md(r);if(m.error)return m.error;u=m}if(c&&c!=="module")try{return I_(e,a,{limit:n,kind:c,decFilter:l,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof nc)return m.message;throw m}if(!a.length&&!u&&!l)return"empty query";let d=pb(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let p=d.slice(0,n),f=[`${d.length} module(s) match "${t}" (top ${p.length}):`];for(let{ind:m,defineCount:h,matching:b}of p){let g=b.length?` \u2014 matching: ${vt([...new Set(b)],GR)}`:"";f.push(`- ${m.label} (defines ${h} symbol(s))${g}`)}return f.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),f.join(`
4
+ `)}function Te(e,t){let n=tb.get(e);n||(n=new Map,tb.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(As(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function _s(e,t){let n=e.byId?.get?.(t);if(n)return es(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function es(e,t){if((t?.class||"")==="Module")return t.id;let n=Vt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function hd(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function Ar(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function gb(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Ts(t.class)} (id: ${t.id})`],o=Te(e,"contains").filter(a=>a.subject===t.id);if(!o.length)return s.push(`members: none recorded (empty class, or members not in the extracted graph). Use ${n}describe for its edges.`),s.join(`
5
+ `);let r=[],i=[];for(let a of o){let c=e.byId.get(a.object),l=hd(c?Vt(c):null),u=c?Ar(c):"",d=`${a.objectLabel||a.object}${l}${u?` @${u}`:""}`;((c?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${vt(r,nb)}`),i.length&&s.push(`attributes (${i.length}): ${vt(i,nb)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
+ `)}function bb(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Vt(t),o=[`${t.label} \u2014 ${Ts(t.class)}${hd(s)}`],r=qe(t,"params"),i=qe(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];qe(t,"isStatic")&&a.push("static"),qe(t,"isAbstract")&&a.push("abstract"),qe(t,"isConstant")&&a.push("constant");let c=qe(t,"visibility");c&&a.push(c),a.length&&o.push(`flags: ${a.join(", ")}`);let l=Ar(t);l&&o.push(`decorators: @${l.split(", ").join(", @")}`);let u=qe(t,"raises");u&&o.push(`raises: ${u}`);let d=qe(t,"catches");d&&o.push(`catches: ${d}`);let p=qe(t,"self_fields");p&&o.push(`self fields: ${p}`);let f=qe(t,"value");f&&o.push(`value: ${f}`);let m=qe(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 wb(e,t){let n=Te(e,"inherits"),s=n.filter(c=>c.subject===t.id).map(c=>c.objectLabel||c.object),o=new Map;for(let c of n)o.has(c.object)||o.set(c.object,[]),o.get(c.object).push({id:c.subject,label:c.subjectLabel||c.subject});let r=[`${t.label} \u2014 ${Ts(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${vt(s,sb)}`:"extends: (no internal/recorded base classes)");let i=[];for(let c of ec(t.id,l=>o.get(l)||[],{maxDepth:8,keyOf:l=>l.id}))c.length&&i.push(c.map(l=>l.label).sort((l,u)=>String(l).localeCompare(String(u))));let a=i.reduce((c,l)=>c+l.length,0);return a?(r.push(`subclasses: ${a} total across ${i.length} level(s).`),i.forEach((c,l)=>r.push(` depth ${l+1} (${c.length}): ${vt(c,sb)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
+ `)}function rc(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 ic(e,t=""){let n=Jt(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Jt(s.label).startsWith(n)))}function yb(e,{pkg:t=""}={}){let n=Jt(t),s=ic(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=rc(s),r=new Map;for(let u of Te(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,A_).map(([u,d])=>`${e.byId.get(u)?.label||u} (${d} importers)`),c=[...o.entries()].sort((u,d)=>d[1]-u[1]),l=[`Architecture${n?` of ${t}`:""}: ${s.length} module(s) in ${c.length} package(s).`];return l.push(`packages (by module count): ${vt(c.map(([u,d])=>`${u} (${d})`),T_)}`),l.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),l.join(`
9
+ `)}function vb(e,t){let n=es(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||Vt(t)?.path||n,o=[...new Set(Te(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
+ ${vt(o,$b,`
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
- ${C_}`}function vb(e,{codeDomainActive:t=null}={}){let n=t??xi(e)>0,s=new Set,o=new Set;for(let a of Te(e,"tests"))s.add(a.object),o.add(a.subject);let r=e.individuals.filter(a=>(a.class||"")==="Module"&&!o.has(a.id)&&!Po(String(a.label).toLowerCase()));if(!r.length)return n?xi(e)===0?`no modules to check for test coverage in this index. ${fd}`:"no source modules to check for test coverage in this index \u2014 only test modules are recorded.":"this session holds no graph to check test coverage against.";let i=r.filter(a=>!s.has(a.id)).map(a=>a.label).sort();return i.length?`${i.length} source module(s) with no covering test module:
13
- ${vt(i,yb,`
14
- `)}`:"every source module has at least one covering test module."}function Eb(e,t){let n=Qn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Te(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${vt(o,rn)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Sb(e,t,{toolNamePrefix:n="tmct_"}={}){if(xb.has(t.class)){let i=[...new Set(Te(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
- ${vt(i,Si,`
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=Qn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Te(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
- ${vt(r,Si,`
18
- `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function jb(e,t){if(xb.has(t.class)){let r=[...new Set(Te(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
- ${vt(r,Si,`
20
- `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=Qn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Te(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
- ${vt(o,Si,`
22
- `)}`:`${s}: no recorded callees.`}function kb(e,t){let n=e.byId.get(t.object),s=n?Vt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function gd(e,t){if(!t?.id)return"";let n=Te(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${vt(n.map(s=>kb(e,s)),O_)}`:""}function Rb(e,t){let n=Te(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Ts(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=>kb(e,o));return`${t.label} \u2014 ${Ts(t.class)} calls ${n.length} in-repo symbol(s):
23
- ${vt(s,Si,`
24
- `)}`}function _b(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=qe(s,"commitDate")||qe(s,"date"),i=qe(s,"commitAuthor")||qe(s,"author"),a=qe(s,"commitMessage")||qe(s,"message"),c=[o,r,i].filter(Boolean).join(" ");return a?`${c} \u2014 ${a}`:c}function Tb(e,t){let n=Qn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Te(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,rn).map(a=>` ${_b(e,a.subject,a.subjectLabel)}`),i=o.length>rn?`
12
+ ${C_}`}function Eb(e,{codeDomainActive:t=null}={}){let n=t??Si(e)>0,s=new Set,o=new Set;for(let a of Te(e,"tests"))s.add(a.object),o.add(a.subject);let r=e.individuals.filter(a=>(a.class||"")==="Module"&&!o.has(a.id)&&!Po(String(a.label).toLowerCase()));if(!r.length)return n?Si(e)===0?`no modules to check for test coverage in this index. ${fd}`:"no source modules to check for test coverage in this index \u2014 only test modules are recorded.":"this session holds no graph to check test coverage against.";let i=r.filter(a=>!s.has(a.id)).map(a=>a.label).sort();return i.length?`${i.length} source module(s) with no covering test module:
13
+ ${vt(i,$b,`
14
+ `)}`:"every source module has at least one covering test module."}function xb(e,t){let n=es(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Te(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${vt(o,rn)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function jb(e,t,{toolNamePrefix:n="tmct_"}={}){if(Sb.has(t.class)){let i=[...new Set(Te(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
+ ${vt(i,ji,`
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=es(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Te(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
+ ${vt(r,ji,`
18
+ `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function kb(e,t){if(Sb.has(t.class)){let r=[...new Set(Te(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
+ ${vt(r,ji,`
20
+ `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=es(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Te(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
+ ${vt(o,ji,`
22
+ `)}`:`${s}: no recorded callees.`}function Rb(e,t){let n=e.byId.get(t.object),s=n?Vt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function gd(e,t){if(!t?.id)return"";let n=Te(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${vt(n.map(s=>Rb(e,s)),O_)}`:""}function _b(e,t){let n=Te(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Ts(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=>Rb(e,o));return`${t.label} \u2014 ${Ts(t.class)} calls ${n.length} in-repo symbol(s):
23
+ ${vt(s,ji,`
24
+ `)}`}function Tb(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=qe(s,"commitDate")||qe(s,"date"),i=qe(s,"commitAuthor")||qe(s,"author"),a=qe(s,"commitMessage")||qe(s,"message"),c=[o,r,i].filter(Boolean).join(" ");return a?`${c} \u2014 ${a}`:c}function Ab(e,t){let n=es(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Te(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,rn).map(a=>` ${Tb(e,a.subject,a.subjectLabel)}`),i=o.length>rn?`
25
25
  \u2026+${o.length-rn} more`:"";return`${s}: touched by ${o.length} recent commit(s):
26
26
  ${r.join(`
27
- `)}${i}`}function Ab(e,t){let n=Te(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Ts(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,rn).map(r=>` ${_b(e,r.subject,r.subjectLabel)}`),o=n.length>rn?`
27
+ `)}${i}`}function Cb(e,t){let n=Te(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Ts(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,rn).map(r=>` ${Tb(e,r.subject,r.subjectLabel)}`),o=n.length>rn?`
28
28
  \u2026+${n.length-rn} more`:"";return`${t.label} \u2014 ${Ts(t.class)}: touched by ${n.length} commit(s):
29
29
  ${s.join(`
30
- `)}${o}`}function Cb(e,t){return Ab(e,t)}function Ob(e,t){return Ab(e,t)}function bd(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Ib[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!Tr(a).toLowerCase().includes(s))continue;let c=String(a.label).toLowerCase(),l=t.length?0:1;for(let u of t)c.includes(u)&&(l+=5);t.length&&!l||i.push({ind:a,score:l})}return i.sort((a,c)=>c.score-a.score||String(a.ind.label).length-String(c.ind.label).length),i}function I_(e,t,{limit:n=sc,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Ib[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let c=bd(e,t,{kind:s,decFilter:o,nameRe:r});if(!c.length)return`no ${s} matches the given filters.`;let l=c.slice(0,n),u=[`${c.length} ${s}(s) match (top ${l.length}):`];for(let{ind:d}of l)u.push(`- ${d.label}${hd(Vt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
- `)}function W_(e){return{paramCount:ic(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function G_(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>ic(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:U_(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function V_(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(ic(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 K_(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let p of e)for(let f of ld(p.decorators))r.set(f,(r.get(f)||0)+1);let i="",a=1;for(let[p,f]of r)f>a&&(a=f,i=p);let c=new Set(ld(t)),l=c.size?c:new Set(i?[i]:[]),u=new Set(sb(n)),d=s?.start??null;for(let p of e){let f=ld(p.decorators).some(g=>l.has(g))?1:0,m=sb(p.label).filter(g=>u.has(g)).length,h=V_(p,o),b=d!=null&&p.site?1/(1+Math.abs(p.site.start-d)):0;p._score=f*1e3+m*50+h+b}return[...e].sort((p,f)=>f._score-p._score||(p.site?.start||0)-(f.site?.start||0))}function Cr(e,t){let n=Qn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Te(e,"defines").filter(y=>y.subject===n),r=new Map;for(let y of Te(e,"callsSymbol"))r.has(y.subject)||r.set(y.subject,new Set),r.get(y.subject).add(y.object);let i=[],a=[],c=0;for(let y of o){let T=e.byId.get(y.object);if(!T)continue;let C=T.class||"",v=Vt(T);C==="GlobalVariable"?(a.push({label:T.label,value:(T.attributes||[]).find(j=>j.key==="value")?.value||"",site:v}),v&&(c=Math.max(c,v.end))):(C==="Function"||C==="Class")&&(i.push({id:T.id,label:T.label,class:C,site:v,decorators:Tr(T),raises:qe(T,"raises"),doc:qe(T,"doc"),params:qe(T,"params"),returns:qe(T,"returns"),callees:r.get(T.id)||new Set}),v&&(c=Math.max(c,v.end)))}let l=Vt(t),u=l&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:l,decorators:Tr(t),raises:qe(t,"raises"),params:qe(t,"params"),returns:qe(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,p=u?W_(u):G_(i);i=K_(i,u||{label:t.label},p);let f=u?null:i.find(y=>y.site&&y.label!==t.label)||null,m=[...new Set(Te(e,"tests").filter(y=>y.object===n).map(y=>y.subjectLabel||y.subject))].slice(0,M_),h=Mb(e,n).slice(0,P_),b=Te(e,"reexports").filter(y=>y.subject===n).map(y=>y.objectLabel||y.object).slice(0,20),g=qe(e.byId.get(n),"all"),$=Te(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=$.find(y=>y.object===t.id)?.subject||null);let x=null;if(w){let y=e.byId.get(w),T=$.filter(C=>C.subject===w).map(C=>{let v=e.byId.get(C.object);return{label:C.objectLabel||v?.label||C.object,class:v?.class||"",site:v?Vt(v):null,decorators:v?Tr(v):"",params:v?qe(v,"params"):"",returns:v?qe(v,"returns"):"",raises:v?qe(v,"raises"):""}}).slice(0,L_);x={className:y?.label||String(w).replace(/^fn:.*#/,""),members:T,total:$.filter(C=>C.subject===w).length}}let R=null;for(let y of[...i,...a])y.site&&(!R||y.site.start>R.start)&&(R=y.site);let E=R?{start:R.start,end:R.end}:null,k=u||f,O=k?.id?e.byId.get(k.id):null,S=O?gd(e,O):"",_=[];if(k?.callees)for(let y of k.callees){let T=e.byId.get(y),C=T?Vt(T):null;if(C&&_.push({label:T.label,site:C}),_.length>=B_)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:f,globals:a,tests:m,cochange:h,exports:b,allExports:g,classMembers:x,insertion:c,insertionRegion:E,calleeBodies:_,callHint:S,siblingCap:N_}}function Mo(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 Nb(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 ac(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=ic(s.params);(i>F_||a>D_||s.raises)&&(o="MID");let c=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),p=d?Vt(d):null;if(p&&p.path!==e.moduleLabel){c=!0;break}}let l=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=z_;(c||l)&&(o="LARGE")}else o="MID";return{tier:o,mask:Mo(o),topup:o!=="TINY"}}function Lb(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 Ob(e,t){return Cb(e,t)}function Ib(e,t){return Cb(e,t)}function bd(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Nb[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!Ar(a).toLowerCase().includes(s))continue;let c=String(a.label).toLowerCase(),l=t.length?0:1;for(let u of t)c.includes(u)&&(l+=5);t.length&&!l||i.push({ind:a,score:l})}return i.sort((a,c)=>c.score-a.score||String(a.ind.label).length-String(c.ind.label).length),i}function I_(e,t,{limit:n=oc,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Nb[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let c=bd(e,t,{kind:s,decFilter:o,nameRe:r});if(!c.length)return`no ${s} matches the given filters.`;let l=c.slice(0,n),u=[`${c.length} ${s}(s) match (top ${l.length}):`];for(let{ind:d}of l)u.push(`- ${d.label}${hd(Vt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
+ `)}function W_(e){return{paramCount:ac(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function G_(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>ac(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:U_(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function V_(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(ac(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 K_(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let p of e)for(let f of ld(p.decorators))r.set(f,(r.get(f)||0)+1);let i="",a=1;for(let[p,f]of r)f>a&&(a=f,i=p);let c=new Set(ld(t)),l=c.size?c:new Set(i?[i]:[]),u=new Set(ob(n)),d=s?.start??null;for(let p of e){let f=ld(p.decorators).some(g=>l.has(g))?1:0,m=ob(p.label).filter(g=>u.has(g)).length,h=V_(p,o),b=d!=null&&p.site?1/(1+Math.abs(p.site.start-d)):0;p._score=f*1e3+m*50+h+b}return[...e].sort((p,f)=>f._score-p._score||(p.site?.start||0)-(f.site?.start||0))}function Or(e,t){let n=es(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Te(e,"defines").filter(y=>y.subject===n),r=new Map;for(let y of Te(e,"callsSymbol"))r.has(y.subject)||r.set(y.subject,new Set),r.get(y.subject).add(y.object);let i=[],a=[],c=0;for(let y of o){let T=e.byId.get(y.object);if(!T)continue;let C=T.class||"",v=Vt(T);C==="GlobalVariable"?(a.push({label:T.label,value:(T.attributes||[]).find(j=>j.key==="value")?.value||"",site:v}),v&&(c=Math.max(c,v.end))):(C==="Function"||C==="Class")&&(i.push({id:T.id,label:T.label,class:C,site:v,decorators:Ar(T),raises:qe(T,"raises"),doc:qe(T,"doc"),params:qe(T,"params"),returns:qe(T,"returns"),callees:r.get(T.id)||new Set}),v&&(c=Math.max(c,v.end)))}let l=Vt(t),u=l&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:l,decorators:Ar(t),raises:qe(t,"raises"),params:qe(t,"params"),returns:qe(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,p=u?W_(u):G_(i);i=K_(i,u||{label:t.label},p);let f=u?null:i.find(y=>y.site&&y.label!==t.label)||null,m=[...new Set(Te(e,"tests").filter(y=>y.object===n).map(y=>y.subjectLabel||y.subject))].slice(0,M_),h=Fb(e,n).slice(0,P_),b=Te(e,"reexports").filter(y=>y.subject===n).map(y=>y.objectLabel||y.object).slice(0,20),g=qe(e.byId.get(n),"all"),$=Te(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=$.find(y=>y.object===t.id)?.subject||null);let x=null;if(w){let y=e.byId.get(w),T=$.filter(C=>C.subject===w).map(C=>{let v=e.byId.get(C.object);return{label:C.objectLabel||v?.label||C.object,class:v?.class||"",site:v?Vt(v):null,decorators:v?Ar(v):"",params:v?qe(v,"params"):"",returns:v?qe(v,"returns"):"",raises:v?qe(v,"raises"):""}}).slice(0,L_);x={className:y?.label||String(w).replace(/^fn:.*#/,""),members:T,total:$.filter(C=>C.subject===w).length}}let R=null;for(let y of[...i,...a])y.site&&(!R||y.site.start>R.start)&&(R=y.site);let E=R?{start:R.start,end:R.end}:null,k=u||f,O=k?.id?e.byId.get(k.id):null,S=O?gd(e,O):"",_=[];if(k?.callees)for(let y of k.callees){let T=e.byId.get(y),C=T?Vt(T):null;if(C&&_.push({label:T.label,site:C}),_.length>=B_)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:f,globals:a,tests:m,cochange:h,exports:b,allExports:g,classMembers:x,insertion:c,insertionRegion:E,calleeBodies:_,callHint:S,siblingCap:N_}}function Mo(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 Lb(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 cc(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=ac(s.params);(i>F_||a>D_||s.raises)&&(o="MID");let c=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),p=d?Vt(d):null;if(p&&p.path!==e.moduleLabel){c=!0;break}}let l=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=z_;(c||l)&&(o="LARGE")}else o="MID";return{tier:o,mask:Mo(o),topup:o!=="TINY"}}function Pb(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 Pb(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 Mb(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,28 +45,28 @@ ${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 Mb(e,t){let n=[];for(let s of Te(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 Fb(e,t){let n=Qn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Mb(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,ud).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
48
+ `)}function Fb(e,t){let n=[];for(let s of Te(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 Db(e,t){let n=es(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Fb(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,ud).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
50
  `)}`+(o.length>ud?`
51
- \u2026+${o.length-ud} more`:"")}function Db(e,t){let n=Qn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Te(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,dd).map(i=>{let a=e.byId.get(i.object),c=a?Vt(a):null,l=c?` \u2190 ${c.path}`:"";return`${i.objectLabel||i.object}${l}`});return`${s} \u2014 public API (${o.length} export(s)):
51
+ \u2026+${o.length-ud} more`:"")}function zb(e,t){let n=es(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Te(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,dd).map(i=>{let a=e.byId.get(i.object),c=a?Vt(a):null,l=c?` \u2190 ${c.path}`:"";return`${i.objectLabel||i.object}${l}`});return`${s} \u2014 public API (${o.length} export(s)):
52
52
  ${r.join(`
53
53
  `)}`+(o.length>dd?`
54
- \u2026+${o.length-dd} more`:"")}var fd,Vg,ob,qg,zR,UR,cd,WR,sc,GR,VR,KR,ab,HR,qR,YR,XR,JR,QR,ZR,e_,t_,n_,s_,o_,r_,i_,a_,c_,l_,u_,d_,f_,p_,m_,h_,g_,b_,Yg,w_,y_,cb,lb,ub,$_,v_,E_,x_,S_,Jg,Qg,R_,Zg,tc,eb,tb,nb,Si,qe,T_,A_,yb,C_,rn,xb,O_,Ib,N_,L_,P_,M_,F_,D_,z_,B_,ld,sb,ic,U_,ud,dd,Fe=P(()=>{zn();Un();od();vi();Rs();fd="This store holds no code index, so it records no modules or commits to look through.",Vg={"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"};ob=e=>/^(git|turn):/.test(String(e||""));qg=30,zR=8;UR=2,cd=25,WR=3;sc=10,GR=8,VR=3,KR=2,ab=5,HR=4,qR=.2,YR=.35,XR=.15,JR=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),QR=.2,ZR=.35,e_=.2,t_=.35,n_=e=>/\.cs$/i.test(e),s_=e=>/^I[A-Z]/.test(String(e||"")),o_=.2,r_=.35,i_=50,a_=.2,c_=.35,l_=.5,u_=ab,d_=3,f_=4,p_=1,m_=.9,h_=.5,g_=.2,b_=.35,Yg=4,w_=2,y_=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],cb=3,lb=12,ub=.9,$_=["imports","calls","callsSymbol","inherits"],v_=.5,E_=.6,x_=.2,S_=.35;Jg=128,Qg=4,R_=64,Zg=250,tc=class extends Error{};eb=new WeakMap;tb=40,nb=40,Si=30;qe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";T_=25,A_=15;yb=40,C_="tests edges are recorded module to module, so this is module-grain coverage.";rn=15;xb=new Set(["Function","Method"]);O_=8;Ib={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};N_=8,L_=16,P_=4,M_=6,F_=12,D_=2,z_=8,B_=3,ld=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),sb=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),ic=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},U_=e=>{let t=new Map,n=e[0]??0,s=0;for(let o of e){let r=(t.get(o)||0)+1;t.set(o,r),r>s&&(s=r,n=o)}return n};ud=20;dd=40});function at(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Kb(e){let t=String(e||"");return zb&&(t=t.replace(zb," ")),t.replace(/\s+/g," ").trim()}function Hb(e){let t=String(e||"");t=t.replace(dT," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(iT);if(o&&(t=o[1].trim()),o=t.match(aT),o&&(t=o[1].trim()),o=t.match(Bb),o&&(t=o[1].trim()),o=t.match(Ub),o&&(t=o[1].trim()),o=t.match(Wb),o&&(t=o[1].trim()),o=t.match(uT),o&&(t=o[1].trim()),o=t.match(Gb),o&&(t=o[1].trim()),o=t.match(fT),o&&(t=o[1].trim()),o=t.match(pT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(mT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(hT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(gT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(bT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(wT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(yT),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match($T),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(vT),o&&(t=`what do you ${o[1].toLowerCase()} about ${o[2].trim()}`),o=t.match(ET),o){let r=o[1].trim();rT(r)||(t=!xT.test(r)&&(nT.test(r)||to.test(r))?r:`describe ${r}`)}if(o=t.match(ST),o){let r=o[1].trim();(to.test(r)||jT.test(r)||Gb.test(r)||Bb.test(r)||Wb.test(r)||Ub.test(r)||kT.test(r))&&(t=r)}if(t===s)break}return t}function MT(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(LT);if(o&&(t=o[1].trim()),o=t.match(PT),o&&(t=o[1].trim()),t===s)break}return t}function DT(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(FT);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function ki(e){let t=String(e||"").trim(),n=t.match(UT)||t.match(WT);return n?n[1].trim():null}function $d(e){let t=String(e||""),n=t.match(BT);if(n){let o=Yb[n[1].toLowerCase()],r=qb[n[2].toLowerCase()],i=n[5]||n[6],a=n[4]?n[4].toLowerCase():wd[i.toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${a}`}let s=ki(t);return s?`which modules transitively import ${s}`:t}function Ri(e){return String(e||"").replace(q_,t=>Ju[t.toLowerCase()])}function Fo(e){let t=Ri(e);return t=t.replace(Y_,n=>Qu[n.toLowerCase()]),t=t.replace(X_,n=>Zu[n.toLowerCase()]),t=t.replace(J_,"with"),t=t.replace(Q_,(n,s)=>`${s} for`),t=t.replace(Z_,(n,s)=>`for ${s}`),t=t.replace(eT,(n,s)=>s),t=t.replace(GT,"$1$2"),t=t.replace(mg,"$1ing"),t=Hb(t),t=DT(t),t=MT(t),t=$d(t),t=Kb(t),t=gn(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function _i(e){for(let t of[...gg,...hg]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function vd(e){for(let t of VT){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Qb(e){let t=String(e||"").match(KT);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var H_,q_,Vb,Y_,X_,J_,Q_,Z_,eT,tT,zb,nT,to,sT,oT,rT,ji,iT,aT,cT,lT,Bb,Ub,Wb,uT,dT,fT,pT,mT,hT,gT,bT,wT,yT,$T,vT,ET,xT,ST,jT,kT,Gb,cc,RT,_T,TT,AT,CT,OT,IT,YU,yd,NT,XU,JU,QU,LT,PT,FT,qb,Yb,zT,wd,BT,Xb,Jb,UT,WT,GT,VT,KT,ft,an,be,kn=P(()=>{Jn();H_=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b","gi"),q_=H_(Ju),Vb=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Y_=Vb(Qu),X_=Vb(Zu),J_=/(?<=^|\s)w\/(?=\s|$)/gi,Q_=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,Z_=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,eT=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,tT=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),zb=bi.length?new RegExp("\\b("+[...bi].sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b\\s*,?","gi"):null;nT=new RegExp("\\b(?:"+Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b","i"),to=/^(?:which|what|who|whose|where|when|why|how)\b/i,sT=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),oT=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,rT=e=>{if(oT.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return sT.has((t[t.length-1]||"").toLowerCase())},ji="[,.;:!]|\u2014|\u2013|-",iT=/^(?: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,aT=/^(?: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,cT="ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|another\\s+one",lT="(?:just\\s+)?(?:one|another)\\s+more",Bb=new RegExp(`^(?:(?:${cT})[\\s,]+|(?:${lT})\\s*(?:${ji})\\s*)+(.+)$`,"i"),Ub=/^(?: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,Wb=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,uT=/^(?:please[\s,]+)+(.+)$/i,dT=/,?\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,fT=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,pT=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,mT=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,hT=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,gT=/^do\s+you\s+know\s+(.+?)\??$/i,bT=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,wT=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,yT=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,$T=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,vT=/^what\s+you\s+(know|remember)\s+about\s+(.+?)\??$/i,ET=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,xT=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,ST=/^(?:and|also|so|then|now|but)\s+(.+)$/i,jT=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,kT=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,Gb=/^(?:(?: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;cc=e=>[...e].sort((t,n)=>n.length-t.length).map(at).join("|"),RT=Object.freeze(["oh","ah","aha","ooh","ohh","wow","huh","hm","hmm","mm","mmm","heh","ha","yay","ugh","oof","phew","whoa","oops","yikes","oi"]),_T=Object.freeze(["nice","cool","great","neat","lovely","interesting","good","ok","okay","fair enough","makes sense","i see","got it","fine"]),TT=Object.freeze(["um","umm","uhm","uh","uhh","er","err","erm","ehm","eh","well","anyway","anyhow","anyways","regardless","moving on"]),AT=Object.freeze(["quick question","quick q","one quick question","just a quick question","random question","random thing","one more random thing","another random thing","one more thing","one last thing","last thing","one more question","side note","side question","sidebar","off topic","unrelated","on a different note","different topic","changing the subject","new topic","just curious","out of curiosity","curious","genuinely curious","while i'm here","while i have you","before i forget"]),CT=`(?:${cc(RT)})(?:\\s+(?:${cc(_T)}))?\\s*(?:${ji})\\s*`,OT=`(?:${cc(TT)})\\s*(?:(?:${ji})\\s*|\\s+)`,IT=`(?:${cc(AT)})\\s*(?:${ji})\\s*`,YU=new RegExp(`^(?:sorry\\s*(?:${ji})?\\s*)?(?:${CT}|${OT}|${IT})+`,"i"),yd="what|who|which|where|when|why|how",NT="is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must",XU=new RegExp(`\\b(?:an?|the)?\\s*(?:${yd})\\s*\\?\\s*$`,"i"),JU=new RegExp(`^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:${yd})\\b`,"i"),QU=new RegExp(`\\b(?:${yd})\\s+(?:i|you|he|she|it|we|they)?\\s*(?:${NT})\\b`,"i"),LT=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,PT=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;FT=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;qb=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),Yb=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),zT="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",wd=Object.freeze({tests:"tested","a test":"tested","any tests":"tested",coverage:"covered","test coverage":"covered"}),BT=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(Yb).join("|")+")\\s+("+Object.keys(qb).join("|")+")\\s+(.+?),\\s*(?:(?:is|are)\\s+(?:it|that|they|this)\\s+("+zT+")|(?:has|have)\\s+(?:it|that|they|this)\\s+got\\s+("+Object.keys(wd).join("|")+")|(?:does|do)\\s+(?:it|that|they|this)\\s+have\\s+("+Object.keys(wd).join("|")+"))\\??$","i"),Xb="(?:were|was)\\s+(?:deleted|removed)",Jb="what\\s+(?:would|might|could)\\s+(?:break|fail|be\\s+affected)",UT=new RegExp("^if\\s+(.+?)\\s+"+Xb+",?\\s*"+Jb+"\\??$","i"),WT=new RegExp("^"+Jb+"\\s+if\\s+(.+?)\\s+"+Xb+"\\??$","i");GT=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Yu.map(at).join("|")})(\\s*[?.!]*)$`,"i");VT=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+(?:${Xu.map(at).join("|")})\\??$`,"i"),to:e=>`what is a ${e[1]}`},{re:/^(?:which|what)\s+(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:are|is)\s+(public|private|protected|static|abstract|constant|exported|re-?exported|tested|covered|untested|uncovered)\??$/i,to:e=>`${e[2].toLowerCase()} ${e[1].toLowerCase()}`},{re:/^what\s+(?:is|are)\s+(not\s+)?(tested|untested|covered|uncovered)\??$/i,to:e=>{let t=e[2].toLowerCase();return`${e[1]?t==="tested"?"untested":t==="covered"?"uncovered":t:t} modules`}},{re:/^what\s+does\s+(.+?)\s+changes?\s+together\s+with\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^what\s+changes?\s+together\s+with\s+(.+?)\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^how\s+many\s+commits\s+(?:are|were)\s+(?:recorded|logged)\s+(?:for|against)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`how many commits touched ${e[1]}`},{re:/^who\s+(?:wrote|authored)\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^who\s+is\s+the\s+authors?\s+of\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^(?:does|do)\s+(?!.*\bnot\b)(.+?)\s+have\s+(?:any\s+)?(?:tests?|test\s+coverage|coverage)\??$/i,to:e=>`what tests ${e[1]}`},{re:/^(?:is|are)\s+(?!.*\bnot\b)(.+?)\s+tested\??$/i,to:e=>`what tests ${e[1]}`},{re:/^what\s+needs\s+(?:to\s+be\s+)?(?:a\s+)?(?:tested|tests?|testing|coverage|covering)\??$/i,to:()=>"untested modules"},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:(?:that|which)\s+)?(?:have|has|having|with)\s+no\s+tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+without\s+(?:any\s+)?tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:new RegExp(`^(?:do|does)\\s+(.+?)\\s+(${tT})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);KT=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");ft=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"]),an=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),be=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var ew,Zb=P(()=>{ew={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chappe","chapped","chappes","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seiding","seifing","seiing","seined","seiths","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Cs(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let c=1;c<=t.length;c+=1){let l=e[r-1]===t[c-1]?0:1,u=Math.min(o[c]+1,i[c-1]+1,o[c-1]+l);r>1&&c>1&&e[r-1]===t[c-2]&&e[r-2]===t[c-1]&&(u=Math.min(u,s[c-2]+l)),i[c]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function xd(e){return/^[a-z]+$/.test(e)&&!ft.has(e)&&!Ed.has(e)}function sw(e){return XT(e)?null:lc(e,nw,Os(e))}function lc(e,t,n=Os(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Cs(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 qT,Os,Ed,tw,nw,YT,XT,Or=P(()=>{Jn();Zb();kn();qT=["used"];Os=e=>e.length<=5?1:2,Ed=new Set([...Object.keys(he),...Object.keys(nt),...Object.keys(bn),...qT].flatMap(e=>e.split(" "))),tw=4,nw=[...new Set([...Object.keys(he),...Object.keys(bn)].flatMap(e=>e.split(" ")).filter(e=>e.length>=tw))],YT=new Set(ew.words),XT=e=>YT.has(e)});function Ir(e){for(let t of eA){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var uc,JT,QT,ZT,Sd,eA,ow,dc=P(()=>{Jn();kn();uc=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),JT=Object.keys(nt).sort((e,t)=>t.length-e.length).map(at).join("|"),QT=Object.keys(bn).sort((e,t)=>t.length-e.length).map(at).join("|"),ZT=Oo.slice().sort((e,t)=>t.length-e.length).map(at).join("|"),Sd=(e,t)=>e==="defines"&&gi.has(t),eA=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${uc})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return Sd(n,t)?null:Xs({shape:"ask",entityType:null,modifier:"direct",kind:n,subject:e[1].trim(),object:e[3].trim()},t)}},{name:"reverse",re:new RegExp(`^which\\s+(${JT})\\s+(?:(${QT})\\s+)?(${uc})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=he[t];return Sd(n,t)?null:Xs({shape:"reverse",entityType:nt[e[1].toLowerCase()],modifier:e[2]?bn[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()},t)}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${uc})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return Sd(n,t)?null:Xs({shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()},t)}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${ZT})\\??$`,"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=gn(e[2].trim()),s=!/\s/.test(n);if(t==="the"&&!s||!t&&!nt[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&pg.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:Js(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${Fn.map(at).join("|")})\\??$`,"i"),build:e=>({shape:"mentions",entityType:null,modifier:"direct",kind:"mentions",object:e[1].trim()})},{name:"where",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)(?:\\s+(?:${hn.map(at).join("|")}))?\\??$`,"i"),build:e=>({shape:"where",entityType:null,modifier:"direct",kind:"where",object:e[1].trim()})},{name:"when",re:new RegExp(`^when\\s+(?:did|does|do|was|were|is)\\s+(.+?)\\s+(?:last\\s+)?(${uc})\\??$`,"i"),build:e=>he[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];ow={id:"grammar",class:"graph-query",run(e){let t=Ir(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function rw(e){let t=e.trim().split(/\s+/);return t.length>1&&Ua.has(t[0].toLowerCase())}function oA(e){return he[e.trim().toLowerCase()]==="calls"}function Mt(e,t,n=null){let s=Object.keys(t).sort((o,r)=>r.split(" ").length-o.split(" ").length);for(let o of s){let r=o.split(" ");for(let i=0;i<=e.length-r.length;i+=1)if(!(n&&r.some((a,c)=>n.has(i+c)))&&r.every((a,c)=>e[i+c]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Ai(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(S=>S.toLowerCase());if(s.includes("where")&&!Mt(s,he)){let S=s.some(T=>Fn.includes(T)),_=new Set([...hn,...Fn]),y=n.filter((T,C)=>!ft.has(s[C])&&!_.has(s[C])).join(" ").trim();if(y){let T=S?"mentions":"where";return{shape:T,entityType:null,modifier:"direct",kind:T,object:y}}}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?he[s[S-1]]:null)==="touches"){let y=n.slice(1,S-1).filter((T,C)=>!ft.has(s[1+C])).join(" ").trim();if(y)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:y}}}let r=s,i=Mt(s,he);if(!i&&t){let S=s.map(_=>{if(!xd(_))return _;let y=t.lemma(_);return Ed.has(y)?y:_});i=Mt(S,he),i&&(r=S)}let a=null;if(!i){let S=s.map(_=>_.length>=4&&xd(_)&&sw(_)||_);if(i=Mt(S,he),i){r=S;let _=s.slice(i.start,i.end).findIndex((T,C)=>T!==S[i.start+C]),y=i.start+Math.max(_,0);a={from:s[y],to:S[y]}}}let c=!1;if(!i)for(let S=0;S<s.length;S+=1){let _=Qs[s[S]];if(!(_&&s[S]==="used"&&s[S+1]==="for")&&_&&s.slice(0,S).some(y=>Ti.has(y))){i={kind:_,start:S,end:S+1},c=!0;break}}if(!i)return null;!c&&i.end-i.start===1&&Qs[s[i.start]]&&s.slice(0,i.start).some(S=>Ti.has(S))&&(c=!0);let l=S=>a?{...S,fuzzyVerb:a}:S;if(t&&i.end-i.start===1){let S=i.start,_=s[S-1];if((_==="the"||_==="these"||_==="those")&&s[S+1]==="of"&&t.posTags(n)[S]==="NOUN"){let T=n.slice(S+2).filter((C,v)=>!ft.has(s[S+2+v])).join(" ").trim();if(T)return l({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:T})}}let u=new Set,d=S=>{if(S)for(let _=S.start;_<S.end;_+=1)u.add(_)};d(i);for(let[S,_]of Object.entries(he)){if(_!==i.kind)continue;let y=S.split(" "),T=i.end;if(y.every((C,v)=>r[T+v]===C)){d({start:T,end:T+y.length});break}}let p=Mt(r,nt,u);d(p);let f=Mt(r,bn,u);d(f);let m=(S,_)=>n.slice(S,_).filter((y,T)=>!u.has(S+T)&&!ft.has(s[S+T])).join(" ").trim(),h=m(0,i.start),b=m(i.end,n.length);c&&!s.includes("by")&&sA.has(b.toLowerCase())&&(b="");let g=i.kind,$=p?nt[r.slice(p.start,p.end).join(" ")]:null,w=f?bn[r.slice(f.start,f.end).join(" ")]:"direct",x=r.slice(i.start,i.end).join(" ");if(g==="touches"&&s.includes("when")){let S=h||b;if(S)return l({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:S})}if(g==="touches"&&s.includes("who")&&s.includes("last")){let S=h||b;if(S)return l({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:S})}let R=s.indexOf("by"),E=s.slice(0,i.start).findIndex(S=>Ti.has(S)),k=E>=0,O=k&&E>R;if(R>=0&&!u.has(R)&&k){let S=(T,C)=>n.slice(T,C).filter((v,j)=>{let M=T+j,z=s[M];return!u.has(M)&&!ft.has(z)&&z!=="by"&&!Ti.has(z)&&!tA.has(z)&&!nA.has(z)}).join(" ").trim(),[_,y]=O?[S(E+1,n.length),S(R+1,E)]:[S(0,R),S(R+1,n.length)];if(_&&y)return g==="defines"&&gi.has(r.slice(i.start,i.end).join(" "))?null:l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:y,object:_});if(y)return l({shape:"forward",entityType:$,modifier:w,kind:g,object:y});if(_)return l({shape:"reverse",entityType:$,modifier:w,kind:g,object:_})}if(c&&R<0&&b&&s[i.start]==="called")return null;if(h&&b){if(g==="defines"&&gi.has(x)||g==="calls"&&(rw(b)||oA(h)))return null;let S=c&&R<0?Wa[`${s[i.start]} ${s[i.end]}`]:null;return S&&S.role==="agent"&&S.kind===g?l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:b,object:h}):l(Xs({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:h,object:b},x))}if(b){if(g==="calls"&&rw(b))return null;let S=p&&p.start>=i.end?null:$;return l(Xs({shape:"reverse",entityType:S,modifier:w,kind:g,object:b},x))}if(g==="inherits"&&!h&&p&&p.start===i.end){let S=r.slice(p.start,p.end).join(" ");if(S)return l({shape:"reverse",entityType:null,modifier:w,kind:g,object:S})}if(h&&!b&&k&&i.end-i.start===1&&Qs[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(g==="touches")return l({shape:"when",entityType:null,modifier:"direct",kind:g,object:h});let S=Ti.has(s[0]);return l({shape:"reverse",entityType:$,modifier:w,kind:g,object:h,...S?{polar:!0}:{}})}return h?l(Xs({shape:"forward",entityType:$,modifier:"direct",kind:g,object:h},x)):null}var Ti,tA,nA,sA,iw,fc=P(()=>{Jn();kn();Or();Ti=new Set(["is","are","was","were","be","been","being","get","gets","got"]),tA=new Set(["which","what","who","whom","whose"]),nA=new Set(Ss.map(e=>e.toLowerCase())),sA=new Set(["recently","lately","yet","already","ever","again"]);iw={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Ai(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function iA(e,t,n){if(!n||typeof n.posTags!="function"||!t.length)return[];let s=new Set(t.map(i=>i.toLowerCase())),o;try{o=n.posTags(e)}catch{return[]}let r=[];for(let i=0;i<e.length;i+=1){let a=e[i],c=a.toLowerCase();!/^[a-z]+$/.test(a)||aw.has(c)||!s.has(c)||o[i]==="VERB"&&r.push(c)}return r}function aA(e,t=null){let n=an(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!aw.has(a)&&(rA.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=iA(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var aw,rA,cw,lw=P(()=>{Jn();kn();dc();fc();aw=new Set([...ft,...be(Co),...be(Object.keys(he)),...be(Object.keys(nt)),...be(Object.keys(bn)),...be(Object.keys(Ve)),...be(Io),...be(No),...be(Object.keys(Yn)),...be(Object.keys(Xn)),...be(Object.keys(Zs)),...be(Ss),...be(wi),...be(Oo),...be(hn),...be(Fn),...be(Sn),...be(Object.keys(Sr))]),rA=new Set([...be(bi),...be(Ga)]);cw={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Ir(e))return null;let{text:n,dropped:s,maybeNoise:o}=aA(e,t.nlp||null);if(!s.length||!n)return null;let r=Ir(n)||Ai(n,t.nlp||null);if(!r)return null;if(o.length&&(r.shape==="where"||r.shape==="mentions")&&r.object){let i=r.object.split(/\s+/).filter(a=>!o.includes(a.toLowerCase())).join(" ").trim();i&&i!==r.object&&(r.altObject=i)}return{strategyId:"noise-strip",class:"noise-stripped",candidates:[{parsed:r,confidence:.75,note:`noise-stripped to "${n}"`}]}}}});var uw=P(()=>{});var pc,mc=P(()=>{pc=()=>{}});function fw(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Nr(e.subject)===Nr(t.subject)&&Nr(e.object)===Nr(t.object):Nr(e.object)===Nr(t.object)}function jd(e){let t=(e||[]).filter(l=>l&&Array.isArray(l.candidates)&&l.candidates.length);if(!t.length)return null;let n=[];for(let l of t)for(let u of l.candidates)!u||!u.parsed||n.push({parsed:u.parsed,confidence:typeof u.confidence=="number"?u.confidence:.5,note:u.note||null,via:u.via||null,strategyId:l.strategyId,class:l.class});if(n.some(l=>!pw(l))&&(n=n.filter(l=>!pw(l))),!n.length)return null;let s=new Map;for(let l of n)s.has(l.class)||s.set(l.class,[]),s.get(l.class).push(l);let o=[];for(let[l,u]of s){let d=[];for(let p of u){let f=d.find(m=>fw(m.parsed,p.parsed)&&m.via===p.via);if(f){f.agreed+=1,f.confidence=Math.max(f.confidence,p.confidence),dw(p.parsed)<dw(f.parsed)&&(f.parsed=p.parsed);continue}d.push({...p,agreed:1})}d.length&&o.push({class:l,candidates:d})}if(!o.length)return null;let r=l=>Math.max(...l.candidates.map(u=>u.confidence)),i=o[0];for(let l of o)r(l)>r(i)&&(i=l);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(l=>l.parsed)},c=o.filter(l=>l!==i).map(l=>l.candidates[0]).filter(l=>!i.candidates.some(u=>fw(u.parsed,l.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:c}}function uA(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 mw(e,{describe:t=uA,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 Nr,cA,dw,lA,pw,kd=P(()=>{Nr=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),cA=/^\s*(?:the|a|an)\s+/i,dw=e=>[e?.subject,e?.object].filter(t=>cA.test(String(t||""))).length;lA=new Set(["fuzzy","lemma","spell"]),pw=e=>lA.has(e.via)});function hc(e){Rd=e}function gc(){return typeof Rd=="function"?Rd():null}var Rd,Lr=P(()=>{Rd=null});function bw(e,t={},n=fA){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 dA,fA,ww=P(()=>{kn();dc();fc();lw();uw();mc();kd();Lr();dA=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],fA=[ow,iw,cw,...dA]});function Is(e){return pA.test(String(e||"").trim())?"an":"a"}function bc(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 Pr(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Ci(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 pA,Oi=P(()=>{pA=/^[aeiou]/i});var Ii,_d=P(()=>{Ii=(e,t,n)=>n});var Ey={};Lt(Ey,{DYNAMIC_TAIL_OK_RE:()=>pf,applyNegationFrames:()=>_i,ask:()=>co,classDisplayName:()=>Ns,degreeMetric:()=>ly,metaFallbackEntityAnswer:()=>ey,normalizeQuery:()=>Fo,parseQuery:()=>Bo,parseQueryFull:()=>Kd,render:()=>Wn,rephraseHint:()=>af,resolveObject:()=>vn,traverse:()=>cn,worldRelationGraphPayload:()=>xO});function et(e,t){let n=yw.get(e);n||(n=new Map,yw.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(As(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function de(e,t){let[n,s]=Id[e]||["result","results"];return t===1?n:s}function Di(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${de(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function Ns(e){let t=String(e||"");if(typeof Dn=="function"){let n=Dn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function Do(e){return hA[e]||e}function $A(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||yA.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return be(Oo).includes(o)?t:e}function EA(e,t){if(!e||e.shape!=="where"||e.altObject||!vA.test(t))return e;let n=Ba(t),s=Ba(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=an(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||ft.has(i)||he[i]||i.endsWith("ing"))return o;let a=an(n).map(l=>l.toLowerCase());for(;a.length&&Fw.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let c=r.slice(0,-1).join(" ");return{...e,object:c,altObject:s,verb:i}}function Bo(e,{nlp:t=void 0}={}){return Kd(e,{nlp:t}).parsed}function Kd(e,{nlp:t=void 0}={}){let n=t===void 0?gc():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=vd(_i(Fo(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=SA(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=jd(bw(o,{nlp:n,raw:s}));return i?{parsed:EA($A(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function Ec(e,t){return t.length&&Hd.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function zr(e,t){return Ir(e)||Ai(e,t)}function SA(e,t){let n=an(e),s=n.map(o=>o.toLowerCase());return YA(n,s)||JA(n,s)||_A(n,s,t)||Bw(e,t,0)||QA(n,s,t)||AA(n,s,t)||DA(n,s,t,0)||GA(n,s,t,0)||Vw(n,s)||HA(n,s,t)||ZA(n,s,t)||nC(n,s,t)||oC(n,s,t,0)||tC(n,s,t,0)||Ww(n,s,t,0)||Yd(n,s,t,0)||Gw(n,s,t,0)||NA(n,s,t)||kA(n,s)||Xw(n,s,t,0)}function kA(e,t){let n=0;jA.has(t[n])&&(n+=1);let s=dt(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?Wa[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,c=-1,l;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){c=m,l=h;break}}if(c<0)return null;let u=e.slice(a,c).join(" ").trim(),d=e.slice(c+2).join(" ").trim();if(!u||!d)return null;let p=(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},f=p(i,u);return f.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:f}},{op:"intersection",kind:"set",ast:{node:"clause",clause:p(l,d)}}]}}function yc(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function _A(e,t,n){if(!["do","does","did"].includes(t[0])||!RA.has(t[1]))return null;let s=dt(t[2]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;if(o==="Change")return{node:"miss",reason:`"${t[2]}" isn't an enumerable kind \u2014 a universal check needs a concrete kind (functions, classes, modules, \u2026)`};let r=t[2],i=e.slice(3),a=t.slice(3);if(!i.length)return null;let c=Mt(a,he);if(!c)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((p,f)=>(f<c.start||f>=c.end)&&!ft.has(a[f])&&a[f]!=="from").join(" ").trim();if(!u)return null;let d=Ps(`which ${r} ${i.join(" ")}`,n,1);return!d||d.node==="miss"?{node:"miss",reason:d&&d.reason||"the universal clause didn't parse"}:{node:"universal",entityType:o,kind:c.kind,object:u,complement:yc(o,{op:"difference",kind:"set",ast:d})}}function Bw(e,t,n=0){let s=Qb(e);if(!s)return null;let o=dt(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=an(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ve[d]))return yc(r,{op:"difference",kind:"qual",filters:a});let c=Mt(a,he);if(!c)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,p)=>(p<c.start||p>=c.end)&&!ft.has(a[p])&&a[p]!=="from").length)return yc(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:c.kind}});let u=Ps(`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"}:yc(r,{op:"difference",kind:"set",ast:u})}function AA(e,t,n){let s=0;for(;s<t.length&&TA.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=Mt(r,he);if(!a)return null;let l=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!ft.has(r[d])).join(" ").trim();return l?{node:"forwardComplement",kind:a.kind,subjectTerm:l}:null}function qd(e,t){let n=new Set;for(let s of t)for(let o of et(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Uw(e,t){let n=Tt(t),s=n.filter(r=>!Mw.has(r)),o=qd(e,s.length?s:n);return o.size===1?[...o][0]:null}function Ps(e,t,n){if(n>Dw)return{node:"miss",reason:"too deep to resolve"};let s=Bw(e,t,n);if(s)return s;let o=an(e),r=o.map(p=>p.toLowerCase()),i=Vw(o,r);if(i)return i;let a=Ww(o,r,t,n);if(a)return a;let c=Yd(o,r,t,n);if(c)return c;let l=Gw(o,r,t,n);if(l)return l;let u=Xw(o,r,t,n);if(u)return u;let d=zr(e,t);return d?{node:"clause",clause:d}:null}function CA(e){let t=e.map(r=>r.toLowerCase()),n=Object.keys(Zs).sort((r,i)=>i.split(" ").length-r.split(" ").length),s=[],o=e.length;for(;;){let r=null;for(let c=o-1;c>=1&&!r;c-=1)for(let l of n){let u=l.split(" ");if(c+u.length<=o&&t.slice(c,c+u.length).join(" ")===l){r={at:c,len:u.length,op:Zs[l]};break}}if(!r)break;let i=e.slice(r.at+r.len,o),{blc:a}=Ec(i,i.map(c=>c.toLowerCase()));if(!a.length||!a.every(c=>Ve[c]))break;s.unshift({op:r.op,kind:"qual",filters:a}),o=r.at}return!s.length||!o?null:{rest:e.slice(0,o),lifted:s}}function Yd(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Sn.includes(t[o]),i=!r&&zw(t[o]);if(!r&&!i||r&&o+1>=t.length||!dt(t[o-1]))continue;let c=e.slice(0,o-1);if(!c.length||c.every(h=>Ve[h.toLowerCase()]))continue;let l=zr([...c,Nd].join(" "),n);if(!l||l.shape!=="reverse"&&l.shape!=="forward"||l.modifier&&l.modifier!=="direct")continue;let u=e.slice(r?o+1:o),d=CA(u),p=`which ${t[o-1]} ${(d?d.rest:u).join(" ")}`,f=Ps(p,n,s+1);if(!f||f.node==="miss")return f?{node:"miss",reason:f.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"};let m={node:l.shape==="reverse"?"reverseSet":"forwardSet",kind:l.kind,entityType:l.entityType,inner:f};return d?{node:"boolean",entityType:l.entityType,atoms:[{op:"seed",kind:"set",ast:m},...d.lifted]}:m}return null}function Ww(e,t,n,s){let o=0;(ro.has(t[o])||Xd.has(t[o]))&&(o+=1);let r=dt(t[o]);if(!r||r.placeholder||!r.entityType||(o+=1,Hd.has(t[o])&&(o+=1),!OA.has(t[o])||t[o+1]!=="in"))return null;let i=e.slice(o+2);return i.length?Jd(r.entityType,i,n,s):null}function Gw(e,t,n,s){let o=0;if(!ro.has(t[0]))return null;o+=1;let r=dt(t[o]);if(!r)return null;o+=1;let i=e.slice(o),a=t.slice(o);if(i.length<2)return null;let c=null;for(let h=i.length-1;h>0;h-=1){let b=a.slice(h),g=Mt(b,he);if(g&&g.start===0&&g.end===b.length){c={kind:g.kind,at:h};break}}if(!c)return null;let l=i.slice(0,c.at),u=a.slice(0,c.at);if(!u.some(h=>Sn.includes(h)))return null;let d=l,p=u;for(;p.length&&Xd.has(p[0]);)d=d.slice(1),p=p.slice(1);if(!p.length||!dt(p[0]))return null;let f=ro.has(p[0])?d.join(" "):`which ${d.join(" ")}`,m=Ps(f,n,s+1);return!m||m.node==="miss"?{node:"miss",reason:m&&m.reason||"the embedded subject clause didn't parse"}:{node:"forwardSet",kind:c.kind,entityType:r.entityType,inner:m}}function NA(e,t,n){for(let s=0;s<t.length;s+=1){if(!IA.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!he[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),Nd,...e.slice(s+1)],a=zr(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===Nd&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function DA(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!LA.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(PA.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&&MA.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&FA.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Sn.includes(d)))return null;let c=ro.has(a[0])?i.join(" "):`which ${i.join(" ")}`,l=Ps(c,n,s+1);if(!l||l.node==="miss")return l?{node:"miss",reason:l.reason||"the inner set of the temporal query didn't parse"}:{node:"miss",reason:"the inner set of the temporal query didn't parse"};let u=dt(a[0]);return{node:"temporal",inner:l,entityType:u&&u.entityType||null}}function Vw(e,t){if(!BA.has(t[0]))return null;let n=1,s=null;if(t[n]!=="changed"){let i=dt(t[n]);if(!i||i.placeholder)return null;s=i.entityType,n+=1}if(t[n]!=="changed"||(n+=1,t[n]==="ever"&&(n+=1),!zA.has(t[n])))return null;let o=t[n],r=e.slice(n+1).join(" ").trim();return r?{node:"commitFilter",op:o,pivotRaw:r,entityType:s}:{node:"miss",reason:`"changed ${o}" needs a date or commit afterward`}}function Jd(e,t,n,s){let o=t.map(r=>r.toLowerCase());if(o.some(r=>Sn.includes(r))){let r=t,i=o;for(;i.length&&Xd.has(i[0]);)r=r.slice(1),i=i.slice(1);if(i.length&&dt(i[0])){let a=ro.has(i[0])?r.join(" "):`which ${r.join(" ")}`,c=Ps(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the owner clause of this membership query didn't parse"}:{node:"membershipSet",entityType:e,inner:c}}}return{node:"membership",entityType:e,term:t.join(" ")}}function GA(e,t,n,s=0){if(t[0]!=="where"||!UA.has(t[1])||!Fw.has(t[t.length-1]))return null;let o=e.slice(2,t.length-1),r=t.slice(2,t.length-1);for(;r.length&&WA.has(r[0]);)o=o.slice(1),r=r.slice(1);if(!o.length||!r.some(l=>Sn.includes(l)))return null;let i=dt(r[0]);if(!i)return null;let a=ro.has(r[0])?o.join(" "):`which ${o.join(" ")}`,c=Ps(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the inner set of the location query didn't parse"}:{node:"whereSet",inner:c,entityType:i.entityType||null}}function KA(e){let t=new Set,n=[];for(let s of e){if(!s||!VA.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function HA(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(!wi.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let p=t.slice(0,d).join(" ");if(d===t.length-1&&(Io.includes(p)||No.includes(p))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Io.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=qA(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let c=o?s-1:s,l=KA(e.slice(0,c)),u={node:"anaphora",mode:i,filter:a};return l.length>=2&&(u.candidateTerms=l),u}function qA(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&xA.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ve[a]))return{type:"qual",filters:r};if(o.length===1){let a=dt(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=zr(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function YA(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?dt(t[n]):null;if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;n+=1;let i=t.slice(n),a=e.slice(n);if(i.length&&i[i.length-1]==="anywhere"?(i=i.slice(0,-1),a=a.slice(0,-1)):i.length>=2&&i[i.length-2]==="at"&&i[i.length-1]==="all"&&(i=i.slice(0,-2),a=a.slice(0,-2)),!i.length)return{node:"exists",entityType:r,term:null,scopeModule:null};if(i[0]==="called"||i[0]==="named"){if(i.length<2)return{node:"miss",reason:`"${i[0]}" needs a name afterward`};let c=i.indexOf("in",1);if(c>0){let u=a.slice(1,c).join(" ").trim(),d=a.slice(c+1).join(" ").trim();return!u||!d?{node:"miss",reason:'a named existence check needs both a name and a module after "in"'}:{node:"exists",entityType:r,term:u,scopeModule:d}}let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:l,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:null,scopeModule:c}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function XA(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=Js(n).slice(e.length).trim(),o=an(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 JA(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let l=1;l<t.length;l+=1)if(Ve[t[l]]){n=l,s=t[l-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&Qs[t[n]]){let l=o+1;for(;l<t.length&&(t[l]==="the"||t[l]==="a"||t[l]==="an");)l+=1;let u=t[l];if(u&&!bg.has(u))return null}let r=XA(t[n],e.slice(n+1));if(r?.node==="miss")return r;let i=1;t[i]==="the"&&(i+=1);let a=s?n-1:n;a>i&&(t[a-1]==="a"||t[a-1]==="an")&&(a-=1);let c=a>i?e.slice(i,a).join(" ").trim():"";return c?{node:"qualCheck",term:c,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function QA(e,t,n){if(!["do","does","did","is","are","was","were"].includes(t[0]))return null;let s=t.indexOf("not",1);if(s<0)return null;let o=zr(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function ZA(e,t,n){let s=Io.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&&Ve[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?dt(t[o]):null;if(!i)return{node:"miss",reason:"count needs a known entity kind (functions, classes, modules, \u2026)"};let a=t[o];o+=1;let c=e.slice(o),l=t.slice(o).some(d=>!ft.has(d)&&!Kw.has(d)),u;if(l){let d=Ps(`which ${a} ${c.join(" ")}`,n,1);if(!d||d.node==="miss")return{node:"miss",reason:"the count restrictor didn't parse"};u=d}else u={node:"allOfClass",entityType:i.entityType};return r.length&&(u={node:"qualifier",filters:r,inner:u}),{node:"count",entityType:i.entityType,base:u}}function tC(e,t,n,s){let o=0,r=!1,i=null;for(let $ of Hw){let w=$.split(" ");if(t.slice(0,w.length).join(" ")===$){i=$,o=w.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&Qd.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ve[t[o]];)a.push(t[o]),o+=1;let c=o<t.length?dt(t[o]):null;if(!c||c.placeholder||c.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!Ss.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${qw}`}:null;let l=c.entityType,u=t[o];o+=1;let d=e.slice(o),p=t.slice(o).some($=>!ft.has($)&&!Kw.has($)),f=t.slice(o),m=d;(f[0]==="is"||f[0]==="are")&&(f=f.slice(1),m=m.slice(1));let h=r&&eC.has(f[0]);if(r&&(p&&!h||d.length===0))return null;let b,g=!1;if(p){let $=h?m:d,w=Ps(`which ${[...a,u,...$].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};b=w,g=!0}else b={node:"allOfClass",entityType:l},a.length&&(b={node:"qualifier",filters:a,inner:b});return{node:"list",entityType:l,base:b,scoped:g}}function nC(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(Yn[h]){s=Yn[h],o=m;break}if(Yn[t[m]]){s=Yn[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(Xn[t[m]]){r=Xn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(Xn[t[m]]){r=Xn[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]),c=["important","significant","central","key","core","essential","critical","principal"],l=t.some(m=>c.includes(m));!r&&(a||l)&&(r=Xn.connections,i="connections");let u,d=null;for(let m of t){let h=dt(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?wg[i]:void 0,!u))return{node:"miss",reason:"a superlative needs an entity kind (module, class, function, \u2026)"};if(!r)return{node:"miss",reason:"name what to rank by (imports, callers, methods, tests, or connections)"};let p=["needs","need","needing","lacks","lack","lacking","misses","missing"],f=t.some(m=>p.includes(m))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:f}}function oC(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&Qd.has(t[o]);)o+=1;if(o>=t.length)return null;let r=dt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&sC.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=dt(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=>Sn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!Ss.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${qw}`}:null}function rC(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&Qd.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Sn.includes(t[i])){s=i;break}if(s<0)return null;let o=dt(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 Yw(e,t,n,s){if(!n.length||n[0]!=="named"&&!(n[0]==="called"&&s)||n[1]==="by")return null;let o=t.slice(1).join(" ").trim();return o?{node:"named",entityType:e||null,term:o}:null}function iC(e,t,n,s,o,r){let{branches:i,ops:a}=$c(n,s),c=null,l=[];for(let u=0;u<i.length;u+=1){let d=i[u],p=d.map(w=>w.toLowerCase()),f=u===0?"intersection":a[u-1],m=Ec(d,p);if(m.blc.length&&m.blc.every(w=>Ve[w])){l.push({op:f,kind:"qual",filters:m.blc});continue}let h=Yw(e,m.bw,m.blc,m.blc.length!==p.length);if(h){l.push({op:f,kind:"set",ast:h});continue}if(p[0]==="of"||p[0]==="in"){let w=Jd(e,d.slice(1),o,r);if(w.node==="miss")return{miss:w.reason};l.push({op:f,kind:"set",ast:w});continue}let b=d,g=Mt(p,he);g?c=d.slice(g.start,g.end):c&&(b=[...c,...d]);let $=Jw(`${t} ${b.join(" ")}`,o,r);if(!$||$.node==="miss")return{miss:$&&$.reason||"a clause in the combination didn't parse"};l.push({op:f,kind:"set",ast:$})}return{atoms:l}}function Xw(e,t,n,s){let o=rC(e,t);if(o){let{entityType:_,term:y,relIdx:T}=o,C=t.slice(T+1),v=e.slice(T+1);if(!C.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[T]}"`};let j=iC(_,`which ${t[T-1]}`,C,v,n,s+1);if(j.miss)return{node:"miss",reason:j.miss};let M=[{op:"seed",kind:"set",ast:{node:"find",entityType:_,term:y}},...j.atoms];return M.length===1?M[0].ast:{node:"boolean",entityType:_,atoms:M}}let r=0;for(;r<t.length&&ro.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ve[t[r]];)a.push(t[r]),r+=1;let c=r<t.length?dt(t[r]):null;if(!c){let _=r+1<t.length?dt(t[r+1]):null;if($w.has(t[r])&&_&&_.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Hd.has(t[r])){let y=r+1;y<t.length&&(t[y]==="the"||t[y]==="a"||t[y]==="an")&&(y+=1);let T=y+1<t.length?dt(t[y+1]):null;if($w.has(t[y])&&T&&T.entityType==="Commit"&&y+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&_&&/^[a-z]+$/.test(t[r])&&!he[t[r]]&&!ft.has(t[r])&&!df.has(t[r])?{node:"find",entityType:_.entityType,term:e[r]}:null}let l=c.entityType,u=t[r];r+=1;let d=t.slice(r),p=e.slice(r),f=!1;d.length&&Sn.includes(d[0])&&(f=!0,d=d.slice(1),p=p.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&zw(d[0]),b=p.length>0&&$c(d,p).branches.some(_=>{let{blc:y}=Ec(_,_.map(T=>T.toLowerCase()));return y.length&&y.every(T=>Ve[T])}),g=p.length>0?$c(d,p).branches:[],$=!1;if(g.length>1){let _=g[0].map(T=>T.toLowerCase()),y=Mt(_,he);y&&y.start===0&&($=g.slice(1).every(T=>{let C=T.map(j=>j.toLowerCase()),v=Mt(C,he);return v&&v.start===0?v.kind===y.kind:!v}))}let w=!1;if(g.length>1){let _=g[0].map(T=>T.toLowerCase()),y=Mt(_,he);y&&y.start===0&&(w=g.slice(1).every(T=>{let C=T.map(j=>j.toLowerCase()),v=Mt(C,he);return!!v&&v.start===0&&v.end-v.start===1}))}if(!(a.length||f||m||h||b||$||w))return null;if(!p.length){let _={node:"allOfClass",entityType:l};return a.length?{node:"qualifier",filters:a,inner:_,entityType:l}:{node:"miss",reason:"nothing to filter or traverse"}}let x=c.placeholder?"what":`which ${u}`,{branches:R,ops:E}=$c(d,p),k=null,O=[];for(let _=0;_<R.length;_+=1){let y=R[_],T=y.map(Y=>Y.toLowerCase()),C=_===0?"seed":E[_-1],v=Ec(y,T);if(v.blc.length&&v.blc.every(Y=>Ve[Y])){O.push({op:C,kind:"qual",filters:v.blc});continue}let j=Yw(l,v.bw,v.blc,v.blc.length!==T.length);if(j){O.push({op:C,kind:"set",ast:j});continue}if(T[0]==="of"||T[0]==="in"){let Y=Jd(l,y.slice(1),n,s+1);if(Y.node==="miss")return Y;O.push({op:C,kind:"set",ast:Y});continue}let M=y,z=Mt(T,he);z?k=y.slice(z.start,z.end):k&&(M=[...k,...y]);let K=Jw(`${x} ${M.join(" ")}`,n,s+1);if(!K||K.node==="miss")return{node:"miss",reason:K&&K.reason||"a clause in the combination didn't parse"};O.push({op:C,kind:"set",ast:K})}if(O[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let S;return O.length===1?S=O[0].ast:S={node:"boolean",entityType:l,atoms:O},a.length&&(S={node:"qualifier",filters:a,inner:S,entityType:l}),S}function Jw(e,t,n){if(n>Dw)return{node:"miss",reason:"too deep to resolve"};let s=an(e),o=s.map(a=>a.toLowerCase()),r=Yd(s,o,t,n);if(r)return r;let i=zr(e,t);return i?{node:"clause",clause:i}:null}function $c(e,t){let n=Object.keys(Zs).sort((a,c)=>c.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let c of n){let l=c.split(" ");if(e.slice(i,i+l.length).join(" ")===c){a={c,len:l.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(Zs[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 Zd(e){let t=vw.get(e);if(t)return t;t=new Map;for(let n of e.individuals||[])n.class==="Module"&&t.set(Jt(n.label),n);return vw.set(e,t),t}function Qw(e,t){let n=Zd(e),s=[];for(let o of t){let r=e.byId.get(o);if(!r||r.class==="Module")continue;let i=ao(r),a=i?n.get(Jt(i)):null;a&&s.push(a)}return $n(s)}function cC(e){let t=Ew.get(e);if(t)return t;t=new Map;let n=Zd(e);for(let s of e.individuals||[]){if(s.class==="Module")continue;let o=ao(s),r=o?n.get(Jt(o)):null;r&&(t.has(r.id)||t.set(r.id,[]),t.get(r.id).push(s))}return Ew.set(e,t),t}function ef(e,t,n,s){let o=Mr[t];if(o&&so.has(n)){let d=et(e,o).filter(p=>s.has(p.object));return $n(d.map(p=>e.byId.get(p.subject)).filter(p=>p&&p.class===n))}let a=(!!o&&[...s].some(d=>so.has(e.byId.get(d)?.class))?[...Tt(t),o]:Tt(t)).flatMap(d=>et(e,d)),c=a.filter(d=>s.has(d.object));t==="cochange"&&(c=c.concat(a.filter(d=>s.has(d.subject)).map(d=>({...d,subject:d.object,object:d.subject}))));let l=$n(c.map(d=>e.byId.get(d.subject)).filter(Boolean));if(!n||n==="Change")return l;let u=l.filter(d=>d.class===n);if(Zw(t,n)){let d=new Set(c.map(f=>f.object)),p=new Set([...s].filter(f=>!d.has(f)));return $n([...u,...Qw(e,p)])}return u.length?u:n!=="Module"&&l.some(d=>d.class==="Module")?cf(e,new Set(l.filter(d=>d.class==="Module").map(d=>d.id)),n):[]}function uC(e){let t=new Set;for(let n of["touches","touchesSymbol"])for(let s of et(e,n)){let o=e.byId.get(s.subject);o?.class==="Commit"&&t.add(String(o.label||"").toLowerCase())}return e.individuals.filter(n=>n.class==="Commit").map(n=>String(n.label||"").toLowerCase()).filter(n=>n&&!t.has(n)).sort()}function dC(e,t){let n=new Set(ef(e,"touches","Commit",t).map(o=>String(o.label||"").toLowerCase())),s=uC(e);for(let o of t)for(let r of e.byId.get(o)?.derived_from||[]){let i=lC.exec(String(r||""));if(!i)continue;let a=i[1].toLowerCase(),c=s.find(l=>l.startsWith(a)||a.startsWith(l));c&&n.add(c)}return n.size}function Pi(e,t,n){let s=Tt(t).flatMap(o=>et(e,o)).filter(o=>n.has(o.subject));return $n(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function $n(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 fC(e,t){let n=Jt(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Jt(o.label).startsWith(s))}function Ld(e){let t=xw.get(e);if(t)return t;let n=new Set;for(let i of et(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 et(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of et(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},xw.set(e,t),t}function Uo(e,t){return t?t.class==="Module"?t.id:Ld(e).moduleOfSymbol.get(t.id)||null:null}function pC(e,t){let n=Uo(e,t);if(n)return n;let s=ao(t);return s&&Zd(e).get(Jt(s))?.id||null}function ey(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>mC.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Uo(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=de(o.class,1),c=a==="attribute"?"an":"a",l=i?`, ${Ii("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${c} ${a} in this codebase${l} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function xc(e,t,n){let s=$n(xr.flatMap(i=>Pi(e,i,new Set([t])))),o=n?s.filter(i=>i.class===n):s;if(o.length)return o;let r=cC(e).get(t)||[];return n?r.filter(i=>i.class===n):r}function tf(e,t,n=null){let s=Ls(e,t,n);if(!(s.match&&s.tier===1)){let o=fC(e,t);if(o.length)return{kind:"dir",mods:o}}return s.match?{kind:"single",id:s.match.id,entityClass:s.match.class,label:s.match.label}:{kind:"miss"}}function nf(e,t,n,s,o){let r=o||(()=>!0),i=xc(e,t,s).filter(r);if(i.length||!ny(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of ty(e,t)){let c=e.byId.get(a);if(!c)continue;let l=xc(e,a,s).filter(r);if(l.length)return{own:i,inherited:l,viaId:a,viaLabel:c.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function oo(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=Ld(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=pC(e,t),o=Ld(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Po(String(r.label).toLowerCase()))||!s?!1:o.testedModules.has(s)===n.value}default:return!1}}function sf(e){return et(e,"inherits")}function Pd(e,t){return sf(e).filter(n=>n.object===t).map(n=>n.subject)}function Sw(e,t){return sf(e).filter(n=>n.subject===t).map(n=>n.object)}function hC(e,t){let n=new Set,s=[...Pd(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Pd(e,o))n.has(r)||s.push(r)}}return n}function ty(e,t){let n=new Set,s=[...Sw(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Sw(e,o))n.has(r)||s.push(r)}}return n}function ny(e,t){let n=jw.get(e);if(n||(n=new Map,jw.set(e,n)),n.has(t))return n.get(t);let s=sf(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 kw(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 _w(e){return e.slice().sort((t,n)=>Rw[n.via]-Rw[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Tw(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Os(n);if(Cs(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of zo(e.label))if(Cs(o,n,s)<=s)return!0;return!1}function sy(e,t,n){let s=e.individuals.filter(c=>c.class===t),o=[...zo(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=ny(e,t),i=[];for(let c of s){let l=kw(c,o);if(l){i.push({ind:c,via:l});continue}if(!r)continue;[...hC(e,c.id)].some(d=>{let p=e.byId.get(d);return!!p&&!!kw(p,o)})&&i.push({ind:c,via:"chain"})}if(i.length||!r)return{narrow:_w(i),broad:[]};let a=new Map;for(let c of s)for(let l of ty(e,c.id)){if(!a.has(l)){let u=e.byId.get(l);u&&u.class===t&&Tw(u,n)&&a.set(l,{ind:u,via:"chain"})}for(let u of Pd(e,l)){if(u===c.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Tw(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:_w([...a.values()])}}function oy(e){return[...oc(rc(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function Md(e,t,n){let s=String(t||"").trim().toLowerCase();if(!s)return[];let o=Jt(s);return e.individuals.filter(r=>{if(n&&r.class!==n)return!1;let i=String(r.label||"").toLowerCase();return i===s||String(r.id||"").toLowerCase()===s?!0:r.class==="Module"&&Jt(i)===o})}function Fd(e,t){if(!t||typeof t!="object")return null;if(Array.isArray(t)){for(let n of t){let s=Fd(e,n);if(s)return s}return null}if(t.node==="named")return Md(e,t.term,t.entityType).length?null:{term:t.term,entityType:t.entityType||null,elsewhere:Md(e,t.term,null)[0]||null};for(let n of Object.values(t)){let s=Fd(e,n);if(s)return s}return null}function Qt(e,t,n){switch(t.node){case"named":return Md(e,t.term,t.entityType);case"clause":return cn(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?oy(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=sy(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Tt(t.kind).flatMap(o=>et(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=Ls(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Uw(e,t.kind);if(!o)return[];let r=new Set(Pi(e,t.kind,new Set([s.match.id])).map(i=>i.id));return e.individuals.filter(i=>i.class===o&&!r.has(i.id))}case"commitFilter":return Dd(e,t).matches;case"reverseSet":{let s=new Set(Qt(e,t.inner,n).map(o=>o.id));return ef(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(Qt(e,t.inner,n).map(o=>o.id));return Pi(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=tf(e,t.term,n&&n.contextId);if(s.kind==="dir"){if(!t.entityType||t.entityType==="Module")return s.mods;let i=new Set(s.mods.map(c=>c.id));return $n(xr.flatMap(c=>Pi(e,c,i))).filter(c=>c.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=nf(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"membershipSet":{let s=Qt(e,t.inner,n);return s.length?$n(s.flatMap(o=>xc(e,o.id,t.entityType))):[]}case"qualifier":return t.inner.node==="membership"?uy(e,t,n).matches:Qt(e,t.inner,n).filter(o=>t.filters.every(r=>oo(e,o,Ve[r])));case"boolean":return ay(e,t,n);case"anaphora":return cy(e,t,n).matches;default:return[]}}function gC(e){let t=Ve[e],n=ry(t);return n&&Object.keys(Ve).find(s=>Ve[s].via===n.via&&Ve[s].value===n.value)||null}function iy(e,t,n){let s=[],o=[];for(let r of t.atoms){let i=o;if(r.op==="seed")o=Qt(e,r.ast,n);else if(r.kind==="qual"){let a=l=>r.filters.every(u=>oo(e,l,Ve[u])),c=l=>r.filters.every(u=>{let d=ry(Ve[u]);return d?oo(e,l,d):!oo(e,l,Ve[u])});o=r.op==="difference"?i.filter(c):i.filter(a)}else{let a=Qt(e,r.ast,n),c=new Set(a.map(l=>l.id));if(r.op==="intersection")o=i.filter(l=>c.has(l.id));else if(r.op==="difference")o=i.filter(l=>!c.has(l.id));else if(r.op==="union"){let l=new Set(i.map(u=>u.id));o=i.slice();for(let u of a)l.has(u.id)||(l.add(u.id),o.push(u))}}s.push({atom:r,before:i,after:o})}return{matches:o,steps:s}}function ay(e,t,n){return iy(e,t,n).matches}function bC(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=vn(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 cy(e,t,n){let o=bC(e,t.candidateTerms);if(!o){let p=n&&n.prev;if(!Array.isArray(p)||!p.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=p.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(p=>i.filters.every(f=>oo(e,p,Ve[f])));else if(i&&i.type==="entity")r=r.filter(p=>p.class===i.entityType);else if(i&&i.type==="clause"){let p=vn(e,i.clause.object);if(!p.match)r=[];else{let f=Mr[i.clause.kind],m=[...Tt(i.clause.kind),...f?[f]:[]],h=new Set(m.flatMap(b=>et(e,b)).filter(b=>b.object===p.match.id).map(b=>b.subject));r=r.filter(b=>h.has(b.id))}}let a=p=>p.length&&p.every(f=>f.class===p[0].class)?p[0].class:null,c=i&&i.type==="entity"?i.entityType:a(o),l=r.length?a(r):c;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:l,matches:[]};let u=Di(l,r,"anaphora",{bound:!0}),d=r.length?null:wC(e,o,i);return{compositeKind:"set",matches:r,entityType:l,referents:u,...d?{emptied:d}:{}}}function wC(e,t,n){if(!t.length||!n)return null;let s={...Mi(t,null,null)};if(n.type==="qual"){let o=jc(e,n.filters,!1,t);return o?{held:s,step:o}:null}return n.type==="entity"?{held:s,step:{type:"entityKind",entityType:n.entityType}}:n.type==="clause"&&n.clause?.kind&&n.clause.object?{held:s,step:{type:"clause",clause:{kind:n.clause.kind,object:n.clause.object},excluded:!1}}:null}function ly(e,t,n){let s=n.kind==="*"?yC:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of et(e,r)){let a=i.subject===t.id,c=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let l=e.byId.get(i.object);if(!l||l.class!==n.filter)continue}o+=1}else(n.dir==="in"&&c||n.dir==="both"&&(a||c))&&(o+=1)}return o}function $C(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 Dd(e,t){let{op:n,pivotRaw:s,entityType:o=null}=t,r=f=>String((f.attributes||[]).find(m=>m.key==="date")?.value||"").slice(0,10),i=null,a=null,c=null;if(vC.test(s))i=s;else{let{match:f,ambiguous:m}=vn(e,s,{expectedClass:"Commit"});f&&!m&&f.class==="Commit"&&r(f)&&(a=f.id,c=f.label,i=r(f))}if(!i)return{compositeKind:"commitFilter",op:n,pivotRaw:s,entityType:o,pivotResolved:!1,matches:[]};let l=e.individuals.filter(f=>f.class==="Commit"&&f.id!==a&&r(f)).filter(f=>{let m=r(f);return n==="since"?m>=i:n==="before"?m<i:n==="after"?m>i:m===i}).sort((f,m)=>r(m).localeCompare(r(f))||String(f.id).localeCompare(String(m.id))),u=o&&o!=="Commit"&&o!=="Change"?$n(l.flatMap(f=>gy(e,f,o).matches)):null,d=u||l,p=[];if(d.length){let f=u?o:"Commit";p.push({kind:"set",class:f,label:`${d.length} ${de(f,d.length)} ${n} ${s}`,ids:d.map(m=>m.id),attrs:{count:d.length,op:n,...a?{pivot:a}:{}},lane:"commitFilter"})}return a&&p.push({kind:"event",class:"Commit",label:c,ids:[a],attrs:{date:i},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:i,pivotResolved:!0,entityType:o,windowCount:l.length,matches:d,referents:p}}function EC(e,t,n){let s=Qt(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size){let a=Fr(e,t.inner,n);return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0,...a?{emptied:a}:{}}}let r=ef(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(c=>c.key==="date")?.value||"");return r.sort((a,c)=>i(c).localeCompare(i(a))),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function xC(e,t,n){let s=Qt(e,t.inner,n),o=s.length?null:Fr(e,t.inner,n);return{compositeKind:"whereSet",matches:s,entityType:t.entityType,sites:s.map(r=>(r.attributes||[]).find(i=>i.key==="site")?.value||null),...o?{emptied:o}:{}}}function SC(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(et(e,"tests").map(c=>c.subject));n=n.filter(c=>!a.has(c.id)&&!Po(String(c.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:ly(e,a,t.metric)})).sort((a,c)=>t.extreme==="most"?c.score-a.score:a.score-c.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?Di(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function uy(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?h=>s.filters.every(b=>oo(e,h,Ve[b])):null,a=h=>Di(r,h,"membership"),c=tf(e,o.term,n&&n.contextId);if(c.kind==="dir"){let h;if(!r||r==="Module")h=c.mods;else{let b=new Set(c.mods.map(g=>g.id));h=$n(xr.flatMap(g=>Pi(e,g,b))).filter(g=>g.class===r)}return i&&(h=h.filter(i)),{compositeKind:"set",matches:h,entityType:r,referents:a(h)}}if(c.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:l,inherited:u,viaLabel:d}=nf(e,c.id,c.entityClass,r,i),p=!l.length&&u.length>0,f=p?u:l,m=f.length?null:jC(e,c,r,s);return{compositeKind:"membership",entityType:r,matches:f,inheritedNotOwn:p,viaLabel:d,ownerLabel:c.label,referents:a(f),...m?{emptied:m}:{}}}function jC(e,t,n,s){if(!s)return null;let{own:o,inherited:r}=nf(e,t.id,t.entityClass,n,null),i=o.length?o:r;if(!i.length)return null;let a=jc(e,s.filters,!1,i);return a?{held:{...Mi(i,null,{entityType:n}),owner:t.label},step:a}:null}function kC(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=vn(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=vn(e,s,{expectedClass:n}),c=!r||a.match&&Uo(e,a.match)===r.id,l=a.match&&c;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:l?[a.match]:[]}}let i=r?cf(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 RC(e,t,n){let s=Uo(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||xc(e,n.id).some(o=>o.id===t.id)}function _C(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Ls(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=tf(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!RC(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let c=oo(e,a.match,Ve[o]),l=r?!c:c,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:l,matches:[a.match],referents:u}}function TC(e,t,n){let s=vn(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=Qt(e,{node:"allOfClass",entityType:t.entityType},n),r=ay(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 AC(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(Qt(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}=cn(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function CC(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};let s=Fd(e,t);if(s)return{compositeMiss:!0,unknownName:s,matches:[]};if(t.node==="exists")return kC(e,t);if(t.node==="qualCheck")return _C(e,t,n);if(t.node==="universal")return TC(e,t,n);if(t.node==="count"){if(t.base.node==="commitFilter"){let l=Dd(e,t.base);return l.pivotResolved?{compositeKind:"count",count:l.matches.length,entityType:t.entityType,matches:[]}:l}let c=AC(e,t.base,n);return c?{compositeKind:"count",count:dC(e,c),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:Qt(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:Qt(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return $O(e,t);if(t.node==="superlative")return SC(e,t);if(t.node==="temporal")return EC(e,t,n);if(t.node==="whereSet")return xC(e,t,n);if(t.node==="recentCommits")return $C(e);if(t.node==="commitFilter")return Dd(e,t);if(t.node==="anaphora")return cy(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return uy(e,t,n);if(t.node==="find"){let{narrow:c,broad:l}=sy(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:c.length?c:l,broad:!c.length&&l.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let o=Qt(e,t,n),r=t.entityType||null,i=Di(r,o,t.node==="qualifier"?"qualifierListing":"compositeSet"),a=o.length?null:Fr(e,t,n);return{compositeKind:"set",matches:o,entityType:r,referents:i,...a?{emptied:a}:{}}}function of(e){let t=e?.node==="clause"?e.clause:null;if(!t?.kind||!t.object||t.modifier==="transitive"||t.shape!=="reverse"&&t.shape!=="forward")return null;let n=t.shape==="forward";return n&&io(t.kind).includes(" ")?null:{kind:t.kind,object:t.object,passive:n,entityType:t.entityType||e.entityType||null}}function rf(e){let t=io(e.kind);return`${t.endsWith("e")?`${t}d`:`${t}ed`} ${OC[e.kind]||"by"} ${e.object}`}function jc(e,t,n,s){let o=a=>s.every(c=>a.every(l=>oo(e,c,Ve[l])));if(n&&!o(t))return null;let r=n||!t.every(a=>Ve[a]?.value===!1)?[]:t.map(gC),i=r.length>0&&r.every(Boolean)&&o(r);return{type:"qual",filters:i?r:t,negated:!n&&!i}}function NC(e,t,n){if(t.kind==="qual")return t.op!=="difference"&&t.op!=="intersection"?null:jc(e,t.filters,t.op==="difference",n);if(t.op!=="difference"&&t.op!=="intersection")return null;let s=t.op==="difference";if(t.ast?.node==="named")return{type:"named",term:t.ast.term,excluded:s};let o=of(t.ast);return o?{type:"clause",clause:o,excluded:s}:null}function Fr(e,t,n){if(!t||typeof t!="object")return null;if(t.node==="boolean"){let{steps:o}=iy(e,t,n),r=[...o].reverse().find(c=>c.before.length&&!c.after.length);if(!r)return Fr(e,o[0]?.atom?.ast,n);let i=NC(e,r.atom,r.before);if(!i)return null;let a=o.indexOf(r)===1?o[0].atom.ast:null;return{held:Mi(r.before,a,t),step:i}}if(t.node==="qualifier"&&t.inner?.node!=="membership"&&t.filters?.length){let o=Qt(e,t.inner,n);if(!o.length)return Fr(e,t.inner,n);let r=jc(e,t.filters,!1,o);return r?{held:Mi(o,t.inner,t),step:r}:null}if(t.node==="reverseSet"||t.node==="forwardSet"||t.node==="membershipSet"){let o=Qt(e,t.inner,n);if(!o.length)return Fr(e,t.inner,n);let r=t.node==="membershipSet"?t.entityType?{type:"membership",entityType:t.entityType}:null:{type:t.node==="reverseSet"?"reverse":"forward",kind:t.kind,entityType:t.entityType||null};return r?{held:Mi(o,t.inner,t),step:r}:null}let s=of(t);return s?{leaf:s}:null}function Mi(e,t,n){let s=of(t);return{count:e.length,entityType:IC(e)||s?.entityType||n?.entityType||null,clause:s,wholeKind:t?.node==="allOfClass",members:e}}function zd(){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 LC(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=ao(e);return n?`${t} in ${n}`:t}function Bd(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(Bd):Array.isArray(e.filters)&&e.filters.some(t=>Ve[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(Bd)}function dy(e,t){return!["Function","Method"].includes(t)||!Bd(e)?null:`This index records tests edges module to module, so a ${de(t,1)} counts as covered exactly when the module it lives in is tested \u2014 ask about that module to see the coverage itself.`}function PC(e){if(e?.node==="qualifier"&&e.inner?.node==="allOfClass"&&e.filters?.length)return{entityType:e.inner.entityType||e.entityType,filters:e.filters,negated:!1};if(e?.node!=="boolean"||e.atoms?.length!==2)return null;let[t,n]=e.atoms;return t.op!=="seed"||t.ast?.node!=="allOfClass"||n.kind!=="qual"||!n.filters?.length||n.op!=="difference"&&n.op!=="intersection"?null:{entityType:t.ast.entityType||e.entityType,filters:n.filters,negated:n.op==="difference"}}function fy(e){let t=PC(e);if(!t)return null;let n=de(t.entityType||"Module",2),s=t.negated?"":"not ";return`Try "which ${n} are ${s}${yn(t.filters)}" for that branch on its own.`}function MC(e,t){return!e||!t?null:t==="Package"?oy(e).length:e.individuals.filter(n=>n.class===t).length}function FC(e){let t=n=>e.entityType?de(e.entityType,n):null;switch(e.type){case"qual":{let n=yn(e.filters);return e.negated?{one:`it is not ${n}`,many:`none of them is ${n}`}:{one:`it is ${n}`,many:`all of them are ${n}`}}case"named":return e.excluded?{one:`it is named "${e.term}"`,many:`all of them are named "${e.term}"`}:{one:`it is not named "${e.term}"`,many:`none of them is named "${e.term}"`};case"clause":{let{clause:n}=e;if(n.passive){let r=rf(n);return e.excluded?{one:`it is ${r}`,many:`all of them are ${r}`}:{one:`it is not ${r}`,many:`none of them is ${r}`}}let s=io(n.kind),o=Dr(n.kind);return e.excluded?{one:`it ${o} ${n.object} too`,many:`all of them ${s} ${n.object} too`}:{one:`it does not ${s} ${n.object}`,many:`none of them ${o} ${n.object}`}}case"reverse":{let n=Dr(e.kind),s=t(1)?`no ${t(1)} in this index`:"nothing in this index";return{one:`${s} ${n} it`,many:`${s} ${n} them`}}case"forward":{let n=Dr(e.kind);return{one:`it ${n} nothing in this index`,many:`none of them ${n} anything in this index`}}case"membership":return{one:`it has no ${t(2)}`,many:`none of them has any ${t(2)}`};case"entityKind":return{one:`it is not a ${t(1)}`,many:`none of them is a ${t(1)}`};default:return null}}function DC(e){let t=de(e.entityType,1),n=de(e.entityType,2);if(e.owner)return{one:`${e.owner} has 1 ${t}`,many:`${e.owner} has ${e.count} ${n}`};if(e.wholeKind)return{one:`The index has 1 ${t}`,many:`The index has ${e.count} ${n}`};if(e.clause?.passive){let o=rf(e.clause);return{one:`1 ${t} is ${o}`,many:`${e.count} ${n} are ${o}`}}if(e.clause)return{one:`1 ${t} ${Dr(e.clause.kind)} ${e.clause.object}`,many:`${e.count} ${n} ${io(e.clause.kind)} ${e.clause.object}`};let s=Zn(e.members);return{one:`1 ${t} matched that far (${s})`,many:`${e.count} ${n} matched that far (${s})`}}function zC(e){if(!e.clause||!e.entityType)return null;let t=de(e.entityType,2);return`Try "${e.clause.passive?`which ${t} are ${rf(e.clause)}`:`which ${t} ${io(e.clause.kind)} ${e.clause.object}`}" for that branch on its own.`}function Ud(e,t,{branchNote:n=null,verdictTail:s=""}={}){if(!e?.held)return null;let o=FC(e.step);if(!o)return null;let r=e.held,i=DC(r),a=r.count===1,c=zC(r)||n;return`${t?`no ${de(t,2)} match that`:"nothing matches that"}${s}. ${a?i.one:i.many}, but ${a?o.one:o.many}.${c?` ${c}`:""}`}function py(e){if(e.passive){let n=e.entityType?`no ${de(e.entityType,2)}`:"nothing";return`${e.object} ${Dr(e.kind)} ${n} in this index`}return`${e.entityType?`no ${de(e.entityType,1)} in this index`:"nothing in this index"} ${Dr(e.kind)} ${e.object}`}function my(e,t){let n=MC(e,t);return n===null?`nothing in the index matches that${t?` (${de(t,2)})`:""}`:n===0?`no ${de(t,2)} in this index`:n===1?`the index has 1 ${de(t,1)}, and it does not match that`:`the index has ${n} ${de(t,2)}, and none of them matches that`}function Cw(e,t,n,s,o){let r=dy(t.inner,n.entityType)||fy(t.inner),i=Ud(n.emptied,n.entityType,{branchNote:r,verdictTail:s});return i||`${n.emptied?.leaf?py(n.emptied.leaf):my(e,n.entityType)}${s}. ${r||o}`}function BC(e,t,n){if(t.compositeMiss){if(t.reason==="no-prev")return{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1};if(t.unknownName){let{term:s,entityType:o,elsewhere:r}=t.unknownName,i=o?de(o,1):"entity",a=r?` "${s}" names ${Is(de(r.class,1))} ${de(r.class,1)} here, not ${Is(i)} ${i}.`:"";return{content:`no ${i} named "${s}" in this index.${a}`,miss:!0,ambiguous:!1}}return{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${zd()}.`,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=de(t.entityType,1),o=de(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=ao(i),c=i.class==="Module"?"":a?`, ${Ii("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${Zn(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=de(t.entityType,t.total),o=bA(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}: ${Zn(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?de(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 ${de(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>ct?` \u2014 narrow with "${de(t.entityType,2)} in <module>"`:"";return{content:`${Zn(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=yn(t.asked),o=Ao[t.relation].nouns[1];return t.pairs.length?{content:`${t.pairs.map(i=>`${i.subject.label||i.subject.id} ${i.reads} ${i.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]}}if(t.compositeKind==="membership"){if(!t.matches.length){let s=Ud(t.emptied,t.entityType);return s?{content:s,miss:!0,ambiguous:!1,matches:[]}:{content:`${t.ownerLabel&&t.entityType?`${t.ownerLabel} has no ${de(t.entityType,2)} in this index.`:Aw(n,t.entityType)} ${no(n)}`,miss:!0,ambiguous:!1,matches:[]}}if(t.inheritedNotOwn){let s=de(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=de(t.entityType,1);if(!t.matches.length)return{content:`no ${de(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?LC(t.matches[0]):Zn(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:de(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,rn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>rn?` \u2026+${t.matches.length-rn} more`:"";return{content:`${t.matches.length} recent commit(s): ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="commitFilter"){if(!t.pivotResolved)return{content:`"${t.pivotRaw}" isn't a recognized date (yyyy-mm-dd) or a known commit \u2014 try "what changed since 2026-06-01" or "what changed before <commit>".`,miss:!0,ambiguous:!1,matches:[]};if(!t.windowCount)return{content:`no commits recorded ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]};if(t.entityType&&t.entityType!=="Commit"&&t.entityType!=="Change"){let i=de(t.entityType,t.matches.length||2);return t.matches.length?{content:`${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${i} changed ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]}}let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,rn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>rn?` \u2026+${t.matches.length-rn} 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 ${de(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:`${Zn(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?de(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:Cw(n,e,t,", so there is no change history to date",no(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. ${no(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let c=(i.attributes||[]).find(d=>d.key==="message")?.value||"",l=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${l}${c?` ("${c}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="whereSet"){if(!t.matches.length)return{content:Cw(n,e,t,", so there is no location to cite",`${zd()}.`),miss:!0,ambiguous:!1,matches:[]};let s=t.matches.map((r,i)=>Wd(r,t.sites[i])||`${r.label} has no recorded code location in this index.`),o=t.matches.filter((r,i)=>Wd(r,t.sites[i]));return{content:s.join(" "),miss:o.length===0,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=dy(e,t.entityType)||fy(e),o=Ud(t.emptied,t.entityType,{branchNote:s});if(o)return{content:o,miss:!0,ambiguous:!1,matches:[]};let r=s||no(n);return{content:`${t.emptied?.leaf?`${py(t.emptied.leaf)}.`:Aw(n,t.entityType)} ${r}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function af(){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). `+zd()}function no(e=null){return e&&xi(e)===0?fd:`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function zo(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Sc(e){if(e.length<5)return e;let t=e.replace(/(ing|ers|ors|er|or)$/,"");return t===e?e:t.length>=3&&t[t.length-1]===t[t.length-2]?t.slice(0,-1):t}function hy(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function UC(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Ni(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(b=>b.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let b=i[2],g=r.filter($=>$.class==="Commit"&&(String($.id).toLowerCase().startsWith(`commit:${b}`)||String($.label).toLowerCase().startsWith(b)));if(g.length===1)return{match:g[0],candidates:[],tier:1,ambiguous:!1};if(g.length>1)return{match:g[0],candidates:g.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(b=>String(b.label).toLowerCase()===o||String(b.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let c=`ext:${o}`,l=null;e:for(let b of e.relations)for(let g of b.edges)if(String(g.object).toLowerCase()===c){l=g.object;break e}if(l&&!n)return{match:{id:l,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(b=>b.trim()).filter(Boolean);if(u.length>1){let b=new Set;for(let g of u){let $=Ni(e,g,{expectedClass:n});$.match&&!$.ambiguous&&b.add($.match.id)}if(b.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],p=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(p){let b=o.split(".").pop();for(let g of r){let $=String(g.label||"").toLowerCase();g.class==="Module"?$.split("/").pop()===o&&d.push({ind:g,score:1e3-Math.abs($.length-o.length)}):$.includes(o)?d.push({ind:g,score:2e3-Math.abs($.length-o.length)}):$.endsWith(`.${b}`)&&d.push({ind:g,score:1500-Math.abs($.length-o.length)})}}else{let b=[...zo(s)],g=o.split(/\s+/).find(E=>E.includes("/")),$=g?g.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,x=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,R=x?UC(s):null;for(let E of r){let k=String(E.label||"").toLowerCase(),O=k.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(O===o){d.push({ind:E,score:5e3});continue}if(o.length>=4&&(O.startsWith(o)||O.endsWith(o))){d.push({ind:E,score:4e3-Math.abs(O.length-o.length)});continue}if(x){let y=hy(E.label);if(y&&y===R){d.push({ind:E,score:5e3});continue}let T=/[/_-]/.test(E.label)||/\.[a-z0-9]+$/i.test(String(E.label||""));if(y&&T&&R.length>=4&&y.includes(R)){d.push({ind:E,score:2e3-Math.abs(y.length-R.length)});continue}}if(E.class==="Module"){let y=Sc(o);if(y!==o&&y===Sc(O)){let T=Os(o);if(Cs(O,o,T)>T){d.push({ind:E,score:3e3-Math.abs(O.length-o.length)});continue}}}if(o.length>=4&&k.includes(o)){d.push({ind:E,score:1e3-Math.abs(k.length-o.length)});continue}let S=zo(E.label),_=b.filter(y=>S.has(y)).length;_>0&&(!$||S.has($))&&d.push({ind:E,score:_/b.length*Ad})}}if(d.sort((b,g)=>g.score-b.score),d.length){let[b,...g]=d,$=g.filter(x=>x.score===b.score),w=b.score>=Ad?g.filter(x=>x.score>=Ad):g;return{match:b.ind,candidates:w.slice(0,4).map(x=>x.ind),tier:3,ambiguous:$.length>0}}let f=p||o.includes("/"),m=null,h=!f&&typeof Lo=="function"?Lo(e.proseIndex,s).filter(b=>!n||e.byId.get(b.id)?.class===n):[];if(h.length){let[b,...g]=h,$=e.byId.get(b.id);if($){let w=g.filter(x=>x.score===b.score);if(m={match:$,candidates:g.slice(0,4).map(x=>e.byId.get(x.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&b.via!=="spell")return m}}if(!i&&o.length>=4){let b=Os(o),g=b+1,$=[];for(let w of r){let x=Cs(String(w.label||"").toLowerCase(),o,b);if(x>0)for(let R of zo(w.label)){if(x<=0)break;x=Math.min(x,Cs(R,o,b))}x<g?(g=x,$=[w]):x===g&&x<=b&&$.push(w)}if(g<=b&&$.length===1)return{match:$[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(g<=b&&$.length>1&&!m){let[w,...x]=$;return{match:w,candidates:x.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function Cd(e,t){let n=hy(t),s=[...zo(t)],o=[];for(let r of zo(e))n.includes(r)||s.some(i=>Sc(i)===Sc(r))||vc.has(r)||yy.has(r)||o.push(r);return o}function wc(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(Cd(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),Cd(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:yn(s.slice(0,4).map(r=>r.label))}:e}let n=Cd(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function vn(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(WC,"").trim(),i=r.match(GC);if(i){let a=r.slice(0,i.index).trim(),c=nt[i[1].toLowerCase()];if(a&&c){let l=wc(Ni(e,a,{expectedClass:c}),a);if(l?.match?.id&&!l.ambiguous)return l}}if(r&&r!==o){let a=wc(Ni(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return wc(Ni(e,t,n),t)}return wc(Ni(e,t,n),t)}function Ls(e,t,n){if(Co.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 vn(e,t)}function cf(e,t,n){let s=[];for(let o of et(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 gy(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||so.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],c=a.flatMap(l=>et(e,l)).filter(l=>l.subject===t.id).map(l=>e.byId.get(l.object)).filter(Boolean);return n&&so.has(n)&&(c=c.filter(l=>l.class===n)),{matches:c,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function qC(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&lf.has(Ow(s.label))).map(s=>({ind:s,named:n.has(Ow(s.label))?1:0,depth:String(s.label).split("/").length,fixture:HC(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 YC(e,t,n){return e!=="reverse"?!1:t==="imports"||t==="calls"?!n||n==="Module":t==="inherits"?!n||n==="Class":!1}function XC(e,t,n){let s=Tt(n).flatMap(a=>et(e,a)),o=a=>{let c=`ext:${String(a.label).toLowerCase()}`;return s.filter(l=>l.object===a.id||String(l.object).toLowerCase()===c).map(l=>e.byId.get(l.subject)).filter(Boolean)},r=new Map,i=o(t);for(;i.length;){let a=i.shift();r.has(a.id)||a.id===t.id||(r.set(a.id,a),i.push(...o(a)))}return[...r.values()].sort((a,c)=>String(a.label).localeCompare(String(c.label)))}function uf(e){return(e?.attributes||[]).find(t=>JC.has(t.prop))?.value||null}function QC(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Is(e)} ${e} in this graph's vocabulary`}function cn(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 CC(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let v=t.candidates.map(j=>{let M=cn(e,j,{contextId:n,prev:s});return{parsed:j,result:M,rendered:Wn(j,M,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:v}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let v=String(t.object||"").trim(),j=v.toLowerCase(),M=(e.individuals||[]).find(z=>{if(!uf(z))return!1;if(String(z.label).toLowerCase()===j)return!0;let K=(z.attributes||[]).find(Y=>Y.key==="token")?.value;return K&&String(K).toLowerCase()===j});if(!M){let z=ey(e,v);return z?{matches:[z.hit],objMatch:z.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:z.text,traversal:`schema lookup for "${v}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${v}"`,ambiguous:!1}}return{matches:[M],objMatch:M,candidates:[],traversal:`schema lookup for "${v}"`,ambiguous:!1}}if(r==="mentions"){let v=String(t.object||"").trim();return{matches:(typeof Lo=="function"?Lo(e.proseIndex,v):[]).map(z=>e.byId.get(z.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${v}"`}}if(r==="where"&&VC.test(String(t.object||"").trim())){let v=qC(e,t.object);return{matches:v,objMatch:v[0]||null,candidates:v.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...lf].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!YC(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 v=Ls(e,t.subject,n),j=Ls(e,t.object,n);if(!v.match||!j.match||v.ambiguous||j.ambiguous)return{matches:[],objMatch:j.match,candidates:j.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(v.unresolvedPronoun||j.unresolvedPronoun)};let[M,z]=[v.match,j.match];i==="touches"&&z.class==="Commit"&&M.class!=="Commit"&&([M,z]=[z,M]);let K=Mr[i],Y=[...new Set(K?[...Tt(i),K]:Tt(i))],X=Y.flatMap(L=>et(e,L)).filter(L=>L.subject===M.id&&L.object===z.id);return{matches:X,answer:t.negated?X.length===0:X.length>0,objMatch:j.match,subjMatch:v.match,candidates:[],traversal:`${Y.join("+")} edge from ${M.label} to ${z.label}`,ambiguous:!1}}let c;if(o)c={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(c=Ls(e,t.object,n),t.altObject&&t.altObject!==t.object){let v=Ls(e,t.altObject,n),j=!!c.match&&!c.ambiguous,M=!!v.match&&!v.ambiguous;!j&&M?c=v:j&&M&&c.match.id!==v.match.id&&(c={...c,ambiguous:!0,candidates:[v.match,...c.candidates||[]]})}if(t.kind==="tests"&&c.match&&!c.ambiguous&&!String(t.object||"").includes("/")){let v=z=>z.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),j=v(String(t.object||"").trim().toLowerCase()),M=(e.individuals||[]).find(z=>{if(z.class!=="Module"||z.id===c.match.id)return!1;let K=String(z.label||"").toLowerCase().split("/").pop();return K!==v(K)&&v(K)===j});M&&(c={...c,ambiguous:!0,candidates:[M,...c.candidates||[]]})}}let{match:l,candidates:u,ambiguous:d,unresolvedPronoun:p,matchedVia:f,unplacedWords:m,nearestLabel:h}=c;if(!l)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:p,unplacedWords:m,nearestLabel:h};if(d){let j=$n([l,...u||[]]).slice(0,ct).map(M=>{let z=cn(e,t,{contextId:n,prev:s,pinnedObjMatch:M});return{candidate:M,result:z,rendered:Wn(t,z,e)}});return{matches:[],objMatch:l,candidates:u,traversal:null,ambiguous:!0,branches:j}}if(r==="where"){let v=(l.attributes||[]).find(j=>j.key==="site")?.value||null;return{matches:[l],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whereShape:!0,site:v,traversal:v?`site attribute of ${l.label}`:`class + defining module of ${l.label}`}}if(r==="when"){let v=z=>String((z.attributes||[]).find(K=>K.key==="date")?.value||""),j;if(l.class==="Commit")j=[l];else{let z=["touches","touchesSymbol"].flatMap(Y=>et(e,Y)).filter(Y=>Y.object===l.id),K=new Set;j=[];for(let Y of z){if(K.has(Y.subject))continue;K.add(Y.subject);let X=e.byId.get(Y.subject);X&&X.class==="Commit"&&j.push(X)}j.sort((Y,X)=>v(X).localeCompare(v(Y)))}let M=j.length&&v(j[0])?[{kind:"event",class:"Commit",label:j[0].label,ids:[j[0].id],attrs:{date:v(j[0]).slice(0,10)},lane:"when"}]:[];return{matches:j,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whenShape:!0,referents:M,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit date first`}}if(r==="whoLast"){let v=Y=>String((Y.attributes||[]).find(X=>X.key==="date")?.value||""),j=["touches","touchesSymbol"].flatMap(Y=>et(e,Y)).filter(Y=>Y.object===l.id),M=new Set,z=[];for(let Y of j){if(M.has(Y.subject))continue;M.add(Y.subject);let X=e.byId.get(Y.subject);X&&X.class==="Commit"&&z.push(X)}z.sort((Y,X)=>v(X).localeCompare(v(Y)));let K=z.length&&v(z[0])?[{kind:"event",class:"Commit",label:z[0].label,ids:[z[0].id],attrs:{date:v(z[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:z,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whoLastShape:!0,referents:K,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit's author`}}if(i==="touches"&&l.class==="Commit")return gy(e,l,a,{candidates:u,ambiguous:d,matchedVia:f});if(r==="forward"){let v=Mr[i],M=!!(v&&l.class&&so.has(l.class))?[...new Set([...Tt(i),v])]:Tt(i);if(a&&a!=="Change"){let H=qd(e,M),W=Td[a];if(H.size&&!H.has(a)&&!(W&&H.has(W)))return{matches:[],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,forwardGrainMiss:!0,wantClasses:[...H],traversal:`${M.join("+")} edges where subject = ${l.label} (grain mismatch: this "${i}" relation never targets a ${Ns(a)})`}}let K=M.flatMap(H=>et(e,H)).filter(H=>H.subject===l.id).map(H=>e.byId.get(H.object)).filter(Boolean),Y=$n(K),X=Y,L="";if(a&&a!=="Change"){X=Y.filter(W=>W.class===a);let H=Td[a];if(!X.length&&H){let W=Y.filter(I=>I.class===H);W.length&&(X=W,L=`, widened to ${H} subjects (no ${a} recorded)`)}}return{matches:X,objMatch:l,candidates:u,traversal:`${M.join("+")} edges where subject = ${l.label}${L}`,ambiguous:d,matchedVia:f}}if(t.modifier==="transitive")return i==="inherits"?{matches:XC(e,l,i),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`subclass closure over inherits edges from ${l.label}`}:{matches:Ar(e,l,{maxDepth:Iw,includeCycleReturn:!0}).flat().map(M=>e.byId.get(M.id)).filter(Boolean),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`reverse dependency closure over imports+calls edges from ${l.label} (impactClosure, maxDepth=${Iw})`};let b=Mr[i]||Tt(i).find(v=>Mw.has(v))||null,g=!!(l.class&&so.has(l.class));if(b&&(so.has(a)||g)){let v=et(e,b).filter(L=>L.object===l.id),j=$n(v.map(L=>e.byId.get(L.subject)).filter(Boolean)),M=!a||a==="Change"?j:j.filter(L=>L.class===a),z="",K=Td[a];if(!M.length&&K){let L=j.filter(H=>H.class===K);L.length&&(M=L,z=`, widened to ${K} subjects (no ${a} recorded)`)}let Y=(i==="touches"||i==="calls"||i==="uses")&&l.class==="Class"&&!et(e,"contains").some(L=>L.subject===l.id),X=Y?e.byId.get(Uo(e,l)||""):null;if(M.length||!(Y&&X))return{matches:M,objMatch:l,candidates:u,traversal:`${b} edges where object = ${l.label}${z}`,ambiguous:d,matchedVia:f}}let $=l,w=u,x=d,R=f,E="",k=Uw(e,i);if(k&&$.class&&$.class!==k){let v=vn(e,t.object,{expectedClass:k});if(v.match&&!v.ambiguous)$=v.match,w=v.candidates,x=v.ambiguous,R=v.matchedVia;else if(k==="Module"){let j=Uo(e,$),M=j&&e.byId.get(j);if(M)E=`, refined from ${$.label} to its containing module`,$=M;else return{matches:[],objMatch:$,candidates:w,ambiguous:x,matchedVia:R,wrongGrainMiss:!0,wantClass:k,traversal:`"${t.object}" resolved to ${Ns($.class)} ${$.label} (grain mismatch: this "${i}" question needs a ${Ns(k)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:$,candidates:w,ambiguous:x,matchedVia:R,wrongGrainMiss:!0,wantClass:k,traversal:`"${t.object}" resolved to ${Ns($.class)} ${$.label} (grain mismatch: this "${i}" question needs a ${Ns(k)})`}}let O=Tt(i).flatMap(v=>et(e,v)).filter(v=>v.object===$.id);i==="cochange"&&(O=O.concat(Tt(i).flatMap(v=>et(e,v)).filter(v=>v.subject===$.id).map(v=>({...v,subject:v.object,object:v.subject}))));let S="";if(!O.length&&$.class){let v=`ext:${String($.label).toLowerCase()}`;O=Tt(i).flatMap(j=>et(e,j)).filter(j=>String(j.object).toLowerCase()===v),O.length&&(S=` (by name, via unresolved ${v} references)`)}let _=[],y=new Set;for(let v of O){let j=e.byId.get(v.subject);j&&!y.has(j.id)&&(y.add(j.id),_.push(j))}let T,C="";if(!a||a==="Change")T=_;else{let v=_.filter(M=>M.class===a),j=v.length||!Zw(i,a)?[]:Qw(e,new Set([$.id]));if(v.length)T=v;else if(j.length)T=j,C=`, falling back to ${$.label}'s recorded source site (no defines edge)`;else if(a!=="Module"&&_.some(M=>M.class==="Module")){let M=new Set(_.filter(z=>z.class==="Module").map(z=>z.id));T=cf(e,M,a),C=`, then ${Ns(a)} defined in the matched module(s)`}else T=[]}return{matches:T,objMatch:$,candidates:w,traversal:`${Tt(i).join("+")} edges where object = ${$.label}${S}${C}${E}`,ambiguous:x,matchedVia:R}}function ao(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 Wd(e,t){let n=String(t||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(n){let o=n[3]&&n[3]!==n[2]?`lines ${n[2]}-${n[3]}`:`line ${n[2]}`;return`${Gd(e)} is defined in ${n[1]} at ${o}.`}let s=ao(e);return s?`${Gd(e)} is defined in ${s} (no line span recorded in this index).`:null}function Gd(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function ZC(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function yn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Li(e){let t=e.object??e.subject??"?";return`${e.entityType?de(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function io(e){return To[e]?.bare||e}function Dr(e){return dg(e)}function eO(e){let t=io(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function tO(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=de(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 ${io(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 ${io(o.kind)} ${JSON.stringify(String(r))}`}function by(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Li).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>by(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?tO(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 ":""}${Do(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?de(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${Do(e.kind)}`:`${r}${Do(e.kind)} "${e.object}"`}return{english:o,machine:s}}function Wn(e,t,n=null){let s=wy(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function wy(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${af()}`,miss:!0,ambiguous:!1};if(e.node)return BC(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
55
- ${t.branches.map((c,l)=>`${l+1}) as ${Li(c.parsed)}: ${c.rendered.content}`).join(`
54
+ \u2026+${o.length-dd} more`:"")}var fd,Kg,rb,Yg,zR,UR,cd,WR,oc,GR,VR,KR,cb,HR,qR,YR,XR,JR,QR,ZR,e_,t_,n_,s_,o_,r_,i_,a_,c_,l_,u_,d_,f_,p_,m_,h_,g_,b_,Xg,w_,y_,lb,ub,db,$_,v_,E_,x_,S_,Qg,Zg,R_,eb,nc,tb,nb,sb,ji,qe,T_,A_,$b,C_,rn,Sb,O_,Nb,N_,L_,P_,M_,F_,D_,z_,B_,ld,ob,ac,U_,ud,dd,Fe=P(()=>{Bn();Wn();od();Ei();Rs();fd="This store holds no code index, so it records no modules or commits to look through.",Kg={"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"};rb=e=>/^(git|turn):/.test(String(e||""));Yg=30,zR=8;UR=2,cd=25,WR=3;oc=10,GR=8,VR=3,KR=2,cb=5,HR=4,qR=.2,YR=.35,XR=.15,JR=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),QR=.2,ZR=.35,e_=.2,t_=.35,n_=e=>/\.cs$/i.test(e),s_=e=>/^I[A-Z]/.test(String(e||"")),o_=.2,r_=.35,i_=50,a_=.2,c_=.35,l_=.5,u_=cb,d_=3,f_=4,p_=1,m_=.9,h_=.5,g_=.2,b_=.35,Xg=4,w_=2,y_=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],lb=3,ub=12,db=.9,$_=["imports","calls","callsSymbol","inherits"],v_=.5,E_=.6,x_=.2,S_=.35;Qg=128,Zg=4,R_=64,eb=250,nc=class extends Error{};tb=new WeakMap;nb=40,sb=40,ji=30;qe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";T_=25,A_=15;$b=40,C_="tests edges are recorded module to module, so this is module-grain coverage.";rn=15;Sb=new Set(["Function","Method"]);O_=8;Nb={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};N_=8,L_=16,P_=4,M_=6,F_=12,D_=2,z_=8,B_=3,ld=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),ob=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),ac=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},U_=e=>{let t=new Map,n=e[0]??0,s=0;for(let o of e){let r=(t.get(o)||0)+1;t.set(o,r),r>s&&(s=r,n=o)}return n};ud=20;dd=40});function at(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Hb(e){let t=String(e||"");return Bb&&(t=t.replace(Bb," ")),t.replace(/\s+/g," ").trim()}function qb(e){let t=String(e||"");t=t.replace(dT," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(iT);if(o&&(t=o[1].trim()),o=t.match(aT),o&&(t=o[1].trim()),o=t.match(Ub),o&&(t=o[1].trim()),o=t.match(Wb),o&&(t=o[1].trim()),o=t.match(Gb),o&&(t=o[1].trim()),o=t.match(uT),o&&(t=o[1].trim()),o=t.match(Vb),o&&(t=o[1].trim()),o=t.match(fT),o&&(t=o[1].trim()),o=t.match(pT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(mT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(hT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(gT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(bT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(wT),o&&to.test(o[1].trim())&&(t=o[1].trim()),o=t.match(yT),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match($T),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(vT),o&&(t=`what do you ${o[1].toLowerCase()} about ${o[2].trim()}`),o=t.match(ET),o){let r=o[1].trim();rT(r)||(t=!xT.test(r)&&(nT.test(r)||to.test(r))?r:`describe ${r}`)}if(o=t.match(ST),o){let r=o[1].trim();(to.test(r)||jT.test(r)||Vb.test(r)||Ub.test(r)||Gb.test(r)||Wb.test(r)||kT.test(r))&&(t=r)}if(t===s)break}return t}function MT(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(LT);if(o&&(t=o[1].trim()),o=t.match(PT),o&&(t=o[1].trim()),t===s)break}return t}function DT(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(FT);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function Ri(e){let t=String(e||"").trim(),n=t.match(UT)||t.match(WT);return n?n[1].trim():null}function $d(e){let t=String(e||""),n=t.match(BT);if(n){let o=Xb[n[1].toLowerCase()],r=Yb[n[2].toLowerCase()],i=n[5]||n[6],a=n[4]?n[4].toLowerCase():wd[i.toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${a}`}let s=Ri(t);return s?`which modules transitively import ${s}`:t}function _i(e){return String(e||"").replace(q_,t=>Ju[t.toLowerCase()])}function Fo(e){let t=_i(e);return t=t.replace(Y_,n=>Qu[n.toLowerCase()]),t=t.replace(X_,n=>Zu[n.toLowerCase()]),t=t.replace(J_,"with"),t=t.replace(Q_,(n,s)=>`${s} for`),t=t.replace(Z_,(n,s)=>`for ${s}`),t=t.replace(eT,(n,s)=>s),t=t.replace(GT,"$1$2"),t=t.replace(hg,"$1ing"),t=qb(t),t=DT(t),t=MT(t),t=$d(t),t=Hb(t),t=gn(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ti(e){for(let t of[...bg,...gg]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function vd(e){for(let t of VT){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Zb(e){let t=String(e||"").match(KT);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var H_,q_,Kb,Y_,X_,J_,Q_,Z_,eT,tT,Bb,nT,to,sT,oT,rT,ki,iT,aT,cT,lT,Ub,Wb,Gb,uT,dT,fT,pT,mT,hT,gT,bT,wT,yT,$T,vT,ET,xT,ST,jT,kT,Vb,lc,RT,_T,TT,AT,CT,OT,IT,JU,yd,NT,QU,ZU,e2,LT,PT,FT,Yb,Xb,zT,wd,BT,Jb,Qb,UT,WT,GT,VT,KT,ft,an,be,kn=P(()=>{Zn();H_=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b","gi"),q_=H_(Ju),Kb=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(at).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Y_=Kb(Qu),X_=Kb(Zu),J_=/(?<=^|\s)w\/(?=\s|$)/gi,Q_=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,Z_=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,eT=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,tT=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),Bb=wi.length?new RegExp("\\b("+[...wi].sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b\\s*,?","gi"):null;nT=new RegExp("\\b(?:"+Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|")+")\\b","i"),to=/^(?:which|what|who|whose|where|when|why|how)\b/i,sT=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),oT=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,rT=e=>{if(oT.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return sT.has((t[t.length-1]||"").toLowerCase())},ki="[,.;:!]|\u2014|\u2013|-",iT=/^(?: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,aT=/^(?: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,cT="ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|another\\s+one",lT="(?:just\\s+)?(?:one|another)\\s+more",Ub=new RegExp(`^(?:(?:${cT})[\\s,]+|(?:${lT})\\s*(?:${ki})\\s*)+(.+)$`,"i"),Wb=/^(?: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,Gb=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,uT=/^(?:please[\s,]+)+(.+)$/i,dT=/,?\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,fT=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,pT=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,mT=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,hT=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,gT=/^do\s+you\s+know\s+(.+?)\??$/i,bT=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,wT=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,yT=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,$T=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,vT=/^what\s+you\s+(know|remember)\s+about\s+(.+?)\??$/i,ET=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,xT=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,ST=/^(?:and|also|so|then|now|but)\s+(.+)$/i,jT=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,kT=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,Vb=/^(?:(?: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;lc=e=>[...e].sort((t,n)=>n.length-t.length).map(at).join("|"),RT=Object.freeze(["oh","ah","aha","ooh","ohh","wow","huh","hm","hmm","mm","mmm","heh","ha","yay","ugh","oof","phew","whoa","oops","yikes","oi"]),_T=Object.freeze(["nice","cool","great","neat","lovely","interesting","good","ok","okay","fair enough","makes sense","i see","got it","fine"]),TT=Object.freeze(["um","umm","uhm","uh","uhh","er","err","erm","ehm","eh","well","anyway","anyhow","anyways","regardless","moving on"]),AT=Object.freeze(["quick question","quick q","one quick question","just a quick question","random question","random thing","one more random thing","another random thing","one more thing","one last thing","last thing","one more question","side note","side question","sidebar","off topic","unrelated","on a different note","different topic","changing the subject","new topic","just curious","out of curiosity","curious","genuinely curious","while i'm here","while i have you","before i forget"]),CT=`(?:${lc(RT)})(?:\\s+(?:${lc(_T)}))?\\s*(?:${ki})\\s*`,OT=`(?:${lc(TT)})\\s*(?:(?:${ki})\\s*|\\s+)`,IT=`(?:${lc(AT)})\\s*(?:${ki})\\s*`,JU=new RegExp(`^(?:sorry\\s*(?:${ki})?\\s*)?(?:${CT}|${OT}|${IT})+`,"i"),yd="what|who|which|where|when|why|how",NT="is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must",QU=new RegExp(`\\b(?:an?|the)?\\s*(?:${yd})\\s*\\?\\s*$`,"i"),ZU=new RegExp(`^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:${yd})\\b`,"i"),e2=new RegExp(`\\b(?:${yd})\\s+(?:i|you|he|she|it|we|they)?\\s*(?:${NT})\\b`,"i"),LT=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,PT=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;FT=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;Yb=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),Xb=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),zT="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",wd=Object.freeze({tests:"tested","a test":"tested","any tests":"tested",coverage:"covered","test coverage":"covered"}),BT=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(Xb).join("|")+")\\s+("+Object.keys(Yb).join("|")+")\\s+(.+?),\\s*(?:(?:is|are)\\s+(?:it|that|they|this)\\s+("+zT+")|(?:has|have)\\s+(?:it|that|they|this)\\s+got\\s+("+Object.keys(wd).join("|")+")|(?:does|do)\\s+(?:it|that|they|this)\\s+have\\s+("+Object.keys(wd).join("|")+"))\\??$","i"),Jb="(?:were|was)\\s+(?:deleted|removed)",Qb="what\\s+(?:would|might|could)\\s+(?:break|fail|be\\s+affected)",UT=new RegExp("^if\\s+(.+?)\\s+"+Jb+",?\\s*"+Qb+"\\??$","i"),WT=new RegExp("^"+Qb+"\\s+if\\s+(.+?)\\s+"+Jb+"\\??$","i");GT=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Yu.map(at).join("|")})(\\s*[?.!]*)$`,"i");VT=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+(?:${Xu.map(at).join("|")})\\??$`,"i"),to:e=>`what is a ${e[1]}`},{re:/^(?:which|what)\s+(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:are|is)\s+(public|private|protected|static|abstract|constant|exported|re-?exported|tested|covered|untested|uncovered)\??$/i,to:e=>`${e[2].toLowerCase()} ${e[1].toLowerCase()}`},{re:/^what\s+(?:is|are)\s+(not\s+)?(tested|untested|covered|uncovered)\??$/i,to:e=>{let t=e[2].toLowerCase();return`${e[1]?t==="tested"?"untested":t==="covered"?"uncovered":t:t} modules`}},{re:/^what\s+does\s+(.+?)\s+changes?\s+together\s+with\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^what\s+changes?\s+together\s+with\s+(.+?)\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^how\s+many\s+commits\s+(?:are|were)\s+(?:recorded|logged)\s+(?:for|against)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`how many commits touched ${e[1]}`},{re:/^who\s+(?:wrote|authored)\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^who\s+is\s+the\s+authors?\s+of\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^(?:does|do)\s+(?!.*\bnot\b)(.+?)\s+have\s+(?:any\s+)?(?:tests?|test\s+coverage|coverage)\??$/i,to:e=>`what tests ${e[1]}`},{re:/^(?:is|are)\s+(?!.*\bnot\b)(.+?)\s+tested\??$/i,to:e=>`what tests ${e[1]}`},{re:/^what\s+needs\s+(?:to\s+be\s+)?(?:a\s+)?(?:tested|tests?|testing|coverage|covering)\??$/i,to:()=>"untested modules"},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:(?:that|which)\s+)?(?:have|has|having|with)\s+no\s+tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+without\s+(?:any\s+)?tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:new RegExp(`^(?:do|does)\\s+(.+?)\\s+(${tT})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);KT=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");ft=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"]),an=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),be=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var tw,ew=P(()=>{tw={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chappe","chapped","chappes","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seiding","seifing","seiing","seined","seiths","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Cs(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let c=1;c<=t.length;c+=1){let l=e[r-1]===t[c-1]?0:1,u=Math.min(o[c]+1,i[c-1]+1,o[c-1]+l);r>1&&c>1&&e[r-1]===t[c-2]&&e[r-2]===t[c-1]&&(u=Math.min(u,s[c-2]+l)),i[c]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function xd(e){return/^[a-z]+$/.test(e)&&!ft.has(e)&&!Ed.has(e)}function ow(e){return XT(e)?null:uc(e,sw,Os(e))}function uc(e,t,n=Os(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Cs(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 qT,Os,Ed,nw,sw,YT,XT,Ir=P(()=>{Zn();ew();kn();qT=["used"];Os=e=>e.length<=5?1:2,Ed=new Set([...Object.keys(he),...Object.keys(nt),...Object.keys(bn),...qT].flatMap(e=>e.split(" "))),nw=4,sw=[...new Set([...Object.keys(he),...Object.keys(bn)].flatMap(e=>e.split(" ")).filter(e=>e.length>=nw))],YT=new Set(tw.words),XT=e=>YT.has(e)});function Nr(e){for(let t of eA){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var dc,JT,QT,ZT,Sd,eA,rw,fc=P(()=>{Zn();kn();dc=Object.keys(he).sort((e,t)=>t.length-e.length).map(at).join("|"),JT=Object.keys(nt).sort((e,t)=>t.length-e.length).map(at).join("|"),QT=Object.keys(bn).sort((e,t)=>t.length-e.length).map(at).join("|"),ZT=Oo.slice().sort((e,t)=>t.length-e.length).map(at).join("|"),Sd=(e,t)=>e==="defines"&&bi.has(t),eA=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${dc})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return Sd(n,t)?null:Xs({shape:"ask",entityType:null,modifier:"direct",kind:n,subject:e[1].trim(),object:e[3].trim()},t)}},{name:"reverse",re:new RegExp(`^which\\s+(${JT})\\s+(?:(${QT})\\s+)?(${dc})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=he[t];return Sd(n,t)?null:Xs({shape:"reverse",entityType:nt[e[1].toLowerCase()],modifier:e[2]?bn[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()},t)}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${dc})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=he[t];return Sd(n,t)?null:Xs({shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()},t)}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${ZT})\\??$`,"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=gn(e[2].trim()),s=!/\s/.test(n);if(t==="the"&&!s||!t&&!nt[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&mg.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:Js(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${Dn.map(at).join("|")})\\??$`,"i"),build:e=>({shape:"mentions",entityType:null,modifier:"direct",kind:"mentions",object:e[1].trim()})},{name:"where",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)(?:\\s+(?:${hn.map(at).join("|")}))?\\??$`,"i"),build:e=>({shape:"where",entityType:null,modifier:"direct",kind:"where",object:e[1].trim()})},{name:"when",re:new RegExp(`^when\\s+(?:did|does|do|was|were|is)\\s+(.+?)\\s+(?:last\\s+)?(${dc})\\??$`,"i"),build:e=>he[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];rw={id:"grammar",class:"graph-query",run(e){let t=Nr(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function iw(e){let t=e.trim().split(/\s+/);return t.length>1&&Wa.has(t[0].toLowerCase())}function oA(e){return he[e.trim().toLowerCase()]==="calls"}function Mt(e,t,n=null){let s=Object.keys(t).sort((o,r)=>r.split(" ").length-o.split(" ").length);for(let o of s){let r=o.split(" ");for(let i=0;i<=e.length-r.length;i+=1)if(!(n&&r.some((a,c)=>n.has(i+c)))&&r.every((a,c)=>e[i+c]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Ci(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(S=>S.toLowerCase());if(s.includes("where")&&!Mt(s,he)){let S=s.some(T=>Dn.includes(T)),_=new Set([...hn,...Dn]),y=n.filter((T,C)=>!ft.has(s[C])&&!_.has(s[C])).join(" ").trim();if(y){let T=S?"mentions":"where";return{shape:T,entityType:null,modifier:"direct",kind:T,object:y}}}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?he[s[S-1]]:null)==="touches"){let y=n.slice(1,S-1).filter((T,C)=>!ft.has(s[1+C])).join(" ").trim();if(y)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:y}}}let r=s,i=Mt(s,he);if(!i&&t){let S=s.map(_=>{if(!xd(_))return _;let y=t.lemma(_);return Ed.has(y)?y:_});i=Mt(S,he),i&&(r=S)}let a=null;if(!i){let S=s.map(_=>_.length>=4&&xd(_)&&ow(_)||_);if(i=Mt(S,he),i){r=S;let _=s.slice(i.start,i.end).findIndex((T,C)=>T!==S[i.start+C]),y=i.start+Math.max(_,0);a={from:s[y],to:S[y]}}}let c=!1;if(!i)for(let S=0;S<s.length;S+=1){let _=Qs[s[S]];if(!(_&&s[S]==="used"&&s[S+1]==="for")&&_&&s.slice(0,S).some(y=>Ai.has(y))){i={kind:_,start:S,end:S+1},c=!0;break}}if(!i)return null;!c&&i.end-i.start===1&&Qs[s[i.start]]&&s.slice(0,i.start).some(S=>Ai.has(S))&&(c=!0);let l=S=>a?{...S,fuzzyVerb:a}:S;if(t&&i.end-i.start===1){let S=i.start,_=s[S-1];if((_==="the"||_==="these"||_==="those")&&s[S+1]==="of"&&t.posTags(n)[S]==="NOUN"){let T=n.slice(S+2).filter((C,v)=>!ft.has(s[S+2+v])).join(" ").trim();if(T)return l({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:T})}}let u=new Set,d=S=>{if(S)for(let _=S.start;_<S.end;_+=1)u.add(_)};d(i);for(let[S,_]of Object.entries(he)){if(_!==i.kind)continue;let y=S.split(" "),T=i.end;if(y.every((C,v)=>r[T+v]===C)){d({start:T,end:T+y.length});break}}let p=Mt(r,nt,u);d(p);let f=Mt(r,bn,u);d(f);let m=(S,_)=>n.slice(S,_).filter((y,T)=>!u.has(S+T)&&!ft.has(s[S+T])).join(" ").trim(),h=m(0,i.start),b=m(i.end,n.length);c&&!s.includes("by")&&sA.has(b.toLowerCase())&&(b="");let g=i.kind,$=p?nt[r.slice(p.start,p.end).join(" ")]:null,w=f?bn[r.slice(f.start,f.end).join(" ")]:"direct",x=r.slice(i.start,i.end).join(" ");if(g==="touches"&&s.includes("when")){let S=h||b;if(S)return l({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:S})}if(g==="touches"&&s.includes("who")&&s.includes("last")){let S=h||b;if(S)return l({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:S})}let R=s.indexOf("by"),E=s.slice(0,i.start).findIndex(S=>Ai.has(S)),k=E>=0,O=k&&E>R;if(R>=0&&!u.has(R)&&k){let S=(T,C)=>n.slice(T,C).filter((v,j)=>{let M=T+j,z=s[M];return!u.has(M)&&!ft.has(z)&&z!=="by"&&!Ai.has(z)&&!tA.has(z)&&!nA.has(z)}).join(" ").trim(),[_,y]=O?[S(E+1,n.length),S(R+1,E)]:[S(0,R),S(R+1,n.length)];if(_&&y)return g==="defines"&&bi.has(r.slice(i.start,i.end).join(" "))?null:l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:y,object:_});if(y)return l({shape:"forward",entityType:$,modifier:w,kind:g,object:y});if(_)return l({shape:"reverse",entityType:$,modifier:w,kind:g,object:_})}if(c&&R<0&&b&&s[i.start]==="called")return null;if(h&&b){if(g==="defines"&&bi.has(x)||g==="calls"&&(iw(b)||oA(h)))return null;let S=c&&R<0?Ga[`${s[i.start]} ${s[i.end]}`]:null;return S&&S.role==="agent"&&S.kind===g?l({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:b,object:h}):l(Xs({shape:"ask",entityType:null,modifier:"direct",kind:g,subject:h,object:b},x))}if(b){if(g==="calls"&&iw(b))return null;let S=p&&p.start>=i.end?null:$;return l(Xs({shape:"reverse",entityType:S,modifier:w,kind:g,object:b},x))}if(g==="inherits"&&!h&&p&&p.start===i.end){let S=r.slice(p.start,p.end).join(" ");if(S)return l({shape:"reverse",entityType:null,modifier:w,kind:g,object:S})}if(h&&!b&&k&&i.end-i.start===1&&Qs[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(g==="touches")return l({shape:"when",entityType:null,modifier:"direct",kind:g,object:h});let S=Ai.has(s[0]);return l({shape:"reverse",entityType:$,modifier:w,kind:g,object:h,...S?{polar:!0}:{}})}return h?l(Xs({shape:"forward",entityType:$,modifier:"direct",kind:g,object:h},x)):null}var Ai,tA,nA,sA,aw,pc=P(()=>{Zn();kn();Ir();Ai=new Set(["is","are","was","were","be","been","being","get","gets","got"]),tA=new Set(["which","what","who","whom","whose"]),nA=new Set(Ss.map(e=>e.toLowerCase())),sA=new Set(["recently","lately","yet","already","ever","again"]);aw={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Ci(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function iA(e,t,n){if(!n||typeof n.posTags!="function"||!t.length)return[];let s=new Set(t.map(i=>i.toLowerCase())),o;try{o=n.posTags(e)}catch{return[]}let r=[];for(let i=0;i<e.length;i+=1){let a=e[i],c=a.toLowerCase();!/^[a-z]+$/.test(a)||cw.has(c)||!s.has(c)||o[i]==="VERB"&&r.push(c)}return r}function aA(e,t=null){let n=an(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!cw.has(a)&&(rA.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=iA(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var cw,rA,lw,uw=P(()=>{Zn();kn();fc();pc();cw=new Set([...ft,...be(Co),...be(Object.keys(he)),...be(Object.keys(nt)),...be(Object.keys(bn)),...be(Object.keys(Ve)),...be(Io),...be(No),...be(Object.keys(Jn)),...be(Object.keys(Qn)),...be(Object.keys(Zs)),...be(Ss),...be(yi),...be(Oo),...be(hn),...be(Dn),...be(Sn),...be(Object.keys(jr))]),rA=new Set([...be(wi),...be(Va)]);lw={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Nr(e))return null;let{text:n,dropped:s,maybeNoise:o}=aA(e,t.nlp||null);if(!s.length||!n)return null;let r=Nr(n)||Ci(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 dw=P(()=>{});var mc,hc=P(()=>{mc=()=>{}});function pw(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Lr(e.subject)===Lr(t.subject)&&Lr(e.object)===Lr(t.object):Lr(e.object)===Lr(t.object)}function jd(e){let t=(e||[]).filter(l=>l&&Array.isArray(l.candidates)&&l.candidates.length);if(!t.length)return null;let n=[];for(let l of t)for(let u of l.candidates)!u||!u.parsed||n.push({parsed:u.parsed,confidence:typeof u.confidence=="number"?u.confidence:.5,note:u.note||null,via:u.via||null,strategyId:l.strategyId,class:l.class});if(n.some(l=>!mw(l))&&(n=n.filter(l=>!mw(l))),!n.length)return null;let s=new Map;for(let l of n)s.has(l.class)||s.set(l.class,[]),s.get(l.class).push(l);let o=[];for(let[l,u]of s){let d=[];for(let p of u){let f=d.find(m=>pw(m.parsed,p.parsed)&&m.via===p.via);if(f){f.agreed+=1,f.confidence=Math.max(f.confidence,p.confidence),fw(p.parsed)<fw(f.parsed)&&(f.parsed=p.parsed);continue}d.push({...p,agreed:1})}d.length&&o.push({class:l,candidates:d})}if(!o.length)return null;let r=l=>Math.max(...l.candidates.map(u=>u.confidence)),i=o[0];for(let l of o)r(l)>r(i)&&(i=l);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(l=>l.parsed)},c=o.filter(l=>l!==i).map(l=>l.candidates[0]).filter(l=>!i.candidates.some(u=>pw(u.parsed,l.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:c}}function uA(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 hw(e,{describe:t=uA,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 Lr,cA,fw,lA,mw,kd=P(()=>{Lr=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),cA=/^\s*(?:the|a|an)\s+/i,fw=e=>[e?.subject,e?.object].filter(t=>cA.test(String(t||""))).length;lA=new Set(["fuzzy","lemma","spell"]),mw=e=>lA.has(e.via)});function gc(e){Rd=e}function bc(){return typeof Rd=="function"?Rd():null}var Rd,Pr=P(()=>{Rd=null});function ww(e,t={},n=fA){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 dA,fA,yw=P(()=>{kn();fc();pc();uw();dw();hc();kd();Pr();dA=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],fA=[rw,aw,lw,...dA]});function Is(e){return pA.test(String(e||"").trim())?"an":"a"}function wc(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 Mr(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Oi(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 pA,Ii=P(()=>{pA=/^[aeiou]/i});var Ni,_d=P(()=>{Ni=(e,t,n)=>n});var xy={};Lt(xy,{DYNAMIC_TAIL_OK_RE:()=>pf,applyNegationFrames:()=>Ti,ask:()=>co,classDisplayName:()=>Ns,degreeMetric:()=>uy,metaFallbackEntityAnswer:()=>ty,normalizeQuery:()=>Fo,parseQuery:()=>Bo,parseQueryFull:()=>Kd,render:()=>Gn,rephraseHint:()=>af,resolveObject:()=>vn,traverse:()=>cn,worldRelationGraphPayload:()=>xO});function et(e,t){let n=$w.get(e);n||(n=new Map,$w.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(As(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function de(e,t){let[n,s]=Id[e]||["result","results"];return t===1?n:s}function zi(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${de(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function Ns(e){let t=String(e||"");if(typeof zn=="function"){let n=zn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function Do(e){return hA[e]||e}function $A(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||yA.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return be(Oo).includes(o)?t:e}function EA(e,t){if(!e||e.shape!=="where"||e.altObject||!vA.test(t))return e;let n=Ua(t),s=Ua(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=an(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||ft.has(i)||he[i]||i.endsWith("ing"))return o;let a=an(n).map(l=>l.toLowerCase());for(;a.length&&Dw.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let c=r.slice(0,-1).join(" ");return{...e,object:c,altObject:s,verb:i}}function Bo(e,{nlp:t=void 0}={}){return Kd(e,{nlp:t}).parsed}function Kd(e,{nlp:t=void 0}={}){let n=t===void 0?bc():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=vd(Ti(Fo(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=SA(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=jd(ww(o,{nlp:n,raw:s}));return i?{parsed:EA($A(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function xc(e,t){return t.length&&Hd.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function Br(e,t){return Nr(e)||Ci(e,t)}function SA(e,t){let n=an(e),s=n.map(o=>o.toLowerCase());return YA(n,s)||JA(n,s)||_A(n,s,t)||Uw(e,t,0)||QA(n,s,t)||AA(n,s,t)||DA(n,s,t,0)||GA(n,s,t,0)||Kw(n,s)||HA(n,s,t)||ZA(n,s,t)||nC(n,s,t)||oC(n,s,t,0)||tC(n,s,t,0)||Gw(n,s,t,0)||Yd(n,s,t,0)||Vw(n,s,t,0)||NA(n,s,t)||kA(n,s)||Jw(n,s,t,0)}function kA(e,t){let n=0;jA.has(t[n])&&(n+=1);let s=dt(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?Ga[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,c=-1,l;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){c=m,l=h;break}}if(c<0)return null;let u=e.slice(a,c).join(" ").trim(),d=e.slice(c+2).join(" ").trim();if(!u||!d)return null;let p=(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},f=p(i,u);return f.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:f}},{op:"intersection",kind:"set",ast:{node:"clause",clause:p(l,d)}}]}}function $c(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function _A(e,t,n){if(!["do","does","did"].includes(t[0])||!RA.has(t[1]))return null;let s=dt(t[2]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;if(o==="Change")return{node:"miss",reason:`"${t[2]}" isn't an enumerable kind \u2014 a universal check needs a concrete kind (functions, classes, modules, \u2026)`};let r=t[2],i=e.slice(3),a=t.slice(3);if(!i.length)return null;let c=Mt(a,he);if(!c)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((p,f)=>(f<c.start||f>=c.end)&&!ft.has(a[f])&&a[f]!=="from").join(" ").trim();if(!u)return null;let d=Ps(`which ${r} ${i.join(" ")}`,n,1);return!d||d.node==="miss"?{node:"miss",reason:d&&d.reason||"the universal clause didn't parse"}:{node:"universal",entityType:o,kind:c.kind,object:u,complement:$c(o,{op:"difference",kind:"set",ast:d})}}function Uw(e,t,n=0){let s=Zb(e);if(!s)return null;let o=dt(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=an(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ve[d]))return $c(r,{op:"difference",kind:"qual",filters:a});let c=Mt(a,he);if(!c)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,p)=>(p<c.start||p>=c.end)&&!ft.has(a[p])&&a[p]!=="from").length)return $c(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:c.kind}});let u=Ps(`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"}:$c(r,{op:"difference",kind:"set",ast:u})}function AA(e,t,n){let s=0;for(;s<t.length&&TA.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=Mt(r,he);if(!a)return null;let l=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!ft.has(r[d])).join(" ").trim();return l?{node:"forwardComplement",kind:a.kind,subjectTerm:l}:null}function qd(e,t){let n=new Set;for(let s of t)for(let o of et(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Ww(e,t){let n=Tt(t),s=n.filter(r=>!Fw.has(r)),o=qd(e,s.length?s:n);return o.size===1?[...o][0]:null}function Ps(e,t,n){if(n>zw)return{node:"miss",reason:"too deep to resolve"};let s=Uw(e,t,n);if(s)return s;let o=an(e),r=o.map(p=>p.toLowerCase()),i=Kw(o,r);if(i)return i;let a=Gw(o,r,t,n);if(a)return a;let c=Yd(o,r,t,n);if(c)return c;let l=Vw(o,r,t,n);if(l)return l;let u=Jw(o,r,t,n);if(u)return u;let d=Br(e,t);return d?{node:"clause",clause:d}:null}function CA(e){let t=e.map(r=>r.toLowerCase()),n=Object.keys(Zs).sort((r,i)=>i.split(" ").length-r.split(" ").length),s=[],o=e.length;for(;;){let r=null;for(let c=o-1;c>=1&&!r;c-=1)for(let l of n){let u=l.split(" ");if(c+u.length<=o&&t.slice(c,c+u.length).join(" ")===l){r={at:c,len:u.length,op:Zs[l]};break}}if(!r)break;let i=e.slice(r.at+r.len,o),{blc:a}=xc(i,i.map(c=>c.toLowerCase()));if(!a.length||!a.every(c=>Ve[c]))break;s.unshift({op:r.op,kind:"qual",filters:a}),o=r.at}return!s.length||!o?null:{rest:e.slice(0,o),lifted:s}}function Yd(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Sn.includes(t[o]),i=!r&&Bw(t[o]);if(!r&&!i||r&&o+1>=t.length||!dt(t[o-1]))continue;let c=e.slice(0,o-1);if(!c.length||c.every(h=>Ve[h.toLowerCase()]))continue;let l=Br([...c,Nd].join(" "),n);if(!l||l.shape!=="reverse"&&l.shape!=="forward"||l.modifier&&l.modifier!=="direct")continue;let u=e.slice(r?o+1:o),d=CA(u),p=`which ${t[o-1]} ${(d?d.rest:u).join(" ")}`,f=Ps(p,n,s+1);if(!f||f.node==="miss")return f?{node:"miss",reason:f.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"};let m={node:l.shape==="reverse"?"reverseSet":"forwardSet",kind:l.kind,entityType:l.entityType,inner:f};return d?{node:"boolean",entityType:l.entityType,atoms:[{op:"seed",kind:"set",ast:m},...d.lifted]}:m}return null}function Gw(e,t,n,s){let o=0;(ro.has(t[o])||Xd.has(t[o]))&&(o+=1);let r=dt(t[o]);if(!r||r.placeholder||!r.entityType||(o+=1,Hd.has(t[o])&&(o+=1),!OA.has(t[o])||t[o+1]!=="in"))return null;let i=e.slice(o+2);return i.length?Jd(r.entityType,i,n,s):null}function Vw(e,t,n,s){let o=0;if(!ro.has(t[0]))return null;o+=1;let r=dt(t[o]);if(!r)return null;o+=1;let i=e.slice(o),a=t.slice(o);if(i.length<2)return null;let c=null;for(let h=i.length-1;h>0;h-=1){let b=a.slice(h),g=Mt(b,he);if(g&&g.start===0&&g.end===b.length){c={kind:g.kind,at:h};break}}if(!c)return null;let l=i.slice(0,c.at),u=a.slice(0,c.at);if(!u.some(h=>Sn.includes(h)))return null;let d=l,p=u;for(;p.length&&Xd.has(p[0]);)d=d.slice(1),p=p.slice(1);if(!p.length||!dt(p[0]))return null;let f=ro.has(p[0])?d.join(" "):`which ${d.join(" ")}`,m=Ps(f,n,s+1);return!m||m.node==="miss"?{node:"miss",reason:m&&m.reason||"the embedded subject clause didn't parse"}:{node:"forwardSet",kind:c.kind,entityType:r.entityType,inner:m}}function NA(e,t,n){for(let s=0;s<t.length;s+=1){if(!IA.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!he[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),Nd,...e.slice(s+1)],a=Br(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===Nd&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function DA(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!LA.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(PA.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&&MA.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&FA.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Sn.includes(d)))return null;let c=ro.has(a[0])?i.join(" "):`which ${i.join(" ")}`,l=Ps(c,n,s+1);if(!l||l.node==="miss")return l?{node:"miss",reason:l.reason||"the inner set of the temporal query didn't parse"}:{node:"miss",reason:"the inner set of the temporal query didn't parse"};let u=dt(a[0]);return{node:"temporal",inner:l,entityType:u&&u.entityType||null}}function Kw(e,t){if(!BA.has(t[0]))return null;let n=1,s=null;if(t[n]!=="changed"){let i=dt(t[n]);if(!i||i.placeholder)return null;s=i.entityType,n+=1}if(t[n]!=="changed"||(n+=1,t[n]==="ever"&&(n+=1),!zA.has(t[n])))return null;let o=t[n],r=e.slice(n+1).join(" ").trim();return r?{node:"commitFilter",op:o,pivotRaw:r,entityType:s}:{node:"miss",reason:`"changed ${o}" needs a date or commit afterward`}}function Jd(e,t,n,s){let o=t.map(r=>r.toLowerCase());if(o.some(r=>Sn.includes(r))){let r=t,i=o;for(;i.length&&Xd.has(i[0]);)r=r.slice(1),i=i.slice(1);if(i.length&&dt(i[0])){let a=ro.has(i[0])?r.join(" "):`which ${r.join(" ")}`,c=Ps(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the owner clause of this membership query didn't parse"}:{node:"membershipSet",entityType:e,inner:c}}}return{node:"membership",entityType:e,term:t.join(" ")}}function GA(e,t,n,s=0){if(t[0]!=="where"||!UA.has(t[1])||!Dw.has(t[t.length-1]))return null;let o=e.slice(2,t.length-1),r=t.slice(2,t.length-1);for(;r.length&&WA.has(r[0]);)o=o.slice(1),r=r.slice(1);if(!o.length||!r.some(l=>Sn.includes(l)))return null;let i=dt(r[0]);if(!i)return null;let a=ro.has(r[0])?o.join(" "):`which ${o.join(" ")}`,c=Ps(a,n,s+1);return!c||c.node==="miss"?{node:"miss",reason:c&&c.reason||"the inner set of the location query didn't parse"}:{node:"whereSet",inner:c,entityType:i.entityType||null}}function KA(e){let t=new Set,n=[];for(let s of e){if(!s||!VA.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function HA(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(!yi.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let p=t.slice(0,d).join(" ");if(d===t.length-1&&(Io.includes(p)||No.includes(p))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Io.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=qA(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let c=o?s-1:s,l=KA(e.slice(0,c)),u={node:"anaphora",mode:i,filter:a};return l.length>=2&&(u.candidateTerms=l),u}function qA(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&xA.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ve[a]))return{type:"qual",filters:r};if(o.length===1){let a=dt(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=Br(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function YA(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?dt(t[n]):null;if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;n+=1;let i=t.slice(n),a=e.slice(n);if(i.length&&i[i.length-1]==="anywhere"?(i=i.slice(0,-1),a=a.slice(0,-1)):i.length>=2&&i[i.length-2]==="at"&&i[i.length-1]==="all"&&(i=i.slice(0,-2),a=a.slice(0,-2)),!i.length)return{node:"exists",entityType:r,term:null,scopeModule:null};if(i[0]==="called"||i[0]==="named"){if(i.length<2)return{node:"miss",reason:`"${i[0]}" needs a name afterward`};let c=i.indexOf("in",1);if(c>0){let u=a.slice(1,c).join(" ").trim(),d=a.slice(c+1).join(" ").trim();return!u||!d?{node:"miss",reason:'a named existence check needs both a name and a module after "in"'}:{node:"exists",entityType:r,term:u,scopeModule:d}}let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:l,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:null,scopeModule:c}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function XA(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=Js(n).slice(e.length).trim(),o=an(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 JA(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let l=1;l<t.length;l+=1)if(Ve[t[l]]){n=l,s=t[l-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&Qs[t[n]]){let l=o+1;for(;l<t.length&&(t[l]==="the"||t[l]==="a"||t[l]==="an");)l+=1;let u=t[l];if(u&&!wg.has(u))return null}let r=XA(t[n],e.slice(n+1));if(r?.node==="miss")return r;let i=1;t[i]==="the"&&(i+=1);let a=s?n-1:n;a>i&&(t[a-1]==="a"||t[a-1]==="an")&&(a-=1);let c=a>i?e.slice(i,a).join(" ").trim():"";return c?{node:"qualCheck",term:c,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function QA(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=Br(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function ZA(e,t,n){let s=Io.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&&Ve[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?dt(t[o]):null;if(!i)return{node:"miss",reason:"count needs a known entity kind (functions, classes, modules, \u2026)"};let a=t[o];o+=1;let c=e.slice(o),l=t.slice(o).some(d=>!ft.has(d)&&!Hw.has(d)),u;if(l){let d=Ps(`which ${a} ${c.join(" ")}`,n,1);if(!d||d.node==="miss")return{node:"miss",reason:"the count restrictor didn't parse"};u=d}else u={node:"allOfClass",entityType:i.entityType};return r.length&&(u={node:"qualifier",filters:r,inner:u}),{node:"count",entityType:i.entityType,base:u}}function tC(e,t,n,s){let o=0,r=!1,i=null;for(let $ of qw){let w=$.split(" ");if(t.slice(0,w.length).join(" ")===$){i=$,o=w.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&Qd.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ve[t[o]];)a.push(t[o]),o+=1;let c=o<t.length?dt(t[o]):null;if(!c||c.placeholder||c.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!Ss.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Yw}`}:null;let l=c.entityType,u=t[o];o+=1;let d=e.slice(o),p=t.slice(o).some($=>!ft.has($)&&!Hw.has($)),f=t.slice(o),m=d;(f[0]==="is"||f[0]==="are")&&(f=f.slice(1),m=m.slice(1));let h=r&&eC.has(f[0]);if(r&&(p&&!h||d.length===0))return null;let b,g=!1;if(p){let $=h?m:d,w=Ps(`which ${[...a,u,...$].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};b=w,g=!0}else b={node:"allOfClass",entityType:l},a.length&&(b={node:"qualifier",filters:a,inner:b});return{node:"list",entityType:l,base:b,scoped:g}}function nC(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(Jn[h]){s=Jn[h],o=m;break}if(Jn[t[m]]){s=Jn[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(Qn[t[m]]){r=Qn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(Qn[t[m]]){r=Qn[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]),c=["important","significant","central","key","core","essential","critical","principal"],l=t.some(m=>c.includes(m));!r&&(a||l)&&(r=Qn.connections,i="connections");let u,d=null;for(let m of t){let h=dt(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?yg[i]:void 0,!u))return{node:"miss",reason:"a superlative needs an entity kind (module, class, function, \u2026)"};if(!r)return{node:"miss",reason:"name what to rank by (imports, callers, methods, tests, or connections)"};let p=["needs","need","needing","lacks","lack","lacking","misses","missing"],f=t.some(m=>p.includes(m))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:f}}function oC(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&Qd.has(t[o]);)o+=1;if(o>=t.length)return null;let r=dt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&sC.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=dt(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=>Sn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!he[t[o]]&&!Ss.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Yw}`}:null}function rC(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&Qd.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Sn.includes(t[i])){s=i;break}if(s<0)return null;let o=dt(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 Xw(e,t,n,s){if(!n.length||n[0]!=="named"&&!(n[0]==="called"&&s)||n[1]==="by")return null;let o=t.slice(1).join(" ").trim();return o?{node:"named",entityType:e||null,term:o}:null}function iC(e,t,n,s,o,r){let{branches:i,ops:a}=vc(n,s),c=null,l=[];for(let u=0;u<i.length;u+=1){let d=i[u],p=d.map(w=>w.toLowerCase()),f=u===0?"intersection":a[u-1],m=xc(d,p);if(m.blc.length&&m.blc.every(w=>Ve[w])){l.push({op:f,kind:"qual",filters:m.blc});continue}let h=Xw(e,m.bw,m.blc,m.blc.length!==p.length);if(h){l.push({op:f,kind:"set",ast:h});continue}if(p[0]==="of"||p[0]==="in"){let w=Jd(e,d.slice(1),o,r);if(w.node==="miss")return{miss:w.reason};l.push({op:f,kind:"set",ast:w});continue}let b=d,g=Mt(p,he);g?c=d.slice(g.start,g.end):c&&(b=[...c,...d]);let $=Qw(`${t} ${b.join(" ")}`,o,r);if(!$||$.node==="miss")return{miss:$&&$.reason||"a clause in the combination didn't parse"};l.push({op:f,kind:"set",ast:$})}return{atoms:l}}function Jw(e,t,n,s){let o=rC(e,t);if(o){let{entityType:_,term:y,relIdx:T}=o,C=t.slice(T+1),v=e.slice(T+1);if(!C.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[T]}"`};let j=iC(_,`which ${t[T-1]}`,C,v,n,s+1);if(j.miss)return{node:"miss",reason:j.miss};let M=[{op:"seed",kind:"set",ast:{node:"find",entityType:_,term:y}},...j.atoms];return M.length===1?M[0].ast:{node:"boolean",entityType:_,atoms:M}}let r=0;for(;r<t.length&&ro.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ve[t[r]];)a.push(t[r]),r+=1;let c=r<t.length?dt(t[r]):null;if(!c){let _=r+1<t.length?dt(t[r+1]):null;if(vw.has(t[r])&&_&&_.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Hd.has(t[r])){let y=r+1;y<t.length&&(t[y]==="the"||t[y]==="a"||t[y]==="an")&&(y+=1);let T=y+1<t.length?dt(t[y+1]):null;if(vw.has(t[y])&&T&&T.entityType==="Commit"&&y+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&_&&/^[a-z]+$/.test(t[r])&&!he[t[r]]&&!ft.has(t[r])&&!df.has(t[r])?{node:"find",entityType:_.entityType,term:e[r]}:null}let l=c.entityType,u=t[r];r+=1;let d=t.slice(r),p=e.slice(r),f=!1;d.length&&Sn.includes(d[0])&&(f=!0,d=d.slice(1),p=p.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&Bw(d[0]),b=p.length>0&&vc(d,p).branches.some(_=>{let{blc:y}=xc(_,_.map(T=>T.toLowerCase()));return y.length&&y.every(T=>Ve[T])}),g=p.length>0?vc(d,p).branches:[],$=!1;if(g.length>1){let _=g[0].map(T=>T.toLowerCase()),y=Mt(_,he);y&&y.start===0&&($=g.slice(1).every(T=>{let C=T.map(j=>j.toLowerCase()),v=Mt(C,he);return v&&v.start===0?v.kind===y.kind:!v}))}let w=!1;if(g.length>1){let _=g[0].map(T=>T.toLowerCase()),y=Mt(_,he);y&&y.start===0&&(w=g.slice(1).every(T=>{let C=T.map(j=>j.toLowerCase()),v=Mt(C,he);return!!v&&v.start===0&&v.end-v.start===1}))}if(!(a.length||f||m||h||b||$||w))return null;if(!p.length){let _={node:"allOfClass",entityType:l};return a.length?{node:"qualifier",filters:a,inner:_,entityType:l}:{node:"miss",reason:"nothing to filter or traverse"}}let x=c.placeholder?"what":`which ${u}`,{branches:R,ops:E}=vc(d,p),k=null,O=[];for(let _=0;_<R.length;_+=1){let y=R[_],T=y.map(Y=>Y.toLowerCase()),C=_===0?"seed":E[_-1],v=xc(y,T);if(v.blc.length&&v.blc.every(Y=>Ve[Y])){O.push({op:C,kind:"qual",filters:v.blc});continue}let j=Xw(l,v.bw,v.blc,v.blc.length!==T.length);if(j){O.push({op:C,kind:"set",ast:j});continue}if(T[0]==="of"||T[0]==="in"){let Y=Jd(l,y.slice(1),n,s+1);if(Y.node==="miss")return Y;O.push({op:C,kind:"set",ast:Y});continue}let M=y,z=Mt(T,he);z?k=y.slice(z.start,z.end):k&&(M=[...k,...y]);let K=Qw(`${x} ${M.join(" ")}`,n,s+1);if(!K||K.node==="miss")return{node:"miss",reason:K&&K.reason||"a clause in the combination didn't parse"};O.push({op:C,kind:"set",ast:K})}if(O[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let S;return O.length===1?S=O[0].ast:S={node:"boolean",entityType:l,atoms:O},a.length&&(S={node:"qualifier",filters:a,inner:S,entityType:l}),S}function Qw(e,t,n){if(n>zw)return{node:"miss",reason:"too deep to resolve"};let s=an(e),o=s.map(a=>a.toLowerCase()),r=Yd(s,o,t,n);if(r)return r;let i=Br(e,t);return i?{node:"clause",clause:i}:null}function vc(e,t){let n=Object.keys(Zs).sort((a,c)=>c.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let c of n){let l=c.split(" ");if(e.slice(i,i+l.length).join(" ")===c){a={c,len:l.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(Zs[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 Zd(e){let t=Ew.get(e);if(t)return t;t=new Map;for(let n of e.individuals||[])n.class==="Module"&&t.set(Jt(n.label),n);return Ew.set(e,t),t}function Zw(e,t){let n=Zd(e),s=[];for(let o of t){let r=e.byId.get(o);if(!r||r.class==="Module")continue;let i=ao(r),a=i?n.get(Jt(i)):null;a&&s.push(a)}return $n(s)}function cC(e){let t=xw.get(e);if(t)return t;t=new Map;let n=Zd(e);for(let s of e.individuals||[]){if(s.class==="Module")continue;let o=ao(s),r=o?n.get(Jt(o)):null;r&&(t.has(r.id)||t.set(r.id,[]),t.get(r.id).push(s))}return xw.set(e,t),t}function ef(e,t,n,s){let o=Fr[t];if(o&&so.has(n)){let d=et(e,o).filter(p=>s.has(p.object));return $n(d.map(p=>e.byId.get(p.subject)).filter(p=>p&&p.class===n))}let a=(!!o&&[...s].some(d=>so.has(e.byId.get(d)?.class))?[...Tt(t),o]:Tt(t)).flatMap(d=>et(e,d)),c=a.filter(d=>s.has(d.object));t==="cochange"&&(c=c.concat(a.filter(d=>s.has(d.subject)).map(d=>({...d,subject:d.object,object:d.subject}))));let l=$n(c.map(d=>e.byId.get(d.subject)).filter(Boolean));if(!n||n==="Change")return l;let u=l.filter(d=>d.class===n);if(ey(t,n)){let d=new Set(c.map(f=>f.object)),p=new Set([...s].filter(f=>!d.has(f)));return $n([...u,...Zw(e,p)])}return u.length?u:n!=="Module"&&l.some(d=>d.class==="Module")?cf(e,new Set(l.filter(d=>d.class==="Module").map(d=>d.id)),n):[]}function uC(e){let t=new Set;for(let n of["touches","touchesSymbol"])for(let s of et(e,n)){let o=e.byId.get(s.subject);o?.class==="Commit"&&t.add(String(o.label||"").toLowerCase())}return e.individuals.filter(n=>n.class==="Commit").map(n=>String(n.label||"").toLowerCase()).filter(n=>n&&!t.has(n)).sort()}function dC(e,t){let n=new Set(ef(e,"touches","Commit",t).map(o=>String(o.label||"").toLowerCase())),s=uC(e);for(let o of t)for(let r of e.byId.get(o)?.derived_from||[]){let i=lC.exec(String(r||""));if(!i)continue;let a=i[1].toLowerCase(),c=s.find(l=>l.startsWith(a)||a.startsWith(l));c&&n.add(c)}return n.size}function Mi(e,t,n){let s=Tt(t).flatMap(o=>et(e,o)).filter(o=>n.has(o.subject));return $n(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function $n(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 fC(e,t){let n=Jt(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Jt(o.label).startsWith(s))}function Ld(e){let t=Sw.get(e);if(t)return t;let n=new Set;for(let i of et(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 et(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of et(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},Sw.set(e,t),t}function Uo(e,t){return t?t.class==="Module"?t.id:Ld(e).moduleOfSymbol.get(t.id)||null:null}function pC(e,t){let n=Uo(e,t);if(n)return n;let s=ao(t);return s&&Zd(e).get(Jt(s))?.id||null}function ty(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>mC.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Uo(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=de(o.class,1),c=a==="attribute"?"an":"a",l=i?`, ${Ni("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${c} ${a} in this codebase${l} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function Sc(e,t,n){let s=$n(Sr.flatMap(i=>Mi(e,i,new Set([t])))),o=n?s.filter(i=>i.class===n):s;if(o.length)return o;let r=cC(e).get(t)||[];return n?r.filter(i=>i.class===n):r}function tf(e,t,n=null){let s=Ls(e,t,n);if(!(s.match&&s.tier===1)){let o=fC(e,t);if(o.length)return{kind:"dir",mods:o}}return s.match?{kind:"single",id:s.match.id,entityClass:s.match.class,label:s.match.label}:{kind:"miss"}}function nf(e,t,n,s,o){let r=o||(()=>!0),i=Sc(e,t,s).filter(r);if(i.length||!sy(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of ny(e,t)){let c=e.byId.get(a);if(!c)continue;let l=Sc(e,a,s).filter(r);if(l.length)return{own:i,inherited:l,viaId:a,viaLabel:c.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function oo(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=Ld(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=pC(e,t),o=Ld(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Po(String(r.label).toLowerCase()))||!s?!1:o.testedModules.has(s)===n.value}default:return!1}}function sf(e){return et(e,"inherits")}function Pd(e,t){return sf(e).filter(n=>n.object===t).map(n=>n.subject)}function jw(e,t){return sf(e).filter(n=>n.subject===t).map(n=>n.object)}function hC(e,t){let n=new Set,s=[...Pd(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Pd(e,o))n.has(r)||s.push(r)}}return n}function ny(e,t){let n=new Set,s=[...jw(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of jw(e,o))n.has(r)||s.push(r)}}return n}function sy(e,t){let n=kw.get(e);if(n||(n=new Map,kw.set(e,n)),n.has(t))return n.get(t);let s=sf(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 Rw(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 Tw(e){return e.slice().sort((t,n)=>_w[n.via]-_w[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Aw(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Os(n);if(Cs(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of zo(e.label))if(Cs(o,n,s)<=s)return!0;return!1}function oy(e,t,n){let s=e.individuals.filter(c=>c.class===t),o=[...zo(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=sy(e,t),i=[];for(let c of s){let l=Rw(c,o);if(l){i.push({ind:c,via:l});continue}if(!r)continue;[...hC(e,c.id)].some(d=>{let p=e.byId.get(d);return!!p&&!!Rw(p,o)})&&i.push({ind:c,via:"chain"})}if(i.length||!r)return{narrow:Tw(i),broad:[]};let a=new Map;for(let c of s)for(let l of ny(e,c.id)){if(!a.has(l)){let u=e.byId.get(l);u&&u.class===t&&Aw(u,n)&&a.set(l,{ind:u,via:"chain"})}for(let u of Pd(e,l)){if(u===c.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Aw(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Tw([...a.values()])}}function ry(e){return[...rc(ic(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function Md(e,t,n){let s=String(t||"").trim().toLowerCase();if(!s)return[];let o=Jt(s);return e.individuals.filter(r=>{if(n&&r.class!==n)return!1;let i=String(r.label||"").toLowerCase();return i===s||String(r.id||"").toLowerCase()===s?!0:r.class==="Module"&&Jt(i)===o})}function Fd(e,t){if(!t||typeof t!="object")return null;if(Array.isArray(t)){for(let n of t){let s=Fd(e,n);if(s)return s}return null}if(t.node==="named")return Md(e,t.term,t.entityType).length?null:{term:t.term,entityType:t.entityType||null,elsewhere:Md(e,t.term,null)[0]||null};for(let n of Object.values(t)){let s=Fd(e,n);if(s)return s}return null}function Qt(e,t,n){switch(t.node){case"named":return Md(e,t.term,t.entityType);case"clause":return cn(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?ry(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=oy(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Tt(t.kind).flatMap(o=>et(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=Ls(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Ww(e,t.kind);if(!o)return[];let r=new Set(Mi(e,t.kind,new Set([s.match.id])).map(i=>i.id));return e.individuals.filter(i=>i.class===o&&!r.has(i.id))}case"commitFilter":return Dd(e,t).matches;case"reverseSet":{let s=new Set(Qt(e,t.inner,n).map(o=>o.id));return ef(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(Qt(e,t.inner,n).map(o=>o.id));return Mi(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=tf(e,t.term,n&&n.contextId);if(s.kind==="dir"){if(!t.entityType||t.entityType==="Module")return s.mods;let i=new Set(s.mods.map(c=>c.id));return $n(Sr.flatMap(c=>Mi(e,c,i))).filter(c=>c.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=nf(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"membershipSet":{let s=Qt(e,t.inner,n);return s.length?$n(s.flatMap(o=>Sc(e,o.id,t.entityType))):[]}case"qualifier":return t.inner.node==="membership"?dy(e,t,n).matches:Qt(e,t.inner,n).filter(o=>t.filters.every(r=>oo(e,o,Ve[r])));case"boolean":return cy(e,t,n);case"anaphora":return ly(e,t,n).matches;default:return[]}}function gC(e){let t=Ve[e],n=iy(t);return n&&Object.keys(Ve).find(s=>Ve[s].via===n.via&&Ve[s].value===n.value)||null}function ay(e,t,n){let s=[],o=[];for(let r of t.atoms){let i=o;if(r.op==="seed")o=Qt(e,r.ast,n);else if(r.kind==="qual"){let a=l=>r.filters.every(u=>oo(e,l,Ve[u])),c=l=>r.filters.every(u=>{let d=iy(Ve[u]);return d?oo(e,l,d):!oo(e,l,Ve[u])});o=r.op==="difference"?i.filter(c):i.filter(a)}else{let a=Qt(e,r.ast,n),c=new Set(a.map(l=>l.id));if(r.op==="intersection")o=i.filter(l=>c.has(l.id));else if(r.op==="difference")o=i.filter(l=>!c.has(l.id));else if(r.op==="union"){let l=new Set(i.map(u=>u.id));o=i.slice();for(let u of a)l.has(u.id)||(l.add(u.id),o.push(u))}}s.push({atom:r,before:i,after:o})}return{matches:o,steps:s}}function cy(e,t,n){return ay(e,t,n).matches}function bC(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=vn(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 ly(e,t,n){let o=bC(e,t.candidateTerms);if(!o){let p=n&&n.prev;if(!Array.isArray(p)||!p.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=p.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(p=>i.filters.every(f=>oo(e,p,Ve[f])));else if(i&&i.type==="entity")r=r.filter(p=>p.class===i.entityType);else if(i&&i.type==="clause"){let p=vn(e,i.clause.object);if(!p.match)r=[];else{let f=Fr[i.clause.kind],m=[...Tt(i.clause.kind),...f?[f]:[]],h=new Set(m.flatMap(b=>et(e,b)).filter(b=>b.object===p.match.id).map(b=>b.subject));r=r.filter(b=>h.has(b.id))}}let a=p=>p.length&&p.every(f=>f.class===p[0].class)?p[0].class:null,c=i&&i.type==="entity"?i.entityType:a(o),l=r.length?a(r):c;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:l,matches:[]};let u=zi(l,r,"anaphora",{bound:!0}),d=r.length?null:wC(e,o,i);return{compositeKind:"set",matches:r,entityType:l,referents:u,...d?{emptied:d}:{}}}function wC(e,t,n){if(!t.length||!n)return null;let s={...Fi(t,null,null)};if(n.type==="qual"){let o=kc(e,n.filters,!1,t);return o?{held:s,step:o}:null}return n.type==="entity"?{held:s,step:{type:"entityKind",entityType:n.entityType}}:n.type==="clause"&&n.clause?.kind&&n.clause.object?{held:s,step:{type:"clause",clause:{kind:n.clause.kind,object:n.clause.object},excluded:!1}}:null}function uy(e,t,n){let s=n.kind==="*"?yC:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of et(e,r)){let a=i.subject===t.id,c=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let l=e.byId.get(i.object);if(!l||l.class!==n.filter)continue}o+=1}else(n.dir==="in"&&c||n.dir==="both"&&(a||c))&&(o+=1)}return o}function $C(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 Dd(e,t){let{op:n,pivotRaw:s,entityType:o=null}=t,r=f=>String((f.attributes||[]).find(m=>m.key==="date")?.value||"").slice(0,10),i=null,a=null,c=null;if(vC.test(s))i=s;else{let{match:f,ambiguous:m}=vn(e,s,{expectedClass:"Commit"});f&&!m&&f.class==="Commit"&&r(f)&&(a=f.id,c=f.label,i=r(f))}if(!i)return{compositeKind:"commitFilter",op:n,pivotRaw:s,entityType:o,pivotResolved:!1,matches:[]};let l=e.individuals.filter(f=>f.class==="Commit"&&f.id!==a&&r(f)).filter(f=>{let m=r(f);return n==="since"?m>=i:n==="before"?m<i:n==="after"?m>i:m===i}).sort((f,m)=>r(m).localeCompare(r(f))||String(f.id).localeCompare(String(m.id))),u=o&&o!=="Commit"&&o!=="Change"?$n(l.flatMap(f=>by(e,f,o).matches)):null,d=u||l,p=[];if(d.length){let f=u?o:"Commit";p.push({kind:"set",class:f,label:`${d.length} ${de(f,d.length)} ${n} ${s}`,ids:d.map(m=>m.id),attrs:{count:d.length,op:n,...a?{pivot:a}:{}},lane:"commitFilter"})}return a&&p.push({kind:"event",class:"Commit",label:c,ids:[a],attrs:{date:i},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:i,pivotResolved:!0,entityType:o,windowCount:l.length,matches:d,referents:p}}function EC(e,t,n){let s=Qt(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size){let a=Dr(e,t.inner,n);return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0,...a?{emptied:a}:{}}}let r=ef(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(c=>c.key==="date")?.value||"");return r.sort((a,c)=>i(c).localeCompare(i(a))),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function xC(e,t,n){let s=Qt(e,t.inner,n),o=s.length?null:Dr(e,t.inner,n);return{compositeKind:"whereSet",matches:s,entityType:t.entityType,sites:s.map(r=>(r.attributes||[]).find(i=>i.key==="site")?.value||null),...o?{emptied:o}:{}}}function SC(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(et(e,"tests").map(c=>c.subject));n=n.filter(c=>!a.has(c.id)&&!Po(String(c.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:uy(e,a,t.metric)})).sort((a,c)=>t.extreme==="most"?c.score-a.score:a.score-c.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?zi(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function dy(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?h=>s.filters.every(b=>oo(e,h,Ve[b])):null,a=h=>zi(r,h,"membership"),c=tf(e,o.term,n&&n.contextId);if(c.kind==="dir"){let h;if(!r||r==="Module")h=c.mods;else{let b=new Set(c.mods.map(g=>g.id));h=$n(Sr.flatMap(g=>Mi(e,g,b))).filter(g=>g.class===r)}return i&&(h=h.filter(i)),{compositeKind:"set",matches:h,entityType:r,referents:a(h)}}if(c.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:l,inherited:u,viaLabel:d}=nf(e,c.id,c.entityClass,r,i),p=!l.length&&u.length>0,f=p?u:l,m=f.length?null:jC(e,c,r,s);return{compositeKind:"membership",entityType:r,matches:f,inheritedNotOwn:p,viaLabel:d,ownerLabel:c.label,referents:a(f),...m?{emptied:m}:{}}}function jC(e,t,n,s){if(!s)return null;let{own:o,inherited:r}=nf(e,t.id,t.entityClass,n,null),i=o.length?o:r;if(!i.length)return null;let a=kc(e,s.filters,!1,i);return a?{held:{...Fi(i,null,{entityType:n}),owner:t.label},step:a}:null}function kC(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=vn(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=vn(e,s,{expectedClass:n}),c=!r||a.match&&Uo(e,a.match)===r.id,l=a.match&&c;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:l?[a.match]:[]}}let i=r?cf(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 RC(e,t,n){let s=Uo(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||Sc(e,n.id).some(o=>o.id===t.id)}function _C(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Ls(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=tf(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!RC(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let c=oo(e,a.match,Ve[o]),l=r?!c:c,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:l,matches:[a.match],referents:u}}function TC(e,t,n){let s=vn(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=Qt(e,{node:"allOfClass",entityType:t.entityType},n),r=cy(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 AC(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(Qt(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}=cn(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function CC(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};let s=Fd(e,t);if(s)return{compositeMiss:!0,unknownName:s,matches:[]};if(t.node==="exists")return kC(e,t);if(t.node==="qualCheck")return _C(e,t,n);if(t.node==="universal")return TC(e,t,n);if(t.node==="count"){if(t.base.node==="commitFilter"){let l=Dd(e,t.base);return l.pivotResolved?{compositeKind:"count",count:l.matches.length,entityType:t.entityType,matches:[]}:l}let c=AC(e,t.base,n);return c?{compositeKind:"count",count:dC(e,c),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:Qt(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:Qt(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return $O(e,t);if(t.node==="superlative")return SC(e,t);if(t.node==="temporal")return EC(e,t,n);if(t.node==="whereSet")return xC(e,t,n);if(t.node==="recentCommits")return $C(e);if(t.node==="commitFilter")return Dd(e,t);if(t.node==="anaphora")return ly(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return dy(e,t,n);if(t.node==="find"){let{narrow:c,broad:l}=oy(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:c.length?c:l,broad:!c.length&&l.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let o=Qt(e,t,n),r=t.entityType||null,i=zi(r,o,t.node==="qualifier"?"qualifierListing":"compositeSet"),a=o.length?null:Dr(e,t,n);return{compositeKind:"set",matches:o,entityType:r,referents:i,...a?{emptied:a}:{}}}function of(e){let t=e?.node==="clause"?e.clause:null;if(!t?.kind||!t.object||t.modifier==="transitive"||t.shape!=="reverse"&&t.shape!=="forward")return null;let n=t.shape==="forward";return n&&io(t.kind).includes(" ")?null:{kind:t.kind,object:t.object,passive:n,entityType:t.entityType||e.entityType||null}}function rf(e){let t=io(e.kind);return`${t.endsWith("e")?`${t}d`:`${t}ed`} ${OC[e.kind]||"by"} ${e.object}`}function kc(e,t,n,s){let o=a=>s.every(c=>a.every(l=>oo(e,c,Ve[l])));if(n&&!o(t))return null;let r=n||!t.every(a=>Ve[a]?.value===!1)?[]:t.map(gC),i=r.length>0&&r.every(Boolean)&&o(r);return{type:"qual",filters:i?r:t,negated:!n&&!i}}function NC(e,t,n){if(t.kind==="qual")return t.op!=="difference"&&t.op!=="intersection"?null:kc(e,t.filters,t.op==="difference",n);if(t.op!=="difference"&&t.op!=="intersection")return null;let s=t.op==="difference";if(t.ast?.node==="named")return{type:"named",term:t.ast.term,excluded:s};let o=of(t.ast);return o?{type:"clause",clause:o,excluded:s}:null}function Dr(e,t,n){if(!t||typeof t!="object")return null;if(t.node==="boolean"){let{steps:o}=ay(e,t,n),r=[...o].reverse().find(c=>c.before.length&&!c.after.length);if(!r)return Dr(e,o[0]?.atom?.ast,n);let i=NC(e,r.atom,r.before);if(!i)return null;let a=o.indexOf(r)===1?o[0].atom.ast:null;return{held:Fi(r.before,a,t),step:i}}if(t.node==="qualifier"&&t.inner?.node!=="membership"&&t.filters?.length){let o=Qt(e,t.inner,n);if(!o.length)return Dr(e,t.inner,n);let r=kc(e,t.filters,!1,o);return r?{held:Fi(o,t.inner,t),step:r}:null}if(t.node==="reverseSet"||t.node==="forwardSet"||t.node==="membershipSet"){let o=Qt(e,t.inner,n);if(!o.length)return Dr(e,t.inner,n);let r=t.node==="membershipSet"?t.entityType?{type:"membership",entityType:t.entityType}:null:{type:t.node==="reverseSet"?"reverse":"forward",kind:t.kind,entityType:t.entityType||null};return r?{held:Fi(o,t.inner,t),step:r}:null}let s=of(t);return s?{leaf:s}:null}function Fi(e,t,n){let s=of(t);return{count:e.length,entityType:IC(e)||s?.entityType||n?.entityType||null,clause:s,wholeKind:t?.node==="allOfClass",members:e}}function zd(){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 LC(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=ao(e);return n?`${t} in ${n}`:t}function Bd(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(Bd):Array.isArray(e.filters)&&e.filters.some(t=>Ve[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(Bd)}function fy(e,t){return!["Function","Method"].includes(t)||!Bd(e)?null:`This index records tests edges module to module, so a ${de(t,1)} counts as covered exactly when the module it lives in is tested \u2014 ask about that module to see the coverage itself.`}function PC(e){if(e?.node==="qualifier"&&e.inner?.node==="allOfClass"&&e.filters?.length)return{entityType:e.inner.entityType||e.entityType,filters:e.filters,negated:!1};if(e?.node!=="boolean"||e.atoms?.length!==2)return null;let[t,n]=e.atoms;return t.op!=="seed"||t.ast?.node!=="allOfClass"||n.kind!=="qual"||!n.filters?.length||n.op!=="difference"&&n.op!=="intersection"?null:{entityType:t.ast.entityType||e.entityType,filters:n.filters,negated:n.op==="difference"}}function py(e){let t=PC(e);if(!t)return null;let n=de(t.entityType||"Module",2),s=t.negated?"":"not ";return`Try "which ${n} are ${s}${yn(t.filters)}" for that branch on its own.`}function MC(e,t){return!e||!t?null:t==="Package"?ry(e).length:e.individuals.filter(n=>n.class===t).length}function FC(e){let t=n=>e.entityType?de(e.entityType,n):null;switch(e.type){case"qual":{let n=yn(e.filters);return e.negated?{one:`it is not ${n}`,many:`none of them is ${n}`}:{one:`it is ${n}`,many:`all of them are ${n}`}}case"named":return e.excluded?{one:`it is named "${e.term}"`,many:`all of them are named "${e.term}"`}:{one:`it is not named "${e.term}"`,many:`none of them is named "${e.term}"`};case"clause":{let{clause:n}=e;if(n.passive){let r=rf(n);return e.excluded?{one:`it is ${r}`,many:`all of them are ${r}`}:{one:`it is not ${r}`,many:`none of them is ${r}`}}let s=io(n.kind),o=zr(n.kind);return e.excluded?{one:`it ${o} ${n.object} too`,many:`all of them ${s} ${n.object} too`}:{one:`it does not ${s} ${n.object}`,many:`none of them ${o} ${n.object}`}}case"reverse":{let n=zr(e.kind),s=t(1)?`no ${t(1)} in this index`:"nothing in this index";return{one:`${s} ${n} it`,many:`${s} ${n} them`}}case"forward":{let n=zr(e.kind);return{one:`it ${n} nothing in this index`,many:`none of them ${n} anything in this index`}}case"membership":return{one:`it has no ${t(2)}`,many:`none of them has any ${t(2)}`};case"entityKind":return{one:`it is not a ${t(1)}`,many:`none of them is a ${t(1)}`};default:return null}}function DC(e){let t=de(e.entityType,1),n=de(e.entityType,2);if(e.owner)return{one:`${e.owner} has 1 ${t}`,many:`${e.owner} has ${e.count} ${n}`};if(e.wholeKind)return{one:`The index has 1 ${t}`,many:`The index has ${e.count} ${n}`};if(e.clause?.passive){let o=rf(e.clause);return{one:`1 ${t} is ${o}`,many:`${e.count} ${n} are ${o}`}}if(e.clause)return{one:`1 ${t} ${zr(e.clause.kind)} ${e.clause.object}`,many:`${e.count} ${n} ${io(e.clause.kind)} ${e.clause.object}`};let s=ts(e.members);return{one:`1 ${t} matched that far (${s})`,many:`${e.count} ${n} matched that far (${s})`}}function zC(e){if(!e.clause||!e.entityType)return null;let t=de(e.entityType,2);return`Try "${e.clause.passive?`which ${t} are ${rf(e.clause)}`:`which ${t} ${io(e.clause.kind)} ${e.clause.object}`}" for that branch on its own.`}function Ud(e,t,{branchNote:n=null,verdictTail:s=""}={}){if(!e?.held)return null;let o=FC(e.step);if(!o)return null;let r=e.held,i=DC(r),a=r.count===1,c=zC(r)||n;return`${t?`no ${de(t,2)} match that`:"nothing matches that"}${s}. ${a?i.one:i.many}, but ${a?o.one:o.many}.${c?` ${c}`:""}`}function my(e){if(e.passive){let n=e.entityType?`no ${de(e.entityType,2)}`:"nothing";return`${e.object} ${zr(e.kind)} ${n} in this index`}return`${e.entityType?`no ${de(e.entityType,1)} in this index`:"nothing in this index"} ${zr(e.kind)} ${e.object}`}function hy(e,t){let n=MC(e,t);return n===null?`nothing in the index matches that${t?` (${de(t,2)})`:""}`:n===0?`no ${de(t,2)} in this index`:n===1?`the index has 1 ${de(t,1)}, and it does not match that`:`the index has ${n} ${de(t,2)}, and none of them matches that`}function Ow(e,t,n,s,o){let r=fy(t.inner,n.entityType)||py(t.inner),i=Ud(n.emptied,n.entityType,{branchNote:r,verdictTail:s});return i||`${n.emptied?.leaf?my(n.emptied.leaf):hy(e,n.entityType)}${s}. ${r||o}`}function BC(e,t,n){if(t.compositeMiss){if(t.reason==="no-prev")return{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1};if(t.unknownName){let{term:s,entityType:o,elsewhere:r}=t.unknownName,i=o?de(o,1):"entity",a=r?` "${s}" names ${Is(de(r.class,1))} ${de(r.class,1)} here, not ${Is(i)} ${i}.`:"";return{content:`no ${i} named "${s}" in this index.${a}`,miss:!0,ambiguous:!1}}return{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${zd()}.`,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=de(t.entityType,1),o=de(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=ao(i),c=i.class==="Module"?"":a?`, ${Ni("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${ts(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=de(t.entityType,t.total),o=bA(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}: ${ts(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?de(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 ${de(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>ct?` \u2014 narrow with "${de(t.entityType,2)} in <module>"`:"";return{content:`${ts(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=yn(t.asked),o=Ao[t.relation].nouns[1];return t.pairs.length?{content:`${t.pairs.map(i=>`${i.subject.label||i.subject.id} ${i.reads} ${i.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]}}if(t.compositeKind==="membership"){if(!t.matches.length){let s=Ud(t.emptied,t.entityType);return s?{content:s,miss:!0,ambiguous:!1,matches:[]}:{content:`${t.ownerLabel&&t.entityType?`${t.ownerLabel} has no ${de(t.entityType,2)} in this index.`:Cw(n,t.entityType)} ${no(n)}`,miss:!0,ambiguous:!1,matches:[]}}if(t.inheritedNotOwn){let s=de(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${ts(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${ts(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=de(t.entityType,1);if(!t.matches.length)return{content:`no ${de(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?LC(t.matches[0]):ts(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:de(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,rn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>rn?` \u2026+${t.matches.length-rn} more`:"";return{content:`${t.matches.length} recent commit(s): ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="commitFilter"){if(!t.pivotResolved)return{content:`"${t.pivotRaw}" isn't a recognized date (yyyy-mm-dd) or a known commit \u2014 try "what changed since 2026-06-01" or "what changed before <commit>".`,miss:!0,ambiguous:!1,matches:[]};if(!t.windowCount)return{content:`no commits recorded ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]};if(t.entityType&&t.entityType!=="Commit"&&t.entityType!=="Change"){let i=de(t.entityType,t.matches.length||2);return t.matches.length?{content:`${ts(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${i} changed ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]}}let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,rn).map(i=>{let a=s(i).slice(0,10),c=(i.attributes||[]).find(l=>l.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${c?` \u2014 ${c}`:""}`}),r=t.matches.length>rn?` \u2026+${t.matches.length-rn} 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 ${de(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:`${ts(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?de(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:Ow(n,e,t,", so there is no change history to date",no(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. ${no(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let c=(i.attributes||[]).find(d=>d.key==="message")?.value||"",l=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${l}${c?` ("${c}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="whereSet"){if(!t.matches.length)return{content:Ow(n,e,t,", so there is no location to cite",`${zd()}.`),miss:!0,ambiguous:!1,matches:[]};let s=t.matches.map((r,i)=>Wd(r,t.sites[i])||`${r.label} has no recorded code location in this index.`),o=t.matches.filter((r,i)=>Wd(r,t.sites[i]));return{content:s.join(" "),miss:o.length===0,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=fy(e,t.entityType)||py(e),o=Ud(t.emptied,t.entityType,{branchNote:s});if(o)return{content:o,miss:!0,ambiguous:!1,matches:[]};let r=s||no(n);return{content:`${t.emptied?.leaf?`${my(t.emptied.leaf)}.`:Cw(n,t.entityType)} ${r}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${ts(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function af(){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). `+zd()}function no(e=null){return e&&Si(e)===0?fd:`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function zo(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function jc(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 gy(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function UC(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Li(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(b=>b.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let b=i[2],g=r.filter($=>$.class==="Commit"&&(String($.id).toLowerCase().startsWith(`commit:${b}`)||String($.label).toLowerCase().startsWith(b)));if(g.length===1)return{match:g[0],candidates:[],tier:1,ambiguous:!1};if(g.length>1)return{match:g[0],candidates:g.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(b=>String(b.label).toLowerCase()===o||String(b.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let c=`ext:${o}`,l=null;e:for(let b of e.relations)for(let g of b.edges)if(String(g.object).toLowerCase()===c){l=g.object;break e}if(l&&!n)return{match:{id:l,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(b=>b.trim()).filter(Boolean);if(u.length>1){let b=new Set;for(let g of u){let $=Li(e,g,{expectedClass:n});$.match&&!$.ambiguous&&b.add($.match.id)}if(b.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],p=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(p){let b=o.split(".").pop();for(let g of r){let $=String(g.label||"").toLowerCase();g.class==="Module"?$.split("/").pop()===o&&d.push({ind:g,score:1e3-Math.abs($.length-o.length)}):$.includes(o)?d.push({ind:g,score:2e3-Math.abs($.length-o.length)}):$.endsWith(`.${b}`)&&d.push({ind:g,score:1500-Math.abs($.length-o.length)})}}else{let b=[...zo(s)],g=o.split(/\s+/).find(E=>E.includes("/")),$=g?g.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,x=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,R=x?UC(s):null;for(let E of r){let k=String(E.label||"").toLowerCase(),O=k.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(O===o){d.push({ind:E,score:5e3});continue}if(o.length>=4&&(O.startsWith(o)||O.endsWith(o))){d.push({ind:E,score:4e3-Math.abs(O.length-o.length)});continue}if(x){let y=gy(E.label);if(y&&y===R){d.push({ind:E,score:5e3});continue}let T=/[/_-]/.test(E.label)||/\.[a-z0-9]+$/i.test(String(E.label||""));if(y&&T&&R.length>=4&&y.includes(R)){d.push({ind:E,score:2e3-Math.abs(y.length-R.length)});continue}}if(E.class==="Module"){let y=jc(o);if(y!==o&&y===jc(O)){let T=Os(o);if(Cs(O,o,T)>T){d.push({ind:E,score:3e3-Math.abs(O.length-o.length)});continue}}}if(o.length>=4&&k.includes(o)){d.push({ind:E,score:1e3-Math.abs(k.length-o.length)});continue}let S=zo(E.label),_=b.filter(y=>S.has(y)).length;_>0&&(!$||S.has($))&&d.push({ind:E,score:_/b.length*Ad})}}if(d.sort((b,g)=>g.score-b.score),d.length){let[b,...g]=d,$=g.filter(x=>x.score===b.score),w=b.score>=Ad?g.filter(x=>x.score>=Ad):g;return{match:b.ind,candidates:w.slice(0,4).map(x=>x.ind),tier:3,ambiguous:$.length>0}}let f=p||o.includes("/"),m=null,h=!f&&typeof Lo=="function"?Lo(e.proseIndex,s).filter(b=>!n||e.byId.get(b.id)?.class===n):[];if(h.length){let[b,...g]=h,$=e.byId.get(b.id);if($){let w=g.filter(x=>x.score===b.score);if(m={match:$,candidates:g.slice(0,4).map(x=>e.byId.get(x.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&b.via!=="spell")return m}}if(!i&&o.length>=4){let b=Os(o),g=b+1,$=[];for(let w of r){let x=Cs(String(w.label||"").toLowerCase(),o,b);if(x>0)for(let R of zo(w.label)){if(x<=0)break;x=Math.min(x,Cs(R,o,b))}x<g?(g=x,$=[w]):x===g&&x<=b&&$.push(w)}if(g<=b&&$.length===1)return{match:$[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(g<=b&&$.length>1&&!m){let[w,...x]=$;return{match:w,candidates:x.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function Cd(e,t){let n=gy(t),s=[...zo(t)],o=[];for(let r of zo(e))n.includes(r)||s.some(i=>jc(i)===jc(r))||Ec.has(r)||$y.has(r)||o.push(r);return o}function yc(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(Cd(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),Cd(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:yn(s.slice(0,4).map(r=>r.label))}:e}let n=Cd(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function vn(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(WC,"").trim(),i=r.match(GC);if(i){let a=r.slice(0,i.index).trim(),c=nt[i[1].toLowerCase()];if(a&&c){let l=yc(Li(e,a,{expectedClass:c}),a);if(l?.match?.id&&!l.ambiguous)return l}}if(r&&r!==o){let a=yc(Li(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return yc(Li(e,t,n),t)}return yc(Li(e,t,n),t)}function Ls(e,t,n){if(Co.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 vn(e,t)}function cf(e,t,n){let s=[];for(let o of et(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 by(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||so.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],c=a.flatMap(l=>et(e,l)).filter(l=>l.subject===t.id).map(l=>e.byId.get(l.object)).filter(Boolean);return n&&so.has(n)&&(c=c.filter(l=>l.class===n)),{matches:c,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function qC(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&lf.has(Iw(s.label))).map(s=>({ind:s,named:n.has(Iw(s.label))?1:0,depth:String(s.label).split("/").length,fixture:HC(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 YC(e,t,n){return e!=="reverse"?!1:t==="imports"||t==="calls"?!n||n==="Module":t==="inherits"?!n||n==="Class":!1}function XC(e,t,n){let s=Tt(n).flatMap(a=>et(e,a)),o=a=>{let c=`ext:${String(a.label).toLowerCase()}`;return s.filter(l=>l.object===a.id||String(l.object).toLowerCase()===c).map(l=>e.byId.get(l.subject)).filter(Boolean)},r=new Map,i=o(t);for(;i.length;){let a=i.shift();r.has(a.id)||a.id===t.id||(r.set(a.id,a),i.push(...o(a)))}return[...r.values()].sort((a,c)=>String(a.label).localeCompare(String(c.label)))}function uf(e){return(e?.attributes||[]).find(t=>JC.has(t.prop))?.value||null}function QC(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Is(e)} ${e} in this graph's vocabulary`}function cn(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 CC(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let v=t.candidates.map(j=>{let M=cn(e,j,{contextId:n,prev:s});return{parsed:j,result:M,rendered:Gn(j,M,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:v}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let v=String(t.object||"").trim(),j=v.toLowerCase(),M=(e.individuals||[]).find(z=>{if(!uf(z))return!1;if(String(z.label).toLowerCase()===j)return!0;let K=(z.attributes||[]).find(Y=>Y.key==="token")?.value;return K&&String(K).toLowerCase()===j});if(!M){let z=ty(e,v);return z?{matches:[z.hit],objMatch:z.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:z.text,traversal:`schema lookup for "${v}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${v}"`,ambiguous:!1}}return{matches:[M],objMatch:M,candidates:[],traversal:`schema lookup for "${v}"`,ambiguous:!1}}if(r==="mentions"){let v=String(t.object||"").trim();return{matches:(typeof Lo=="function"?Lo(e.proseIndex,v):[]).map(z=>e.byId.get(z.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${v}"`}}if(r==="where"&&VC.test(String(t.object||"").trim())){let v=qC(e,t.object);return{matches:v,objMatch:v[0]||null,candidates:v.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...lf].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!YC(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 v=Ls(e,t.subject,n),j=Ls(e,t.object,n);if(!v.match||!j.match||v.ambiguous||j.ambiguous)return{matches:[],objMatch:j.match,candidates:j.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(v.unresolvedPronoun||j.unresolvedPronoun)};let[M,z]=[v.match,j.match];i==="touches"&&z.class==="Commit"&&M.class!=="Commit"&&([M,z]=[z,M]);let K=Fr[i],Y=[...new Set(K?[...Tt(i),K]:Tt(i))],X=Y.flatMap(L=>et(e,L)).filter(L=>L.subject===M.id&&L.object===z.id);return{matches:X,answer:t.negated?X.length===0:X.length>0,objMatch:j.match,subjMatch:v.match,candidates:[],traversal:`${Y.join("+")} edge from ${M.label} to ${z.label}`,ambiguous:!1}}let c;if(o)c={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(c=Ls(e,t.object,n),t.altObject&&t.altObject!==t.object){let v=Ls(e,t.altObject,n),j=!!c.match&&!c.ambiguous,M=!!v.match&&!v.ambiguous;!j&&M?c=v:j&&M&&c.match.id!==v.match.id&&(c={...c,ambiguous:!0,candidates:[v.match,...c.candidates||[]]})}if(t.kind==="tests"&&c.match&&!c.ambiguous&&!String(t.object||"").includes("/")){let v=z=>z.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),j=v(String(t.object||"").trim().toLowerCase()),M=(e.individuals||[]).find(z=>{if(z.class!=="Module"||z.id===c.match.id)return!1;let K=String(z.label||"").toLowerCase().split("/").pop();return K!==v(K)&&v(K)===j});M&&(c={...c,ambiguous:!0,candidates:[M,...c.candidates||[]]})}}let{match:l,candidates:u,ambiguous:d,unresolvedPronoun:p,matchedVia:f,unplacedWords:m,nearestLabel:h}=c;if(!l)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:p,unplacedWords:m,nearestLabel:h};if(d){let j=$n([l,...u||[]]).slice(0,ct).map(M=>{let z=cn(e,t,{contextId:n,prev:s,pinnedObjMatch:M});return{candidate:M,result:z,rendered:Gn(t,z,e)}});return{matches:[],objMatch:l,candidates:u,traversal:null,ambiguous:!0,branches:j}}if(r==="where"){let v=(l.attributes||[]).find(j=>j.key==="site")?.value||null;return{matches:[l],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whereShape:!0,site:v,traversal:v?`site attribute of ${l.label}`:`class + defining module of ${l.label}`}}if(r==="when"){let v=z=>String((z.attributes||[]).find(K=>K.key==="date")?.value||""),j;if(l.class==="Commit")j=[l];else{let z=["touches","touchesSymbol"].flatMap(Y=>et(e,Y)).filter(Y=>Y.object===l.id),K=new Set;j=[];for(let Y of z){if(K.has(Y.subject))continue;K.add(Y.subject);let X=e.byId.get(Y.subject);X&&X.class==="Commit"&&j.push(X)}j.sort((Y,X)=>v(X).localeCompare(v(Y)))}let M=j.length&&v(j[0])?[{kind:"event",class:"Commit",label:j[0].label,ids:[j[0].id],attrs:{date:v(j[0]).slice(0,10)},lane:"when"}]:[];return{matches:j,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whenShape:!0,referents:M,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit date first`}}if(r==="whoLast"){let v=Y=>String((Y.attributes||[]).find(X=>X.key==="date")?.value||""),j=["touches","touchesSymbol"].flatMap(Y=>et(e,Y)).filter(Y=>Y.object===l.id),M=new Set,z=[];for(let Y of j){if(M.has(Y.subject))continue;M.add(Y.subject);let X=e.byId.get(Y.subject);X&&X.class==="Commit"&&z.push(X)}z.sort((Y,X)=>v(X).localeCompare(v(Y)));let K=z.length&&v(z[0])?[{kind:"event",class:"Commit",label:z[0].label,ids:[z[0].id],attrs:{date:v(z[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:z,objMatch:l,candidates:u,ambiguous:d,matchedVia:f,whoLastShape:!0,referents:K,traversal:`touches+touchesSymbol edges where object = ${l.label}, newest commit's author`}}if(i==="touches"&&l.class==="Commit")return by(e,l,a,{candidates:u,ambiguous:d,matchedVia:f});if(r==="forward"){let v=Fr[i],M=!!(v&&l.class&&so.has(l.class))?[...new Set([...Tt(i),v])]:Tt(i);if(a&&a!=="Change"){let H=qd(e,M),W=Td[a];if(H.size&&!H.has(a)&&!(W&&H.has(W)))return{matches:[],objMatch:l,candidates:u,ambiguous:d,matchedVia:f,forwardGrainMiss:!0,wantClasses:[...H],traversal:`${M.join("+")} edges where subject = ${l.label} (grain mismatch: this "${i}" relation never targets a ${Ns(a)})`}}let K=M.flatMap(H=>et(e,H)).filter(H=>H.subject===l.id).map(H=>e.byId.get(H.object)).filter(Boolean),Y=$n(K),X=Y,L="";if(a&&a!=="Change"){X=Y.filter(W=>W.class===a);let H=Td[a];if(!X.length&&H){let W=Y.filter(I=>I.class===H);W.length&&(X=W,L=`, widened to ${H} subjects (no ${a} recorded)`)}}return{matches:X,objMatch:l,candidates:u,traversal:`${M.join("+")} edges where subject = ${l.label}${L}`,ambiguous:d,matchedVia:f}}if(t.modifier==="transitive")return i==="inherits"?{matches:XC(e,l,i),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`subclass closure over inherits edges from ${l.label}`}:{matches:Cr(e,l,{maxDepth:Nw,includeCycleReturn:!0}).flat().map(M=>e.byId.get(M.id)).filter(Boolean),objMatch:l,candidates:u,ambiguous:d,matchedVia:f,traversal:`reverse dependency closure over imports+calls edges from ${l.label} (impactClosure, maxDepth=${Nw})`};let b=Fr[i]||Tt(i).find(v=>Fw.has(v))||null,g=!!(l.class&&so.has(l.class));if(b&&(so.has(a)||g)){let v=et(e,b).filter(L=>L.object===l.id),j=$n(v.map(L=>e.byId.get(L.subject)).filter(Boolean)),M=!a||a==="Change"?j:j.filter(L=>L.class===a),z="",K=Td[a];if(!M.length&&K){let L=j.filter(H=>H.class===K);L.length&&(M=L,z=`, widened to ${K} subjects (no ${a} recorded)`)}let Y=(i==="touches"||i==="calls"||i==="uses")&&l.class==="Class"&&!et(e,"contains").some(L=>L.subject===l.id),X=Y?e.byId.get(Uo(e,l)||""):null;if(M.length||!(Y&&X))return{matches:M,objMatch:l,candidates:u,traversal:`${b} edges where object = ${l.label}${z}`,ambiguous:d,matchedVia:f}}let $=l,w=u,x=d,R=f,E="",k=Ww(e,i);if(k&&$.class&&$.class!==k){let v=vn(e,t.object,{expectedClass:k});if(v.match&&!v.ambiguous)$=v.match,w=v.candidates,x=v.ambiguous,R=v.matchedVia;else if(k==="Module"){let j=Uo(e,$),M=j&&e.byId.get(j);if(M)E=`, refined from ${$.label} to its containing module`,$=M;else return{matches:[],objMatch:$,candidates:w,ambiguous:x,matchedVia:R,wrongGrainMiss:!0,wantClass:k,traversal:`"${t.object}" resolved to ${Ns($.class)} ${$.label} (grain mismatch: this "${i}" question needs a ${Ns(k)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:$,candidates:w,ambiguous:x,matchedVia:R,wrongGrainMiss:!0,wantClass:k,traversal:`"${t.object}" resolved to ${Ns($.class)} ${$.label} (grain mismatch: this "${i}" question needs a ${Ns(k)})`}}let O=Tt(i).flatMap(v=>et(e,v)).filter(v=>v.object===$.id);i==="cochange"&&(O=O.concat(Tt(i).flatMap(v=>et(e,v)).filter(v=>v.subject===$.id).map(v=>({...v,subject:v.object,object:v.subject}))));let S="";if(!O.length&&$.class){let v=`ext:${String($.label).toLowerCase()}`;O=Tt(i).flatMap(j=>et(e,j)).filter(j=>String(j.object).toLowerCase()===v),O.length&&(S=` (by name, via unresolved ${v} references)`)}let _=[],y=new Set;for(let v of O){let j=e.byId.get(v.subject);j&&!y.has(j.id)&&(y.add(j.id),_.push(j))}let T,C="";if(!a||a==="Change")T=_;else{let v=_.filter(M=>M.class===a),j=v.length||!ey(i,a)?[]:Zw(e,new Set([$.id]));if(v.length)T=v;else if(j.length)T=j,C=`, falling back to ${$.label}'s recorded source site (no defines edge)`;else if(a!=="Module"&&_.some(M=>M.class==="Module")){let M=new Set(_.filter(z=>z.class==="Module").map(z=>z.id));T=cf(e,M,a),C=`, then ${Ns(a)} defined in the matched module(s)`}else T=[]}return{matches:T,objMatch:$,candidates:w,traversal:`${Tt(i).join("+")} edges where object = ${$.label}${S}${C}${E}`,ambiguous:x,matchedVia:R}}function ao(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 Wd(e,t){let n=String(t||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(n){let o=n[3]&&n[3]!==n[2]?`lines ${n[2]}-${n[3]}`:`line ${n[2]}`;return`${Gd(e)} is defined in ${n[1]} at ${o}.`}let s=ao(e);return s?`${Gd(e)} is defined in ${s} (no line span recorded in this index).`:null}function Gd(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function ZC(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function yn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Pi(e){let t=e.object??e.subject??"?";return`${e.entityType?de(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function io(e){return To[e]?.bare||e}function zr(e){return fg(e)}function eO(e){let t=io(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function tO(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=de(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 ${io(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 ${io(o.kind)} ${JSON.stringify(String(r))}`}function wy(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Pi).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>wy(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?tO(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 ":""}${Do(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?de(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${Do(e.kind)}`:`${r}${Do(e.kind)} "${e.object}"`}return{english:o,machine:s}}function Gn(e,t,n=null){let s=yy(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function yy(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${af()}`,miss:!0,ambiguous:!1};if(e.node)return BC(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
55
+ ${t.branches.map((c,l)=>`${l+1}) as ${Pi(c.parsed)}: ${c.rendered.content}`).join(`
56
56
  `)}
57
- (ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Li),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,c)=>`${c+1}) ${Li(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Li),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?de(t.objMatch.class,1):"term",a=de(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=>de(a,2));return{content:`${t.objMatch.label}'s "${Do(e.kind)}" relation in this index never produces ${de(e.entityType,2)} \u2014 only ${yn(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=uf(t.objMatch)||"";return{content:`${t.objMatch.label} is ${QC(t.objMatch.class)}: ${i}`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.mentionsShape){if(!t.matches.length)return{content:`"${e.object}" is not mentioned in any indexed identifier or doc-comment prose.`,miss:!0,ambiguous:!1};let i=t.matches.slice(0,ct).map(c=>`${c.label} (${de(c.class,1)})`),a=t.matches.length>ct?`, \u2026and ${t.matches.length-ct} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${yn(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 ${yn([...lf])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,c=a.slice(0,ct).map(d=>d.label),l=a.length>ct?`, \u2026and ${a.length-ct} more`:"",u=a.length?` \u2014 also matched: ${yn(c)}${l}`:"";return{content:`ranked ${t.matches.length} entry-point match${t.matches.length===1?"":"es"}; top: ${i.label}${u}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.objMatch&&(!t.candidates||t.candidates.length===0)&&e.shape!=="ask"){let i=String(e.object||"").trim(),a=e.entityType&&Id[e.entityType]?de(e.entityType,1):"module",c=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let l=yn(t.unplacedWords.map(p=>`"${p}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${c} matching "${e.object}" found in the index. ${l} ${u} nothing here, and reading past ${t.unplacedWords.length===1?"it":"them"} would answer a different question.${d}`,miss:!0,ambiguous:!1,candidates:[]}}return{content:`no ${c} matching "${e.object}" found in the index. ${no(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(g=>g.class==="Commit")){let g=w=>!["Commit","Session","Source","Utterance"].includes(w?.class),$=i.filter(g);$.length&&(i=$,a?.length&&(a=a.filter(w=>g(w.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let g=String(e.object||"").toLowerCase(),$=new Set(Dn(String(e.object||"")).filter(k=>k.length>=3)),w=new Set(i.map(k=>k.id)),x=null,R=0,E=1/0;if($.size)for(let k of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(k.class)||w.has(k.id))continue;let O=Dn(String(k.label)).filter(_=>$.has(_)).length;if(!O||O<R)continue;let S=Cs(String(k.label).toLowerCase(),g,8);(O>R||S<E)&&(x=k,R=O,E=S)}if(x&&(i=[...i,x],a)){let k=cn(n,e,{pinnedObjMatch:x});a=[...a,{candidate:x,result:k,rendered:Wn(e,k,n)}]}}let c=i.length&&i.every(g=>g.class===i[0].class)?i[0].class:null,l=c?Id[c]?de(c,1):Ns(c):"module",u=i.slice(0,ct).map(g=>g.label),d=i.length>ct?`, \u2026and ${i.length-ct} more`:"",p=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${yn(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,f=String(e.object||""),m=f?new RegExp(`\\b${at(f)}\\b`,"gi"):null,h=g=>{let $=String(g.candidate.label||"");return!m||!$?g.rendered.content:g.rendered.content.split($).map(w=>w.replace(m,$)).join($)};return{content:a&&a.length?`${p}
57
+ (ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Pi),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,c)=>`${c+1}) ${Pi(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Pi),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?de(t.objMatch.class,1):"term",a=de(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=>de(a,2));return{content:`${t.objMatch.label}'s "${Do(e.kind)}" relation in this index never produces ${de(e.entityType,2)} \u2014 only ${yn(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=uf(t.objMatch)||"";return{content:`${t.objMatch.label} is ${QC(t.objMatch.class)}: ${i}`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.mentionsShape){if(!t.matches.length)return{content:`"${e.object}" is not mentioned in any indexed identifier or doc-comment prose.`,miss:!0,ambiguous:!1};let i=t.matches.slice(0,ct).map(c=>`${c.label} (${de(c.class,1)})`),a=t.matches.length>ct?`, \u2026and ${t.matches.length-ct} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${yn(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 ${yn([...lf])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,c=a.slice(0,ct).map(d=>d.label),l=a.length>ct?`, \u2026and ${a.length-ct} more`:"",u=a.length?` \u2014 also matched: ${yn(c)}${l}`:"";return{content:`ranked ${t.matches.length} entry-point match${t.matches.length===1?"":"es"}; top: ${i.label}${u}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.objMatch&&(!t.candidates||t.candidates.length===0)&&e.shape!=="ask"){let i=String(e.object||"").trim(),a=e.entityType&&Id[e.entityType]?de(e.entityType,1):"module",c=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let l=yn(t.unplacedWords.map(p=>`"${p}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${c} matching "${e.object}" found in the index. ${l} ${u} nothing here, and reading past ${t.unplacedWords.length===1?"it":"them"} would answer a different question.${d}`,miss:!0,ambiguous:!1,candidates:[]}}return{content:`no ${c} matching "${e.object}" found in the index. ${no(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(g=>g.class==="Commit")){let g=w=>!["Commit","Session","Source","Utterance"].includes(w?.class),$=i.filter(g);$.length&&(i=$,a?.length&&(a=a.filter(w=>g(w.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let g=String(e.object||"").toLowerCase(),$=new Set(zn(String(e.object||"")).filter(k=>k.length>=3)),w=new Set(i.map(k=>k.id)),x=null,R=0,E=1/0;if($.size)for(let k of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(k.class)||w.has(k.id))continue;let O=zn(String(k.label)).filter(_=>$.has(_)).length;if(!O||O<R)continue;let S=Cs(String(k.label).toLowerCase(),g,8);(O>R||S<E)&&(x=k,R=O,E=S)}if(x&&(i=[...i,x],a)){let k=cn(n,e,{pinnedObjMatch:x});a=[...a,{candidate:x,result:k,rendered:Gn(e,k,n)}]}}let c=i.length&&i.every(g=>g.class===i[0].class)?i[0].class:null,l=c?Id[c]?de(c,1):Ns(c):"module",u=i.slice(0,ct).map(g=>g.label),d=i.length>ct?`, \u2026and ${i.length-ct} more`:"",p=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${yn(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,f=String(e.object||""),m=f?new RegExp(`\\b${at(f)}\\b`,"gi"):null,h=g=>{let $=String(g.candidate.label||"");return!m||!$?g.rendered.content:g.rendered.content.split($).map(w=>w.replace(m,$)).join($)};return{content:a&&a.length?`${p}
58
58
  ${a.map((g,$)=>`${$+1}) ${g.candidate.label}: ${h(g)}`).join(`
59
- `)}`:p,miss:!1,ambiguous:!0,candidates:i.map(g=>g.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=Wd(i,t.site);return a?{content:a,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${no(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(p=>p.key==="date")?.value||"";if(!c)return{content:`commit ${a.label} touched ${i}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1};let l=(a.attributes||[]).find(p=>p.key==="message")?.value||"",u=String(c).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Ii("is-dated",a.id,"is dated")} ${u}${l?` ("${l}")`:""}.`,miss:!1,ambiguous:!1,matches:t.matches};let d=t.matches.length-1;return{content:`${i} was last touched by commit ${a.label} on ${u}${l?` ("${l}")`:""}${d?`; ${d} earlier commit${d===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whoLastShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${no(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!c)return{content:`commit ${a.label} last touched ${i}, but this index records no commit author \u2014 regenerate the graph to attach mgx:commitAuthor.`,miss:!0,ambiguous:!1};let l=t.matches.length-1;return{content:`${i} was last touched by ${c} (commit ${a.label})${l?`; ${l} earlier commit${l===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.commitSubject){let i=`commit ${t.objMatch.label}`;if(!t.matches.length)return{content:`${i} touched nothing recorded in the index.`,miss:!0,ambiguous:!1};let a=new Map;for(let u of t.matches.slice(0,ct)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let c=[...a.entries()].map(([u,d])=>`${de(u,d.length)} ${yn(d)}`),l=t.matches.length>ct?`; \u2026and ${t.matches.length-ct} more`:"";return{content:`${i} touched ${c.join("; ")}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(e.shape==="ask"){if(!t.objMatch||!t.subjMatch)return{content:"couldn't resolve one of the terms in this question.",miss:!0,ambiguous:!1};let i=`${t.traversal}.`,a=`no ${e.kind} edge found from ${t.subjMatch.label} to ${t.objMatch.label}.`,c=e.negated?a:i,l=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?c:l}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(xr.includes(e.kind)&&n&&t.objMatch)for(let l of xr){if(l===e.kind)continue;let u={...e,kind:l},d=cn(n,u,{pinnedObjMatch:t.objMatch});if(d?.matches?.length&&!d.ambiguous)return wy(u,d,n)}return{content:`${t.objMatch.label} has no ${Do(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(wA,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=e.entityType?de(e.entityType,2):(()=>{let l=[...qd(n,Tt(e.kind))];return l.length===1?de(l[0],2):l.length>1?l.map(u=>de(u,2)).join(" or "):de("Module",2)})(),a=t.objMatch&&Co.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object,c=e.modifier==="transitive"?"transitively":"directly";return{content:`No ${i} found whose module ${c} ${Do(e.kind)} ${a}. ${no(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${eO(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=>!so.has(i.class))){let i=t.matches.slice(0,ct).map(c=>c.class==="Commit"?ZC(c):c.label),a=t.matches.length>ct?`, \u2026and ${t.matches.length-ct} more`:"";return{content:i.join(" and ")+a+".",miss:!1,ambiguous:!1,matches:t.matches}}let s=new Map;for(let i of t.matches.slice(0,ct)){let a=ao(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(Gd(i))}let o=[...s.entries()].map(([i,a],c)=>{let l=yn(a);return c===0?`in ${i} there is ${l}`:`there is ${l} in ${i}`}),r=t.matches.length>ct?` \u2026and ${t.matches.length-ct} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function $y(e){if(e.length<4||oO.has(e))return null;let t=Os(e),n=t+1,s=null,o=!1;for(let r of sO){let i=Cs(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 Nw(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!uf(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=$y(n);return!!s&&s!==n&&!!nt[s]}function vy(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=Ls(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Nw(s,t.object))return!1;if(t.shape==="ask"){let o=Ls(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Nw(o,t.subject))}return!0}function rO(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return yg.includes(t)}function iO(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=_i(Fo(String(t||""))),i=an(r);if(!i.length)return null;let a=[],c=[],l=y=>{let T=vn(e,y);return!!T.match&&T.tier!=null&&T.tier<=2},u=y=>{let T=vn(e,y);return!!T.match&&T.tier!=null&&T.tier<=3},d=y=>{let T=String(y||"").trim().toLowerCase();return Co.includes(T)?!0:an(T).some(C=>{let v=C.toLowerCase();return!vc.has(v)&&!Vd.has(v)})},p=new Set(["reverse","forward","where","when","ask"]),f=y=>{let T=y.join(" "),C=Bo(T,{nlp:n});return vy(e,C,s)!==!0||C&&!C.node&&p.has(C.shape)&&(C.object!=null&&!d(C.object)||C.shape==="ask"&&C.subject!=null&&!d(C.subject))||Wn(C,cn(e,C,{contextId:s,prev:o}),e).miss?null:{parsed:C,text:T}},m=y=>({parsed:y.parsed,from:r,to:y.text,dropped:[...a],steps:c}),h=0,b=Math.max(i.length,1)+12;for(;h<b;h+=1){let y=-1;for(let v=0;v<i.length;v+=1){let j=i[v].toLowerCase();if(df.has(j)&&!vc.has(j)&&!l(i[v])){y=v;break}}if(y<0)break;let T=i[y];i=i.filter((v,j)=>j!==y),a.push(T),c.push(`strip noise "${T}" \u2192 "${i.join(" ")}"`);let C=f(i);if(C)return m(C)}let g=Bo(i.join(" "),{nlp:n}),$=new Set;if(g&&!g.node&&p.has(g.shape))for(let y of[g.object,g.subject])for(let T of an(String(y||"").toLowerCase()))$.add(T);let w=[],x=[],R=[];for(let y of i){let T=y.toLowerCase();if(!/^[a-z]+$/.test(T)||vc.has(T)||Vd.has(T)||u(y)){w.push(y);continue}let v=$y(T);if(v&&v!==T){w.push(v),R.push(`${y}\u2192${v}`);continue}if($.has(T)){w.push(y);continue}x.push(y)}if((R.length||x.length)&&w.length){i=w,a.push(...x),R.length&&c.push(`fuzzy-correct ${JSON.stringify(R)} \u2192 "${i.join(" ")}"`),x.length&&c.push(`drop unmatched ${JSON.stringify(x)} \u2192 "${i.join(" ")}"`);let y=f(i);if(y)return m(y)}let E=!1,k=i.map(y=>{let T=y.toLowerCase();return Sr[T]&&!u(y)?(E=!0,Sr[T]):y});if(E){c.push(`normalise synonyms \u2192 "${k.join(" ")}"`);let y=f(k);if(y)return m(y)}let O=an(r).map(y=>y.toLowerCase()),S=[],_=[];for(let y of O){if(yy.has(y))continue;let T=nt[y];T&&T!=="Change"?S.push(y):_.push(y)}if(S.length===1&&_.length===0){let y=f(["count",S[0]]);if(y)return c.push(`bare kind "${S[0]}" \u2192 count`),m(y)}return null}function cO(e,t){let n=String(t||"");if(!e||!Lw.test(n))return n;let s=e.individuals.filter(c=>c.class==="Commit");if(!s.length)return n;let o=c=>String((c.attributes||[]).find(l=>l.key==="date")?.value||""),r=[...s].sort((c,l)=>o(l).localeCompare(o(c)))[0];if(!r)return n;let i=n.replace(Lw,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return aO.test(a)?`${a} touched`:i}function lO(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 ff(e,t){let n=lO(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function fO(e,t){let n=String(t||"").trim(),s=n.match(uO),o=s?null:n.match(dO),r=s||o;if(!r||!pf.test(r[2]||"")||nt[r[1].toLowerCase()])return null;let i=ff(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 pO(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=ff(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function bO(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 wO(e,t){let n=Ba(String(t||"").trim()),s=n.match(mO),o=s?lg[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(hO)?.[1]||n.match(gO)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Ao[o].predicate},a=pO(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let c=bO(e,r);return c?{...i,subjects:[c],asked:[c]}:null}function yO(e,t){return Ao[e].matchesLocativePredicates?Er(Fi(t.prop))||Er(Fi(t.predicate)):null}function $O(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Ao[t.relation],r=Fi(o.predicate),i=new Map,a=new Map;for(let l of e?.relations||[]){let u=Fi(l.prop),d=Fi(l.predicate),p=u===r||d===r,f=p?null:yO(t.relation,l);if(!(!p&&!f))for(let m of l.edges||[]){let h=e.byId?.get(m.subject);if(!h||!(s?s.has(m.subject):n.has(h.class)))continue;let g={subject:h,object:m.object,reads:p?o.reads:`is ${f}`};p?i.set(m.subject,g):a.set(`${u||d}\0${m.subject}`,g)}}let c=[...i.values(),...[...a.values()].filter(l=>!i.has(l.subject.id))].sort((l,u)=>String(l.subject.id).localeCompare(String(u.subject.id))||String(l.object).localeCompare(String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:c,matches:c.map(l=>l.subject)}}function Od(e){let t=vO.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 xO(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(Od(a.subject).base,String(a.object));let s=new Set(ug),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:c,epoch:l,stamp:u}=Od(a.subject),d=n.get(c)||t(c);if(!d)continue;let p=`${a.predicate}\0${c}`;EO(r.get(p),l,u)&&(o.set(c,{id:c,label:c,class:d}),r.set(p,{epoch:l,stamp:u,predicate:a.predicate,subject:c,object:Od(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 kO(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=ff(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(c=>c.id));if(i.size<2)return!1;let a=new Map;for(let c of e?.individuals||[])c?.id&&(a.has(c.id)||a.set(c.id,new Set),a.get(c.id).add(c.class));return[...i].every(c=>c===o||a.get(c)?.has(o))}function RO(e,t){return t?.class?t.class==="Module"||t.class==="File"?!0:!!Uo(e,t):!1}function _O(e,t){let n=ki(t);if(!n)return null;let s=vn(e,n),o=s?.ambiguous?null:s?.match;return!o||o.class!=="Class"?null:`which classes transitively inherit from ${o.label}`}function AO(e,t){let n=Ri(String(t||"")).trim();if(ki(n)||$d(n)!==n)return null;let s=n.match(TO);if(!s)return null;let o=vn(e,s[1].trim()),r=o?.ambiguous?null:o?.match;if(!r||!RO(e,r))return null;let i=r.class==="Class"?"what inherits from it":r.class==="Module"||r.class==="File"?"what imports or calls it":"what calls it";return{content:`I can't answer that \u2014 the index records what is, not what would be. What it can read about ${r.label}: "what would break if ${r.label} were deleted" (${i}), or "/describe ${r.label}" for the facts it holds.`,tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,relaxed:null}}}function co(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(rO(t))return{content:af(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};let r=AO(e,t);if(r)return r;t=_O(e,t)||t,t=cO(e,t);let i=Kd(t,{nlp:s}),a=i.parsed,c=a,l=null;if(vy(e,a,n)===!1){let f=iO(e,t,{nlp:s,contextId:n,prev:o});f&&(c=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let u=cn(e,c,{contextId:n,prev:o}),d=Wn(c,u,e);if(Pw(e,c,u,d)){let f=fO(e,t);if(f){let m=cn(e,f,{contextId:n,prev:o}),h=Wn(f,m,e);h.miss||(c=f,u=m,d=h,l=null)}}if(Pw(e,c,u,d)){let f=wO(e,t);if(f){let m=cn(e,f,{contextId:n,prev:o}),h=Wn(f,m,e);h.miss||(c=f,u=m,d=h,l=null)}}if(c===null&&d.miss&&!d.ambiguous){let m=Ri(String(t||"")).trim().match(SO)?.[1]?.trim();if(m&&!/\s+(?:for|about)$/i.test(m)){let h=Bo(`what is a ${m}`,{nlp:s});h?.shape==="meta"&&(u=cn(e,h,{contextId:n,prev:o}),d=Wn(h,u,e))}}if(c===null&&d.miss&&!d.ambiguous){let m=Fo(String(t||"")).match(jO)?.[1]?.trim();if(m){let h=Bo(`what is a ${m}`,{nlp:s});if(h?.shape==="meta"){let b=cn(e,h,{contextId:n,prev:o}),g=Wn(h,b,e);!g.miss&&!g.ambiguous&&(u=b,d=g)}}}let p=l&&!d.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${d.content}`:d.content;if(!l&&!d.miss&&!d.ambiguous&&i.alternates.length){let f=i.alternates.map(m=>{let h=cn(e,m.parsed,{contextId:n,prev:o}),b=Wn(m.parsed,h,e);return b.miss?null:{a:m,text:b.content}}).filter(Boolean);if(f.length){let m=mw(f.map(h=>h.a),{answerFor:h=>f.find(b=>b.a===h)?.text||null});p=`${p}
59
+ `)}`:p,miss:!1,ambiguous:!0,candidates:i.map(g=>g.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=Wd(i,t.site);return a?{content:a,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${no(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(p=>p.key==="date")?.value||"";if(!c)return{content:`commit ${a.label} touched ${i}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1};let l=(a.attributes||[]).find(p=>p.key==="message")?.value||"",u=String(c).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Ni("is-dated",a.id,"is dated")} ${u}${l?` ("${l}")`:""}.`,miss:!1,ambiguous:!1,matches:t.matches};let d=t.matches.length-1;return{content:`${i} was last touched by commit ${a.label} on ${u}${l?` ("${l}")`:""}${d?`; ${d} earlier commit${d===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whoLastShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${no(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],c=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!c)return{content:`commit ${a.label} last touched ${i}, but this index records no commit author \u2014 regenerate the graph to attach mgx:commitAuthor.`,miss:!0,ambiguous:!1};let l=t.matches.length-1;return{content:`${i} was last touched by ${c} (commit ${a.label})${l?`; ${l} earlier commit${l===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.commitSubject){let i=`commit ${t.objMatch.label}`;if(!t.matches.length)return{content:`${i} touched nothing recorded in the index.`,miss:!0,ambiguous:!1};let a=new Map;for(let u of t.matches.slice(0,ct)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let c=[...a.entries()].map(([u,d])=>`${de(u,d.length)} ${yn(d)}`),l=t.matches.length>ct?`; \u2026and ${t.matches.length-ct} more`:"";return{content:`${i} touched ${c.join("; ")}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(e.shape==="ask"){if(!t.objMatch||!t.subjMatch)return{content:"couldn't resolve one of the terms in this question.",miss:!0,ambiguous:!1};let i=`${t.traversal}.`,a=`no ${e.kind} edge found from ${t.subjMatch.label} to ${t.objMatch.label}.`,c=e.negated?a:i,l=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?c:l}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(Sr.includes(e.kind)&&n&&t.objMatch)for(let l of Sr){if(l===e.kind)continue;let u={...e,kind:l},d=cn(n,u,{pinnedObjMatch:t.objMatch});if(d?.matches?.length&&!d.ambiguous)return yy(u,d,n)}return{content:`${t.objMatch.label} has no ${Do(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(wA,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=e.entityType?de(e.entityType,2):(()=>{let l=[...qd(n,Tt(e.kind))];return l.length===1?de(l[0],2):l.length>1?l.map(u=>de(u,2)).join(" or "):de("Module",2)})(),a=t.objMatch&&Co.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object,c=e.modifier==="transitive"?"transitively":"directly";return{content:`No ${i} found whose module ${c} ${Do(e.kind)} ${a}. ${no(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${eO(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=>!so.has(i.class))){let i=t.matches.slice(0,ct).map(c=>c.class==="Commit"?ZC(c):c.label),a=t.matches.length>ct?`, \u2026and ${t.matches.length-ct} more`:"";return{content:i.join(" and ")+a+".",miss:!1,ambiguous:!1,matches:t.matches}}let s=new Map;for(let i of t.matches.slice(0,ct)){let a=ao(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(Gd(i))}let o=[...s.entries()].map(([i,a],c)=>{let l=yn(a);return c===0?`in ${i} there is ${l}`:`there is ${l} in ${i}`}),r=t.matches.length>ct?` \u2026and ${t.matches.length-ct} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function vy(e){if(e.length<4||oO.has(e))return null;let t=Os(e),n=t+1,s=null,o=!1;for(let r of sO){let i=Cs(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 Lw(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!uf(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=vy(n);return!!s&&s!==n&&!!nt[s]}function Ey(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=Ls(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Lw(s,t.object))return!1;if(t.shape==="ask"){let o=Ls(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Lw(o,t.subject))}return!0}function rO(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return $g.includes(t)}function iO(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ti(Fo(String(t||""))),i=an(r);if(!i.length)return null;let a=[],c=[],l=y=>{let T=vn(e,y);return!!T.match&&T.tier!=null&&T.tier<=2},u=y=>{let T=vn(e,y);return!!T.match&&T.tier!=null&&T.tier<=3},d=y=>{let T=String(y||"").trim().toLowerCase();return Co.includes(T)?!0:an(T).some(C=>{let v=C.toLowerCase();return!Ec.has(v)&&!Vd.has(v)})},p=new Set(["reverse","forward","where","when","ask"]),f=y=>{let T=y.join(" "),C=Bo(T,{nlp:n});return Ey(e,C,s)!==!0||C&&!C.node&&p.has(C.shape)&&(C.object!=null&&!d(C.object)||C.shape==="ask"&&C.subject!=null&&!d(C.subject))||Gn(C,cn(e,C,{contextId:s,prev:o}),e).miss?null:{parsed:C,text:T}},m=y=>({parsed:y.parsed,from:r,to:y.text,dropped:[...a],steps:c}),h=0,b=Math.max(i.length,1)+12;for(;h<b;h+=1){let y=-1;for(let v=0;v<i.length;v+=1){let j=i[v].toLowerCase();if(df.has(j)&&!Ec.has(j)&&!l(i[v])){y=v;break}}if(y<0)break;let T=i[y];i=i.filter((v,j)=>j!==y),a.push(T),c.push(`strip noise "${T}" \u2192 "${i.join(" ")}"`);let C=f(i);if(C)return m(C)}let g=Bo(i.join(" "),{nlp:n}),$=new Set;if(g&&!g.node&&p.has(g.shape))for(let y of[g.object,g.subject])for(let T of an(String(y||"").toLowerCase()))$.add(T);let w=[],x=[],R=[];for(let y of i){let T=y.toLowerCase();if(!/^[a-z]+$/.test(T)||Ec.has(T)||Vd.has(T)||u(y)){w.push(y);continue}let v=vy(T);if(v&&v!==T){w.push(v),R.push(`${y}\u2192${v}`);continue}if($.has(T)){w.push(y);continue}x.push(y)}if((R.length||x.length)&&w.length){i=w,a.push(...x),R.length&&c.push(`fuzzy-correct ${JSON.stringify(R)} \u2192 "${i.join(" ")}"`),x.length&&c.push(`drop unmatched ${JSON.stringify(x)} \u2192 "${i.join(" ")}"`);let y=f(i);if(y)return m(y)}let E=!1,k=i.map(y=>{let T=y.toLowerCase();return jr[T]&&!u(y)?(E=!0,jr[T]):y});if(E){c.push(`normalise synonyms \u2192 "${k.join(" ")}"`);let y=f(k);if(y)return m(y)}let O=an(r).map(y=>y.toLowerCase()),S=[],_=[];for(let y of O){if($y.has(y))continue;let T=nt[y];T&&T!=="Change"?S.push(y):_.push(y)}if(S.length===1&&_.length===0){let y=f(["count",S[0]]);if(y)return c.push(`bare kind "${S[0]}" \u2192 count`),m(y)}return null}function cO(e,t){let n=String(t||"");if(!e||!Pw.test(n))return n;let s=e.individuals.filter(c=>c.class==="Commit");if(!s.length)return n;let o=c=>String((c.attributes||[]).find(l=>l.key==="date")?.value||""),r=[...s].sort((c,l)=>o(l).localeCompare(o(c)))[0];if(!r)return n;let i=n.replace(Pw,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return aO.test(a)?`${a} touched`:i}function lO(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 ff(e,t){let n=lO(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function fO(e,t){let n=String(t||"").trim(),s=n.match(uO),o=s?null:n.match(dO),r=s||o;if(!r||!pf.test(r[2]||"")||nt[r[1].toLowerCase()])return null;let i=ff(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 pO(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=ff(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function bO(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 wO(e,t){let n=Ua(String(t||"").trim()),s=n.match(mO),o=s?ug[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(hO)?.[1]||n.match(gO)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Ao[o].predicate},a=pO(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let c=bO(e,r);return c?{...i,subjects:[c],asked:[c]}:null}function yO(e,t){return Ao[e].matchesLocativePredicates?xr(Di(t.prop))||xr(Di(t.predicate)):null}function $O(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Ao[t.relation],r=Di(o.predicate),i=new Map,a=new Map;for(let l of e?.relations||[]){let u=Di(l.prop),d=Di(l.predicate),p=u===r||d===r,f=p?null:yO(t.relation,l);if(!(!p&&!f))for(let m of l.edges||[]){let h=e.byId?.get(m.subject);if(!h||!(s?s.has(m.subject):n.has(h.class)))continue;let g={subject:h,object:m.object,reads:p?o.reads:`is ${f}`};p?i.set(m.subject,g):a.set(`${u||d}\0${m.subject}`,g)}}let c=[...i.values(),...[...a.values()].filter(l=>!i.has(l.subject.id))].sort((l,u)=>String(l.subject.id).localeCompare(String(u.subject.id))||String(l.object).localeCompare(String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:c,matches:c.map(l=>l.subject)}}function Od(e){let t=vO.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 xO(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(Od(a.subject).base,String(a.object));let s=new Set(dg),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:c,epoch:l,stamp:u}=Od(a.subject),d=n.get(c)||t(c);if(!d)continue;let p=`${a.predicate}\0${c}`;EO(r.get(p),l,u)&&(o.set(c,{id:c,label:c,class:d}),r.set(p,{epoch:l,stamp:u,predicate:a.predicate,subject:c,object:Od(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 kO(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=ff(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(c=>c.id));if(i.size<2)return!1;let a=new Map;for(let c of e?.individuals||[])c?.id&&(a.has(c.id)||a.set(c.id,new Set),a.get(c.id).add(c.class));return[...i].every(c=>c===o||a.get(c)?.has(o))}function RO(e,t){return t?.class?t.class==="Module"||t.class==="File"?!0:!!Uo(e,t):!1}function _O(e,t){let n=Ri(t);if(!n)return null;let s=vn(e,n),o=s?.ambiguous?null:s?.match;return!o||o.class!=="Class"?null:`which classes transitively inherit from ${o.label}`}function AO(e,t){let n=_i(String(t||"")).trim();if(Ri(n)||$d(n)!==n)return null;let s=n.match(TO);if(!s)return null;let o=vn(e,s[1].trim()),r=o?.ambiguous?null:o?.match;if(!r||!RO(e,r))return null;let i=r.class==="Class"?"what inherits from it":r.class==="Module"||r.class==="File"?"what imports or calls it":"what calls it";return{content:`I can't answer that \u2014 the index records what is, not what would be. What it can read about ${r.label}: "what would break if ${r.label} were deleted" (${i}), or "/describe ${r.label}" for the facts it holds.`,tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,relaxed:null}}}function co(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(rO(t))return{content:af(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};let r=AO(e,t);if(r)return r;t=_O(e,t)||t,t=cO(e,t);let i=Kd(t,{nlp:s}),a=i.parsed,c=a,l=null;if(Ey(e,a,n)===!1){let f=iO(e,t,{nlp:s,contextId:n,prev:o});f&&(c=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let u=cn(e,c,{contextId:n,prev:o}),d=Gn(c,u,e);if(Mw(e,c,u,d)){let f=fO(e,t);if(f){let m=cn(e,f,{contextId:n,prev:o}),h=Gn(f,m,e);h.miss||(c=f,u=m,d=h,l=null)}}if(Mw(e,c,u,d)){let f=wO(e,t);if(f){let m=cn(e,f,{contextId:n,prev:o}),h=Gn(f,m,e);h.miss||(c=f,u=m,d=h,l=null)}}if(c===null&&d.miss&&!d.ambiguous){let m=_i(String(t||"")).trim().match(SO)?.[1]?.trim();if(m&&!/\s+(?:for|about)$/i.test(m)){let h=Bo(`what is a ${m}`,{nlp:s});h?.shape==="meta"&&(u=cn(e,h,{contextId:n,prev:o}),d=Gn(h,u,e))}}if(c===null&&d.miss&&!d.ambiguous){let m=Fo(String(t||"")).match(jO)?.[1]?.trim();if(m){let h=Bo(`what is a ${m}`,{nlp:s});if(h?.shape==="meta"){let b=cn(e,h,{contextId:n,prev:o}),g=Gn(h,b,e);!g.miss&&!g.ambiguous&&(u=b,d=g)}}}let p=l&&!d.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${d.content}`:d.content;if(!l&&!d.miss&&!d.ambiguous&&i.alternates.length){let f=i.alternates.map(m=>{let h=cn(e,m.parsed,{contextId:n,prev:o}),b=Gn(m.parsed,h,e);return b.miss?null:{a:m,text:b.content}}).filter(Boolean);if(f.length){let m=hw(f.map(h=>h.a),{answerFor:h=>f.find(b=>b.a===h)?.text||null});p=`${p}
60
60
  ${m.join(`
61
61
  `)}`}}if(!d.ambiguous&&u.objMatch&&Array.isArray(u.candidates)&&u.candidates.length){let f=new Set((u.matches||[]).map(h=>h&&h.id)),m=u.candidates.filter(h=>h&&h.id&&h.id!==u.objMatch.id&&!f.has(h.id));if(m.length){let h=m.slice(0,3).map($=>$.label).filter(Boolean),b=m.length-h.length,g=h.join(", ")+(b>0?`, +${b} more`:"");p=`${p}
62
- (answering for ${u.objMatch.label} \u2014 ${m.length} other match${m.length===1?"":"es"}: ${g})`}}return!Array.isArray(u.referents)&&!d.miss&&!d.ambiguous&&(c?.shape==="reverse"||c?.shape==="forward")&&c.entityType&&Array.isArray(u.matches)&&u.matches.length&&u.matches.every(f=>f&&f.class===c.entityType)&&(u={...u,referents:Di(c.entityType,u.matches,"relationListing")}),{content:p,tmct_ask:{mechanical:!0,parsed:c&&!c.ambiguousParse?c:null,canonical:by(c),matches:(u.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?ao(f):void 0})),traversal:u.traversal||null,miss:!!d.miss,ambiguous:!!d.ambiguous,relaxed:l,matchedVia:u.matchedVia||null,...Array.isArray(u.referents)&&u.referents.length?{discourse:u.referents}:{},...d.ambiguous?{candidates:d.candidates,candidateParses:d.candidateParses}:{}}}}var yw,Mr,so,Td,mA,Tt,Mw,ct,Id,hA,gA,bA,wA,yA,vA,Fw,Dw,Nd,xA,ro,Hd,dt,zw,jA,RA,TA,OA,IA,LA,PA,MA,FA,zA,BA,Xd,UA,WA,VA,Kw,Qd,Hw,qw,eC,sC,$w,vw,aC,Zw,Ew,lC,xw,mC,jw,Rw,ry,yC,vC,OC,IC,Zn,Aw,Ad,WC,GC,VC,lf,KC,Ow,HC,Iw,JC,vc,Vd,df,yy,nO,sO,oO,Lw,aO,uO,dO,pf,mO,hO,gO,Fi,vO,EO,SO,jO,Pw,TO,es=P(()=>{Fe();od();Jn();kn();Or();dc();fc();ww();kd();zn();Oi();_d();Lr();yw=new WeakMap;Mr={calls:"callsSymbol",touches:"touchesSymbol"},so=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),Td={Function:"Method",Method:"Function"},mA={uses:["imports","calls","callsSymbol"]},Tt=e=>mA[e]||[e],Mw=new Set(Object.values(Mr)),ct=12,Id={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"]};hA={cochange:"cochanges",reexports:"export"};gA={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"},bA=e=>gA[e]||Do(e),wA=new RegExp(`^(?:${Object.keys(he).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),yA=new Set(["imports"]);vA=/^where\s+(?:does|do|did)\s+/i,Fw=new Set(be(hn));Dw=4,Nd="zzinnerset",xA=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),ro=new Set(["which","what","who","list","show","find","give","me","us","all"]),Hd=new Set(["are","is","was","were"]);dt=e=>nt[e]?{entityType:nt[e],placeholder:!1}:Ss.includes(e)?{entityType:null,placeholder:!0}:null,zw=e=>!!he[e]&&e.endsWith("ing");jA=new Set(["which","the","all"]);RA=new Set(["all","every","each"]);TA=new Set(["what","which","thing","things","one","ones","stuff"]);OA=new Set(["defined","declared"]);IA=new Set(["those","them"]);LA=new Set(["did","was","were","do","does","has","have","had"]),PA=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),MA=new Set(["last","recently","ever","get","got","been","then","now","already"]),FA=new Set(["the","a","an","all","those","these","any"]);zA=new Set(["since","before","after","on"]),BA=new Set(["what","which"]);Xd=new Set(["the","a","an","all","those","these","any"]);UA=new Set(["is","are","was","were","does","do","did"]),WA=new Set(["the","a","an","all","those","these","any"]);VA=/\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/;Kw=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);Qd=new Set(["the","a","an","all","me","us"]),Hw=[...No].sort((e,t)=>t.split(" ").length-e.split(" ").length),qw="functions, classes, methods, modules, packages, attributes, variables, or commits",eC=new Set(["in","inside","under"]);sC=new Set(["called","named","about","like","containing","matching","with"]);$w=new Set(["recent","latest","newest"]);vw=new WeakMap;aC=new Set(["defines","contains"]),Zw=(e,t)=>t==="Module"&&Tt(e).some(n=>aC.has(n)),Ew=new WeakMap;lC=/^git:(.+)$/i;xw=new WeakMap;mC=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);jw=new WeakMap;Rw={label:3,chain:2,attr:1};ry=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;yC=["imports","calls","callsSymbol","inherits","contains","tests"];vC=/^\d{4}-\d{2}-\d{2}$/;OC={defines:"in",contains:"in"};IC=e=>e.length&&e.every(t=>t.class===e[0].class)?e[0].class:null;Zn=e=>yn(e.slice(0,ct).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>ct?`, \u2026and ${e.length-ct} more`:"");Aw=(e,t)=>`${my(e,t)}.`;Ad=10;WC=/^(?:the|a|an)\s+/i,GC=new RegExp(`\\s+(${Object.keys(nt).join("|")})$`,"i");VC=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,lf=new Set(["index","main","app","server","cli","__main__"]),KC=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Ow=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),HC=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>KC.has(t));Iw=8;JC=new Set(["mgx:schemaDoc","mgx:lexiconDoc"]);vc=new Set([...be(Object.keys(he)),...be(Object.keys(nt)),...be(Object.keys(bn)),...be(Object.keys(Ve)),...be(Io),...be(Object.keys(Yn)),...be(Object.keys(Xn)),...be(Object.keys(Zs)),...be(Ss),...be(wi),...be(Oo),...be(hn),...be(Fn),...be(Sn),...be(Object.keys(Sr)),...be([...Ua])]),Vd=new Set([...ft,...ro,...Co]),df=new Set(be(Ga)),yy=new Set([...df,...Vd]),nO=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],sO=[...new Set([...be(Object.keys(he)),...Object.keys(nt),...nO])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!ft.has(e)),oO=new Set(["impact","impacts","impacted"]);Lw=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,aO=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;uO=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,dO=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,pf=/^(?: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;mO=new RegExp(`^(?:${Hw.map(at).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),hO=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,gO=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Fi=e=>String(e||"").toLowerCase();vO=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;EO=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;SO=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,jO=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Pw=(e,t,n,s)=>s.ambiguous?kO(e,t,n):!!s.miss;TO=new RegExp("^if\\s+(.+?)\\s+(?:were|was|had|has|is|are|becomes?|became|gets?|got|stops?|stopped|starts?|started)\\s+[^,]*,?\\s*(?:would|will|could|might|should)\\b","i")});function lo(e,t,n,s){let o=Math.max(1,t),r=Math.min(e.length,n),i=!1;s!=null&&r-o+1>s&&(r=o+s-1,i=!0);let a=e.slice(o-1,r).map((c,l)=>`${o+l} ${c}`).join(`
63
- `);return{start:o,end:r,text:a,truncated:i}}async function Ms({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Gt(t),a=Gt(i,n);if(a!==i&&!a.startsWith(i+og))throw new Ne(`refusing to read outside the repository root: ${n}`);let l=(await e(a,"utf8")).split(`
64
- `);return s==null||o==null?{lines:l}:{lines:l,...lo(l,s,o,r)}}var kc=P(()=>{Qe();Xt()});function At(e){return{ok:!0,value:e}}function Ct(e,{detail:t="",term:n=null}={}){if(!gt[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function ts(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 Rc(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 hf,CO,gt,gf,q2,xy,bf,OO,Gn,mf,Kt,Y2,Sy=P(()=>{hf="1.1.0",CO="urn:tmct:core",gt=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),gf=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),q2=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"}),xy=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),bf=Object.freeze(Object.values(xy).flat()),OO=Object.freeze(new Set(xy.source));Gn="Individual",mf="Edge",Kt="concurrent-safe: reads immutable graph truth; no shared mutable state",Y2=Object.freeze({version:hf,ontology:CO,missReasons:Object.values(gt),edgeKinds:[...gf],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: ${Gn}, candidates: ${Gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,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: ${Gn}, out: ${mf}[], incoming: ${mf}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${Gn}[], attributes: ${Gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${Gn}[], subclasses: ${Gn}[], levels: Array<${Gn}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,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: ${Gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,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:Kt,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: ${mf}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,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:Kt,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:Kt,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:Kt,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:Kt,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${Gn}[] }`,misses:[],concurrency:Kt,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:Kt,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:Kt,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: ${Gn}[] }`,misses:[],concurrency:Kt,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:Kt,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function IO(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(Rc(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(Rc(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function NO(e,t){for(let n of e.relations)if(As(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function PO(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Ms({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(`
62
+ (answering for ${u.objMatch.label} \u2014 ${m.length} other match${m.length===1?"":"es"}: ${g})`}}return!Array.isArray(u.referents)&&!d.miss&&!d.ambiguous&&(c?.shape==="reverse"||c?.shape==="forward")&&c.entityType&&Array.isArray(u.matches)&&u.matches.length&&u.matches.every(f=>f&&f.class===c.entityType)&&(u={...u,referents:zi(c.entityType,u.matches,"relationListing")}),{content:p,tmct_ask:{mechanical:!0,parsed:c&&!c.ambiguousParse?c:null,canonical:wy(c),matches:(u.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?ao(f):void 0})),traversal:u.traversal||null,miss:!!d.miss,ambiguous:!!d.ambiguous,relaxed:l,matchedVia:u.matchedVia||null,...Array.isArray(u.referents)&&u.referents.length?{discourse:u.referents}:{},...d.ambiguous?{candidates:d.candidates,candidateParses:d.candidateParses}:{}}}}var $w,Fr,so,Td,mA,Tt,Fw,ct,Id,hA,gA,bA,wA,yA,vA,Dw,zw,Nd,xA,ro,Hd,dt,Bw,jA,RA,TA,OA,IA,LA,PA,MA,FA,zA,BA,Xd,UA,WA,VA,Hw,Qd,qw,Yw,eC,sC,vw,Ew,aC,ey,xw,lC,Sw,mC,kw,_w,iy,yC,vC,OC,IC,ts,Cw,Ad,WC,GC,VC,lf,KC,Iw,HC,Nw,JC,Ec,Vd,df,$y,nO,sO,oO,Pw,aO,uO,dO,pf,mO,hO,gO,Di,vO,EO,SO,jO,Mw,TO,ns=P(()=>{Fe();od();Zn();kn();Ir();fc();pc();yw();kd();Bn();Ii();_d();Pr();$w=new WeakMap;Fr={calls:"callsSymbol",touches:"touchesSymbol"},so=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),Td={Function:"Method",Method:"Function"},mA={uses:["imports","calls","callsSymbol"]},Tt=e=>mA[e]||[e],Fw=new Set(Object.values(Fr)),ct=12,Id={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"]};hA={cochange:"cochanges",reexports:"export"};gA={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"},bA=e=>gA[e]||Do(e),wA=new RegExp(`^(?:${Object.keys(he).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),yA=new Set(["imports"]);vA=/^where\s+(?:does|do|did)\s+/i,Dw=new Set(be(hn));zw=4,Nd="zzinnerset",xA=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),ro=new Set(["which","what","who","list","show","find","give","me","us","all"]),Hd=new Set(["are","is","was","were"]);dt=e=>nt[e]?{entityType:nt[e],placeholder:!1}:Ss.includes(e)?{entityType:null,placeholder:!0}:null,Bw=e=>!!he[e]&&e.endsWith("ing");jA=new Set(["which","the","all"]);RA=new Set(["all","every","each"]);TA=new Set(["what","which","thing","things","one","ones","stuff"]);OA=new Set(["defined","declared"]);IA=new Set(["those","them"]);LA=new Set(["did","was","were","do","does","has","have","had"]),PA=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),MA=new Set(["last","recently","ever","get","got","been","then","now","already"]),FA=new Set(["the","a","an","all","those","these","any"]);zA=new Set(["since","before","after","on"]),BA=new Set(["what","which"]);Xd=new Set(["the","a","an","all","those","these","any"]);UA=new Set(["is","are","was","were","does","do","did"]),WA=new Set(["the","a","an","all","those","these","any"]);VA=/\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/;Hw=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);Qd=new Set(["the","a","an","all","me","us"]),qw=[...No].sort((e,t)=>t.split(" ").length-e.split(" ").length),Yw="functions, classes, methods, modules, packages, attributes, variables, or commits",eC=new Set(["in","inside","under"]);sC=new Set(["called","named","about","like","containing","matching","with"]);vw=new Set(["recent","latest","newest"]);Ew=new WeakMap;aC=new Set(["defines","contains"]),ey=(e,t)=>t==="Module"&&Tt(e).some(n=>aC.has(n)),xw=new WeakMap;lC=/^git:(.+)$/i;Sw=new WeakMap;mC=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);kw=new WeakMap;_w={label:3,chain:2,attr:1};iy=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;yC=["imports","calls","callsSymbol","inherits","contains","tests"];vC=/^\d{4}-\d{2}-\d{2}$/;OC={defines:"in",contains:"in"};IC=e=>e.length&&e.every(t=>t.class===e[0].class)?e[0].class:null;ts=e=>yn(e.slice(0,ct).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>ct?`, \u2026and ${e.length-ct} more`:"");Cw=(e,t)=>`${hy(e,t)}.`;Ad=10;WC=/^(?:the|a|an)\s+/i,GC=new RegExp(`\\s+(${Object.keys(nt).join("|")})$`,"i");VC=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,lf=new Set(["index","main","app","server","cli","__main__"]),KC=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Iw=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),HC=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>KC.has(t));Nw=8;JC=new Set(["mgx:schemaDoc","mgx:lexiconDoc"]);Ec=new Set([...be(Object.keys(he)),...be(Object.keys(nt)),...be(Object.keys(bn)),...be(Object.keys(Ve)),...be(Io),...be(Object.keys(Jn)),...be(Object.keys(Qn)),...be(Object.keys(Zs)),...be(Ss),...be(yi),...be(Oo),...be(hn),...be(Dn),...be(Sn),...be(Object.keys(jr)),...be([...Wa])]),Vd=new Set([...ft,...ro,...Co]),df=new Set(be(Va)),$y=new Set([...df,...Vd]),nO=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],sO=[...new Set([...be(Object.keys(he)),...Object.keys(nt),...nO])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!ft.has(e)),oO=new Set(["impact","impacts","impacted"]);Pw=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,aO=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;uO=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,dO=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,pf=/^(?: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;mO=new RegExp(`^(?:${qw.map(at).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),hO=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,gO=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Di=e=>String(e||"").toLowerCase();vO=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;EO=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;SO=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,jO=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Mw=(e,t,n,s)=>s.ambiguous?kO(e,t,n):!!s.miss;TO=new RegExp("^if\\s+(.+?)\\s+(?:were|was|had|has|is|are|becomes?|became|gets?|got|stops?|stopped|starts?|started)\\s+[^,]*,?\\s*(?:would|will|could|might|should)\\b","i")});function lo(e,t,n,s){let o=Math.max(1,t),r=Math.min(e.length,n),i=!1;s!=null&&r-o+1>s&&(r=o+s-1,i=!0);let a=e.slice(o-1,r).map((c,l)=>`${o+l} ${c}`).join(`
63
+ `);return{start:o,end:r,text:a,truncated:i}}async function Ms({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Gt(t),a=Gt(i,n);if(a!==i&&!a.startsWith(i+rg))throw new Ne(`refusing to read outside the repository root: ${n}`);let l=(await e(a,"utf8")).split(`
64
+ `);return s==null||o==null?{lines:l}:{lines:l,...lo(l,s,o,r)}}var Rc=P(()=>{Qe();Xt()});function At(e){return{ok:!0,value:e}}function Ct(e,{detail:t="",term:n=null}={}){if(!gt[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function ss(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 _c(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 hf,CO,gt,gf,X2,Sy,bf,OO,Vn,mf,Kt,J2,jy=P(()=>{hf="1.1.0",CO="urn:tmct:core",gt=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),gf=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),X2=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"}),Sy=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),bf=Object.freeze(Object.values(Sy).flat()),OO=Object.freeze(new Set(Sy.source));Vn="Individual",mf="Edge",Kt="concurrent-safe: reads immutable graph truth; no shared mutable state",J2=Object.freeze({version:hf,ontology:CO,missReasons:Object.values(gt),edgeKinds:[...gf],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:Kt,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: ${mf}[], incoming: ${mf}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,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:Kt,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:Kt,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:Kt,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:Kt,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: ${mf}[] }`,misses:["UNRESOLVED_TERM"],concurrency:Kt,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:Kt,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:Kt,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:Kt,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:Kt,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${Vn}[] }`,misses:[],concurrency:Kt,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:Kt,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:Kt,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:Kt,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:Kt,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function IO(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(_c(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(_c(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function NO(e,t){for(let n of e.relations)if(As(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function PO(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Ms({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
65
  ## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(lo(o,i,a,wf).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,c=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
66
66
  ## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${c} @ ${e.moduleLabel}:${i}-${a}`),r.push(lo(o,i,a,wf).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=LO;for(let a of e.calleeBodies){if(i<=0)break;let c=a.site.start,u=a.site.path===e.moduleLabel?o:null;if(!u)try{({lines:u}=await Ms({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=lo(u,c,a.site.end,i);r.push(`
67
67
  ## inlined callee body (depth-1 in-repo call): ${a.label} @ ${a.site.path}:${c}-${a.site.end}`),r.push(d.text),i-=d.end-c+1}}return r.join(`
68
- `)}function _c(e,{sourceAccess:t=!1,repoRoot:n=null,readFile:s=null,tel:o=null,ask:r=null}={}){let i=e.byId;if(t&&(!n||typeof s!="function"))throw new TypeError("createGraphService({ sourceAccess: true }) requires both repoRoot and readFile \u2014 fs access is an injected capability, not an ambient import.");let a=l=>i.get(l)||null,c={version:hf,capabilities:[...bf],sourceAccess:!!t,graph:e,resolve(l){let{match:u,candidates:d}=wn(e,String(l??""));return u?At({match:ts(u),candidates:d.map(ts)}):Ct(gt.UNRESOLVED_TERM,{term:String(l??"")})},describe(l){let u=a(l);if(!u)return Ct(gt.UNRESOLVED_TERM,{term:l});let{out:d,incoming:p}=IO(e,l);return At({individual:ts(u),out:d,incoming:p})},members(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let d=Te(e,"contains").filter(m=>m.subject===l),p=[],f=[];for(let m of d){let h=i.get(m.object),b=h?ts(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.class||"")==="Attribute"?f.push(b):p.push(b)}return At({methods:p,attributes:f})},subclasses(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let d=Te(e,"inherits"),p=d.filter($=>$.subject===l).map($=>i.get($.object)?ts(i.get($.object)):{id:$.object,label:$.objectLabel||$.object,class:"Class",attributes:[]}),f=new Map;for(let $ of d)f.has($.object)||f.set($.object,[]),f.get($.object).push($.subject);let m=new Set([l]),h=[],b=[],g=[l];for(let $=0;$<8&&g.length;$+=1){let w=[],x=[];for(let R of g)for(let E of f.get(R)||[]){if(m.has(E))continue;m.add(E);let k=i.get(E),O=k?ts(k):{id:E,label:E,class:"Class",attributes:[]};h.push(O),x.push(O),w.push(E)}x.length&&b.push(x),g=w}return At({bases:p,subclasses:h,levels:b})},exports(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let p=Te(e,"reexports").filter(f=>f.subject===l).map(f=>i.get(f.object)?ts(i.get(f.object)):{id:f.object,label:f.objectLabel||f.object,class:"Entity",attributes:[]});return At({exports:p})},signature(l){let u=a(l);if(!u)return Ct(gt.UNRESOLVED_TERM,{term:l});let d=[];for(let[f,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])ln(u,f)&&d.push(m);let p=ln(u,"visibility");return p&&d.push(p),At({id:u.id,label:u.label,class:u.class||"Entity",params:ln(u,"params"),returns:ln(u,"returns"),raises:ln(u,"raises"),decorators:ln(u,"decorators"),doc:ln(u,"doc"),selfFields:ln(u,"self_fields"),flags:d})},edges(l,u,{limit:d,offset:p=0}={}){if(!gf.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let m=NO(e,u),h=Te(e,u).filter(b=>b.subject===l).map(b=>Rc(b,m));return h=d==null?h.slice(p):h.slice(p,p+d),At({kind:u,edges:h})},impact(l,{maxDepth:u}={}){let d=a(l);if(!d)return Ct(gt.UNRESOLVED_TERM,{term:l});let p=u==null?Ar(e,d):Ar(e,d,{maxDepth:u}),f=p.reduce((m,h)=>m+h.length,0);return At({total:f,levels:p})},async snippet(l){let u=a(l);if(!u)return Ct(gt.UNRESOLVED_TERM,{term:l});let d=Vt(u);if(!c.sourceAccess)return Ct(gt.NO_SOURCE,{term:l,detail:d?`span is ${d.path}:${d.start}-${d.end}; this provider exposes no working tree`:"no source span in the graph"});if(!d)return Ct(gt.NO_SOURCE,{term:l,detail:"no source span in the graph (likely a module)"});try{let p=await Ms({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:wf});return At({path:d.path,span:{start:d.start,end:d.end},body:p.text})}catch(p){return Ct(gt.NO_SOURCE,{term:l,detail:`could not read ${d.path}: ${p?.message||p}`})}},async context(l,{depth:u="auto"}={}){let{match:d}=wn(e,String(l??""));if(!d)return Ct(gt.UNRESOLVED_TERM,{term:String(l??"")});let p=Cr(e,d),f=String(u||"auto").trim().toLowerCase(),m,h;f==="min"?(m="TINY",h=Mo("TINY")):f==="full"?(m="FULL",h=Mo("FULL")):{tier:m,mask:h}=ac(p,e,{});let b=Pb(p,h);if(!c.sourceAccess)return At({text:b,tier:m});let g=await PO(p,h,{readFile:s,repoRoot:n});return At({text:g?`${b}
69
- ${g}`:b,tier:m})},architecture({package:l=""}={}){let u=String(l||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(g=>(g.class||"")==="Module"&&(!u||String(g.label||"").toLowerCase().startsWith(u))),p=new Map;for(let g of d){let $=g.label.includes("/")?g.label.slice(0,g.label.lastIndexOf("/")):"(root)";p.set($,(p.get($)||0)+1)}let f=new Set(d.map(g=>g.id)),m=new Map;for(let g of Te(e,"imports"))f.has(g.object)&&m.set(g.object,(m.get(g.object)||0)+1);let h=[...m.entries()].sort((g,$)=>$[1]-g[1]).map(([g,$])=>({id:g,label:i.get(g)?.label||g,importers:$})),b=[...p.entries()].sort((g,$)=>$[1]-g[1]);return At({modules:d.length,packages:b,hubs:h})},untested(){let l=new Set(Te(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!l.has(d.id)&&!/\.test\./.test(d.label||"")).map(ts);return At({modules:u})},stats(){let l=new Map;for(let d of e.individuals){let p=d.class||"Entity";l.set(p,(l.get(p)||0)+1)}let u=[...l.entries()].map(([d,p])=>({class:d,count:p})).sort((d,p)=>p.count-d.count||d.class.localeCompare(p.class));return At({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let d=[...Te(e,"touches"),...Te(e,"touchesSymbol")].filter(m=>m.object===l),p=new Set,f=[];for(let m of d){if(p.has(m.subject))continue;p.add(m.subject);let h=i.get(m.subject);f.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?ln(h,"author")??ln(h,"commitAuthor"):null,date:h?ln(h,"date")??ln(h,"commitDate"):null,message:h?ln(h,"message")??ln(h,"commitMessage"):null})}return At({commits:f})},search(l,{kind:u="",name:d="",decorator:p="",limit:f=sc,offset:m=0}={}){let h=String(l||""),b=String(u||"").trim().toLowerCase(),g=String(d||"").trim(),$=String(p||"").trim().toLowerCase(),w;if(b&&b!=="module"){let R=null;if(g){let k=md(g);if(k.error)return Ct(gt.UNRESOLVED_TERM,{term:g,detail:k.error});R=k}let E=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=bd(e,E,{kind:b,decFilter:$,nameRe:R}).map(k=>k.ind)}catch(k){return Ct(gt.UNRESOLVED_TERM,{term:g,detail:String(k?.message||k)})}}else{let R=new Map;for(let E of e.individuals)(E.class||"")==="Module"&&R.set(E.label,E);w=pb(e,h).map(({path:E})=>R.get(E)).filter(Boolean)}let x=w.slice(m,m+f).map(ts);return At({results:x})},ask(l){if(typeof r!="function")return Ct(gt.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(l||""));return At({content:u,tmct_ask:d})}};if(o)for(let l of bf){let u=c[l];typeof u=="function"&&(c[l]=(...d)=>{let p=performance.now(),f=u.apply(c,d);return f&&typeof f.then=="function"?f.then(m=>(jy(o,l,performance.now()-p,m),m)):(jy(o,l,performance.now()-p,f),f)})}return c}function jy(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:MO(s)})}catch{}}function MO(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 ln,wf,LO,Tc=P(()=>{Fe();kc();Sy();ln=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;wf=200,LO=120});async function zi(e,t){let n=await t.fetchEntities(e),s=nc(n);if(!s.individuals.length){let o=new Ne(`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 Ac=P(()=>{Xt();Fe()});function uo({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function pt(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Ne(`${t} is required`);return n}function Ft(e,t,n){let{match:s,candidates:o}=wn(e.graph,t);if(!s)throw new Ne(`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 Bi,bt,ot=P(()=>{Xt();Fe();Bi=200;bt=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=Ft(s,pt(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function ky(e,{config:t,source:n=kr,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Ne("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,c=!!e?.untuned,l=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await zi(t,n),p=$e($e(t.graphFile)),f=_c(d,{sourceAccess:!0,repoRoot:p,readFile:Oe,tel:o,ask:co}),{match:m}=Ft(f,r,"symbol"),h=Cr(d,m),b,g,$=!1;a||i==="min"?(b="TINY",g=Mo("TINY")):l||i==="full"?(b="FULL",g=Mo("FULL"),$=!0):{tier:b,mask:g,topup:$}=ac(h,d,{untuned:c}),s&&!l&&(g=Nb(g));let w=null;if(h.moduleLabel)try{({lines:w}=await Ms({readFile:Oe,repoRoot:p,path:h.moduleLabel}))}catch{w=null}let x=k=>w&&w[k-1]!=null?w[k-1].trim():"",R=(k,O)=>lo(w,k,O,Bi).text,E=[`Edit context for ${h.moduleLabel} [${b}${s?" secondary":""}] \u2014 assembled from the typed graph + that file. You do NOT need to Read it; write the new code directly after reviewing this.`];if(g.anchor&&h.anchor?.site&&w){let{start:k,end:O}=h.anchor.site;E.push(`
68
+ `)}function Tc(e,{sourceAccess:t=!1,repoRoot:n=null,readFile:s=null,tel:o=null,ask:r=null}={}){let i=e.byId;if(t&&(!n||typeof s!="function"))throw new TypeError("createGraphService({ sourceAccess: true }) requires both repoRoot and readFile \u2014 fs access is an injected capability, not an ambient import.");let a=l=>i.get(l)||null,c={version:hf,capabilities:[...bf],sourceAccess:!!t,graph:e,resolve(l){let{match:u,candidates:d}=wn(e,String(l??""));return u?At({match:ss(u),candidates:d.map(ss)}):Ct(gt.UNRESOLVED_TERM,{term:String(l??"")})},describe(l){let u=a(l);if(!u)return Ct(gt.UNRESOLVED_TERM,{term:l});let{out:d,incoming:p}=IO(e,l);return At({individual:ss(u),out:d,incoming:p})},members(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let d=Te(e,"contains").filter(m=>m.subject===l),p=[],f=[];for(let m of d){let h=i.get(m.object),b=h?ss(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.class||"")==="Attribute"?f.push(b):p.push(b)}return At({methods:p,attributes:f})},subclasses(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let d=Te(e,"inherits"),p=d.filter($=>$.subject===l).map($=>i.get($.object)?ss(i.get($.object)):{id:$.object,label:$.objectLabel||$.object,class:"Class",attributes:[]}),f=new Map;for(let $ of d)f.has($.object)||f.set($.object,[]),f.get($.object).push($.subject);let m=new Set([l]),h=[],b=[],g=[l];for(let $=0;$<8&&g.length;$+=1){let w=[],x=[];for(let R of g)for(let E of f.get(R)||[]){if(m.has(E))continue;m.add(E);let k=i.get(E),O=k?ss(k):{id:E,label:E,class:"Class",attributes:[]};h.push(O),x.push(O),w.push(E)}x.length&&b.push(x),g=w}return At({bases:p,subclasses:h,levels:b})},exports(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let p=Te(e,"reexports").filter(f=>f.subject===l).map(f=>i.get(f.object)?ss(i.get(f.object)):{id:f.object,label:f.objectLabel||f.object,class:"Entity",attributes:[]});return At({exports:p})},signature(l){let u=a(l);if(!u)return Ct(gt.UNRESOLVED_TERM,{term:l});let d=[];for(let[f,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])ln(u,f)&&d.push(m);let p=ln(u,"visibility");return p&&d.push(p),At({id:u.id,label:u.label,class:u.class||"Entity",params:ln(u,"params"),returns:ln(u,"returns"),raises:ln(u,"raises"),decorators:ln(u,"decorators"),doc:ln(u,"doc"),selfFields:ln(u,"self_fields"),flags:d})},edges(l,u,{limit:d,offset:p=0}={}){if(!gf.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let m=NO(e,u),h=Te(e,u).filter(b=>b.subject===l).map(b=>_c(b,m));return h=d==null?h.slice(p):h.slice(p,p+d),At({kind:u,edges:h})},impact(l,{maxDepth:u}={}){let d=a(l);if(!d)return Ct(gt.UNRESOLVED_TERM,{term:l});let p=u==null?Cr(e,d):Cr(e,d,{maxDepth:u}),f=p.reduce((m,h)=>m+h.length,0);return At({total:f,levels:p})},async snippet(l){let u=a(l);if(!u)return Ct(gt.UNRESOLVED_TERM,{term:l});let d=Vt(u);if(!c.sourceAccess)return Ct(gt.NO_SOURCE,{term:l,detail:d?`span is ${d.path}:${d.start}-${d.end}; this provider exposes no working tree`:"no source span in the graph"});if(!d)return Ct(gt.NO_SOURCE,{term:l,detail:"no source span in the graph (likely a module)"});try{let p=await Ms({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:wf});return At({path:d.path,span:{start:d.start,end:d.end},body:p.text})}catch(p){return Ct(gt.NO_SOURCE,{term:l,detail:`could not read ${d.path}: ${p?.message||p}`})}},async context(l,{depth:u="auto"}={}){let{match:d}=wn(e,String(l??""));if(!d)return Ct(gt.UNRESOLVED_TERM,{term:String(l??"")});let p=Or(e,d),f=String(u||"auto").trim().toLowerCase(),m,h;f==="min"?(m="TINY",h=Mo("TINY")):f==="full"?(m="FULL",h=Mo("FULL")):{tier:m,mask:h}=cc(p,e,{});let b=Mb(p,h);if(!c.sourceAccess)return At({text:b,tier:m});let g=await PO(p,h,{readFile:s,repoRoot:n});return At({text:g?`${b}
69
+ ${g}`:b,tier:m})},architecture({package:l=""}={}){let u=String(l||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(g=>(g.class||"")==="Module"&&(!u||String(g.label||"").toLowerCase().startsWith(u))),p=new Map;for(let g of d){let $=g.label.includes("/")?g.label.slice(0,g.label.lastIndexOf("/")):"(root)";p.set($,(p.get($)||0)+1)}let f=new Set(d.map(g=>g.id)),m=new Map;for(let g of Te(e,"imports"))f.has(g.object)&&m.set(g.object,(m.get(g.object)||0)+1);let h=[...m.entries()].sort((g,$)=>$[1]-g[1]).map(([g,$])=>({id:g,label:i.get(g)?.label||g,importers:$})),b=[...p.entries()].sort((g,$)=>$[1]-g[1]);return At({modules:d.length,packages:b,hubs:h})},untested(){let l=new Set(Te(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!l.has(d.id)&&!/\.test\./.test(d.label||"")).map(ss);return At({modules:u})},stats(){let l=new Map;for(let d of e.individuals){let p=d.class||"Entity";l.set(p,(l.get(p)||0)+1)}let u=[...l.entries()].map(([d,p])=>({class:d,count:p})).sort((d,p)=>p.count-d.count||d.class.localeCompare(p.class));return At({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(l){if(!a(l))return Ct(gt.UNRESOLVED_TERM,{term:l});let d=[...Te(e,"touches"),...Te(e,"touchesSymbol")].filter(m=>m.object===l),p=new Set,f=[];for(let m of d){if(p.has(m.subject))continue;p.add(m.subject);let h=i.get(m.subject);f.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?ln(h,"author")??ln(h,"commitAuthor"):null,date:h?ln(h,"date")??ln(h,"commitDate"):null,message:h?ln(h,"message")??ln(h,"commitMessage"):null})}return At({commits:f})},search(l,{kind:u="",name:d="",decorator:p="",limit:f=oc,offset:m=0}={}){let h=String(l||""),b=String(u||"").trim().toLowerCase(),g=String(d||"").trim(),$=String(p||"").trim().toLowerCase(),w;if(b&&b!=="module"){let R=null;if(g){let k=md(g);if(k.error)return Ct(gt.UNRESOLVED_TERM,{term:g,detail:k.error});R=k}let E=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=bd(e,E,{kind:b,decFilter:$,nameRe:R}).map(k=>k.ind)}catch(k){return Ct(gt.UNRESOLVED_TERM,{term:g,detail:String(k?.message||k)})}}else{let R=new Map;for(let E of e.individuals)(E.class||"")==="Module"&&R.set(E.label,E);w=mb(e,h).map(({path:E})=>R.get(E)).filter(Boolean)}let x=w.slice(m,m+f).map(ss);return At({results:x})},ask(l){if(typeof r!="function")return Ct(gt.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(l||""));return At({content:u,tmct_ask:d})}};if(o)for(let l of bf){let u=c[l];typeof u=="function"&&(c[l]=(...d)=>{let p=performance.now(),f=u.apply(c,d);return f&&typeof f.then=="function"?f.then(m=>(ky(o,l,performance.now()-p,m),m)):(ky(o,l,performance.now()-p,f),f)})}return c}function ky(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:MO(s)})}catch{}}function MO(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 ln,wf,LO,Ac=P(()=>{Fe();Rc();jy();ln=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;wf=200,LO=120});async function Bi(e,t){let n=await t.fetchEntities(e),s=sc(n);if(!s.individuals.length){let o=new Ne(`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 Cc=P(()=>{Xt();Fe()});function uo({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function pt(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Ne(`${t} is required`);return n}function Ft(e,t,n){let{match:s,candidates:o}=wn(e.graph,t);if(!s)throw new Ne(`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 Ui,bt,ot=P(()=>{Xt();Fe();Ui=200;bt=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=Ft(s,pt(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function Ry(e,{config:t,source:n=Rr,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Ne("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,c=!!e?.untuned,l=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await Bi(t,n),p=$e($e(t.graphFile)),f=Tc(d,{sourceAccess:!0,repoRoot:p,readFile:Oe,tel:o,ask:co}),{match:m}=Ft(f,r,"symbol"),h=Or(d,m),b,g,$=!1;a||i==="min"?(b="TINY",g=Mo("TINY")):l||i==="full"?(b="FULL",g=Mo("FULL"),$=!0):{tier:b,mask:g,topup:$}=cc(h,d,{untuned:c}),s&&!l&&(g=Lb(g));let w=null;if(h.moduleLabel)try{({lines:w}=await Ms({readFile:Oe,repoRoot:p,path:h.moduleLabel}))}catch{w=null}let x=k=>w&&w[k-1]!=null?w[k-1].trim():"",R=(k,O)=>lo(w,k,O,Ui).text,E=[`Edit context for ${h.moduleLabel} [${b}${s?" secondary":""}] \u2014 assembled from the typed graph + that file. You do NOT need to Read it; write the new code directly after reviewing this.`];if(g.anchor&&h.anchor?.site&&w){let{start:k,end:O}=h.anchor.site;E.push(`
70
70
  ## anchor: ${h.anchor.label} (${h.anchor.class}) @ ${h.moduleLabel}:${k}-${O}`),E.push(R(k,O)),h.callHint&&E.push(h.callHint)}if(g.registration&&h.globals.length){E.push(`
71
71
  ## registration / module globals (replicate this pattern):`);for(let k of h.globals)E.push(` ${k.label} = ${k.value}${k.site?` [:${k.site.start}]`:""}`)}if(g.exemplar&&h.exemplar?.site&&w){let{start:k,end:O}=h.exemplar.site,S=h.exemplar.decorators?` @${h.exemplar.decorators}`:"";E.push(`
72
72
  ## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${S} @ ${h.moduleLabel}:${k}-${O}`),E.push(R(k,O)),h.callHint&&E.push(h.callHint)}if(g.inlinedCallees&&h.calleeBodies.length&&w){let k=120;for(let O of h.calleeBodies){if(k<=0)break;let S=O.site.start,y=O.site.path===h.moduleLabel&&w?w:await Ms({readFile:Oe,repoRoot:p,path:O.site.path}).then(C=>C.lines).catch(()=>null);if(!y)continue;let T=lo(y,S,O.site.end,k);E.push(`
@@ -82,29 +82,29 @@ ${g}`:b,tier:m})},architecture({package:l=""}={}){let u=String(l||"").trim().toL
82
82
  ## covering tests: ${h.tests.join(", ")}`),g.cochange&&h.cochange&&h.cochange.length&&E.push(`
83
83
  ## usually changed together (consider editing these too): ${h.cochange.map(k=>`${k.label} (\xD7${k.weight})`).join(", ")}`),E.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}.`),b!=="FULL"&&E.push(`(bundle tier ${b}; for any omitted sections run ${u}context_more {"symbol":"${r}"}, or ${u}context with depth="full".)`),{text:E.join(`
85
- `),tier:b,topup:$}}async function yf(e,{config:t,source:n,tel:s}){return(await ky(e,{config:t,source:n,tel:s})).text}var $f=P(()=>{Pt();Qe();Xt();kc();$i();Fe();es();Tc();Ac();ot();yf.ownsGraphLoad=!0});function Ry(e,{graph:t,svc:n}){let{match:s}=Ft(n,pt(e,"symbol"),"symbol");return Lb(Cr(t,s))}var _y=P(()=>{Fe();ot()});function Cc(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 Ui(e){return Cc(e).toString(16).padStart(8,"0")}function vf(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 x=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,R=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+x+i[w-7]+R>>>0}let[d,p,f,m,h,b,g,$]=r;for(let w=0;w<64;w+=1){let x=a(h,6)^a(h,11)^a(h,25),R=h&b^~h&g,E=$+x+R+FO[w]+i[w]>>>0,k=a(d,2)^a(d,13)^a(d,22),O=d&p^d&f^p&f,S=k+O>>>0;$=g,g=b,b=h,h=m+E>>>0,m=f,f=p,p=d,d=E+S>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+p>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+m>>>0,r[4]=r[4]+h>>>0,r[5]=r[5]+b>>>0,r[6]=r[6]+g>>>0,r[7]=r[7]+$>>>0}let c=new Uint8Array(32),l=new DataView(c.buffer);for(let u=0;u<8;u+=1)l.setUint32(u*4,r[u]);return c}function DO(e,t){let n=vf(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function V(e){let t=ns(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 ss(e){let t=ns(e);return BO.get(t)??t}function Ee(e,t,n){return Wo(V(e),ss(t),V(n))}var FO,zO,ns,BO,Wo,Ze=P(()=>{FO=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]);zO=2e3,ns=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,zO);BO=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"]]);Wo=(e,t,n)=>`fact:${DO(`${e}\0${t}\0${n}`,8)}`});var un={};Lt(un,{CARDINALITY_RULE_CONFIDENCE:()=>HO,CAX_DW_RULE:()=>xf,CAX_DW_RULE_CONFIDENCE:()=>jf,CAX_MAXC0_RULE_CONFIDENCE:()=>YO,CLS_SVF1_RULE:()=>kf,CLS_SVF1_RULE_CONFIDENCE:()=>_f,DEFAULT_MAX_ENVIRONMENTS:()=>Wr,DISJOINT_PREDICATE:()=>Br,ENTAILED_DISJOINT_PROVENANCE:()=>Sf,ENTAILED_PROVENANCE:()=>Cy,ENTAILED_SCM_SVF_PROVENANCE:()=>Of,ENTAILED_SVF1_PROVENANCE:()=>Rf,ENTAILED_TYPE_PROVENANCE:()=>Iy,ON_PROPERTY_PREDICATE:()=>Rn,SCM_SVF_RULE:()=>Cf,SCM_SVF_RULE_CONFIDENCE:()=>If,SOME_VALUES_FROM_PREDICATE:()=>_n,SUBCLASS_PREDICATE:()=>Be,TYPE_PREDICATE:()=>Dt,buildCardinalityRestrictions:()=>Af,buildRelevanceFrontier:()=>Ef,buildSubClassSuccessors:()=>Oc,deriveDisjointViolations:()=>My,deriveSomeValuesFromApplication:()=>Fy,deriveSomeValuesFromSubsumption:()=>Dy,deriveSubClassClosure:()=>Ny,deriveSubClassClosureDelta:()=>Ly,deriveTypePropagation:()=>Py,entailedTrustFrom:()=>WO,findConsistencyViolations:()=>JO,findIsaChain:()=>Nf,proveCardinalityAtLeast:()=>qO,proveMaxCardinalityZeroDenial:()=>XO,retractSubClassOf:()=>tI,syllogise:()=>By});function Ty(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 WO(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 Fs(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function Ny(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}${Ue}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:Fs(s),a=(u,d,p)=>!i||i.has(u)||i.has(d)||i.has(p),c=[],l=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[f,m]of r)for(let h of m){let b=r.get(h);if(b)for(let g of b){if(f===g)continue;let $=`${f}${Ue}${g}`;o.has($)||l.has($)||a(f,h,g)&&d.push([f,h,g,$])}}if(!d.length)break;d.sort((f,m)=>f[0].localeCompare(m[0])||f[2].localeCompare(m[2])||f[1].localeCompare(m[1]));let p=!1;for(let[f,m,h,b]of d)if(!l.has(b)){if(c.length>=n)break;l.add(b),c.push({subject:f,object:h,via:m}),r.has(f)||r.set(f,new Set),r.get(f).add(h),p=!0}if(c.length>=n||!p)break}return c}function Ly(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}${Ue}${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 c=[],l=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let b=`${m}${Ue}${h}`;l.has(b)||(l.add(b),c.push([m,h]))}let u=o instanceof Set?o.size?o:null:Fs(o),d=(m,h,b)=>!u||u.has(m)||u.has(h)||u.has(b),p=[],f=new Set;for(let m=0;m<n&&c.length;m+=1){let h=[],b=(w,x,R)=>{if(w===R)return;let E=`${w}${Ue}${R}`;r.has(E)||f.has(E)||d(w,x,R)&&h.push([w,x,R,E])};for(let[w,x]of c){for(let R of i.get(x)||[])b(w,x,R);for(let R of a.get(w)||[])b(R,w,x)}if(!h.length)break;h.sort((w,x)=>w[0].localeCompare(x[0])||w[2].localeCompare(x[2])||w[1].localeCompare(x[1]));let g=!1,$=[];for(let[w,x,R,E]of h)if(!f.has(E)){if(p.length>=s)break;f.add(E),p.push({subject:w,object:R,via:x}),i.has(w)||i.set(w,new Set),i.get(w).add(R),a.has(R)||a.set(R,new Set),a.get(R).add(w),$.push([w,R]),g=!0}if(p.length>=s||!g)break;c=$}return p}function os(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 GO(e){return os((e||[]).map(([t,n])=>[n,t]))}function Ef(e,t){let n=[],s=[],o=new Map,r=new Map;for(let l of e||[])!l||!l.subject||!l.predicate||!l.object||(fo(l.predicate)?n.push([l.subject,l.object]):Vo(l.predicate)?s.push([l.subject,l.object]):Ur(l.predicate)?o.set(l.subject,l.object):Gi(l.predicate)&&r.set(l.subject,l.object));let i=GO(n),a=new Set;for(let l of t||[]){let u=V(l);if(u){a.add(u);for(let d of i(u))a.add(d)}}let c=new Set(a);for(let[l,u]of s)a.has(u)&&c.add(l);for(let[l,u]of r)o.has(l)&&a.has(u)&&c.add(l);return c}function Py(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=os(t),i=new Set,a=new Set;for(let[f,m]of o||[])f&&m&&i.add(`${f}${Ue}${m}`);let c=s instanceof Set?s.size?s:null:Fs(s),l=(f,m,h)=>!c||c.has(f)||c.has(m)||c.has(h),u=[];for(let[f,m]of e||[]){if(!f||!m)continue;let h=`${f}${Ue}${m}`;if(!a.has(h)){a.add(h);for(let b of r(m)){if(b===m||b===f)continue;let g=`${f}${Ue}${b}`;i.has(g)||l(f,m,b)&&u.push([f,m,b,g])}}}u.sort((f,m)=>f[0].localeCompare(m[0])||f[2].localeCompare(m[2])||f[1].localeCompare(m[1]));let d=[],p=new Set;for(let[f,m,h,b]of u)if(!p.has(b)){if(d.length>=n)break;p.add(b),d.push({subject:f,object:h,via:m})}return d}function My(e,t,n,{budget:s=50,focus:o=null}={}){let r=os(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Ue}${h}`),a.add(`${h}${Ue}${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 c=new Set,l=o instanceof Set?o.size?o:null:Fs(o),u=(m,h,b)=>!l||l.has(m)||l.has(h)||l.has(b),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let b=`${m}${Ue}${h}`;if(!c.has(b)){c.add(b);for(let g of[h,...r(h)]){let $=i.get(g);if($)for(let w of $){if(w===m)continue;let x=`${m}${Ue}${w}`;a.has(x)||u(m,h,w)&&d.push([m,h,g,w,x])}}}}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 p=[],f=new Set;for(let[m,h,b,g,$]of d)if(!f.has($)){if(p.length>=s)break;f.add($),p.push({subject:m,object:g,viaType:h,viaClass:b})}return p}function Fy(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=os(n),a=new Map;for(let b of s||[]){if(!b||!b.restriction||!b.property||!b.target)continue;let g=`${b.property}${Ue}${b.target}`;a.has(g)||a.set(g,new Set),a.get(g).add(b.restriction)}if(!a.size)return[];let c=new Set,l=new Map;for(let[b,g]of t||[])!b||!g||(c.add(`${b}${Ue}${g}`),l.has(b)||l.set(b,new Set),l.get(b).add(g));let u=r instanceof Set?r.size?r:null:Fs(r),d=(b,g,$)=>!u||u.has(b)||u.has(g)||u.has($),p=new Set,f=[];for(let[b,g,$]of e||[]){if(!b||!g||!$)continue;let w=V(g),x=`${b}${Ue}${w}${Ue}${$}`;if(p.has(x))continue;p.add(x);let R=l.get($);if(R)for(let E of R)for(let k of[E,...i(E)]){let O=a.get(`${w}${Ue}${k}`);if(O)for(let S of O){if(b===S)continue;let _=`${b}${Ue}${S}`;c.has(_)||d(b,$,S)&&f.push([b,g,w,$,E,k,S,_])}}}f.sort((b,g)=>b[0].localeCompare(g[0])||b[6].localeCompare(g[6])||b[1].localeCompare(g[1])||b[3].localeCompare(g[3]));let m=[],h=new Set;for(let[b,g,$,w,x,R,E,k]of f)if(!h.has(k)){if(m.length>=o)break;h.add(k),m.push({subject:b,object:E,viaProperty:g,viaPropertyKey:$,viaValue:w,viaType:x,viaTarget:R})}return m}function Af(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(Ur(r.predicate))t.set(r.subject,r.object);else if(UO(r.predicate))s.set(r.subject,r.object);else{let i=KO[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)!==VO)continue;let c=s.get(r);c&&o.push({restriction:r,kind:i,n:a,onClass:c})}return o.sort((r,i)=>r.restriction.localeCompare(i.restriction)),o}function Dy(e,t,{budget:n=50,focus:s=null}={}){let o=os(t),r=new Map;for(let p of e||[]){if(!p||!p.restriction||!p.property||!p.target)continue;let f=V(p.property);r.has(f)||r.set(f,[]),r.get(f).push({restriction:p.restriction,target:p.target})}let i=new Set;for(let[p,f]of t||[])p&&f&&i.add(`${p}${Ue}${f}`);let a=s instanceof Set?s.size?s:null:Fs(s),c=(p,f)=>!a||a.has(p)||a.has(f),l=[];for(let[,p]of r)if(!(p.length<2))for(let f of p)for(let m of p){if(f.restriction===m.restriction||f.target===m.target||!o(f.target).has(m.target))continue;let h=`${f.restriction}${Ue}${m.restriction}`;i.has(h)||c(f.restriction,m.restriction)&&l.push([f.restriction,m.restriction,f.target,m.target,h])}l.sort((p,f)=>p[0].localeCompare(f[0])||p[1].localeCompare(f[1]));let u=[],d=new Set;for(let[p,f,m,h,b]of l)if(!d.has(b)){if(u.length>=n)break;d.add(b),u.push({subject:p,object:f,viaY1:m,viaY2:h})}return u}function zy(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=os(e),a=r instanceof Set?r.size?r:null:Fs(r),c=p=>!a||a.has(n)||a.has(p),l=new Map;for(let[p,f]of e||[])!p||!f||(l.has(p)||l.set(p,new Set),l.get(p).add(f));let u=new Map((t||[]).map(p=>[p.restriction,p])),d=0;for(let p of[n,...i(n)]){if(d>=o)break;if(d+=1,!!c(p))for(let f of l.get(p)||[]){let m=u.get(f);if(m&&s(m))return{viaClass:p,viaRestriction:f,record:m}}}return null}function qO(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=zy(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 XO(e,t,n,s,o={}){if(!s)return null;let r=zy(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 JO(e,t,n,{budget:s=50,focus:o=null}={}){let r=os(t),i=new Map;for(let[f,m]of n||[])!f||!m||f===m||(i.has(f)||i.set(f,new Set),i.get(f).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(f));if(!i.size)return[];let a=new Map;for(let[f,m]of e||[])!f||!m||(a.has(f)||a.set(f,new Set),a.get(f).add(m));let c=o instanceof Set?o.size?o:null:Fs(o),l=f=>!c||c.has(f),u=[],d=new Set;for(let[f,m]of a){if(!l(f))continue;let h=[...m].sort();for(let b=0;b<h.length;b+=1)for(let g=b+1;g<h.length;g+=1){let[$,w]=[h[b],h[g]],x=[$,...r($)],R=[w,...r(w)],E=null;for(let O of x){let S=i.get(O);if(S){for(let _ of R)if(S.has(_)){E=[O,_];break}if(E)break}}if(!E)continue;let k=`${f}${Ue}${$}${Ue}${w}`;d.has(k)||(d.add(k),u.push([f,$,w,E[0],E[1]]))}}u.sort((f,m)=>f[0].localeCompare(m[0])||f[1].localeCompare(m[1])||f[2].localeCompare(m[2]));let p=[];for(let[f,m,h,b,g]of u){if(p.length>=s)break;p.push({subject:f,classA:m,classB:h,viaA:b,viaB:g})}return p}async function By(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=Wr,full:i=!1,store:a}={}){let{loadMemory:c,readFactRows:l,appendFacts:u}=Ty(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",p=await c(e),f=l(p),m=f.filter(A=>fo(A.predicate)).map(A=>[A.subject,A.object]),h=f.filter(A=>Vo(A.predicate)).map(A=>[A.subject,A.object]),b=f.filter(A=>Go(A.predicate)).map(A=>[A.subject,A.object]),g=new Map,$=new Map,w=[];for(let A of f){let ge=String(A.predicate||"").trim().toLowerCase();Ur(A.predicate)?g.set(A.subject,A.object):Gi(A.predicate)?$.set(A.subject,A.object):Tf.has(ge)||w.push([A.subject,A.predicate,A.object])}let x=[];for(let[A,ge]of g){let Ie=$.get(A);Ie&&x.push({restriction:A,property:ge,target:Ie})}let R=Fs(s),E=o&&R?Ef(f,[...R]):R,k=E===null&&d?await a.loadSyllogiseState(e):null,O=new Set(f.map(A=>A.id)),S=Array.isArray(k?.factIds)?k.factIds.filter(A=>!O.has(A)):[],_=k&&Array.isArray(k.factIds)&&!S.length&&!i?"delta":"full",y=_==="delta"?new Set(k.factIds):null,T=_==="delta"?f.filter(A=>!y.has(A.id)):f,C=T.length,v=new Map;for(let A of f)v.set(`${A.subject}${Ue}${A.predicate}${Ue}${A.object}`,A.trust);let j=(A,ge,Ie)=>v.get(`${A}${Ue}${ge}${Ue}${Ie}`),M=(A,ge,Ie)=>v.has(`${A}${Ue}${ge}${Ue}${Ie}`),z=A=>A.filter(ge=>typeof ge=="number"),K=_==="delta"&&!T.length,Y=_==="delta"?T.filter(A=>fo(A.predicate)).map(A=>[A.subject,A.object]):[],X=_==="delta"?Y.length?Ly(m,Y,{depth:t,budget:n,focus:E}):[]:Ny(m,{depth:t,budget:n,focus:E}),L=m.concat(X.map(A=>[A.subject,A.object])),H=E,W=null;if(_==="delta"&&!K){let A=f.concat(X.map(Ie=>({subject:Ie.subject,predicate:Be,object:Ie.object}))),ge=[];for(let Ie of T)ge.push(Ie.subject,Ie.object);W=Ef(A,ge),H=W}let I=A=>!W||W.has(A),D=W?h.filter(([A,ge])=>I(A)||I(ge)):h,N=new Set;if(W)for(let A of T)Go(A.predicate)&&(N.add(A.subject),N.add(A.object));let F=W&&N.size?os(L):null,B=W?h.filter(([A,ge])=>I(A)||I(ge)||F&&[...F(ge)].some(Ie=>N.has(Ie))):h,U=new Set;if(W){for(let A of T)if(Ur(A.predicate)||Gi(A.predicate)){let ge=g.get(A.subject);ge&&U.add(V(ge))}}let G=W?w.filter(([A,ge,Ie])=>I(A)||I(Ie)||U.has(V(ge))):w,Q=Math.max(0,n-X.length),ie=Q>0&&!K?Py(D,L,{budget:Q,focus:H,presentTypeEdges:h}):[],fe=Math.max(0,n-X.length-ie.length),ae=fe>0&&!K?My(B,L,b,{budget:fe,focus:H}):[],Z=Math.max(0,n-X.length-ie.length-ae.length),J=Z>0&&x.length&&!K?Fy(G,h,L,x,{budget:Z,focus:H}):[],te=Math.max(0,n-X.length-ie.length-ae.length-J.length),oe=te>0&&x.length>1&&!K?Dy(x,L,{budget:te,focus:H}):[],Ae=new Map(x.map(A=>[A.restriction,A])),pe=[...X.map(A=>({subject:A.subject,predicate:Be,object:A.object,provenance:Cy,justification:[[Ee(A.subject,Be,A.via),Ee(A.via,Be,A.object)]]})),...ie.map(A=>({subject:A.subject,predicate:Dt,object:A.object,provenance:Iy,justification:[[Ee(A.subject,Dt,A.via),Ee(A.via,Be,A.object)]]})),...ae.map(A=>{let ge=M(A.viaClass,Br,A.object),[Ie,Es]=ge?[A.viaClass,A.object]:[A.object,A.viaClass],xs=z([j(A.subject,Dt,A.viaType),j(Ie,Br,Es),...A.viaClass!==A.viaType?[j(A.viaType,Be,A.viaClass)]:[]]);return{subject:A.subject,predicate:Br,object:A.object,provenance:Sf,justification:[[Ee(A.subject,Dt,A.viaType),Ee(Ie,Br,Es),...A.viaClass!==A.viaType?[Ee(A.viaType,Be,A.viaClass)]:[]]],...xs.length?{premiseTrusts:xs,ruleConfidence:jf}:{}}}),...J.map(A=>{let ge=z([j(A.subject,A.viaProperty,A.viaValue),j(A.viaValue,Dt,A.viaType),j(A.object,Rn,A.viaPropertyKey),j(A.object,_n,A.viaTarget),...A.viaType!==A.viaTarget?[j(A.viaType,Be,A.viaTarget)]:[]]);return{subject:A.subject,predicate:Dt,object:A.object,provenance:Rf,justification:[[Ee(A.subject,A.viaProperty,A.viaValue),Ee(A.viaValue,Dt,A.viaType),Ee(A.object,Rn,A.viaPropertyKey),Ee(A.object,_n,A.viaTarget),...A.viaType!==A.viaTarget?[Ee(A.viaType,Be,A.viaTarget)]:[]]],...ge.length?{premiseTrusts:ge,ruleConfidence:_f}:{}}}),...oe.map(A=>{let ge=Ae.get(A.subject),Ie=Ae.get(A.object),Es=z([ge&&j(A.subject,Rn,ge.property),j(A.subject,_n,A.viaY1),Ie&&j(A.object,Rn,Ie.property),j(A.object,_n,A.viaY2),j(A.viaY1,Be,A.viaY2)]);return{subject:A.subject,predicate:Be,object:A.object,provenance:Of,justification:[[...ge?[Ee(A.subject,Rn,ge.property)]:[],Ee(A.subject,_n,A.viaY1),...Ie?[Ee(A.object,Rn,Ie.property)]:[],Ee(A.object,_n,A.viaY2),Ee(A.viaY1,Be,A.viaY2)]],...Es.length?{premiseTrusts:Es,ruleConfidence:If}:{}}})],je=pe.map(A=>({id:Ee(A.subject,A.predicate,A.object),subject:A.subject,predicate:A.predicate,object:A.object,environments:A.justification,write:A})),Le=Wy(f.concat(je.map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object})))),ke=new Map(f.map(A=>[A.id,A])),Xe=A=>fo(A)||Vo(A)||Go(A),ce=A=>_!=="delta"||W!==null&&(W.has(A.subject)||W.has(A.object)),le=f.filter(A=>Xe(A.predicate)&&Uy(A.provenance)&&Wi(A).length<r&&ce(A)).map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object,environments:Wi(A),provenance:A.provenance})),me=[...je,...le].sort((A,ge)=>A.subject.localeCompare(ge.subject)||A.predicate.localeCompare(ge.predicate)||A.object.localeCompare(ge.object)),Je=0,It=!1,re=0;for(let A of me){if(re>=n){It=!0;break}re+=1;let ge=Le(A,{maxEnvironments:r+1}),{kept:Ie,truncated:Es}=ZO(A.environments,ge,r);if(Es&&(It=!0),!(Ie.length<=A.environments.length)){if(Je+=Ie.length-A.environments.length,A.write){A.write.justification=Ie;continue}pe.push({subject:A.subject,predicate:A.predicate,object:A.object,justification:Ie,...Gy(A.provenance,Ie,xs=>ke.get(xs)?.trust)||{}})}}let{ids:Pe}=await u(e,pe),it=[],ze=0;for(let A of X)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.via,rule:Ay}),ze+=1;for(let A of ie)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.via,rule:Oy}),ze+=1;for(let A of ae)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.viaClass,rule:xf}),ze+=1;for(let A of J)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.viaValue,rule:kf}),ze+=1;for(let A of oe)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.viaY1,rule:Cf}),ze+=1;let qs=it.length>=n;if(E===null&&d&&!qs){let A=new Set(O);for(let ge of Pe)A.add(ge);await a.saveSyllogiseState(e,{version:1,factIds:[...A].sort(),completedAt:new Date().toISOString()})}return{derived:it,count:it.length,budget:n,depth:t,truncated:qs,mode:_,deltaSize:C,environmentsAdded:Je,alternatesTruncated:It}}function Uy(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function QO(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();fo(u.predicate)?t.push([u.subject,u.object]):Vo(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):Go(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)):Ur(u.predicate)?o.set(u.subject,u.object):Gi(u.predicate)?r.set(u.subject,u.object):Tf.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([V(u.predicate),u.object]))}let a=os(t),c=(u,d)=>u!==d&&a(u).has(d),l=u=>{let d=o.get(u),p=r.get(u);return d&&p?{property:V(d),target:p}:null};return u=>{if(fo(u.predicate)){if(c(u.subject,u.object))return!0;let d=l(u.subject),p=l(u.object);return!!(d&&p&&d.property===p.property&&c(d.target,p.target))}if(Vo(u.predicate)){for(let p of n.get(u.subject)||[])if(c(p,u.object))return!0;let d=l(u.object);if(d){for(let[p,f]of i.get(u.subject)||[])if(p===d.property){for(let m of n.get(f)||[])if(m===d.target||c(m,d.target))return!0}}return!1}if(Go(u.predicate)){for(let d of n.get(u.subject)||[])for(let p of[d,...a(d)])if(s.get(p)?.has(u.object))return!0;return!1}return!0}}function Wy(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,c=new Map,l=new Map;for(let f of e){if(!f||!f.subject||!f.predicate||!f.object)continue;f.id&&t.add(f.id);let m=String(f.predicate||"").trim().toLowerCase();fo(f.predicate)?(n.push([f.subject,f.object]),s.has(f.subject)||s.set(f.subject,new Set),s.get(f.subject).add(f.object)):Vo(f.predicate)?(o.has(f.subject)||o.set(f.subject,new Set),o.get(f.subject).add(f.object)):Go(f.predicate)?(r.add(`${f.subject}${Ue}${f.object}`),i.has(f.subject)||i.set(f.subject,new Set),i.get(f.subject).add(f.object),i.has(f.object)||i.set(f.object,new Set),i.get(f.object).add(f.subject)):Ur(f.predicate)?a.set(f.subject,f.object):Gi(f.predicate)?c.set(f.subject,f.object):Tf.has(m)||(l.has(f.subject)||l.set(f.subject,[]),l.get(f.subject).push([f.predicate,f.object]))}let u=os(n),d=f=>s.get(f)||new Set,p=f=>{let m=a.get(f),h=c.get(f);return m&&h?{property:m,propertyKey:V(m),target:h}:null};return(f,{maxEnvironments:m=Wr}={})=>{let h=[],b=new Set,g=$=>{if(h.length>=m||f.id&&$.includes(f.id)||!$.every(x=>t.has(x)))return;let w=[...$].sort().join(" ");b.has(w)||(b.add(w),h.push($))};if(fo(f.predicate)){for(let $ of[...d(f.subject)].sort()){if(h.length>=m)break;$===f.subject||$===f.object||d($).has(f.object)&&g([Ee(f.subject,Be,$),Ee($,Be,f.object)])}if(h.length<m){let $=p(f.subject),w=p(f.object);$&&w&&$.propertyKey===w.propertyKey&&$.target!==w.target&&d($.target).has(w.target)&&g([Ee(f.subject,Rn,$.property),Ee(f.subject,_n,$.target),Ee(f.object,Rn,w.property),Ee(f.object,_n,w.target),Ee($.target,Be,w.target)])}return h}if(Vo(f.predicate)){for(let w of[...o.get(f.subject)||[]].sort()){if(h.length>=m)break;w!==f.object&&d(w).has(f.object)&&g([Ee(f.subject,Dt,w),Ee(w,Be,f.object)])}let $=p(f.object);if($){let w=[...l.get(f.subject)||[]].filter(([x])=>V(x)===$.propertyKey).sort((x,R)=>x[0].localeCompare(R[0])||x[1].localeCompare(R[1]));for(let[x,R]of w){if(h.length>=m)break;for(let E of[...o.get(R)||[]].sort()){if(h.length>=m)break;E!==$.target&&!d(E).has($.target)||g([Ee(f.subject,x,R),Ee(R,Dt,E),Ee(f.object,Rn,$.propertyKey),Ee(f.object,_n,$.target),...E!==$.target?[Ee(E,Be,$.target)]:[]])}}}return h}if(Go(f.predicate)){let $=[];for(let w of o.get(f.subject)||[])for(let x of[w,...u(w)])(i.get(x)||new Set).has(f.object)&&$.push([w,x]);$.sort((w,x)=>w[0].localeCompare(x[0])||w[1].localeCompare(x[1]));for(let[w,x]of $){if(h.length>=m)break;let R=r.has(`${x}${Ue}${f.object}`),[E,k]=R?[x,f.object]:[f.object,x];g([Ee(f.subject,Dt,w),Ee(E,Br,k),...x!==w?[Ee(w,Be,x)]:[]])}return h}return h}}function ZO(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 Gy(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=eI.get(i);if(a!==void 0){s=a;break}}if(s===void 0)return null;let o=null,r=-1;for(let i of t||[]){let a=i.map(l=>n(l)).filter(l=>typeof l=="number");if(a.length!==i.length)continue;let c=Math.min(...a);c>r&&(r=c,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function tI(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=Wr,store:i,sourceTags:a=[],predicate:c=Be}={}){let{loadMemory:l,readFactRows:u,removeFacts:d}=Ty(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),p=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,m=(a||[]).filter(Boolean);if(m.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let h=V(t),b=V(n),g=Ee(h,c,b),$=await l(e),w=u($),x=new Map(w.map(M=>[M.id,M]));if(!x.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let R=x.get(g).sourceIds||[],E=m.map(M=>f(g,M).slice(g.length+1)),k=m.length?R.filter(M=>E.includes(M)):[],O=!m.length||k.length>0;if(m.length&&!O)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let S=m.length>0&&k.length<R.length,_=new Set([g]),y=[g],T=new Map,C=!1;if(!S){let M=w.filter(X=>Wi(X).length&&Uy(X.provenance)),z=new Map;for(let X of M)for(let L of Wi(X))for(let H of L)z.has(H)||z.set(H,new Set),z.get(H).add(X.id);let K=0,Y=[g];for(;K<o;K+=1){let X=new Set;for(let B of Y)for(let U of z.get(B)||[])_.has(U)||X.add(U);let L=[...X].map(B=>x.get(B)).sort((B,U)=>B.subject.localeCompare(U.subject)||B.predicate.localeCompare(U.predicate)||B.object.localeCompare(U.object));if(!L.length)break;let H=w.filter(B=>!_.has(B.id)&&!X.has(B.id)),W=new Set(H.map(B=>B.id)),I=Wy(H),D=QO(H),N=!1,F=!1;Y=[];for(let B of L){if(_.size>=s){F=!0;break}let U=Wi(B),G=U.filter(ie=>ie.every(fe=>W.has(fe)));if(G.length){G.length!==U.length&&T.set(B.id,G);continue}let Q=I(B,{maxEnvironments:r});if(Q.length){T.set(B.id,Q);continue}D(B)||(_.add(B.id),y.push(B.id),Y.push(B.id),N=!0)}if(F){C=!0;break}if(!N)break}!C&&K>=o&&(C=M.some(X=>!_.has(X.id)&&X.justification.some(L=>_.has(L))))}let v=m.length?[...k.map(M=>`${g}@${M}`),...y.slice(1)]:y,{removed:j}=await d(e,v);if(p){let M=[...T.entries()].filter(([z])=>!_.has(z)).sort((z,K)=>z[0].localeCompare(K[0])).map(([z,K])=>{let Y=x.get(z);return{subject:Y.subject,predicate:Y.predicate,object:Y.object,justification:K,...Gy(Y.provenance,K,X=>x.get(X)?.trust)||{}}});M.length&&await p(e,M)}return{retracted:j,count:j.length,budget:s,depth:o,truncated:C,found:!0,...m.length?{ownRecord:!0,stillStands:S}:{}}}function Oc(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 Nf(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=s instanceof Map?s:Oc(s),a=[];for(let[l,u]of n||[])l===e&&u&&a.push({node:u,path:[{subject:l,predicate:Dt,object:u}]});for(let l of i.get(e)||[])a.push({node:l,path:[{subject:e,predicate:Be,object:l}]});let c=new Set([e]);for(let l=1;l<=o&&a.length;l+=1){for(let{node:d,path:p}of a)if(r.has(d))return p;if(l===o)break;let u=[];for(let{node:d,path:p}of a)if(!c.has(d)){c.add(d);for(let f of i.get(d)||[])c.has(f)||u.push({node:f,path:[...p,{subject:d,predicate:Be,object:f}]})}a=u}return null}var Be,Ay,Cy,Dt,Oy,Iy,Br,xf,Sf,jf,Rn,_n,kf,Rf,_f,Wr,Ue,fo,Vo,Go,Ur,Gi,UO,Tf,VO,KO,Cf,Of,If,HO,YO,Wi,eI,Ot=P(()=>{Ze();Be="rdfs:subClassOf",Ay="subClassOf",Cy=`entailed:${Ay}`,Dt="rdf:type",Oy="type",Iy=`entailed:${Oy}`,Br="owl:disjointWith",xf="disjointWith",Sf=`entailed:${xf}`,jf=.95,Rn="owl:onProperty",_n="owl:someValuesFrom",kf="someValuesFrom",Rf=`entailed:${kf}`,_f=.95,Wr=4,Ue="\u241F",fo=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Vo=e=>String(e||"").trim().toLowerCase()==="rdf:type",Go=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Ur=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Gi=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",UO=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Tf=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);VO="has",KO={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Cf="someValuesFromSubsumption",Of=`entailed:${Cf}`,If=.95;HO=.95;YO=.95;Wi=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);eI=new Map([[Sf,jf],[Rf,_f],[Of,If]])});function Kr(e){let t=String(e||""),n=Ky.get(t);return n||(t.startsWith(Vy)?Ic+t.slice(Vy.length):t)}function Yy(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Nf(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function Pc(e,t,n,{maxHops:s=3}={}){let o=Vr(e),r=Vr(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassSucc:c}=qy(i),l=i.filter(g=>(g.predicate===Lc||g.predicate===Gr)&&r.has(g.object)),u=[];for(let g of l){let $=g.predicate===Gr?"negative":"positive";if(o.has(g.subject)){u.push({fact:g,polarity:$,hops:0,chain:null});continue}let w=Yy(o,g.subject,a,c,s);w&&w.length&&u.push({fact:g,polarity:$,hops:w.length,chain:w})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:Pf(o,r,i,{maxHops:s})};u.sort((g,$)=>g.hops-$.hops||($.fact.trust||0)-(g.fact.trust||0));let d=u[0].hops,p=u.filter(g=>g.hops===d),f=p.filter(g=>g.polarity==="positive").map(g=>g.fact),m=p.filter(g=>g.polarity==="negative").map(g=>g.fact),h=m.length&&!f.length?"negative":"positive",b=u.find(g=>g.hops>d&&g.polarity!==h)||null;return{verdict:f.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:f,negative:m,chain:u[0].chain,overrides:b?{fact:b.fact,chain:b.chain}:null,baseRate:null}}function Pf(e,t,n,{maxHops:s=3}={}){let o=Vr(e),r=Vr(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Be||h.predicate===Dt),c=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!c.length)return null;let l=c[0],u=[...new Set(a.filter(h=>h.object===l&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let b=i.find(g=>g.subject===h&&r.has(g.object)&&(g.predicate===Lc||g.predicate===Gr));return b?{name:h,polarity:b.predicate===Gr?"negative":"positive",fact:b}:{name:h,polarity:"unknown",fact:null}},p=u.map(d),{typeEdges:f,subClassSucc:m}=qy(i);return{klass:l,kinds:u.length,positive:p.filter(h=>h.polarity==="positive"),negative:p.filter(h=>h.polarity==="negative"),unknown:p.filter(h=>h.polarity==="unknown"),chain:Yy(o,l,f,m,s)}}function Mf(e,t,{exclude:n=[],maxHops:s=3}={}){let o=Vr(e),r=Vr(n),i=Array.isArray(t)?t:[],a=new Set,c=[];for(let l of i)l.predicate!==Lc||!o.has(l.object)||r.has(l.subject)||a.has(l.subject)||(a.add(l.subject),Pc(new Set([l.subject]),o,i,{maxHops:s}).verdict==="yes"&&c.push(l));return c.sort(nI)}var Ic,Vy,Nc,Ky,xW,Hy,Lc,Gr,Lf,nI,Vr,qy,Mc=P(()=>{Ot();Ic="mgxneg:",Vy="mgx:",Nc="mgxneg:subClassOf",Ky=new Map([[Be,Nc]]),xW=new Map([...Ky].map(([e,t])=>[t,e]));Hy=e=>String(e||"").startsWith(Ic),Lc="mgx:capableOf",Gr=Kr(Lc),Lf=6,nI=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),Vr=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),qy=e=>{let t=e.filter(s=>s.predicate===Dt).map(s=>[s.subject,s.object]),n=e.filter(s=>s.predicate===Be).map(s=>[s.subject,s.object]);return{typeEdges:t,subClassSucc:Oc(n)}}});function Fc(e){let t=String(e||"");return zf.has(t)?Ff:oI.has(t)||rI.test(t)?Vi:iI.has(t)?Xy:Df}function aI(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(Pg.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function cI(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(aI(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function Bf(e,t){let n=t===Xy;if(!n&&t!==Vi)return null;let s=(e||[]).map(r=>({row:r,at:cI(r,n)}));s.sort((r,i)=>{if(r.at!==i.at)return r.at===null?1:i.at===null?-1:n?r.at-i.at:i.at-r.at;let a=(i.row.trust||0)-(r.row.trust||0);if(a)return a;let[c,l]=[String(r.row.object),String(i.row.object)];return c<l?-1:c>l?1:0});let o=s.map(r=>r.row);return{winner:o[0]||null,ranked:o,contested:s.length>1&&s[0].at===s[1].at}}var Ff,Vi,Xy,Df,sI,zf,oI,rI,iI,Jy=P(()=>{Mc();Un();Ff="merge",Vi="latest-observation-wins",Xy="first-claim-wins",Df="contradiction",sI=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","mgx:memberOf","mgx:collectionOf","mgx:usedFor","mgx:receivesAction","mgx:causes","mgx:causesDesire","mgx:hasSubevent","mgx:hasPrerequisite","mgx:motivatedByGoal","mgx:obstructedBy","mgx:desires","mgx:hasProperty","mgx:madeOf","mgx:atLocation","mgx:locatedNear","mgx:createdBy","mgx:mannerOf","mgx:relatedTo","mgx:synonym","mgx:antonym","mgx:similarTo","mgx:symbolOf","mgx:knows-about"],zf=new Set(sI.flatMap(e=>[e,Kr(e)])),oI=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"]),rI=/^mgx:has-exit-([a-z]+)$/,iI=new Set(["mgx:playedBy"])});function qi(e){let t=String(e||""),n=t.indexOf(Dc);return n<0?"":t.slice(n+Dc.length)}function pI(e){let t=1,n=0;for(let s of e)t*=1-dI(s),n+=1;return n?fI(Math.min(1,1-t)):0}function n$(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 r$(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 i$(e,t="",n=""){let s=t,o=n;for(let r of e)s=s$(s,r.assertedAt),o=o$(o,r.assertedAt);return{earliest:s,latest:o}}function Vf({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let c=[...new Set(o)].filter(Boolean).sort(),l=a?pI(c.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:lI,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===Hr?"rollupSourceIds":"rollupRecordIds",value:c.join(" ")},{prop:Hi,key:"rollupCount",value:String(c.length)},{prop:rs,key:"rollupEarliest",value:r},{prop:is,key:"rollupLatest",value:i},...l===void 0?[]:[{prop:qr,key:"rollupPrior",value:String(l)}]]}}function a$({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(r$).slice(8);if(!i.length)return null;let{earliest:a,latest:c}=i$(i,zt(s,rs),zt(s,is));return{rollup:Vf({id:Uf(e,t),sourceKey:`rollup:${t}`,template:Kf(i[0].record||s),idsProp:Hr,ids:[...Uc(s),...i.map(u=>u.sourceId)],earliest:a,latest:c,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function c$({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(r$),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:c}=i$(i,zt(s,rs),zt(s,is));return{rollup:Vf({id:Wf(e,t),sourceKey:t,template:Kf(i[0].record||s),idsProp:Ki,ids:[...uI(s),...i.map(u=>u.id)],earliest:a,latest:c}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function Hf(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=po(s),r=o?Hr:Ki,i=a=>Gf(zt(a,r));return Vf({id:s,sourceKey:zt(e,"mgx:sourceId")||zt(t,"mgx:sourceId"),template:Kf(zt(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:s$(zt(e,rs),zt(t,rs)),latest:o$(zt(e,is),zt(t,is)),priorFor:o?n:void 0})}function l$(e,t){if(!t)return!1;for(let n of e||[])if(Uc(n).includes(t))return!0;return!1}var lI,Qy,Zy,zc,e$,Hr,Ki,Hi,rs,is,qr,Dc,t$,Uf,Wf,po,Yr,Bc,zt,Gf,Uc,uI,dI,fI,s$,o$,Kf,qf=P(()=>{lI="Fact",Qy=64,Zy=8,zc=8,e$=2,Hr="mgx:rollupSourceIds",Ki="mgx:rollupRecordIds",Hi="mgx:rollupCount",rs="mgx:rollupEarliest",is="mgx:rollupLatest",qr="mgx:rollupPrior",Dc="@rollup:",t$="#rollup",Uf=(e,t)=>`${e}${Dc}${t}`,Wf=(e,t)=>`${e}@${t}${t$}`,po=e=>String(e||"").includes(Dc),Yr=e=>String(e||"").endsWith(t$),Bc=e=>po(e)||Yr(e);zt=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Gf=e=>String(e||"").split(" ").filter(Boolean),Uc=e=>Gf(zt(e,Hr)),uI=e=>Gf(zt(e,Ki)),dI=e=>Math.max(0,Math.min(1,Number(e)||0)),fI=e=>Number(e.toFixed(6));s$=(e,t)=>n$(e,t,Math.min),o$=(e,t)=>n$(e,t,Math.max);Kf=e=>({label:e?.label||"",subject:zt(e,"rdf:subject"),predicate:zt(e,"rdf:predicate"),object:zt(e,"rdf:object")})});function Qf(e){let t=String(e||"");return Jf(t)?t.slice(0,-Kc.length):""}function u$(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 Zf({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:Ht,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:Gc,key:"retractedRecordIds",value:i.join(" ")},{prop:Yf,key:"retractedCount",value:String(i.length)},{prop:Vc,key:"retractedAt",value:o||""},...a.length?[{prop:Yi,key:"provenance",value:a.join(" | ")}]:[]]}}function f$({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...Ko(o),...n].filter(Boolean);return a.length?Zf({id:Xf(e,t),sourceId:t,template:r||d$(o),ids:a,retractedAt:u$(Ho(o),s),tags:[...Xi(Tn(o,Yi)),...Xi(i)]}):null}function p$(e,t){let n=d$(Tn(e,"rdf:subject")?e:t);return Zf({id:e?.id||t?.id,sourceId:Tn(e,"mgx:sourceId")||Tn(t,"mgx:sourceId"),template:n,ids:[...Ko(e),...Ko(t)],retractedAt:u$(Ho(e),Ho(t)),tags:[...Xi(Tn(e,Yi)),...Xi(Tn(t,Yi))]})}function hI(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function gI(e,t,n=""){return!e||!t||!Ko(e).includes(t)?!1:hI(n,Ho(e))}function Hc(e,t,n=""){for(let s of e||[])if(gI(s,t,n))return!0;return!1}function bI(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function wI(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 qc(e){let t=Qf(e?.id);return t?{id:e.id,subject:t,predicate:Wc,object:bI(Ho(e),Ko(e)),provenance:Tn(e,Yi)}:null}function Yc(e){if(!e||e.predicate!==Wc)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=wI(e.object);return o.length?Zf({id:`${t}${Kc}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Xi(e.provenance)}):null}var Ht,Wc,Gc,Vc,Yf,Kc,Yi,Xf,Jf,Tn,mI,Xi,Ko,Ho,d$,ep=P(()=>{Ht="Retraction",Wc="mgx:retracted",Gc="mgx:retractedRecordIds",Vc="mgx:retractedAt",Yf="mgx:retractedCount",Kc="#retracted",Yi="mgx:factProvenance",Xf=(e,t)=>`${e}@${t}${Kc}`,Jf=e=>String(e||"").endsWith(Kc);Tn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",mI=e=>String(e||"").split(" ").filter(Boolean),Xi=e=>String(e||"").split(" | ").filter(Boolean),Ko=e=>mI(Tn(e,Gc)),Ho=e=>Tn(e,Vc);d$=e=>({label:e?.label||"",subject:Tn(e,"rdf:subject"),predicate:Tn(e,"rdf:predicate"),object:Tn(e,"rdf:object")})});var yI,$I,vI,EI,tp,CW,m$=P(()=>{Un();yI="mgx:worldName",$I="mgx:nodeName",vI="mgx:playedBy",EI="mgx:waved",tp="mgx:invitedBy",CW=Object.freeze([yI,$I,vI,EI,tp])});function Xc(e){let t=new Set;for(let n of e||[])n?.predicate===tp&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function np(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function Jc({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=np(t,n);if(!o.length)return[];if(typeof s!="function")return[];let r=new Map;for(let a of o){let c=s(a);r.set(a,new Set([...c||[]].map(String)))}return[...new Set((e||[]).map(String).filter(Boolean))].sort().filter(a=>o.every(c=>r.get(c).has(a)))}var sp=P(()=>{m$()});function as(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function TI(e,t){(!e?.class||!xI.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function AI(e,t){for(let a of["rdf:subject","rdf:predicate","rdf:object"])Ji(as(e,a))||t.push(`a Fact needs a non-empty ${a}`);for(let a of["rdf:subject","rdf:object"]){let c=as(e,a);c!==void 0&&kI.test(c)&&t.push(`a Fact's ${a} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(c)})`)}let n=as(e,"mgx:factProvenance");n!==void 0&&!Ji(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";RI(s)&&!g$.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&&!Ji(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)})`);let i=as(e,"mgx:extractionFinding");if(i!==void 0){let a=i.split(" ").filter(Boolean);a.length||t.push("mgx:extractionFinding, when present, must name at least one finding");for(let c of a)SI.has(c)||t.push(`mgx:extractionFinding must name findings from the closed vocabulary ${Qc.join(" | ")} (got ${JSON.stringify(c)})`)}for(let a of _I){let c=as(e,a);if(c===void 0)continue;let l=c.split(" ").filter(Boolean);l.length||t.push(`${a}, when present, must name at least one record id`);for(let u of l)g$.test(u)||t.push(`${a} must name Fact record ids (got ${JSON.stringify(u)})`)}}function CI(e,t){Ji(as(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=as(e,"mgx:ruleKind");if(!n||!h$.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...h$].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of jI[n])Ji(as(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function OI(e){let t=[];return TI(e,t),e?.class==="Fact"&&AI(e,t),e?.class==="Rule"&&CI(e,t),{ok:t.length===0,violations:t}}function op(e){let t=OI(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 xI,Qc,SI,h$,jI,kI,g$,RI,_I,Ji,rp=P(()=>{xI=new Set(["Utterance","Fact","Session","Source","Rule"]),Qc=Object.freeze(["identifier-token","clause-fallback","pronoun-carry","definitional-frame"]),SI=new Set(Qc),h$=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),jI={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"]},kI=/[.!?]\s+\w/,g$=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,RI=e=>e.includes("@")||/#v\d/.test(e),_I=["mgx:supersedes","mgx:supersededBy"];Ji=e=>typeof e=="string"&&e.trim().length>0});function y$(e,t){return t?.rowKey&&(e.rowKey=t.rowKey),t?.rowClass&&(e.rowClass=t.rowClass),t?.provenance&&(e.provenance=t.provenance),t?.status&&(e.status=t.status),e}function Zi(e){let t=[];if(!e||typeof e!="object")return["not an object"];e.kind!==Xr&&t.push(`kind is ${JSON.stringify(e.kind)}, expected ${JSON.stringify(Xr)}`),e.contractVersion!==1&&t.push(`contractVersion is ${JSON.stringify(e.contractVersion)}, expected 1`);for(let n of II)typeof e[n]!="function"&&t.push(`${n}() is missing`);for(let n of NI)n in e&&e[n]!=null&&typeof e[n]!="function"&&t.push(`${n} is present but not a function`);return t}function tl(e){return Zi(e).length===0}function ip(e){return new TextEncoder().encode(String(e?.json??"")).length}function nl(e){let t=[];if(!e||typeof e!="object")return["not an object"];if((typeof e.rowKey!="string"||!e.rowKey)&&t.push("rowKey must be a non-empty string"),Zc.includes(e.rowClass)||t.push(`rowClass ${JSON.stringify(e.rowClass)} is outside the closed set (${Zc.join(", ")})`),typeof e.term!="string"&&t.push("term must be a string, empty when the row has no term read path"),typeof e.json!="string"||!e.json)t.push("json must be a non-empty string");else{let n=ip(e);n>qo&&t.push(`json is ${n} bytes, over the ${qo}-byte cap`)}return e.expiresAt!==void 0&&!Number.isInteger(e.expiresAt)&&t.push("expiresAt must be epoch seconds as an integer when present"),t}function $$(e){return nl(e).length===0}function ea(e,t={}){let n=nl(e);if(!n.length)return e;throw new An(`invalid memory row ${JSON.stringify(e?.rowKey??null)}: ${n.join("; ")}`,{rowKey:typeof e?.rowKey=="string"?e.rowKey:"",rowClass:e?.rowClass,...t})}var Xr,el,Zc,Qi,qo,b$,w$,An,Yo,II,NI,ta=P(()=>{Xr="tmct-memory-row-backend",el=1,Zc=Object.freeze(["fact","source","utterance","session","rule","retraction","edge-group","bookkeeping"]),Qi="bookkeeping",qo=4096,b$="TMCT_BACKEND_REJECTED",w$="TMCT_BACKEND_UNAVAILABLE";An=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendRejected",this.code=b$,y$(this,n)}},Yo=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendUnavailable",this.code=w$,y$(this,n)}},II=Object.freeze(["readRows","putRows","deleteRows","readMeta","putMeta","deleteAll","close"]),NI=Object.freeze(["readRowsByTerm"])});function zI(){return ap||(ap=new Map([[tt,"fact"],[cs,"source"],[mo,"utterance"],[Xo,"session"],[ls,"rule"],[Ht,"retraction"]])),ap}function BI(e){let t=zI().get(e?.class);if(t)return t;throw new An(`individual ${JSON.stringify(e?.id??null)} has class ${JSON.stringify(e?.class??null)}, which no row class covers`,{rowKey:String(e?.id||"")})}function UI(e){return(e?.attributes||[]).some(t=>t?.prop===na)?{...e,attributes:e.attributes.filter(t=>t?.prop!==na)}:e}function WI(e){let t=new Map,n=0;for(let s of e||[]){let o;try{o=Number(JSON.parse(s?.json??"{}").ord)}catch{o=NaN}Number.isFinite(o)&&(t.set(s.rowKey,o),o>=n&&(n=o+1))}return s=>{let o=t.get(s);if(o!==void 0)return o;let r=n;return n+=1,r}}function v$(e,t,{onOversizedRow:n,log:s}){let o=ip(e);if(o<=qo||n==="keep")return!0;let r=t?` (provenance: ${t})`:"",i=`${e.rowClass} row ${e.rowKey} serializes to ${o} bytes, over the ${qo}-byte cap${r}`;if(n==="drop")return s(`dropped an oversized memory row: ${i}`),!1;throw new An(i,{rowKey:e.rowKey,rowClass:e.rowClass,provenance:t})}function lp(e,{priorRows:t=null,onOversizedRow:n="throw",log:s=GI}={}){if(!VI.has(n))throw new TypeError(`onOversizedRow must be "throw", "drop", or "keep", got ${JSON.stringify(n)}`);let o=WI(t),r={onOversizedRow:n,log:s},i=[];for(let a of e?.individuals||[]){if(!a?.id)continue;let c=BI(a),l={rowKey:String(a.id),rowClass:c,term:c==="fact"?V(DI(a,"subject")):"",json:JSON.stringify({ord:o(String(a.id)),individual:UI(a)})};v$(l,cp(a,MI),r)&&i.push(l)}for(let a of e?.objectProperties||[]){if(!a?.prop)continue;let c=`${LI}${a.prop}`,l={rowKey:c,rowClass:x$,term:"",json:JSON.stringify({ord:o(c),group:a})};v$(l,"",r)&&i.push(l)}return i}function KI(e){let t=[],n=[];for(let s=0;s<e.length;s+=1)e[s]?.class===tt&&(t.push(s),n.push(e[s]));n.sort((s,o)=>s.id<o.id?-1:s.id>o.id?1:0);for(let s=0;s<t.length;s+=1)e[t[s]]=n[s]}function HI(e){let t=new Map;for(let n of e)if(n?.class===tt)for(let s of cp(n,PI).split(" ").filter(Boolean)){let o=t.get(s)||new Set;o.add(n.id),t.set(s,o)}for(let n of e){let s=t.get(n?.id),o=(n?.attributes||[]).some(i=>i?.prop===na);if(!s&&!o)continue;let r=(n.attributes||[]).filter(i=>i?.prop!==na);n.attributes=s?[...r,{prop:na,key:"supersededBy",value:[...s].sort().join(" ")}]:r}}function qI(e){let t=[];for(let n of[Xo,mo,tt,cs,ls]){let s=e.filter(o=>o?.class===n);s.length&&t.push({name:n,count:s.length,sample:s.slice(0,3).map(o=>o.label)})}return t}function YI(e){let t="";for(let n of e){if(n?.class!==mo)continue;let s=cp(n,FI);s>t&&(t=s)}return t}function sl(e,{meta:t=null}={}){let n=us();t?.memory!==void 0&&(n.memory=t.memory),t?.prefixes!==void 0&&(n.prefixes=t.prefixes);let s=[],o=[];for(let r of e||[]){if(!r||r.rowClass===Qi)continue;let i=JSON.parse(r.json),c={ord:Number.isFinite(Number(i?.ord))?Number(i.ord):0,rowKey:String(r.rowKey||"")};r.rowClass===x$?o.push({...c,group:i?.group}):s.push({...c,individual:i?.individual})}return s.sort(E$),o.sort(E$),n.individuals=s.map(r=>r.individual).filter(Boolean),n.objectProperties=o.map(r=>r.group).filter(Boolean),ol(n)}function ol(e){let t=e.individuals||[];return KI(t),HI(t),e.classes=qI(t),e.proseIndex=null,e.proseIndex=Ya(t),e.generated_at=YI(t),e}function up(e,t){let n=new Map((e||[]).filter(i=>i?.rowKey).map(i=>[i.rowKey,i])),s=[],o=new Set;for(let i of t||[]){if(!i?.rowKey)continue;o.add(i.rowKey);let a=n.get(i.rowKey);a&&a.json===i.json&&a.term===i.term&&a.rowClass===i.rowClass||s.push(i)}let r=[...n.keys()].filter(i=>!o.has(i));return{puts:s,deletes:r}}var x$,LI,PI,na,MI,FI,cp,DI,ap,GI,VI,E$,dp=P(()=>{We();Ze();zn();ta();x$="edge-group",LI="edge-group:",PI="mgx:supersedes",na="mgx:supersededBy",MI="mgx:factProvenance",FI="mgx:utteranceTs",cp=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",DI=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",ap=null;GI=e=>console.warn(e),VI=new Set(["throw","drop","keep"]);E$=(e,t)=>e.ord-t.ord||(e.rowKey<t.rowKey?-1:e.rowKey>t.rowKey?1:0)});var fp={};Lt(fp,{access:()=>QI,appendFile:()=>tN,basename:()=>bN,copyFile:()=>cN,createInterface:()=>EN,createReadStream:()=>uN,createRequire:()=>XI,createWriteStream:()=>dN,default:()=>SN,dirname:()=>mN,existsSync:()=>fN,fileURLToPath:()=>yN,isAbsolute:()=>gN,join:()=>pN,mkdir:()=>nN,mkdtemp:()=>sN,randomBytes:()=>$N,readFile:()=>ZI,readFileSync:()=>JI,readdir:()=>lN,rename:()=>oN,resolve:()=>hN,rm:()=>iN,sep:()=>wN,spawnSync:()=>vN,stat:()=>aN,tmpdir:()=>xN,unlink:()=>rN,writeFile:()=>eN});var Et,XI,JI,QI,ZI,eN,tN,nN,sN,oN,rN,iN,aN,cN,lN,uN,dN,fN,pN,mN,hN,gN,bN,wN,yN,$N,vN,EN,xN,SN,pp=P(()=>{Et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},XI=Et("createRequire"),JI=Et("readFileSync"),QI=Et("access"),ZI=Et("readFile"),eN=Et("writeFile"),tN=Et("appendFile"),nN=Et("mkdir"),sN=Et("mkdtemp"),oN=Et("rename"),rN=Et("unlink"),iN=Et("rm"),aN=Et("stat"),cN=Et("copyFile"),lN=Et("readdir"),uN=Et("createReadStream"),dN=Et("createWriteStream"),fN=()=>!1,pN=(...e)=>e.join("/"),mN=e=>String(e).replace(/\/[^/]*$/,""),hN=(...e)=>e.join("/"),gN=e=>String(e).startsWith("/"),bN=e=>String(e).split("/").pop(),wN="/",yN=e=>String(e),$N=Et("randomBytes"),vN=Et("spawnSync"),EN=Et("createInterface"),xN=()=>"/tmp",SN={}});var jN,sa,mp=P(()=>{jN=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,sa=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(jN);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 kN(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function RN(e,t,n){let s=e.split(/\r\n|\n|\r/g),o="",r=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let a=s[i-1];a&&(o+=i.toString().padEnd(r," "),o+=": ",o+=a,o+=`
85
+ `),tier:b,topup:$}}async function yf(e,{config:t,source:n,tel:s}){return(await Ry(e,{config:t,source:n,tel:s})).text}var $f=P(()=>{Pt();Qe();Xt();Rc();vi();Fe();ns();Ac();Cc();ot();yf.ownsGraphLoad=!0});function _y(e,{graph:t,svc:n}){let{match:s}=Ft(n,pt(e,"symbol"),"symbol");return Pb(Or(t,s))}var Ty=P(()=>{Fe();ot()});function Oc(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 Wi(e){return Oc(e).toString(16).padStart(8,"0")}function vf(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 x=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,R=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+x+i[w-7]+R>>>0}let[d,p,f,m,h,b,g,$]=r;for(let w=0;w<64;w+=1){let x=a(h,6)^a(h,11)^a(h,25),R=h&b^~h&g,E=$+x+R+FO[w]+i[w]>>>0,k=a(d,2)^a(d,13)^a(d,22),O=d&p^d&f^p&f,S=k+O>>>0;$=g,g=b,b=h,h=m+E>>>0,m=f,f=p,p=d,d=E+S>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+p>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+m>>>0,r[4]=r[4]+h>>>0,r[5]=r[5]+b>>>0,r[6]=r[6]+g>>>0,r[7]=r[7]+$>>>0}let c=new Uint8Array(32),l=new DataView(c.buffer);for(let u=0;u<8;u+=1)l.setUint32(u*4,r[u]);return c}function DO(e,t){let n=vf(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function V(e){let t=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 BO.get(t)??t}function Ee(e,t,n){return Wo(V(e),rs(t),V(n))}var FO,zO,os,BO,Wo,Ze=P(()=>{FO=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]);zO=2e3,os=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,zO);BO=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"]]);Wo=(e,t,n)=>`fact:${DO(`${e}\0${t}\0${n}`,8)}`});var un={};Lt(un,{CARDINALITY_RULE_CONFIDENCE:()=>HO,CAX_DW_RULE:()=>xf,CAX_DW_RULE_CONFIDENCE:()=>jf,CAX_MAXC0_RULE_CONFIDENCE:()=>YO,CLS_SVF1_RULE:()=>kf,CLS_SVF1_RULE_CONFIDENCE:()=>_f,DEFAULT_MAX_ENVIRONMENTS:()=>Gr,DISJOINT_PREDICATE:()=>Ur,ENTAILED_DISJOINT_PROVENANCE:()=>Sf,ENTAILED_PROVENANCE:()=>Oy,ENTAILED_SCM_SVF_PROVENANCE:()=>Of,ENTAILED_SVF1_PROVENANCE:()=>Rf,ENTAILED_TYPE_PROVENANCE:()=>Ny,ON_PROPERTY_PREDICATE:()=>Rn,SCM_SVF_RULE:()=>Cf,SCM_SVF_RULE_CONFIDENCE:()=>If,SOME_VALUES_FROM_PREDICATE:()=>_n,SUBCLASS_PREDICATE:()=>Be,TYPE_PREDICATE:()=>Dt,buildCardinalityRestrictions:()=>Af,buildRelevanceFrontier:()=>Ef,buildSubClassSuccessors:()=>Ic,deriveDisjointViolations:()=>Fy,deriveSomeValuesFromApplication:()=>Dy,deriveSomeValuesFromSubsumption:()=>zy,deriveSubClassClosure:()=>Ly,deriveSubClassClosureDelta:()=>Py,deriveTypePropagation:()=>My,entailedTrustFrom:()=>WO,findConsistencyViolations:()=>JO,findIsaChain:()=>Nf,proveCardinalityAtLeast:()=>qO,proveMaxCardinalityZeroDenial:()=>XO,retractSubClassOf:()=>tI,syllogise:()=>Uy});function Ay(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 WO(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 Fs(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function Ly(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}${Ue}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:Fs(s),a=(u,d,p)=>!i||i.has(u)||i.has(d)||i.has(p),c=[],l=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[f,m]of r)for(let h of m){let b=r.get(h);if(b)for(let g of b){if(f===g)continue;let $=`${f}${Ue}${g}`;o.has($)||l.has($)||a(f,h,g)&&d.push([f,h,g,$])}}if(!d.length)break;d.sort((f,m)=>f[0].localeCompare(m[0])||f[2].localeCompare(m[2])||f[1].localeCompare(m[1]));let p=!1;for(let[f,m,h,b]of d)if(!l.has(b)){if(c.length>=n)break;l.add(b),c.push({subject:f,object:h,via:m}),r.has(f)||r.set(f,new Set),r.get(f).add(h),p=!0}if(c.length>=n||!p)break}return c}function Py(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}${Ue}${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 c=[],l=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let b=`${m}${Ue}${h}`;l.has(b)||(l.add(b),c.push([m,h]))}let u=o instanceof Set?o.size?o:null:Fs(o),d=(m,h,b)=>!u||u.has(m)||u.has(h)||u.has(b),p=[],f=new Set;for(let m=0;m<n&&c.length;m+=1){let h=[],b=(w,x,R)=>{if(w===R)return;let E=`${w}${Ue}${R}`;r.has(E)||f.has(E)||d(w,x,R)&&h.push([w,x,R,E])};for(let[w,x]of c){for(let R of i.get(x)||[])b(w,x,R);for(let R of a.get(w)||[])b(R,w,x)}if(!h.length)break;h.sort((w,x)=>w[0].localeCompare(x[0])||w[2].localeCompare(x[2])||w[1].localeCompare(x[1]));let g=!1,$=[];for(let[w,x,R,E]of h)if(!f.has(E)){if(p.length>=s)break;f.add(E),p.push({subject:w,object:R,via:x}),i.has(w)||i.set(w,new Set),i.get(w).add(R),a.has(R)||a.set(R,new Set),a.get(R).add(w),$.push([w,R]),g=!0}if(p.length>=s||!g)break;c=$}return p}function is(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 GO(e){return is((e||[]).map(([t,n])=>[n,t]))}function Ef(e,t){let n=[],s=[],o=new Map,r=new Map;for(let l of e||[])!l||!l.subject||!l.predicate||!l.object||(fo(l.predicate)?n.push([l.subject,l.object]):Vo(l.predicate)?s.push([l.subject,l.object]):Wr(l.predicate)?o.set(l.subject,l.object):Vi(l.predicate)&&r.set(l.subject,l.object));let i=GO(n),a=new Set;for(let l of t||[]){let u=V(l);if(u){a.add(u);for(let d of i(u))a.add(d)}}let c=new Set(a);for(let[l,u]of s)a.has(u)&&c.add(l);for(let[l,u]of r)o.has(l)&&a.has(u)&&c.add(l);return c}function My(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=is(t),i=new Set,a=new Set;for(let[f,m]of o||[])f&&m&&i.add(`${f}${Ue}${m}`);let c=s instanceof Set?s.size?s:null:Fs(s),l=(f,m,h)=>!c||c.has(f)||c.has(m)||c.has(h),u=[];for(let[f,m]of e||[]){if(!f||!m)continue;let h=`${f}${Ue}${m}`;if(!a.has(h)){a.add(h);for(let b of r(m)){if(b===m||b===f)continue;let g=`${f}${Ue}${b}`;i.has(g)||l(f,m,b)&&u.push([f,m,b,g])}}}u.sort((f,m)=>f[0].localeCompare(m[0])||f[2].localeCompare(m[2])||f[1].localeCompare(m[1]));let d=[],p=new Set;for(let[f,m,h,b]of u)if(!p.has(b)){if(d.length>=n)break;p.add(b),d.push({subject:f,object:h,via:m})}return d}function Fy(e,t,n,{budget:s=50,focus:o=null}={}){let r=is(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Ue}${h}`),a.add(`${h}${Ue}${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 c=new Set,l=o instanceof Set?o.size?o:null:Fs(o),u=(m,h,b)=>!l||l.has(m)||l.has(h)||l.has(b),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let b=`${m}${Ue}${h}`;if(!c.has(b)){c.add(b);for(let g of[h,...r(h)]){let $=i.get(g);if($)for(let w of $){if(w===m)continue;let x=`${m}${Ue}${w}`;a.has(x)||u(m,h,w)&&d.push([m,h,g,w,x])}}}}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 p=[],f=new Set;for(let[m,h,b,g,$]of d)if(!f.has($)){if(p.length>=s)break;f.add($),p.push({subject:m,object:g,viaType:h,viaClass:b})}return p}function Dy(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=is(n),a=new Map;for(let b of s||[]){if(!b||!b.restriction||!b.property||!b.target)continue;let g=`${b.property}${Ue}${b.target}`;a.has(g)||a.set(g,new Set),a.get(g).add(b.restriction)}if(!a.size)return[];let c=new Set,l=new Map;for(let[b,g]of t||[])!b||!g||(c.add(`${b}${Ue}${g}`),l.has(b)||l.set(b,new Set),l.get(b).add(g));let u=r instanceof Set?r.size?r:null:Fs(r),d=(b,g,$)=>!u||u.has(b)||u.has(g)||u.has($),p=new Set,f=[];for(let[b,g,$]of e||[]){if(!b||!g||!$)continue;let w=V(g),x=`${b}${Ue}${w}${Ue}${$}`;if(p.has(x))continue;p.add(x);let R=l.get($);if(R)for(let E of R)for(let k of[E,...i(E)]){let O=a.get(`${w}${Ue}${k}`);if(O)for(let S of O){if(b===S)continue;let _=`${b}${Ue}${S}`;c.has(_)||d(b,$,S)&&f.push([b,g,w,$,E,k,S,_])}}}f.sort((b,g)=>b[0].localeCompare(g[0])||b[6].localeCompare(g[6])||b[1].localeCompare(g[1])||b[3].localeCompare(g[3]));let m=[],h=new Set;for(let[b,g,$,w,x,R,E,k]of f)if(!h.has(k)){if(m.length>=o)break;h.add(k),m.push({subject:b,object:E,viaProperty:g,viaPropertyKey:$,viaValue:w,viaType:x,viaTarget:R})}return m}function Af(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(Wr(r.predicate))t.set(r.subject,r.object);else if(UO(r.predicate))s.set(r.subject,r.object);else{let i=KO[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)!==VO)continue;let c=s.get(r);c&&o.push({restriction:r,kind:i,n:a,onClass:c})}return o.sort((r,i)=>r.restriction.localeCompare(i.restriction)),o}function zy(e,t,{budget:n=50,focus:s=null}={}){let o=is(t),r=new Map;for(let p of e||[]){if(!p||!p.restriction||!p.property||!p.target)continue;let f=V(p.property);r.has(f)||r.set(f,[]),r.get(f).push({restriction:p.restriction,target:p.target})}let i=new Set;for(let[p,f]of t||[])p&&f&&i.add(`${p}${Ue}${f}`);let a=s instanceof Set?s.size?s:null:Fs(s),c=(p,f)=>!a||a.has(p)||a.has(f),l=[];for(let[,p]of r)if(!(p.length<2))for(let f of p)for(let m of p){if(f.restriction===m.restriction||f.target===m.target||!o(f.target).has(m.target))continue;let h=`${f.restriction}${Ue}${m.restriction}`;i.has(h)||c(f.restriction,m.restriction)&&l.push([f.restriction,m.restriction,f.target,m.target,h])}l.sort((p,f)=>p[0].localeCompare(f[0])||p[1].localeCompare(f[1]));let u=[],d=new Set;for(let[p,f,m,h,b]of l)if(!d.has(b)){if(u.length>=n)break;d.add(b),u.push({subject:p,object:f,viaY1:m,viaY2:h})}return u}function By(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=is(e),a=r instanceof Set?r.size?r:null:Fs(r),c=p=>!a||a.has(n)||a.has(p),l=new Map;for(let[p,f]of e||[])!p||!f||(l.has(p)||l.set(p,new Set),l.get(p).add(f));let u=new Map((t||[]).map(p=>[p.restriction,p])),d=0;for(let p of[n,...i(n)]){if(d>=o)break;if(d+=1,!!c(p))for(let f of l.get(p)||[]){let m=u.get(f);if(m&&s(m))return{viaClass:p,viaRestriction:f,record:m}}}return null}function qO(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=By(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 XO(e,t,n,s,o={}){if(!s)return null;let r=By(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 JO(e,t,n,{budget:s=50,focus:o=null}={}){let r=is(t),i=new Map;for(let[f,m]of n||[])!f||!m||f===m||(i.has(f)||i.set(f,new Set),i.get(f).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(f));if(!i.size)return[];let a=new Map;for(let[f,m]of e||[])!f||!m||(a.has(f)||a.set(f,new Set),a.get(f).add(m));let c=o instanceof Set?o.size?o:null:Fs(o),l=f=>!c||c.has(f),u=[],d=new Set;for(let[f,m]of a){if(!l(f))continue;let h=[...m].sort();for(let b=0;b<h.length;b+=1)for(let g=b+1;g<h.length;g+=1){let[$,w]=[h[b],h[g]],x=[$,...r($)],R=[w,...r(w)],E=null;for(let O of x){let S=i.get(O);if(S){for(let _ of R)if(S.has(_)){E=[O,_];break}if(E)break}}if(!E)continue;let k=`${f}${Ue}${$}${Ue}${w}`;d.has(k)||(d.add(k),u.push([f,$,w,E[0],E[1]]))}}u.sort((f,m)=>f[0].localeCompare(m[0])||f[1].localeCompare(m[1])||f[2].localeCompare(m[2]));let p=[];for(let[f,m,h,b,g]of u){if(p.length>=s)break;p.push({subject:f,classA:m,classB:h,viaA:b,viaB:g})}return p}async function Uy(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=Gr,full:i=!1,store:a}={}){let{loadMemory:c,readFactRows:l,appendFacts:u}=Ay(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",p=await c(e),f=l(p),m=f.filter(A=>fo(A.predicate)).map(A=>[A.subject,A.object]),h=f.filter(A=>Vo(A.predicate)).map(A=>[A.subject,A.object]),b=f.filter(A=>Go(A.predicate)).map(A=>[A.subject,A.object]),g=new Map,$=new Map,w=[];for(let A of f){let ge=String(A.predicate||"").trim().toLowerCase();Wr(A.predicate)?g.set(A.subject,A.object):Vi(A.predicate)?$.set(A.subject,A.object):Tf.has(ge)||w.push([A.subject,A.predicate,A.object])}let x=[];for(let[A,ge]of g){let Ie=$.get(A);Ie&&x.push({restriction:A,property:ge,target:Ie})}let R=Fs(s),E=o&&R?Ef(f,[...R]):R,k=E===null&&d?await a.loadSyllogiseState(e):null,O=new Set(f.map(A=>A.id)),S=Array.isArray(k?.factIds)?k.factIds.filter(A=>!O.has(A)):[],_=k&&Array.isArray(k.factIds)&&!S.length&&!i?"delta":"full",y=_==="delta"?new Set(k.factIds):null,T=_==="delta"?f.filter(A=>!y.has(A.id)):f,C=T.length,v=new Map;for(let A of f)v.set(`${A.subject}${Ue}${A.predicate}${Ue}${A.object}`,A.trust);let j=(A,ge,Ie)=>v.get(`${A}${Ue}${ge}${Ue}${Ie}`),M=(A,ge,Ie)=>v.has(`${A}${Ue}${ge}${Ue}${Ie}`),z=A=>A.filter(ge=>typeof ge=="number"),K=_==="delta"&&!T.length,Y=_==="delta"?T.filter(A=>fo(A.predicate)).map(A=>[A.subject,A.object]):[],X=_==="delta"?Y.length?Py(m,Y,{depth:t,budget:n,focus:E}):[]:Ly(m,{depth:t,budget:n,focus:E}),L=m.concat(X.map(A=>[A.subject,A.object])),H=E,W=null;if(_==="delta"&&!K){let A=f.concat(X.map(Ie=>({subject:Ie.subject,predicate:Be,object:Ie.object}))),ge=[];for(let Ie of T)ge.push(Ie.subject,Ie.object);W=Ef(A,ge),H=W}let I=A=>!W||W.has(A),D=W?h.filter(([A,ge])=>I(A)||I(ge)):h,N=new Set;if(W)for(let A of T)Go(A.predicate)&&(N.add(A.subject),N.add(A.object));let F=W&&N.size?is(L):null,B=W?h.filter(([A,ge])=>I(A)||I(ge)||F&&[...F(ge)].some(Ie=>N.has(Ie))):h,U=new Set;if(W){for(let A of T)if(Wr(A.predicate)||Vi(A.predicate)){let ge=g.get(A.subject);ge&&U.add(V(ge))}}let G=W?w.filter(([A,ge,Ie])=>I(A)||I(Ie)||U.has(V(ge))):w,Q=Math.max(0,n-X.length),ie=Q>0&&!K?My(D,L,{budget:Q,focus:H,presentTypeEdges:h}):[],fe=Math.max(0,n-X.length-ie.length),ae=fe>0&&!K?Fy(B,L,b,{budget:fe,focus:H}):[],Z=Math.max(0,n-X.length-ie.length-ae.length),J=Z>0&&x.length&&!K?Dy(G,h,L,x,{budget:Z,focus:H}):[],te=Math.max(0,n-X.length-ie.length-ae.length-J.length),oe=te>0&&x.length>1&&!K?zy(x,L,{budget:te,focus:H}):[],Ae=new Map(x.map(A=>[A.restriction,A])),pe=[...X.map(A=>({subject:A.subject,predicate:Be,object:A.object,provenance:Oy,justification:[[Ee(A.subject,Be,A.via),Ee(A.via,Be,A.object)]]})),...ie.map(A=>({subject:A.subject,predicate:Dt,object:A.object,provenance:Ny,justification:[[Ee(A.subject,Dt,A.via),Ee(A.via,Be,A.object)]]})),...ae.map(A=>{let ge=M(A.viaClass,Ur,A.object),[Ie,Es]=ge?[A.viaClass,A.object]:[A.object,A.viaClass],xs=z([j(A.subject,Dt,A.viaType),j(Ie,Ur,Es),...A.viaClass!==A.viaType?[j(A.viaType,Be,A.viaClass)]:[]]);return{subject:A.subject,predicate:Ur,object:A.object,provenance:Sf,justification:[[Ee(A.subject,Dt,A.viaType),Ee(Ie,Ur,Es),...A.viaClass!==A.viaType?[Ee(A.viaType,Be,A.viaClass)]:[]]],...xs.length?{premiseTrusts:xs,ruleConfidence:jf}:{}}}),...J.map(A=>{let ge=z([j(A.subject,A.viaProperty,A.viaValue),j(A.viaValue,Dt,A.viaType),j(A.object,Rn,A.viaPropertyKey),j(A.object,_n,A.viaTarget),...A.viaType!==A.viaTarget?[j(A.viaType,Be,A.viaTarget)]:[]]);return{subject:A.subject,predicate:Dt,object:A.object,provenance:Rf,justification:[[Ee(A.subject,A.viaProperty,A.viaValue),Ee(A.viaValue,Dt,A.viaType),Ee(A.object,Rn,A.viaPropertyKey),Ee(A.object,_n,A.viaTarget),...A.viaType!==A.viaTarget?[Ee(A.viaType,Be,A.viaTarget)]:[]]],...ge.length?{premiseTrusts:ge,ruleConfidence:_f}:{}}}),...oe.map(A=>{let ge=Ae.get(A.subject),Ie=Ae.get(A.object),Es=z([ge&&j(A.subject,Rn,ge.property),j(A.subject,_n,A.viaY1),Ie&&j(A.object,Rn,Ie.property),j(A.object,_n,A.viaY2),j(A.viaY1,Be,A.viaY2)]);return{subject:A.subject,predicate:Be,object:A.object,provenance:Of,justification:[[...ge?[Ee(A.subject,Rn,ge.property)]:[],Ee(A.subject,_n,A.viaY1),...Ie?[Ee(A.object,Rn,Ie.property)]:[],Ee(A.object,_n,A.viaY2),Ee(A.viaY1,Be,A.viaY2)]],...Es.length?{premiseTrusts:Es,ruleConfidence:If}:{}}})],je=pe.map(A=>({id:Ee(A.subject,A.predicate,A.object),subject:A.subject,predicate:A.predicate,object:A.object,environments:A.justification,write:A})),Le=Gy(f.concat(je.map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object})))),ke=new Map(f.map(A=>[A.id,A])),Xe=A=>fo(A)||Vo(A)||Go(A),ce=A=>_!=="delta"||W!==null&&(W.has(A.subject)||W.has(A.object)),le=f.filter(A=>Xe(A.predicate)&&Wy(A.provenance)&&Gi(A).length<r&&ce(A)).map(A=>({id:A.id,subject:A.subject,predicate:A.predicate,object:A.object,environments:Gi(A),provenance:A.provenance})),me=[...je,...le].sort((A,ge)=>A.subject.localeCompare(ge.subject)||A.predicate.localeCompare(ge.predicate)||A.object.localeCompare(ge.object)),Je=0,It=!1,re=0;for(let A of me){if(re>=n){It=!0;break}re+=1;let ge=Le(A,{maxEnvironments:r+1}),{kept:Ie,truncated:Es}=ZO(A.environments,ge,r);if(Es&&(It=!0),!(Ie.length<=A.environments.length)){if(Je+=Ie.length-A.environments.length,A.write){A.write.justification=Ie;continue}pe.push({subject:A.subject,predicate:A.predicate,object:A.object,justification:Ie,...Vy(A.provenance,Ie,xs=>ke.get(xs)?.trust)||{}})}}let{ids:Pe}=await u(e,pe),it=[],ze=0;for(let A of X)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.via,rule:Cy}),ze+=1;for(let A of ie)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.via,rule:Iy}),ze+=1;for(let A of ae)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.viaClass,rule:xf}),ze+=1;for(let A of J)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.viaValue,rule:kf}),ze+=1;for(let A of oe)it.push({id:Pe[ze],subject:A.subject,object:A.object,via:A.viaY1,rule:Cf}),ze+=1;let qs=it.length>=n;if(E===null&&d&&!qs){let A=new Set(O);for(let ge of Pe)A.add(ge);await a.saveSyllogiseState(e,{version:1,factIds:[...A].sort(),completedAt:new Date().toISOString()})}return{derived:it,count:it.length,budget:n,depth:t,truncated:qs,mode:_,deltaSize:C,environmentsAdded:Je,alternatesTruncated:It}}function Wy(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function QO(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();fo(u.predicate)?t.push([u.subject,u.object]):Vo(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):Go(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)):Wr(u.predicate)?o.set(u.subject,u.object):Vi(u.predicate)?r.set(u.subject,u.object):Tf.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([V(u.predicate),u.object]))}let a=is(t),c=(u,d)=>u!==d&&a(u).has(d),l=u=>{let d=o.get(u),p=r.get(u);return d&&p?{property:V(d),target:p}:null};return u=>{if(fo(u.predicate)){if(c(u.subject,u.object))return!0;let d=l(u.subject),p=l(u.object);return!!(d&&p&&d.property===p.property&&c(d.target,p.target))}if(Vo(u.predicate)){for(let p of n.get(u.subject)||[])if(c(p,u.object))return!0;let d=l(u.object);if(d){for(let[p,f]of i.get(u.subject)||[])if(p===d.property){for(let m of n.get(f)||[])if(m===d.target||c(m,d.target))return!0}}return!1}if(Go(u.predicate)){for(let d of n.get(u.subject)||[])for(let p of[d,...a(d)])if(s.get(p)?.has(u.object))return!0;return!1}return!0}}function Gy(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,c=new Map,l=new Map;for(let f of e){if(!f||!f.subject||!f.predicate||!f.object)continue;f.id&&t.add(f.id);let m=String(f.predicate||"").trim().toLowerCase();fo(f.predicate)?(n.push([f.subject,f.object]),s.has(f.subject)||s.set(f.subject,new Set),s.get(f.subject).add(f.object)):Vo(f.predicate)?(o.has(f.subject)||o.set(f.subject,new Set),o.get(f.subject).add(f.object)):Go(f.predicate)?(r.add(`${f.subject}${Ue}${f.object}`),i.has(f.subject)||i.set(f.subject,new Set),i.get(f.subject).add(f.object),i.has(f.object)||i.set(f.object,new Set),i.get(f.object).add(f.subject)):Wr(f.predicate)?a.set(f.subject,f.object):Vi(f.predicate)?c.set(f.subject,f.object):Tf.has(m)||(l.has(f.subject)||l.set(f.subject,[]),l.get(f.subject).push([f.predicate,f.object]))}let u=is(n),d=f=>s.get(f)||new Set,p=f=>{let m=a.get(f),h=c.get(f);return m&&h?{property:m,propertyKey:V(m),target:h}:null};return(f,{maxEnvironments:m=Gr}={})=>{let h=[],b=new Set,g=$=>{if(h.length>=m||f.id&&$.includes(f.id)||!$.every(x=>t.has(x)))return;let w=[...$].sort().join(" ");b.has(w)||(b.add(w),h.push($))};if(fo(f.predicate)){for(let $ of[...d(f.subject)].sort()){if(h.length>=m)break;$===f.subject||$===f.object||d($).has(f.object)&&g([Ee(f.subject,Be,$),Ee($,Be,f.object)])}if(h.length<m){let $=p(f.subject),w=p(f.object);$&&w&&$.propertyKey===w.propertyKey&&$.target!==w.target&&d($.target).has(w.target)&&g([Ee(f.subject,Rn,$.property),Ee(f.subject,_n,$.target),Ee(f.object,Rn,w.property),Ee(f.object,_n,w.target),Ee($.target,Be,w.target)])}return h}if(Vo(f.predicate)){for(let w of[...o.get(f.subject)||[]].sort()){if(h.length>=m)break;w!==f.object&&d(w).has(f.object)&&g([Ee(f.subject,Dt,w),Ee(w,Be,f.object)])}let $=p(f.object);if($){let w=[...l.get(f.subject)||[]].filter(([x])=>V(x)===$.propertyKey).sort((x,R)=>x[0].localeCompare(R[0])||x[1].localeCompare(R[1]));for(let[x,R]of w){if(h.length>=m)break;for(let E of[...o.get(R)||[]].sort()){if(h.length>=m)break;E!==$.target&&!d(E).has($.target)||g([Ee(f.subject,x,R),Ee(R,Dt,E),Ee(f.object,Rn,$.propertyKey),Ee(f.object,_n,$.target),...E!==$.target?[Ee(E,Be,$.target)]:[]])}}}return h}if(Go(f.predicate)){let $=[];for(let w of o.get(f.subject)||[])for(let x of[w,...u(w)])(i.get(x)||new Set).has(f.object)&&$.push([w,x]);$.sort((w,x)=>w[0].localeCompare(x[0])||w[1].localeCompare(x[1]));for(let[w,x]of $){if(h.length>=m)break;let R=r.has(`${x}${Ue}${f.object}`),[E,k]=R?[x,f.object]:[f.object,x];g([Ee(f.subject,Dt,w),Ee(E,Ur,k),...x!==w?[Ee(w,Be,x)]:[]])}return h}return h}}function ZO(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 Vy(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=eI.get(i);if(a!==void 0){s=a;break}}if(s===void 0)return null;let o=null,r=-1;for(let i of t||[]){let a=i.map(l=>n(l)).filter(l=>typeof l=="number");if(a.length!==i.length)continue;let c=Math.min(...a);c>r&&(r=c,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function tI(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=Gr,store:i,sourceTags:a=[],predicate:c=Be}={}){let{loadMemory:l,readFactRows:u,removeFacts:d}=Ay(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),p=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,m=(a||[]).filter(Boolean);if(m.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let h=V(t),b=V(n),g=Ee(h,c,b),$=await l(e),w=u($),x=new Map(w.map(M=>[M.id,M]));if(!x.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let R=x.get(g).sourceIds||[],E=m.map(M=>f(g,M).slice(g.length+1)),k=m.length?R.filter(M=>E.includes(M)):[],O=!m.length||k.length>0;if(m.length&&!O)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let S=m.length>0&&k.length<R.length,_=new Set([g]),y=[g],T=new Map,C=!1;if(!S){let M=w.filter(X=>Gi(X).length&&Wy(X.provenance)),z=new Map;for(let X of M)for(let L of Gi(X))for(let H of L)z.has(H)||z.set(H,new Set),z.get(H).add(X.id);let K=0,Y=[g];for(;K<o;K+=1){let X=new Set;for(let B of Y)for(let U of z.get(B)||[])_.has(U)||X.add(U);let L=[...X].map(B=>x.get(B)).sort((B,U)=>B.subject.localeCompare(U.subject)||B.predicate.localeCompare(U.predicate)||B.object.localeCompare(U.object));if(!L.length)break;let H=w.filter(B=>!_.has(B.id)&&!X.has(B.id)),W=new Set(H.map(B=>B.id)),I=Gy(H),D=QO(H),N=!1,F=!1;Y=[];for(let B of L){if(_.size>=s){F=!0;break}let U=Gi(B),G=U.filter(ie=>ie.every(fe=>W.has(fe)));if(G.length){G.length!==U.length&&T.set(B.id,G);continue}let Q=I(B,{maxEnvironments:r});if(Q.length){T.set(B.id,Q);continue}D(B)||(_.add(B.id),y.push(B.id),Y.push(B.id),N=!0)}if(F){C=!0;break}if(!N)break}!C&&K>=o&&(C=M.some(X=>!_.has(X.id)&&X.justification.some(L=>_.has(L))))}let v=m.length?[...k.map(M=>`${g}@${M}`),...y.slice(1)]:y,{removed:j}=await d(e,v);if(p){let M=[...T.entries()].filter(([z])=>!_.has(z)).sort((z,K)=>z[0].localeCompare(K[0])).map(([z,K])=>{let Y=x.get(z);return{subject:Y.subject,predicate:Y.predicate,object:Y.object,justification:K,...Vy(Y.provenance,K,X=>x.get(X)?.trust)||{}}});M.length&&await p(e,M)}return{retracted:j,count:j.length,budget:s,depth:o,truncated:C,found:!0,...m.length?{ownRecord:!0,stillStands:S}:{}}}function Ic(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 Nf(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=s instanceof Map?s:Ic(s),a=[];for(let[l,u]of n||[])l===e&&u&&a.push({node:u,path:[{subject:l,predicate:Dt,object:u}]});for(let l of i.get(e)||[])a.push({node:l,path:[{subject:e,predicate:Be,object:l}]});let c=new Set([e]);for(let l=1;l<=o&&a.length;l+=1){for(let{node:d,path:p}of a)if(r.has(d))return p;if(l===o)break;let u=[];for(let{node:d,path:p}of a)if(!c.has(d)){c.add(d);for(let f of i.get(d)||[])c.has(f)||u.push({node:f,path:[...p,{subject:d,predicate:Be,object:f}]})}a=u}return null}var Be,Cy,Oy,Dt,Iy,Ny,Ur,xf,Sf,jf,Rn,_n,kf,Rf,_f,Gr,Ue,fo,Vo,Go,Wr,Vi,UO,Tf,VO,KO,Cf,Of,If,HO,YO,Gi,eI,Ot=P(()=>{Ze();Be="rdfs:subClassOf",Cy="subClassOf",Oy=`entailed:${Cy}`,Dt="rdf:type",Iy="type",Ny=`entailed:${Iy}`,Ur="owl:disjointWith",xf="disjointWith",Sf=`entailed:${xf}`,jf=.95,Rn="owl:onProperty",_n="owl:someValuesFrom",kf="someValuesFrom",Rf=`entailed:${kf}`,_f=.95,Gr=4,Ue="\u241F",fo=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Vo=e=>String(e||"").trim().toLowerCase()==="rdf:type",Go=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Wr=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Vi=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",UO=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Tf=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);VO="has",KO={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Cf="someValuesFromSubsumption",Of=`entailed:${Cf}`,If=.95;HO=.95;YO=.95;Gi=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);eI=new Map([[Sf,jf],[Rf,_f],[Of,If]])});function Hr(e){let t=String(e||""),n=Hy.get(t);return n||(t.startsWith(Ky)?Nc+t.slice(Ky.length):t)}function Xy(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Nf(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function Mc(e,t,n,{maxHops:s=3}={}){let o=Kr(e),r=Kr(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassSucc:c}=Yy(i),l=i.filter(g=>(g.predicate===Pc||g.predicate===Vr)&&r.has(g.object)),u=[];for(let g of l){let $=g.predicate===Vr?"negative":"positive";if(o.has(g.subject)){u.push({fact:g,polarity:$,hops:0,chain:null});continue}let w=Xy(o,g.subject,a,c,s);w&&w.length&&u.push({fact:g,polarity:$,hops:w.length,chain:w})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:Pf(o,r,i,{maxHops:s})};u.sort((g,$)=>g.hops-$.hops||($.fact.trust||0)-(g.fact.trust||0));let d=u[0].hops,p=u.filter(g=>g.hops===d),f=p.filter(g=>g.polarity==="positive").map(g=>g.fact),m=p.filter(g=>g.polarity==="negative").map(g=>g.fact),h=m.length&&!f.length?"negative":"positive",b=u.find(g=>g.hops>d&&g.polarity!==h)||null;return{verdict:f.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:f,negative:m,chain:u[0].chain,overrides:b?{fact:b.fact,chain:b.chain}:null,baseRate:null}}function Pf(e,t,n,{maxHops:s=3}={}){let o=Kr(e),r=Kr(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Be||h.predicate===Dt),c=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!c.length)return null;let l=c[0],u=[...new Set(a.filter(h=>h.object===l&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let b=i.find(g=>g.subject===h&&r.has(g.object)&&(g.predicate===Pc||g.predicate===Vr));return b?{name:h,polarity:b.predicate===Vr?"negative":"positive",fact:b}:{name:h,polarity:"unknown",fact:null}},p=u.map(d),{typeEdges:f,subClassSucc:m}=Yy(i);return{klass:l,kinds:u.length,positive:p.filter(h=>h.polarity==="positive"),negative:p.filter(h=>h.polarity==="negative"),unknown:p.filter(h=>h.polarity==="unknown"),chain:Xy(o,l,f,m,s)}}function Mf(e,t,{exclude:n=[],maxHops:s=3}={}){let o=Kr(e),r=Kr(n),i=Array.isArray(t)?t:[],a=new Set,c=[];for(let l of i)l.predicate!==Pc||!o.has(l.object)||r.has(l.subject)||a.has(l.subject)||(a.add(l.subject),Mc(new Set([l.subject]),o,i,{maxHops:s}).verdict==="yes"&&c.push(l));return c.sort(nI)}var Nc,Ky,Lc,Hy,jW,qy,Pc,Vr,Lf,nI,Kr,Yy,Fc=P(()=>{Ot();Nc="mgxneg:",Ky="mgx:",Lc="mgxneg:subClassOf",Hy=new Map([[Be,Lc]]),jW=new Map([...Hy].map(([e,t])=>[t,e]));qy=e=>String(e||"").startsWith(Nc),Pc="mgx:capableOf",Vr=Hr(Pc),Lf=6,nI=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),Kr=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Yy=e=>{let t=e.filter(s=>s.predicate===Dt).map(s=>[s.subject,s.object]),n=e.filter(s=>s.predicate===Be).map(s=>[s.subject,s.object]);return{typeEdges:t,subClassSucc:Ic(n)}}});function Dc(e){let t=String(e||"");return zf.has(t)?Ff:oI.has(t)||rI.test(t)?Ki:iI.has(t)?Jy:Df}function aI(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(Mg.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function cI(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(aI(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function Bf(e,t){let n=t===Jy;if(!n&&t!==Ki)return null;let s=(e||[]).map(r=>({row:r,at:cI(r,n)}));s.sort((r,i)=>{if(r.at!==i.at)return r.at===null?1:i.at===null?-1:n?r.at-i.at:i.at-r.at;let a=(i.row.trust||0)-(r.row.trust||0);if(a)return a;let[c,l]=[String(r.row.object),String(i.row.object)];return c<l?-1:c>l?1:0});let o=s.map(r=>r.row);return{winner:o[0]||null,ranked:o,contested:s.length>1&&s[0].at===s[1].at}}var Ff,Ki,Jy,Df,sI,zf,oI,rI,iI,Qy=P(()=>{Fc();Wn();Ff="merge",Ki="latest-observation-wins",Jy="first-claim-wins",Df="contradiction",sI=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","mgx:memberOf","mgx:collectionOf","mgx:usedFor","mgx:receivesAction","mgx:causes","mgx:causesDesire","mgx:hasSubevent","mgx:hasPrerequisite","mgx:motivatedByGoal","mgx:obstructedBy","mgx:desires","mgx:hasProperty","mgx:madeOf","mgx:atLocation","mgx:locatedNear","mgx:createdBy","mgx:mannerOf","mgx:relatedTo","mgx:synonym","mgx:antonym","mgx:similarTo","mgx:symbolOf","mgx:knows-about"],zf=new Set(sI.flatMap(e=>[e,Hr(e)])),oI=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"]),rI=/^mgx:has-exit-([a-z]+)$/,iI=new Set(["mgx:playedBy"])});function Yi(e){let t=String(e||""),n=t.indexOf(zc);return n<0?"":t.slice(n+zc.length)}function pI(e){let t=1,n=0;for(let s of e)t*=1-dI(s),n+=1;return n?fI(Math.min(1,1-t)):0}function s$(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 i$(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 a$(e,t="",n=""){let s=t,o=n;for(let r of e)s=o$(s,r.assertedAt),o=r$(o,r.assertedAt);return{earliest:s,latest:o}}function Vf({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let c=[...new Set(o)].filter(Boolean).sort(),l=a?pI(c.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:lI,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===qr?"rollupSourceIds":"rollupRecordIds",value:c.join(" ")},{prop:qi,key:"rollupCount",value:String(c.length)},{prop:as,key:"rollupEarliest",value:r},{prop:cs,key:"rollupLatest",value:i},...l===void 0?[]:[{prop:Yr,key:"rollupPrior",value:String(l)}]]}}function c$({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(i$).slice(8);if(!i.length)return null;let{earliest:a,latest:c}=a$(i,zt(s,as),zt(s,cs));return{rollup:Vf({id:Uf(e,t),sourceKey:`rollup:${t}`,template:Kf(i[0].record||s),idsProp:qr,ids:[...Wc(s),...i.map(u=>u.sourceId)],earliest:a,latest:c,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function l$({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(i$),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:c}=a$(i,zt(s,as),zt(s,cs));return{rollup:Vf({id:Wf(e,t),sourceKey:t,template:Kf(i[0].record||s),idsProp:Hi,ids:[...uI(s),...i.map(u=>u.id)],earliest:a,latest:c}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function Hf(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=po(s),r=o?qr:Hi,i=a=>Gf(zt(a,r));return Vf({id:s,sourceKey:zt(e,"mgx:sourceId")||zt(t,"mgx:sourceId"),template:Kf(zt(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:o$(zt(e,as),zt(t,as)),latest:r$(zt(e,cs),zt(t,cs)),priorFor:o?n:void 0})}function u$(e,t){if(!t)return!1;for(let n of e||[])if(Wc(n).includes(t))return!0;return!1}var lI,Zy,e$,Bc,t$,qr,Hi,qi,as,cs,Yr,zc,n$,Uf,Wf,po,Xr,Uc,zt,Gf,Wc,uI,dI,fI,o$,r$,Kf,qf=P(()=>{lI="Fact",Zy=64,e$=8,Bc=8,t$=2,qr="mgx:rollupSourceIds",Hi="mgx:rollupRecordIds",qi="mgx:rollupCount",as="mgx:rollupEarliest",cs="mgx:rollupLatest",Yr="mgx:rollupPrior",zc="@rollup:",n$="#rollup",Uf=(e,t)=>`${e}${zc}${t}`,Wf=(e,t)=>`${e}@${t}${n$}`,po=e=>String(e||"").includes(zc),Xr=e=>String(e||"").endsWith(n$),Uc=e=>po(e)||Xr(e);zt=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Gf=e=>String(e||"").split(" ").filter(Boolean),Wc=e=>Gf(zt(e,qr)),uI=e=>Gf(zt(e,Hi)),dI=e=>Math.max(0,Math.min(1,Number(e)||0)),fI=e=>Number(e.toFixed(6));o$=(e,t)=>s$(e,t,Math.min),r$=(e,t)=>s$(e,t,Math.max);Kf=e=>({label:e?.label||"",subject:zt(e,"rdf:subject"),predicate:zt(e,"rdf:predicate"),object:zt(e,"rdf:object")})});function Qf(e){let t=String(e||"");return Jf(t)?t.slice(0,-Hc.length):""}function d$(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 Zf({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:Ht,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:Vc,key:"retractedRecordIds",value:i.join(" ")},{prop:Yf,key:"retractedCount",value:String(i.length)},{prop:Kc,key:"retractedAt",value:o||""},...a.length?[{prop:Xi,key:"provenance",value:a.join(" | ")}]:[]]}}function p$({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...Ko(o),...n].filter(Boolean);return a.length?Zf({id:Xf(e,t),sourceId:t,template:r||f$(o),ids:a,retractedAt:d$(Ho(o),s),tags:[...Ji(Tn(o,Xi)),...Ji(i)]}):null}function m$(e,t){let n=f$(Tn(e,"rdf:subject")?e:t);return Zf({id:e?.id||t?.id,sourceId:Tn(e,"mgx:sourceId")||Tn(t,"mgx:sourceId"),template:n,ids:[...Ko(e),...Ko(t)],retractedAt:d$(Ho(e),Ho(t)),tags:[...Ji(Tn(e,Xi)),...Ji(Tn(t,Xi))]})}function hI(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function gI(e,t,n=""){return!e||!t||!Ko(e).includes(t)?!1:hI(n,Ho(e))}function qc(e,t,n=""){for(let s of e||[])if(gI(s,t,n))return!0;return!1}function bI(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function wI(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 Yc(e){let t=Qf(e?.id);return t?{id:e.id,subject:t,predicate:Gc,object:bI(Ho(e),Ko(e)),provenance:Tn(e,Xi)}:null}function Xc(e){if(!e||e.predicate!==Gc)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=wI(e.object);return o.length?Zf({id:`${t}${Hc}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Ji(e.provenance)}):null}var Ht,Gc,Vc,Kc,Yf,Hc,Xi,Xf,Jf,Tn,mI,Ji,Ko,Ho,f$,ep=P(()=>{Ht="Retraction",Gc="mgx:retracted",Vc="mgx:retractedRecordIds",Kc="mgx:retractedAt",Yf="mgx:retractedCount",Hc="#retracted",Xi="mgx:factProvenance",Xf=(e,t)=>`${e}@${t}${Hc}`,Jf=e=>String(e||"").endsWith(Hc);Tn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",mI=e=>String(e||"").split(" ").filter(Boolean),Ji=e=>String(e||"").split(" | ").filter(Boolean),Ko=e=>mI(Tn(e,Vc)),Ho=e=>Tn(e,Kc);f$=e=>({label:e?.label||"",subject:Tn(e,"rdf:subject"),predicate:Tn(e,"rdf:predicate"),object:Tn(e,"rdf:object")})});var yI,$I,vI,EI,tp,IW,h$=P(()=>{Wn();yI="mgx:worldName",$I="mgx:nodeName",vI="mgx:playedBy",EI="mgx:waved",tp="mgx:invitedBy",IW=Object.freeze([yI,$I,vI,EI,tp])});function Jc(e){let t=new Set;for(let n of e||[])n?.predicate===tp&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function np(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function Qc({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=np(t,n);if(!o.length)return[];if(typeof s!="function")return[];let r=new Map;for(let a of o){let c=s(a);r.set(a,new Set([...c||[]].map(String)))}return[...new Set((e||[]).map(String).filter(Boolean))].sort().filter(a=>o.every(c=>r.get(c).has(a)))}var sp=P(()=>{h$()});function ls(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function TI(e,t){(!e?.class||!xI.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function AI(e,t){for(let a of["rdf:subject","rdf:predicate","rdf:object"])Qi(ls(e,a))||t.push(`a Fact needs a non-empty ${a}`);for(let a of["rdf:subject","rdf:object"]){let c=ls(e,a);c!==void 0&&kI.test(c)&&t.push(`a Fact's ${a} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(c)})`)}let n=ls(e,"mgx:factProvenance");n!==void 0&&!Qi(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";RI(s)&&!b$.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=ls(e,"mgx:sourceId");o!==void 0&&!Qi(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=ls(e,"mgx:observedAt");r!==void 0&&!Number.isFinite(Date.parse(r))&&t.push(`mgx:observedAt, when present, must be a parseable instant (got ${JSON.stringify(r)})`);let i=ls(e,"mgx:extractionFinding");if(i!==void 0){let a=i.split(" ").filter(Boolean);a.length||t.push("mgx:extractionFinding, when present, must name at least one finding");for(let c of a)SI.has(c)||t.push(`mgx:extractionFinding must name findings from the closed vocabulary ${Zc.join(" | ")} (got ${JSON.stringify(c)})`)}for(let a of _I){let c=ls(e,a);if(c===void 0)continue;let l=c.split(" ").filter(Boolean);l.length||t.push(`${a}, when present, must name at least one record id`);for(let u of l)b$.test(u)||t.push(`${a} must name Fact record ids (got ${JSON.stringify(u)})`)}}function CI(e,t){Qi(ls(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=ls(e,"mgx:ruleKind");if(!n||!g$.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...g$].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of jI[n])Qi(ls(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function OI(e){let t=[];return TI(e,t),e?.class==="Fact"&&AI(e,t),e?.class==="Rule"&&CI(e,t),{ok:t.length===0,violations:t}}function op(e){let t=OI(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 xI,Zc,SI,g$,jI,kI,b$,RI,_I,Qi,rp=P(()=>{xI=new Set(["Utterance","Fact","Session","Source","Rule"]),Zc=Object.freeze(["identifier-token","clause-fallback","pronoun-carry","definitional-frame"]),SI=new Set(Zc),g$=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),jI={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"]},kI=/[.!?]\s+\w/,b$=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,RI=e=>e.includes("@")||/#v\d/.test(e),_I=["mgx:supersedes","mgx:supersededBy"];Qi=e=>typeof e=="string"&&e.trim().length>0});function $$(e,t){return t?.rowKey&&(e.rowKey=t.rowKey),t?.rowClass&&(e.rowClass=t.rowClass),t?.provenance&&(e.provenance=t.provenance),t?.status&&(e.status=t.status),e}function ea(e){let t=[];if(!e||typeof e!="object")return["not an object"];e.kind!==Jr&&t.push(`kind is ${JSON.stringify(e.kind)}, expected ${JSON.stringify(Jr)}`),e.contractVersion!==1&&t.push(`contractVersion is ${JSON.stringify(e.contractVersion)}, expected 1`);for(let n of II)typeof e[n]!="function"&&t.push(`${n}() is missing`);for(let n of NI)n in e&&e[n]!=null&&typeof e[n]!="function"&&t.push(`${n} is present but not a function`);return t}function nl(e){return ea(e).length===0}function ip(e){return new TextEncoder().encode(String(e?.json??"")).length}function sl(e){let t=[];if(!e||typeof e!="object")return["not an object"];if((typeof e.rowKey!="string"||!e.rowKey)&&t.push("rowKey must be a non-empty string"),el.includes(e.rowClass)||t.push(`rowClass ${JSON.stringify(e.rowClass)} is outside the closed set (${el.join(", ")})`),typeof e.term!="string"&&t.push("term must be a string, empty when the row has no term read path"),typeof e.json!="string"||!e.json)t.push("json must be a non-empty string");else{let n=ip(e);n>qo&&t.push(`json is ${n} bytes, over the ${qo}-byte cap`)}return e.expiresAt!==void 0&&!Number.isInteger(e.expiresAt)&&t.push("expiresAt must be epoch seconds as an integer when present"),t}function v$(e){return sl(e).length===0}function ta(e,t={}){let n=sl(e);if(!n.length)return e;throw new An(`invalid memory row ${JSON.stringify(e?.rowKey??null)}: ${n.join("; ")}`,{rowKey:typeof e?.rowKey=="string"?e.rowKey:"",rowClass:e?.rowClass,...t})}var Jr,tl,el,Zi,qo,w$,y$,An,Yo,II,NI,na=P(()=>{Jr="tmct-memory-row-backend",tl=1,el=Object.freeze(["fact","source","utterance","session","rule","retraction","edge-group","bookkeeping"]),Zi="bookkeeping",qo=4096,w$="TMCT_BACKEND_REJECTED",y$="TMCT_BACKEND_UNAVAILABLE";An=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendRejected",this.code=w$,$$(this,n)}},Yo=class extends Error{constructor(t,n={}){super(t,n.cause?{cause:n.cause}:void 0),this.name="BackendUnavailable",this.code=y$,$$(this,n)}},II=Object.freeze(["readRows","putRows","deleteRows","readMeta","putMeta","deleteAll","close"]),NI=Object.freeze(["readRowsByTerm"])});function zI(){return ap||(ap=new Map([[tt,"fact"],[us,"source"],[mo,"utterance"],[Xo,"session"],[ds,"rule"],[Ht,"retraction"]])),ap}function BI(e){let t=zI().get(e?.class);if(t)return t;throw new An(`individual ${JSON.stringify(e?.id??null)} has class ${JSON.stringify(e?.class??null)}, which no row class covers`,{rowKey:String(e?.id||"")})}function UI(e){return(e?.attributes||[]).some(t=>t?.prop===sa)?{...e,attributes:e.attributes.filter(t=>t?.prop!==sa)}:e}function WI(e){let t=new Map,n=0;for(let s of e||[]){let o;try{o=Number(JSON.parse(s?.json??"{}").ord)}catch{o=NaN}Number.isFinite(o)&&(t.set(s.rowKey,o),o>=n&&(n=o+1))}return s=>{let o=t.get(s);if(o!==void 0)return o;let r=n;return n+=1,r}}function E$(e,t,{onOversizedRow:n,log:s}){let o=ip(e);if(o<=qo||n==="keep")return!0;let r=t?` (provenance: ${t})`:"",i=`${e.rowClass} row ${e.rowKey} serializes to ${o} bytes, over the ${qo}-byte cap${r}`;if(n==="drop")return s(`dropped an oversized memory row: ${i}`),!1;throw new An(i,{rowKey:e.rowKey,rowClass:e.rowClass,provenance:t})}function lp(e,{priorRows:t=null,onOversizedRow:n="throw",log:s=GI}={}){if(!VI.has(n))throw new TypeError(`onOversizedRow must be "throw", "drop", or "keep", got ${JSON.stringify(n)}`);let o=WI(t),r={onOversizedRow:n,log:s},i=[];for(let a of e?.individuals||[]){if(!a?.id)continue;let c=BI(a),l={rowKey:String(a.id),rowClass:c,term:c==="fact"?V(DI(a,"subject")):"",json:JSON.stringify({ord:o(String(a.id)),individual:UI(a)})};E$(l,cp(a,MI),r)&&i.push(l)}for(let a of e?.objectProperties||[]){if(!a?.prop)continue;let c=`${LI}${a.prop}`,l={rowKey:c,rowClass:S$,term:"",json:JSON.stringify({ord:o(c),group:a})};E$(l,"",r)&&i.push(l)}return i}function KI(e){let t=[],n=[];for(let s=0;s<e.length;s+=1)e[s]?.class===tt&&(t.push(s),n.push(e[s]));n.sort((s,o)=>s.id<o.id?-1:s.id>o.id?1:0);for(let s=0;s<t.length;s+=1)e[t[s]]=n[s]}function HI(e){let t=new Map;for(let n of e)if(n?.class===tt)for(let s of cp(n,PI).split(" ").filter(Boolean)){let o=t.get(s)||new Set;o.add(n.id),t.set(s,o)}for(let n of e){let s=t.get(n?.id),o=(n?.attributes||[]).some(i=>i?.prop===sa);if(!s&&!o)continue;let r=(n.attributes||[]).filter(i=>i?.prop!==sa);n.attributes=s?[...r,{prop:sa,key:"supersededBy",value:[...s].sort().join(" ")}]:r}}function qI(e){let t=[];for(let n of[Xo,mo,tt,us,ds]){let s=e.filter(o=>o?.class===n);s.length&&t.push({name:n,count:s.length,sample:s.slice(0,3).map(o=>o.label)})}return t}function YI(e){let t="";for(let n of e){if(n?.class!==mo)continue;let s=cp(n,FI);s>t&&(t=s)}return t}function ol(e,{meta:t=null}={}){let n=fs();t?.memory!==void 0&&(n.memory=t.memory),t?.prefixes!==void 0&&(n.prefixes=t.prefixes);let s=[],o=[];for(let r of e||[]){if(!r||r.rowClass===Zi)continue;let i=JSON.parse(r.json),c={ord:Number.isFinite(Number(i?.ord))?Number(i.ord):0,rowKey:String(r.rowKey||"")};r.rowClass===S$?o.push({...c,group:i?.group}):s.push({...c,individual:i?.individual})}return s.sort(x$),o.sort(x$),n.individuals=s.map(r=>r.individual).filter(Boolean),n.objectProperties=o.map(r=>r.group).filter(Boolean),rl(n)}function rl(e){let t=e.individuals||[];return KI(t),HI(t),e.classes=qI(t),e.proseIndex=null,e.proseIndex=Xa(t),e.generated_at=YI(t),e}function up(e,t){let n=new Map((e||[]).filter(i=>i?.rowKey).map(i=>[i.rowKey,i])),s=[],o=new Set;for(let i of t||[]){if(!i?.rowKey)continue;o.add(i.rowKey);let a=n.get(i.rowKey);a&&a.json===i.json&&a.term===i.term&&a.rowClass===i.rowClass||s.push(i)}let r=[...n.keys()].filter(i=>!o.has(i));return{puts:s,deletes:r}}var S$,LI,PI,sa,MI,FI,cp,DI,ap,GI,VI,x$,dp=P(()=>{We();Ze();Bn();na();S$="edge-group",LI="edge-group:",PI="mgx:supersedes",sa="mgx:supersededBy",MI="mgx:factProvenance",FI="mgx:utteranceTs",cp=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",DI=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",ap=null;GI=e=>console.warn(e),VI=new Set(["throw","drop","keep"]);x$=(e,t)=>e.ord-t.ord||(e.rowKey<t.rowKey?-1:e.rowKey>t.rowKey?1:0)});var fp={};Lt(fp,{access:()=>QI,appendFile:()=>tN,basename:()=>bN,copyFile:()=>cN,createInterface:()=>EN,createReadStream:()=>uN,createRequire:()=>XI,createWriteStream:()=>dN,default:()=>SN,dirname:()=>mN,existsSync:()=>fN,fileURLToPath:()=>yN,isAbsolute:()=>gN,join:()=>pN,mkdir:()=>nN,mkdtemp:()=>sN,randomBytes:()=>$N,readFile:()=>ZI,readFileSync:()=>JI,readdir:()=>lN,rename:()=>oN,resolve:()=>hN,rm:()=>iN,sep:()=>wN,spawnSync:()=>vN,stat:()=>aN,tmpdir:()=>xN,unlink:()=>rN,writeFile:()=>eN});var Et,XI,JI,QI,ZI,eN,tN,nN,sN,oN,rN,iN,aN,cN,lN,uN,dN,fN,pN,mN,hN,gN,bN,wN,yN,$N,vN,EN,xN,SN,pp=P(()=>{Et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},XI=Et("createRequire"),JI=Et("readFileSync"),QI=Et("access"),ZI=Et("readFile"),eN=Et("writeFile"),tN=Et("appendFile"),nN=Et("mkdir"),sN=Et("mkdtemp"),oN=Et("rename"),rN=Et("unlink"),iN=Et("rm"),aN=Et("stat"),cN=Et("copyFile"),lN=Et("readdir"),uN=Et("createReadStream"),dN=Et("createWriteStream"),fN=()=>!1,pN=(...e)=>e.join("/"),mN=e=>String(e).replace(/\/[^/]*$/,""),hN=(...e)=>e.join("/"),gN=e=>String(e).startsWith("/"),bN=e=>String(e).split("/").pop(),wN="/",yN=e=>String(e),$N=Et("randomBytes"),vN=Et("spawnSync"),EN=Et("createInterface"),xN=()=>"/tmp",SN={}});var jN,oa,mp=P(()=>{jN=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,oa=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(jN);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 kN(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function RN(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
87
  `))}return o}var ve,Jo=P(()=>{ve=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=kN(n.toml,n.ptr),r=RN(n.toml,s,o);super(`Invalid TOML document: ${t}
88
88
 
89
- ${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function rl(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 il(e,t){let n=e[t++],s=n,o=n==="'",r=n===e[t]&&n===e[t+1];r&&(e[t+=2]===`
90
90
  `?t++:e[t]==="\r"&&e[t+1]===`
91
91
  `&&(t+=2));let i="",a=t,c=0;for(let l=t;l<e.length;l++)if(n=e[l],r&&(n===`
92
92
  `||n==="\r"&&e[l+1]===`
93
93
  `))c=c&&3;else{if(n<" "&&n!==" "||n==="\x7F")throw new ve("control characters are not allowed in strings",{toml:e,ptr:l});if((!c||c===3)&&n===s&&(!r||e[l+1]===s&&e[l+2]===s))return r&&(e[l+3]===s&&l++,e[l+3]===s&&l++),[c?i:i+e.slice(a,l),l+(r?3:1)];if(!c)!o&&n==="\\"&&(i+=e.slice(a,a=l),c=1);else if(c===1)if(n==="x"||n==="u"||n==="U"){let u=0,d=n==="x"?2:n==="u"?4:8;for(let p=0;p<d;p++,l++){let f=e.charCodeAt(l+1),m=f>=48&&f<=57?f-48:f>=65&&f<=70?f-65+10:f>=97&&f<=102?f-97+10:-1;if(m<0)throw new ve("invalid non-hex character in unicode escape",{toml:e,ptr:l+1});u=u<<4|m}if(u<0||u>1114111||u>=55296&&u<=57343)throw new ve("invalid unicode escape",{toml:e,ptr:l});i+=String.fromCodePoint(u),a=l+1,c=0}else if(n===" "||n===" ")c=2;else{if(n==="b")i+="\b";else if(n==="t")i+=" ";else if(n==="n")i+=`
94
- `;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new ve("unrecognized escape sequence",{toml:e,ptr:l});a=l+1,c=0}else if(n!==" "&&n!==" "){if(c===2)throw new ve("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});c=!o&&n==="\\"?1:0,a=l}}throw new ve("unfinished string",{toml:e,ptr:t})}function S$(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=_N.test(e);if(o||TN.test(e)){if(AN.test(e))throw new ve("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new ve("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new ve("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new sa(e);if(!r.isValid())throw new ve("invalid value",{toml:t,ptr:n});return r}var _N,TN,AN,hp=P(()=>{mp();Jo();_N=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,TN=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,AN=/^[+-]?0[0-9_]/});function il(e,t=0,n=e.length){let s=e.indexOf(`
95
- `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function Jr(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
94
+ `;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new ve("unrecognized escape sequence",{toml:e,ptr:l});a=l+1,c=0}else if(n!==" "&&n!==" "){if(c===2)throw new ve("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});c=!o&&n==="\\"?1:0,a=l}}throw new ve("unfinished string",{toml:e,ptr:t})}function j$(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=_N.test(e);if(o||TN.test(e)){if(AN.test(e))throw new ve("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new ve("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new ve("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new oa(e);if(!r.isValid())throw new ve("invalid value",{toml:t,ptr:n});return r}var _N,TN,AN,hp=P(()=>{mp();Jo();_N=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,TN=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,AN=/^[+-]?0[0-9_]/});function al(e,t=0,n=e.length){let s=e.indexOf(`
95
+ `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function Qr(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
96
96
  `)return n;if(s==="\r"&&e[n+1]===`
97
- `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new ve("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function ds(e,t,n,s){let o;for(;;){for(;(o=e[t])===" "||o===" "||!n&&(o===`
97
+ `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new ve("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function ps(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=Jr(e,t)}return t}function j$(e,t,n,s,o=!1){if(!s)return t=il(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=il(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
99
+ `);)t++;if(s||o!=="#")break;t=Qr(e,t)}return t}function k$(e,t,n,s,o=!1){if(!s)return t=al(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=al(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 ve("cannot find end of structure",{toml:e,ptr:t})}var al=P(()=>{Jo();});function CN(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(Jr(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function oa(e,t,n,s,o){if(s===0)throw new ve("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[c,l]=r==="["?R$(e,t,s,o):k$(e,t,s,o);if(n){if(l=ds(e,l),e[l]===",")l++;else if(e[l]!==n)throw new ve("expected comma or end of structure",{toml:e,ptr:l})}return[c,l]}if(r==='"'||r==="'"){let[c,l]=rl(e,t);if(n){if(l=ds(e,l),e[l]&&e[l]!==","&&e[l]!==n&&e[l]!==`
102
- `&&e[l]!=="\r")throw new ve("unexpected character encountered",{toml:e,ptr:l});e[l]===","&&l++}return[c,l]}let i=j$(e,t,",",n),a=CN(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new ve("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=ds(e,t+a[1]),e[i]===","&&i++),[S$(a[0],e,t,o),i]}var gp=P(()=>{hp();bp();al();Jo();});function cl(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new ve("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 ve("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,c]=rl(e,t);s=e.indexOf(".",c);let l=e.slice(c,s<0||s>r?r:s),u=il(l);if(u>-1)throw new ve("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(l.trimStart())throw new ve("found extra tokens after the string part",{toml:e,ptr:c});if(r<c&&(r=e.indexOf(n,c),r<0))throw new ve("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(!ON.test(a))throw new ve("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,ds(e,r+1,!0,!0)]}function k$(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new ve("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=Jr(e,t);else if(i!==" "&&i!==" "&&i!==`
103
- `&&i!=="\r"){let a,c=o,l=!1,[u,d]=cl(e,t-1);for(let m=0;m<u.length;m++){if(m&&(c=l?c[a]:c[a]={}),a=u[m],(l=Object.hasOwn(c,a))&&(typeof c[a]!="object"||r.has(c[a])))throw new ve("trying to redefine an already defined value",{toml:e,ptr:t});!l&&a==="__proto__"&&Object.defineProperty(c,a,{enumerable:!0,configurable:!0,writable:!0})}if(l)throw new ve("trying to redefine an already defined value",{toml:e,ptr:t});let[p,f]=oa(e,d,"}",n-1,s);r.add(p),c[a]=p,t=f}}if(!i)throw new ve("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function R$(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new ve("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=Jr(e,t);else if(r!==" "&&r!==" "&&r!==`
104
- `&&r!=="\r"){let i=oa(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new ve("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var ON,bp=P(()=>{hp();gp();al();Jo();ON=/^[a-zA-Z0-9-_]+[ \t]*$/});function _$(e,t,n,s){let o=t,r=n,i,a=!1,c;for(let l=0;l<e.length;l++){if(l){if(o=a?o[i]:o[i]={},r=(c=r[i]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],r=r[u].c}}if(i=e[l],(a=Object.hasOwn(o,i))&&r[i]?.t===0&&r[i]?.d)return null;a||(i==="__proto__"&&(Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(r,i,{enumerable:!0,configurable:!0,writable:!0})),r[i]={t:l<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(c=r[i],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[i]=[]),o[i].push(o={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}),c.d))return null;if(c.d=!0,s===1)o=a?o[i]:o[i]={};else if(s===0&&a)return null;return[i,o,c.c]}function Qo(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=ds(e,0);a<e.length;){if(e[a]==="["){let c=e[++a]==="[",l=cl(e,a+=+c,"]");if(c){if(e[l[1]-1]!=="]")throw new ve("expected end of table declaration",{toml:e,ptr:l[1]-1});l[1]++}let u=_$(l[0],s,o,c?2:1);if(!u)throw new ve("trying to redefine an already defined table or value",{toml:e,ptr:a});i=u[2],r=u[1],a=l[1]}else{let c=cl(e,a),l=_$(c[0],r,i,0);if(!l)throw new ve("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=oa(e,c[1],void 0,t,n);l[1][l[0]]=u[0],a=u[1]}if(a=ds(e,a,!0),e[a]&&e[a]!==`
105
- `&&e[a]!=="\r")throw new ve("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=ds(e,a)}return s}var T$=P(()=>{bp();gp();al();Jo();});var A$=P(()=>{});var ll=P(()=>{T$();A$();mp();Jo();});var wp={};Lt(wp,{CONFIG_FILE:()=>dl,loadTomlConfig:()=>fl,mergeEffective:()=>O$,normalizeConfig:()=>C$});async function fl(e,{file:t}={}){let n=t||ne(e,dl),s;try{s=await Oe(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return Qo(s)}catch(o){throw new Error(`Invalid ${dl} at ${n}: ${o&&o.message?o.message:o}`)}}async function IN(e,t){let n;if(Array.isArray(e))n=e;else{let o=Gt(t,String(e));n=(await Oe(o,"utf8")).split(`
106
- `)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Gt(t,r))}return s}async function C$(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await IN(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Gt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Gt(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(x=>Gt(s,String(x)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},c={};a.enabled!==void 0&&(c.enabled=a.enabled),a.limit!==void 0&&(c.limit=a.limit),a.capture_unknown_context!==void 0&&(c.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(c.unknownContextLimit=a.unknown_context_limit),Object.keys(c).length&&(o.seed=c),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.news!==void 0&&(o.news=n.news),n.discourse!==void 0&&(o.discourse=n.discourse),n.recognition!==void 0&&(o.recognition=n.recognition),n.reasoning!==void 0&&(o.reasoning=n.reasoning);let l=n.index||{},u={};l.languages!==void 0&&(u.languages=l.languages),l.exclude!==void 0&&(u.exclude=l.exclude),l.secret_exclude!==void 0&&(u.secretExclude=l.secret_exclude),l.history_depth!==void 0&&(u.historyDepth=l.history_depth),l.include_text!==void 0&&(u.includeText=l.include_text),l.include_structure!==void 0&&(u.includeStructure=l.include_structure),l.respect_gitignore!==void 0&&(u.respectGitignore=l.respect_gitignore),l.markdown_sections!==void 0&&(u.markdownSections=l.markdown_sections),l.vue!==void 0&&(u.vue=l.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},p={};d.score_gap_k!==void 0&&(p.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(p.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(p.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(p.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(p.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(p.beamSearch=d.beam_search),d.beam_width!==void 0&&(p.beamWidth=d.beam_width),d.prose_layers!==void 0&&(p.proseLayers=d.prose_layers);let f=d.expansion||{},m={};f.strategy!==void 0&&(m.strategy=f.strategy),f.nodes!==void 0&&(m.nodes=f.nodes),f.q!==void 0&&(m.q=f.q),f.depth!==void 0&&(m.depth=f.depth),Object.keys(m).length&&(p.expansion=m),Object.keys(p).length&&(o.tune=p);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.enabled});let b=n.memory||{},g={};b.retention_versions!==void 0&&(g.retentionVersions=b.retention_versions),b.backend!==void 0&&(g.backend=b.backend),Object.keys(g).length&&(o.memory=g);let $=[];for(let[w,x]of NN)n[w]&&n[w][x]!==void 0&&$.push(`${w}.${x}`);return o.unwired=$,o}function ul(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:ul(o,r,n)}return n}function O$({args:e={},toml:t=null,defaults:n={}}={}){let s=ul(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?ul(o):{},i=ul(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),c={},l={};for(let u of a)u in i?(c[u]=i[u],l[u]="arg"):u in r?(c[u]=r[u],l[u]="tmct.toml"):(c[u]=s[u],l[u]="default");return{effective:c,sources:l}}var dl,NN,ra=P(()=>{Pt();Qe();ll();dl="tmct.toml";NN=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Ws={};Lt(Ws,{BackendRejected:()=>An,BackendUnavailable:()=>Yo,CANONICALISED_FROM_PROP:()=>Cp,CAPABLE_OF_PREDICATE:()=>u0,CHAIN_KEEP_DEPTH:()=>e$,CHAIN_ROLLUP_THRESHOLD:()=>zc,CREATED_AT_PROP:()=>ut,DEFAULT_RETENTION:()=>jp,EXTRACTION_FINDINGS:()=>Qc,EXTRACTION_FINDING_PROP:()=>gl,FACT_CLASS:()=>tt,GROUP_ROLLUP_THRESHOLD:()=>Qy,HAS_A_PREDICATE:()=>si,IN_REPLY_TO_PROP:()=>Ap,MAX_ROW_BYTES:()=>qo,MEMORY_DIR_REL:()=>ei,MEMORY_GRAPH_REL:()=>_p,MEMORY_MANIFEST_REL:()=>hv,MEMORY_SESSION_CLASS:()=>Xo,MULTI_VALUED_PREDICATES:()=>d0,NODE_ID_REL:()=>Vp,OPERATOR_SOURCE_ID:()=>ml,RETRACTED_AT_PROP:()=>Vc,RETRACTED_COUNT_PROP:()=>Yf,RETRACTED_RECORD_IDS_PROP:()=>Gc,RETRACTION_CLASS:()=>Ht,RETRACTION_PREDICATE:()=>Wc,ROLLUP_COUNT_PROP:()=>Hi,ROLLUP_EARLIEST_PROP:()=>rs,ROLLUP_KEEP_PER_TYPE:()=>Zy,ROLLUP_LATEST_PROP:()=>is,ROLLUP_PRIOR_PROP:()=>qr,ROLLUP_RECORD_IDS_PROP:()=>Ki,ROLLUP_SOURCE_IDS_PROP:()=>Hr,ROW_BACKEND_CONTRACT_VERSION:()=>el,ROW_BACKEND_KIND:()=>Xr,ROW_CLASSES:()=>Zc,RULE_CLASS:()=>ls,RULE_KIND_ACTION_CONSTRAINT:()=>Zp,RULE_KIND_ACTION_EFFECT:()=>fa,RULE_KIND_ACTION_PRECOND:()=>Rl,RULE_KIND_ACTION_SIGNATURE:()=>Qp,RULE_KIND_COMPOSE2:()=>ua,RULE_KIND_FILTER:()=>da,RULE_KIND_PROP:()=>ni,RULE_KIND_RECURSIVE:()=>Jp,SAID_IN_SESSION_PROP:()=>Tp,SOURCE_CLASS:()=>cs,SOURCE_RELIABILITY_PROP:()=>D$,STATED_BY_PROP:()=>On,SYLLOGISE_STATE_REL:()=>Gp,UPDATED_AT_PROP:()=>js,UTTERANCE_CLASS:()=>mo,admittedNodes:()=>Xc,appendCanonicalisedFromEdges:()=>YL,appendFact:()=>_v,appendFacts:()=>gs,appendRetractions:()=>i0,appendRule:()=>Tl,appendUtterance:()=>qL,appendUtterances:()=>Ev,applySeedPayload:()=>U$,assertValidRow:()=>ea,attachFactHeads:()=>Y$,chainRollupIdFor:()=>Wf,cloneMemoryPayload:()=>Np,closeSqliteMemoryStore:()=>El,createInMemoryStore:()=>ca,createSqliteMemoryStore:()=>Pp,createSqliteRowBackend:()=>RL,emptyMemory:()=>us,factGroupId:()=>Zt,factHeadsOf:()=>X$,factIdForTriple:()=>Ee,factRecordIdForTag:()=>DN,factRecordIdsFor:()=>nr,findContradictions:()=>Ov,findRuleByName:()=>em,findRulesByName:()=>s0,headRollupIdFor:()=>Uf,isChainRollupId:()=>Yr,isHeadRollupId:()=>po,isMemoryOrSqliteHandle:()=>vl,isRetractionId:()=>Jf,isRollupId:()=>Bc,isRowBackend:()=>tl,isRowHandle:()=>ms,isValidRow:()=>$$,loadMemory:()=>mt,loadNodeId:()=>PL,loadSyllogiseState:()=>NL,normFactPredicate:()=>ss,normFactTerm:()=>V,openConfiguredMemoryBackend:()=>wo,openExistingMemoryBackend:()=>aL,openMemoryBackend:()=>Fp,openSqliteSeedStore:()=>qN,peersToConvince:()=>np,provSourceClassFor:()=>DL,provenanceTagToSource:()=>Bn,readFactRows:()=>wt,readObjectSupersessions:()=>HN,readOnlyMemorySnapshot:()=>cL,readRetractions:()=>r0,readRuleRows:()=>Al,removeFacts:()=>Cv,resolveMemoryGraphFile:()=>ia,resolveRelationChase:()=>tm,resolveRelationChaseReverse:()=>Av,retirableRetractions:()=>a0,retireRetractions:()=>c0,retractedAtOf:()=>Ho,retractedRecordIds:()=>Ko,retractionFromWire:()=>Yc,retractionIdFor:()=>Xf,retractionScopeOf:()=>Qf,retractionWireFact:()=>qc,rowBackendProblems:()=>Zi,rowProblems:()=>nl,saveNodeId:()=>ML,saveSyllogiseState:()=>LL,snapshotMemory:()=>TL,sqliteSeedFactTermValues:()=>iL,stableRecordIds:()=>Jc,wrapRowBackend:()=>Mp,wrapRowBackendOverSqliteSeed:()=>YN});function us(){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:MN.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function ia(e,t=null){if(vl(e))throw new Error("resolveMemoryGraphFile: dir is a store handle, not a file path (Backend A only)");return t===null?ne(e,_p):ne(e,ei,`graph.v${t}.json`)}function tr(e){return!!e&&typeof e=="object"&&e.backend===Op}function ps(e){return!!e&&typeof e=="object"&&e.backend===Ip}function ms(e){return!!e&&typeof e=="object"&&e.backend===B$}function vl(e){return tr(e)||ps(e)||ms(e)}function ca(){return{backend:Op,payload:us()}}function U$(e,t){t&&(e.payload={...e.payload,...t})}function Np(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function W$(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Hp(Bn(t));if(n)return n}return{id:Ds,type:""}}function Zt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function DN(e,t){return`${e}@${G$(t).id}`}function G$(e){return Hp(Bn(e))||{id:Ds,type:""}}function V$(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=G$(s),i=t.get(o)||{sourceId:o,sourceType:r,tags:[]};i.tags.includes(s)||i.tags.push(s),t.set(o,i)}return t.size||t.set(Ds,{sourceId:Ds,sourceType:"",tags:[]}),[...t.values()]}function vp(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=Bn(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function ti(e,t="",n=Math.max){return vp(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function zN(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 K$(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=W$(n("mgx:factProvenance")),o=n(la).split(" ").filter(Boolean)[0]||null,r=qi(e.id);return[e.id,Zt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(Zo)||s.id,r||s.type,Number(n(r?qr:_r))||0,n(ut),n(aa)||null,o,t]}function BN(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(tt))return;let t=e.prepare(H$);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(tt))t.run(...K$(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function UN(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Y$(e,t){return e&&t&&(e[q$]=t),e}function GN(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 J$(e,t,n,s){let o=e.prepare(WN),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=zs();for(let a of n){let c=t.groups.get(a);if(!c?.length){r.run(a),s?.delete(a);continue}let l=UN(sm(a,c,t).assertions),u=Bg(l).score;o.run(a,u,JSON.stringify(l),i),s?.set(a,{trustBase:u,inputs:l})}}function VN(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(tt))return;let n=nm(yl(e));t.exec("BEGIN IMMEDIATE");try{J$(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function KN(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=zs();for(let i of n){let[a,c]=i.split("\0");if(Fc(c)!==Vi)continue;let l=t.groupsByPair.get(i)||[];if(l.length<2)continue;let u=l.map(f=>{let m=sm(f,t.groups.get(f),t);return m.trust=Qa(m.assertions).score,m});if(new Set(u.map(f=>f.object)).size<2)continue;let d=Bf(u,Vi)?.winner?.id;if(!d)continue;let p=s.get(a,c);p?.to_id!==d&&o.run(a,c,(p?.ord??-1)+1,p?.to_id||"",d,r)}}function HN(e,{subject:t,predicate:n}={}){if(!ps(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 Z$(){if(N$)return;N$=!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 Pp(e){Z$();let{DatabaseSync:t}=await Promise.resolve().then(()=>(pp(),fp)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(FN),BN(n);let s=kL({backend:Ip,db:n,dbPath:e});return VN(s),s}function El(e){ps(e)&&e.db.close()}async function qN(e){Z$();let{DatabaseSync:t}=await Promise.resolve().then(()=>(pp(),fp));try{return{backend:Ip,db:new t(e,{readOnly:!0}),dbPath:e,readOnly:!0}}catch(n){throw new Yo(`could not open the seed store ${e} read-only: ${n.message}`,{cause:n})}}function Mp(e,{basePayload:t=null,sqliteSeedStore:n=null,sqliteSeedOverlayRows:s=null,onOversizedRow:o="throw",log:r=void 0}={}){let i=Zi(e);if(i.length)throw new An(`not a memory row backend: ${i.join("; ")}`);if(n&&!ps(n))throw new An("sqliteSeedStore must be an open sqlite store handle (openSqliteSeedStore)");if(n&&t)throw new An("a handle takes its seed either as a basePayload or as a sqliteSeedStore, never both");return{backend:B$,impl:e,cachedPayload:null,basePayload:Np(t),sqliteSeedStore:n,sqliteSeedOverlayRows:s?[...s]:null,sqliteSeedKeyOrds:null,baseRows:null,storedRows:null,onOversizedRow:o,log:r}}function YN(e,t,{overlayRows:n=null,onOversizedRow:s="throw",log:o=void 0}={}){return Mp(e,{sqliteSeedStore:t,sqliteSeedOverlayRows:n,onOversizedRow:s,log:o})}async function XN(e){let t=await e;if(Array.isArray(t))return t;let n=[];for await(let s of t)n.push(s);return n}function Ep(e,t){let n=new Map;for(let s of e)n.set(s.rowKey,s);for(let s of t)n.set(s.rowKey,s);return[...n.values()]}function JN(e){let t=new Set(e.storedRows.map(o=>o.rowKey)),n=e.sqliteSeedStore?rv(e).keys():e.baseRows.map(o=>o.rowKey),s=new Set;for(let o of n)t.has(o)||s.add(o);return s}async function bl(e,t,n){let s=await e.impl.readMeta(t);if(s==null)return n;try{return JSON.parse(s)}catch{return n}}async function ov(e){if(!e.cachedPayload){let t=us(),n=await XN(e.impl.readRows());e.storedRows=n.filter(o=>o?.rowClass!==Qi);let s={memory:await bl(e,ev,P$(e,"memory",t.memory)),prefixes:await bl(e,tv,P$(e,"prefixes",t.prefixes))};e.sqliteSeedStore?e.cachedPayload=iv(e,s):(e.baseRows=lp(e.basePayload||t,{onOversizedRow:"keep"}),e.cachedPayload=sl(Ep(e.baseRows,e.storedRows),{meta:s}))}return e.cachedPayload}async function QN(e){return Cn(await ov(e))}function L$(e){let t;try{t=JSON.parse(e)}catch{return e}let n=t?.individual;return Array.isArray(n?.attributes)?JSON.stringify({...t,individual:{...n,attributes:n.attributes.filter(s=>s?.prop!==js)}}):e}function ZN(e,t){return e?L$(e.json)!==L$(t.json):!0}async function eL(e,t){await ov(e);let n=JN(e),s=e.sqliteSeedStore?e.storedRows:Ep(e.baseRows,e.storedRows),o=new Map(s.map(f=>[f.rowKey,f])),r=lp(e.sqliteSeedStore?tL(t,n):t,{priorRows:e.sqliteSeedStore?sL(e):s,onOversizedRow:e.onOversizedRow,...e.log?{log:e.log}:{}}),{puts:i,deletes:a}=up(s,r),c=i.filter(f=>!n.has(f.rowKey)).filter(f=>ZN(o.get(f.rowKey),f)),l=a.filter(f=>!n.has(f));try{c.length&&await e.impl.putRows(c),l.length&&await e.impl.deleteRows(l),await e.impl.putMeta(ev,JSON.stringify(t.memory??us().memory)),await e.impl.putMeta(tv,JSON.stringify(t.prefixes??us().prefixes))}catch(f){throw e.cachedPayload=null,e.storedRows=null,e.baseRows=null,f}let u=new Set(l),d=new Map(e.storedRows.filter(f=>!u.has(f.rowKey)).map(f=>[f.rowKey,f]));for(let f of c)d.set(f.rowKey,f);e.storedRows=[...d.values()];let p={memory:t.memory,prefixes:t.prefixes};e.sqliteSeedStore&&!l.length?rL(e.cachedPayload,p,c):e.sqliteSeedStore?(e.cachedPayload=null,e.cachedPayload=iv(e,p)):(e.cachedPayload=null,e.cachedPayload=sl(Ep(e.baseRows,e.storedRows),{meta:p}))}function tL(e,t){return t.size?{...e,individuals:(e?.individuals||[]).filter(n=>!t.has(String(n?.id??""))),objectProperties:(e?.objectProperties||[]).filter(n=>!t.has(`${ho}${n?.prop}`))}:e}function wl(e){return typeof e.iterate=="function"?e.iterate():e.all()}function*nL(e,t){let n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id");for(let o of wl(n)){if(t(o.id))continue;let r=Dp.get(o.class)||"";yield{rowKey:o.id,rowClass:r,term:r==="fact"?V(o.subject||""):"",json:Bp(o.ord,o.json)}}let s=e.db.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid");for(let o of e.db.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all()){if(t(`${ho}${o.prop}`))continue;let r=[];for(let i of s.all(o.prop)){let a={subject:i.subject,object:i.object,subjectLabel:i.subject_label,objectLabel:i.object_label};i.extra&&Object.assign(a,JSON.parse(i.extra)),r.push(a)}yield xl({predicate:o.predicate,prop:o.prop,count:o.count,examples:r},o.ord)}for(let o of Wp(e.db))t(o.rowKey)||(yield o)}function rv(e){if(e.sqliteSeedKeyOrds)return e.sqliteSeedKeyOrds;let t=e.sqliteSeedStore.db,n=new Map;for(let s of wl(t.prepare("SELECT id, ord FROM individuals")))n.set(s.id,s.ord);for(let s of wl(t.prepare("SELECT prop, ord FROM relations")))n.set(`${ho}${s.prop}`,s.ord);for(let s of Wp(t))n.set(s.rowKey,xp(s));for(let s of e.sqliteSeedOverlayRows||[])n.set(s.rowKey,xp(s));return e.sqliteSeedKeyOrds=n,n}function*sL(e){for(let[t,n]of rv(e))yield{rowKey:t,json:`{"ord":${n}}`};yield*e.storedRows}function*oL(...e){for(let t of e)yield*t}function iv(e,t){let n=new Set(e.storedRows.map(o=>o.rowKey)),s=(e.sqliteSeedOverlayRows||[]).filter(o=>o?.rowKey&&!n.has(o.rowKey));for(let o of s)n.add(o.rowKey);return sl(oL(nL(e.sqliteSeedStore,o=>n.has(o)),s,e.storedRows),{meta:t})}function rL(e,t,n){if(e.memory=t.memory,e.prefixes=t.prefixes,!n.length)return ol(e);let s=new Map;for(let r=0;r<e.individuals.length;r+=1)s.set(e.individuals[r]?.id,r);let o=new Map;for(let r=0;r<e.objectProperties.length;r+=1)o.set(e.objectProperties[r]?.prop,r);for(let r of n){if(r.rowClass===Qi)continue;let i=JSON.parse(r.json);if(r.rowClass===er){let l=i?.group;if(!l?.prop)continue;let u=o.get(l.prop);u===void 0?(o.set(l.prop,e.objectProperties.length),e.objectProperties.push(l)):e.objectProperties[u]=l;continue}let a=i?.individual;if(!a?.id)continue;let c=s.get(a.id);c===void 0?(s.set(a.id,e.individuals.length),e.individuals.push(a)):e.individuals[c]=a}return ol(e)}function*iL(e){for(let t of["subject","object"])for(let n of wl(e.db.prepare(`SELECT DISTINCT ${t} AS value FROM facts`)))n.value&&(yield n.value)}function P$(e,t,n){if(!e.sqliteSeedStore)return e.basePayload?.[t]??n;let s=e.sqliteSeedStore.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);if(!s)return n;try{return JSON.parse(s.v)}catch{return n}}async function Fp(e,t){if(ms(t))return{dir:t,close:async()=>{await t.impl.close()}};if(tl(t)){let r=Mp(t);return{dir:r,close:async()=>{await r.impl.close()}}}if(t===Op)return{dir:ca(),close:async()=>{}};let n=ne(e,".tmct","memory","graph.sqlite"),s=r=>Hu(r).then(()=>!0,()=>!1);!await s(n)&&await s(ne(e,_p))&&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 qn($e(n),{recursive:!0});let o=await Pp(n);return{dir:o,close:async()=>El(o)}}async function aL(e,t=""){if(!e||typeof e!="string")return null;let n=ne(e,".tmct","memory","graph.sqlite");try{await Hu(n)}catch{return null}return Fp(e,t)}async function cL(e){if(!e)return null;let t=ca();return U$(t,Np(await mt(e))),t}async function wo(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(ra(),wp));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Fp(e,n)}function lL(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=yl(e),e.cachedFactHeads=GN(e.db),e.cachedDataVersion=t),Y$(Cn(e.cachedPayload),e.cachedFactHeads)}function yl(e){let t=e.db,n=us(),s=(r,i)=>{let a=t.prepare("SELECT v FROM meta WHERE k = ?").get(r);return a?JSON.parse(a.v):i},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(r=>JSON.parse(r.json));return{generated_at:s("generated_at",n.generated_at),memory:s("memory",n.memory),prefixes:s("prefixes",n.prefixes),vocabulary:s("vocabulary",n.vocabulary),classes:s("classes",n.classes),objectProperties:cv(t).map(r=>r.group),individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function uL(e,t){let n=Cn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function dL(e,t){e.individuals=e.individuals.filter(n=>!t.has(n?.id))}function fL(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 pL(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,Cn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function mL(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function hL(e,t){e.objectProperties=e.objectProperties.filter(n=>!t.has(n?.prop))}function xp(e){let t=bL.exec(e?.json||"");if(t)return Number(t[1]);try{let n=Number(JSON.parse(e.json).ord);return Number.isFinite(n)?n:0}catch{return 0}}function av(e,t,n){let s=Dp.get(e?.class)||"";return{rowKey:String(e.id),rowClass:s,term:s==="fact"?V(Qr(e,"subject")):"",json:Bp(t,n)}}function wL(e){let t={subject:e.subject,object:e.object,subjectLabel:e.subjectLabel??null,objectLabel:e.objectLabel??null};for(let n of Object.keys(e))Q$.has(n)||(t[n]=e[n]);return t}function xl(e,t){let n=(e.examples||[]).map(wL);return{rowKey:`${ho}${e.prop}`,rowClass:er,term:"",json:JSON.stringify({ord:t,group:{predicate:e.predicate??null,prop:e.prop,count:Number.isFinite(e.count)?e.count:n.length,examples:n}})}}function cv(e){let t=new Map;for(let n of e.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all())t.set(n.prop,{ord:n.ord,group:{predicate:n.predicate,prop:n.prop,count:n.count,examples:[]}});if(!t.size)return[];for(let n of e.prepare("SELECT prop, subject, object, subject_label, object_label, extra FROM edges ORDER BY rowid").all()){let s=t.get(n.prop);if(!s)continue;let o={subject:n.subject,object:n.object,subjectLabel:n.subject_label,objectLabel:n.object_label};n.extra&&Object.assign(o,JSON.parse(n.extra)),s.group.examples.push(o)}return[...t.values()]}function lv(e){let t=[],n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id").all();for(let s of n){let o=Dp.get(s.class)||"";t.push({rowKey:s.id,rowClass:o,term:o==="fact"?V(s.subject||""):"",json:Bp(s.ord,s.json)})}for(let s of cv(e.db))t.push(xl(s.group,s.ord));return t}function yL(e,t){let n=new Map,s=0,o=0;for(let a of t){let c=xp(a);n.set(a.rowKey,c),a.rowClass===er?c>=o&&(o=c+1):c>=s&&(s=c+1)}let r=[],i=new Map;for(let a of e.individuals||[]){if(!a?.id)continue;let c=JSON.stringify(a),l=String(a.id),u=n.get(l)??s++;r.push(av(a,u,c)),i.set(l,{kind:"individual",ord:u,individual:a,json:c})}for(let a of e.objectProperties||[]){if(!a?.prop)continue;let c=`${ho}${a.prop}`,l=n.get(c)??o++,u=xl(a,l);r.push(u),i.set(c,{kind:er,ord:l,group:JSON.parse(u.json).group})}return{rows:r,partsByKey:i}}function $L(e){if(e.expiresAt!==void 0)return null;let t;try{t=JSON.parse(e.json)}catch{return null}if(!t||typeof t!="object"||!Number.isFinite(t.ord))return null;if(e.rowClass===er){let r=t.group;if(!r?.prop)return null;let i=xl(r,t.ord);return i.rowKey!==e.rowKey||i.term!==e.term||i.json!==e.json?null:{kind:er,ord:t.ord,group:r}}let n=t.individual;if(!n?.id)return null;let s=JSON.stringify(n),o=av(n,t.ord,s);return o.rowKey!==e.rowKey||o.rowClass!==e.rowClass||o.term!==e.term||o.json!==e.json?null:{kind:"individual",ord:t.ord,individual:n,json:s}}function uv(e,{cache:t=null}={}){let n=e.db;return{db:n,cache:t,touchedGroups:new Set,touchedPairs:new Set,hasUnmappedRows:!!n.prepare(zp).get(go),unmapped:null,upsertInd:n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),upsertFact:n.prepare(H$),deleteInd:n.prepare("DELETE FROM individuals WHERE id = ?"),deleteFact:n.prepare("DELETE FROM facts WHERE id = ?"),getFact:n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?"),upsertRel:n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),edgesForProp:n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),upsertEdge:n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),deleteEdge:n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),deleteGroupEdges:n.prepare("DELETE FROM edges WHERE prop = ?"),deleteRel:n.prepare("DELETE FROM relations WHERE prop = ?")}}function dv(e){return e.unmapped||(e.db.exec(gL),e.hasUnmappedRows=!0,e.unmapped={upsert:e.db.prepare(`INSERT OR REPLACE INTO ${go}(row_key, row_class, term, json, expires_at) VALUES (?, ?, ?, ?, ?)`),remove:e.db.prepare(`DELETE FROM ${go} WHERE row_key = ?`)}),e.unmapped}function Up(e,t){e.hasUnmappedRows&&dv(e).remove.run(t)}function vL(e,{ord:t,individual:n,json:s}){e.upsertInd.run(n.id,t,n.class??null,n.label??null,s),n.class===tt&&(e.upsertFact.run(...K$(n,s)),e.touchedGroups.add(Zt(n.id)),e.touchedPairs.add(Lp(Qr(n,"subject"),Qr(n,"predicate")))),Up(e,String(n.id)),e.cache&&uL(e.cache,n)}function EL(e,{ord:t,group:n}){let s=new Map(e.edgesForProp.all(n.prop).map(a=>[`${a.subject}\0${a.object}`,a])),o=new Set,r=e.cache?fL(e.cache,n.prop):null;for(let a of n.examples||[]){let c=`${a.subject}\0${a.object}`;o.add(c);let l=Object.keys(a).filter(f=>!Q$.has(f)),u=l.length?JSON.stringify(Object.fromEntries(l.map(f=>[f,a[f]]))):null,d=s.get(c);d&&(d.subject_label??null)===(a.subjectLabel??null)&&(d.object_label??null)===(a.objectLabel??null)&&(d.extra??null)===(u??null)||(e.upsertEdge.run(n.prop,a.subject,a.object,a.subjectLabel??null,a.objectLabel??null,u),r&&pL(r,a,l))}for(let a of s.keys()){if(o.has(a))continue;let[c,l]=a.split("\0");e.deleteEdge.run(n.prop,c,l)}r&&mL(r,o);let i=Number.isFinite(n.count)?n.count:(n.examples||[]).length;e.upsertRel.run(n.prop,t,n.predicate??null,i),Up(e,`${ho}${n.prop}`),r&&(r.predicate=n.predicate??null,r.count=i)}function xL(e,t){dv(e).upsert.run(t.rowKey,t.rowClass,t.term,t.json,t.expiresAt??null)}function fv(e,t,n=null){for(let s of t){let o=n?.get(s.rowKey)||$L(s);if(!o){xL(e,s);continue}o.kind===er?EL(e,o):vL(e,o)}}function pv(e,t){let n=new Set,s=new Set;for(let o of t){if(o.startsWith(ho)){let r=o.slice(ho.length);e.deleteGroupEdges.run(r),e.deleteRel.run(r),s.add(r)}else{let r=e.getFact.get(o);r&&(e.touchedGroups.add(r.triple_hash),e.touchedPairs.add(Lp(r.subject,r.predicate))),e.deleteInd.run(o),e.deleteFact.run(o),n.add(o)}Up(e,o)}e.cache&&n.size&&dL(e.cache,n),e.cache&&s.size&&hL(e.cache,s)}function Sp(e,t,n){if(!e.touchedGroups.size)return;let s=nm(t);J$(e.db,s,e.touchedGroups,n),KN(e.db,s,e.touchedPairs)}function SL(e,t){let n=e.db,s=us(),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=Cn(t.generated_at??s.generated_at),o.memory=Cn(t.memory??s.memory),o.prefixes=Cn(t.prefixes??s.prefixes),o.vocabulary=Cn(t.vocabulary??s.vocabulary),o.classes=Cn(t.classes??s.classes),o.proseIndex=Cn(t.proseIndex??s.proseIndex));let i=uv(e,{cache:o}),a=lv(e),{rows:c,partsByKey:l}=yL(t,a),{puts:u,deletes:d}=up(a,c);fv(i,u,l),pv(i,d),Sp(i,t,e.cachedFactHeads),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}function Wp(e){if(!e.prepare(zp).get(go))return[];let t=Math.floor(Date.now()/1e3),n=[];for(let s of e.prepare(`SELECT row_key, row_class, term, json, expires_at FROM ${go}`).all()){if(s.expires_at!==null&&s.expires_at<=t)continue;let o={rowKey:s.row_key,rowClass:s.row_class,term:s.term,json:s.json};s.expires_at!==null&&(o.expiresAt=s.expires_at),n.push(o)}return n}function M$(e,t){let n=e.db;n.exec("BEGIN IMMEDIATE");try{t(uv(e)),n.exec("COMMIT")}catch(s){throw n.exec("ROLLBACK"),s}finally{e.cachedPayload=null,e.cachedFactHeads=null}}function kL(e){return Object.assign(e,{async readRows(){return[...lv(e),...Wp(e.db)]},async readRowsByTerm(t){return(await e.readRows()).filter(n=>n.term===t)},async putRows(t){let n=(t||[]).map(s=>ea(s));n.length&&M$(e,s=>{fv(s,n),Sp(s,yl(e),null)})},async deleteRows(t){let n=[...t||[]];n.length&&M$(e,s=>{pv(s,n),Sp(s,yl(e),null)})},async readMeta(t){let n=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);return n?n.v:null},async putMeta(t,n){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(t,String(n)),e.cachedPayload=null,e.cachedFactHeads=null},async deleteAll(){let t=e.db;t.exec("BEGIN IMMEDIATE");try{for(let n of jL)t.exec(`DELETE FROM ${n}`);t.prepare(zp).get(go)&&t.exec(`DELETE FROM ${go}`),t.exec("COMMIT")}catch(n){throw t.exec("ROLLBACK"),n}finally{e.cachedPayload=null,e.cachedFactHeads=null}},async close(){El(e)}})}function RL(e){let t=null,n=!1,s=()=>{if(n)throw new Yo("this row backend was closed and can no longer be used");return t=t||Pp(e),t},o=r=>async(...i)=>(await s())[r](...i);return{kind:Xr,contractVersion:1,readRows:o("readRows"),readRowsByTerm:o("readRowsByTerm"),putRows:o("putRows"),deleteRows:o("deleteRows"),readMeta:o("readMeta"),putMeta:o("putMeta"),deleteAll:o("deleteAll"),async close(){let r=t?await t:null;n=!0,r&&El(r)}}}async function mv(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await vr(n,t),await za(n,e)}async function Sl(e,t){await mv(e,JSON.stringify(t))}async function TL(e,{retentionVersions:t}={}){if(vl(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a store handle has no on-disk graph.json to snapshot");let n=ia(e),s;try{s=await Oe(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=_L(e),r;try{r=JSON.parse(await Oe(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??jp}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??jp);let i=r.version,a=ia(e,i);await qn($e(a),{recursive:!0}),await mv(a,s),r.version=i+1;let c=null,l=i-r.retentionVersions;if(l>=0)try{await qu(ia(e,l)),c=l}catch(u){if(u?.code!=="ENOENT")throw u}return await Sl(o,r),{skipped:!1,version:i,prunedVersion:c}}async function mt(e){if(tr(e))return pl(e.payload);if(ps(e))return pl(lL(e));if(ms(e))return pl(await QN(e));let t;try{t=await Oe($p(e),"utf8")}catch(n){if(n?.code==="ENOENT")return us();throw n}return pl(JSON.parse(t))}function CL(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==tt||!AL.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Wo(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 OL(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(c=>c?.prop===On),n=new Map;for(let c of t?.examples||[]){if(!c?.subject)continue;let l=n.get(c.subject);l?l.push(c):n.set(c.subject,[c])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let c of e.individuals){if(c?.class!==tt||String(c.id||"").includes("@")){a.push(c);continue}let l=w=>(c.attributes||[]).find(x=>x?.prop===w)?.value||"",u=l("rdf:subject"),d=l("rdf:predicate"),p=l("rdf:object");if(!u||!d||!p){a.push(c);continue}let f=Wo(u,d,p),m=l(ut),h=l("mgx:factProvenance"),b=n.get(c.id)||[],g=h?V$(h):[];for(let w of b)g.some(x=>x.sourceId===w.object)||g.push({sourceId:w.object,sourceType:"",tags:[]});g.length||g.push({sourceId:Ds,sourceType:"",tags:[]});let $=[];for(let w of g){let x={id:`${f}@${w.sourceId}`,label:c.label,class:tt,derived_from:Cn(c.derived_from)||[],mentions:Cn(c.mentions)||[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:u},{prop:"rdf:predicate",key:"predicate",value:d},{prop:"rdf:object",key:"object",value:p},{prop:ut,key:"createdAt",value:ti(w.tags,m,Math.min)||m||zs()},{prop:Zo,key:"sourceId",value:w.sourceId},...w.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.tags.join(" | ")}]:[],...l("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:l("mgx:hasProseTokens")}]:[],...l("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:l("mgx:factQuantifier")}]:[],...w.sourceType==="entailed"&&l("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:l("mgx:factJustification")}]:[]]};if(a.push(x),r.push(x),$.push(x.id),w.sourceId!==Ds){let R=b.find(E=>E?.object===w.sourceId);i.push({...R||{},subject:x.id,object:w.sourceId,subjectLabel:x.label,objectLabel:qp(w.sourceId)})}}s.add(c.id),o.set(c.id,$)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(c=>!s.has(c?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:On,count:i.length,examples:i}));for(let c of e.objectProperties||[]){if(c?.prop===On||!c?.examples?.length)continue;let l=[];for(let u of c.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],p=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let f of d)for(let m of p)l.push({...u,subject:f,object:m})}c.examples=l,c.count=l.length}e.individuals=a,wv(e);for(let c of r)Zr(e,c);return hs(e),e}async function IL(e,t){if(tr(e)){e.payload=t;return}if(ps(e)){SL(e,t);return}if(ms(e)){await eL(e,t);return}await qn($e($p(e)),{recursive:!0}),await Sl($p(e),t)}async function NL(e){if(tr(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(ps(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(gv);return t?.v?JSON.parse(t.v):null}if(ms(e))return bl(e,nv,null);try{return JSON.parse(await Oe(ne(e,Gp),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function LL(e,t){if(tr(e)){e.syllogiseState=structuredClone(t);return}if(ps(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(gv,JSON.stringify(t));return}if(ms(e)){await e.impl.putMeta(nv,JSON.stringify(t));return}let n=ne(e,Gp);await qn($e(n),{recursive:!0}),await Sl(n,t)}async function PL(e){if(tr(e))return e.nodeId||null;if(ps(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(bv);return t?.v&&JSON.parse(t.v).nodeId||null}if(ms(e))return(await bl(e,sv,null))?.nodeId||null;try{return JSON.parse(await Oe(ne(e,Vp),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function ML(e,t){if(tr(e)){e.nodeId=t;return}if(ps(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(bv,JSON.stringify({nodeId:t}));return}if(ms(e)){await e.impl.putMeta(sv,JSON.stringify({nodeId:t}));return}let n=ne(e,Vp);await qn($e(n),{recursive:!0}),await Sl(n,{nodeId:t})}function wv(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===cs&&n.set(a.id,a),a.class===Ht&&Rp(r,a),a.class===tt)){let c=Zt(a.id),l=o.get(c);l?l.push(a.id):o.set(c,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===On);for(let a of i?.examples||[]){if(!a?.subject)continue;let c=s.get(a.subject);c?c.push(a.object):s.set(a.subject,[a.object])}return e[kp]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[kp]}function Rp(e,t){let n=Zt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function FL(e,t){let n=en(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===Ht&&Zt(s.id)===t)}async function Us(e,t){let n=await mt(e);wv(n);let s=await t(n)??n;return WL(s),VL(s),s.proseIndex=Ya(s.individuals),await IL(e,s),s}function Kp(e,t){return e?.attributes?.find(n=>n?.prop===ut)?.value||t||zs()}function In(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Hp(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${ml}:${e.sessionId}`:ml,type:"operator"};case"teach":return{id:e.sessionId?`${yp}:${e.sessionId}`:yp,type:"teach"};case"teachNode":return{id:`${z$}:${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:${Ui(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 DL(e){return sd[e]||null}function zL(e,t,n){let s=Hp(t);if(!s)return null;let o=en(e),r=o?o.individualsById.get(s.id):e.individuals.find(l=>l?.id===s.id),i=Kp(r,t?.createdAt||n),a={id:s.id,label:qp(s.id),class:cs,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:ut,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},c=Bs(e,a);return o&&o.sourcesById.set(s.id,c),s.id}function kl(e){let t=en(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===cs&&(n[s.id]=s);return n}function yv(e,t){let n=en(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===On)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function BL(e,t,n=Date.now(),s={}){let o=yv(e,t.id),r=(t.attributes||[]).find(c=>c?.prop===ut)?.value||"",{score:i,inputs:a}=zg({sourceIds:o,createdAt:r},kl(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});In(t,_r,"trustScore",String(i)),In(t,Xa,"trustInputs",JSON.stringify(a)),In(t,js,"updatedAt",new Date(n).toISOString())}function UL(e,t,n=Date.now(),s={}){let[o]=yv(e,t.id),r=o?kl(e)[o]:null,i=(r?.attributes||[]).find(l=>l?.prop==="mgx:sourceType")?.value||"",a=Ja(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let l=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*l))}let c=(t.attributes||[]).find(l=>l?.prop===ut)?.value||"";In(t,_r,"trustScore",String(a)),In(t,Xa,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:c})),In(t,js,"updatedAt",new Date(n).toISOString())}function $v(e,t,n,s){t?.class===tt?UL(e,t,n,s):BL(e,t,n,s)}function Zr(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===ut)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Bn(i);if(!a)continue;let c=zL(e,a,r);c&&$l(e,{predicate:"statedBy",prop:On},{subject:t.id,object:c,subjectLabel:t.label,objectLabel:qp(c)})}$v(e,t,n,s)}function WL(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===On),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==tt||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(Zr(e,r,o),s=!0);s&&hs(e)}function VL(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=wt(e),n=new Set;for(let a of Ov(e))for(let c of a)n.add(c.id);let s=new Map;for(let a of t)for(let c of a.sourceIds){if(!GL(c))continue;let l=s.get(c)||{factsAsserted:0,factsContradicted:0};l.factsAsserted+=1,n.has(a.id)&&(l.factsContradicted+=1),s.set(c,l)}if(!s.size)return;let o=en(e);for(let[a,c]of s){let l=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);l&&(In(l,D$,"sourceReliability",String(Ug(c))),In(l,js,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===On),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let c=o?o.individualsById.get(a):e.individuals.find(l=>l?.id===a);c&&$v(e,c)}}function KL(e,t,n){if(!Bc(n?.id))return n;let s=qi(n.id);if(!s)return Hf(t,n);let o=kl(e);return Hf(t,n,{priorFor:r=>Ja(s,o[r])})}function F$(e,t,n){return n?.class===Ht?p$(t,n):KL(e,t,n)}function Bs(e,t){let n=en(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,F$(e,o,t)),o.class===Ht&&Rp(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===Ht&&Rp(n.retractionsByGroup,t),t.class===tt){let r=Zt(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]=F$(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function $l(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(c=>c?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===On?en(e):null;if(r){let c=r.statedByBySubject.get(s.subject);if(!c||!c.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||zs()}),o.count=o.examples.length,c?c.push(s.object):r.statedByBySubject.set(s.subject,[s.object]);return}}let a=(o.examples||[]).find(c=>c?.subject===s.subject&&c?.object===s.object)?.createdAt||s.createdAt||zs();if(o.examples=(o.examples||[]).filter(c=>!(c?.subject===s.subject&&c?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r){let c=r.statedByBySubject.get(s.subject)||[];c.includes(s.object)||c.push(s.object),r.statedByBySubject.set(s.subject,c)}}function hs(e){let t=[Xo,mo,tt,cs,ls];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 HL(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:Xo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:ut,key:"createdAt",value:n||zs()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function vv(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:c=""}){if(!PN.has(t))throw new Error(`utterance role must be "visitor" or "tmct", got ${JSON.stringify(t)}`);if(!o)throw new Error("utterance needs a sessionId");let l=String(s||""),u=ns(n),d=`utt:${o}#${l}#${t}`,p=jl(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),f=qa({doc:u}),m=e.individuals.find($=>$?.id===d),h=Kp(m,c||l),b={id:d,label:p,class:mo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:utteranceRole",key:"role",value:t},{prop:"mgx:utteranceText",key:"text",value:u},{prop:"mgx:utteranceTs",key:"ts",value:l},{prop:ut,key:"createdAt",value:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...f.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:f.join(" ")}]:[]]};Bs(e,b);let g=HL(e,o,r);if($l(e,{predicate:"saidInSession",prop:Tp},{subject:d,object:g,subjectLabel:p,objectLabel:String(o).slice(0,8)}),a){let $=e.individuals.find(w=>w?.id===a);$&&$l(e,{predicate:"inReplyTo",prop:Ap},{subject:d,object:a,subjectLabel:p,objectLabel:$.label})}return l&&l>String(e.generated_at||"")&&(e.generated_at=l),d}async function qL(e,t){let n;return await Us(e,s=>{n=vv(s,t),hs(s)}),{id:n}}async function Ev(e,t){let n=[];return t?.length?(await Us(e,s=>{for(let o of t)n.push(vv(s,o));hs(s)}),{ids:n}):{ids:n}}async function YL(e,t){t?.length&&await Us(e,n=>{for(let s of t)for(let o of nr(n,s.factId))$l(n,{predicate:"canonicalisedFrom",prop:Cp},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function nr(e,t){let n=en(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===tt&&Zt(s.id)===t).map(s=>s.id)}function xv(e,t,n,s=""){let o=V$(n);if(o.length===1&&o[0].sourceId===Ds&&nr(e,t).length)return[];let r=FL(e,t);if(r.length&&(o=o.filter(a=>!Hc(r,`${t}@${a.sourceId}`,ti(a.tags,s))),!o.length))return o;let i=XL(e,t);return i.length?o.filter(a=>!l$(i,a.sourceId)):o}function XL(e,t){let n=en(e),s=n?n.factRecordsByGroup.get(t):nr(e,t),o=[];for(let r of s||[]){if(!po(r))continue;let i=bo(e,r);i&&o.push(i)}return o}function Sv(e,t,{quantifier:n,environments:s}){let o=nr(e,t).map(i=>bo(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===la)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(c=>c?.prop==="mgx:factJustification"));for(let a of i.length?i:o)In(a,"mgx:factJustification","justification",s.map(c=>c.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(In(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function JL(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===hl)?.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 Yp(e){if(!Array.isArray(e))return[];let t=new Set;for(let n of e){let s=ns(n);s&&t.add(s)}return[...t].sort()}function jv(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:c,createdAt:l,observedAt:u,quantifier:d,environments:p,extraction:f=[]}=t,m=`${n}@${c.sourceId}`,h=en(e),b=h?h.individualsById.get(m):e.individuals.find(T=>T?.id===m),g=T=>(b?.attributes||[]).find(C=>C?.prop===T)?.value||"",$=g("mgx:factProvenance").split(" | ").filter(Boolean),w={assertedAt:vp(c.tags),observedAt:u},x=null,R=c.tags,E=w.assertedAt||l||zs(),k=u,O=[],S=d,_=f;if(b){let T={assertedAt:vp($),observedAt:g(aa)};zN(w,T)?(x={head:b,id:`${m}#v${JL(b)}`},O=[x.id]):(R=[...new Set([...$,...c.tags])],E=g(ut)||E,k=u||g(aa),O=g(hl).split(" ").filter(Boolean),_=Yp([...g(gl).split(" "),...f])),S=d||g("mgx:factQuantifier")}return{candidate:{id:m,label:i,class:tt,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:ut,key:"createdAt",value:E},{prop:Zo,key:"sourceId",value:c.sourceId},...R.length?[{prop:"mgx:factProvenance",key:"provenance",value:R.join(" | ")}]:[],...k?[{prop:aa,key:"observedAt",value:k}]:[],..._.length?[{prop:gl,key:"extraction",value:_.join(" ")}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...S?[{prop:"mgx:factQuantifier",key:"quantifier",value:S}]:[],...p?[{prop:"mgx:factJustification",key:"justification",value:p.map(T=>T.join(" ")).join(" | ")}]:[],...O.length?[{prop:hl,key:"supersedes",value:O.join(" ")}]:[]]},demote:x}}function QL(e,t){let n=`${t}@${Ds}`,s=en(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 kv(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${Ds}`)||QL(e,Zt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};In(o,la,"supersededBy",t.id),Bs(e,o),s.push(o.id)}return Bs(e,t),s.push(t.id),s}function bo(e,t){let n=en(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Xp(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=en(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Zt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function Rv(e,t){let n=en(e),s=(n?n.factRecordsByGroup.get(t):nr(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=bo(e,u);if(!d)continue;let p=$=>(d.attributes||[]).find(w=>w?.prop===$)?.value||"";if(po(u)){i.set(qi(u),d);continue}if(Yr(u)){a.set(p(Zo),d);continue}let f=p("mgx:factProvenance"),m=W$(f),h=f.split(" | ").filter(Boolean),b={id:u,sourceId:p(Zo)||m.id,assertedAt:ti(h,p(ut)),record:d};if(p(la)){let $=r.get(b.sourceId);$?$.push(b):r.set(b.sourceId,[b]);continue}if(!m.type)continue;let g=o.get(m.type);g?g.push(b):o.set(m.type,[b])}let c=kl(e),l=[];for(let[u,d]of o){let p=a$({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:f=>Ja(u,c[f])});if(p){Bs(e,p.rollup),l.push(...p.absorbed);for(let f of p.absorbedSourceIds){for(let h of r.get(f)||[])l.push(h.id);r.delete(f);let m=a.get(f);m&&l.push(m.id),a.delete(f)}}}for(let[u,d]of r){let p=c$({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!p)continue;Bs(e,p.rollup),l.push(...p.absorbed);let f=bo(e,p.rewire);f&&In(f,hl,"supersedes",p.rollup.id)}return l}async function _v(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",extraction:c,premiseTrusts:l,ruleConfidence:u}={}){let d=V(t),p=ss(n),f=V(s);if(!d||!p||!f)throw new Error("a fact needs subject, predicate and object");let m=Wo(d,p,f),h=`${d} ${p} ${f}`,b=qa({doc:h}),g=ns(a),$=Yp(c);return await Us(e,async w=>{let x=xv(w,m,ns(o),r);for(let R of x.length?[]:Sv(w,m,{quantifier:g}))Zr(w,bo(w,R),void 0,{premiseTrusts:l,ruleConfidence:u});for(let R of x){let E=jv(w,{groupId:m,s:d,p,o:f,label:jl(h),tokens:b,group:R,createdAt:r,observedAt:i,quantifier:g,extraction:$});await op(E.candidate);for(let k of kv(w,E))Zr(w,bo(w,k),void 0,k===E.candidate.id?{premiseTrusts:l,ruleConfidence:u}:void 0)}Xp(w,Rv(w,m)),hs(w)}),{id:m}}function ZL(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 gs(e,t){let n=[],s=0;for(let r of t||[]){let i=V(r?.subject),a=ss(r?.predicate),c=V(r?.object);if(!i||!a||!c){s+=1;continue}let l=`${i} ${a} ${c}`;n.push({id:Wo(i,a,c),s:i,p:a,o:c,text:l,tokens:qa({doc:l}),provenance:ns(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:ns(r?.quantifier),extraction:Yp(r?.extraction),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:ZL(r?.justification)})}let o=[];return n.length?(await Us(e,r=>{let i=[],a=new Set,c=new Map;for(let u of n){let d=xv(r,u.id,u.provenance,u.createdAt);for(let p of d.length?[]:Sv(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(p)||(a.add(p),i.push(p)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(p,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let p of d){let f=jv(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:jl(u.text),tokens:u.tokens,group:p,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments,extraction:u.extraction});for(let m of kv(r,f))a.has(m)||(a.add(m),i.push(m));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(f.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)Zr(r,bo(r,u),void 0,c.get(u));let l=[];for(let u of new Set(o))l.push(...Rv(r,u));Xp(r,l),hs(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function Tl(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=Tv[n];if(!i)throw new Error(`a rule kind must be one of ${e0.join(", ")}, got ${JSON.stringify(n)}`);let a=V(t);if(!a)throw new Error("a rule needs a name");let c=t0[n]||new Set,l=i.map(([f])=>V(s?.[f])),u=i.filter(([f],m)=>!c.has(f)&&!l[m]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([f])=>f).join(" + ")}`);if(n===fa){let f=l[i.findIndex(([h])=>h==="objectRole")],m=l[i.findIndex(([h])=>h==="value")];if(!f&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=n0(n,a,l),p=jl(`${a} = ${n}(${l.join(", ")})`);return await Us(e,async f=>{let m=f.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",b=[...new Set([...h.split(" | "),ns(o)].filter(Boolean))],g=Kp(m,r),$={id:d,label:p,class:ls,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:_l,key:"ruleName",value:a},{prop:ni,key:"ruleKind",value:n},...i.map(([w,x],R)=>({prop:x,key:w,value:l[R],skip:!l[R]&&c.has(w)})).filter(w=>!w.skip).map(({skip:w,...x})=>x),{prop:ut,key:"createdAt",value:g},...b.length?[{prop:"mgx:factProvenance",key:"provenance",value:b.join(" | ")}]:[]]};await op($),Bs(f,$),Zr(f,f.individuals.find(w=>w?.id===d)),hs(f)}),{id:d}}function em(e,t){let n=V(t);return(e?.individuals||[]).find(s=>s?.class===ls&&(s.attributes||[]).find(o=>o?.prop===_l)?.value===n)}function s0(e,t){let n=V(t),s=o=>(o.attributes||[]).find(r=>r?.prop===ni)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===ls&&(o.attributes||[]).find(r=>r?.prop===_l)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Al(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==ls)continue;let s=a=>(n.attributes||[]).find(c=>c?.prop===a)?.value,o=s(ni),r=Tv[o];if(!r)continue;let i={};for(let[a,c]of r)i[a]=s(c)??"";t.push({id:n.id,name:s(_l)||"",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 tm(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:c,byTrust:l,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:p}=o,f=String(t||"").trim().toLowerCase(),m=c(V,n),h=c(V,s),b=r(f).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(b.length){let w=b.slice().sort((x,R)=>l(x.fact,R.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map(x=>`${a(x)}${x.provenance?` (source: ${x.provenance})`:""}`)]}}let g=em(e,f),$=g?.attributes?.find(w=>w.prop===ni)?.value;if(g&&$===ua){let w=g.attributes.find(C=>C.prop==="mgx:ruleBase1")?.value,x=g.attributes.find(C=>C.prop==="mgx:ruleBase2")?.value,R=V(n),E=V(s);if(!w||!x||!R||!E)return null;let _=p({entity:R,hopsTaken:0},C=>C.hopsTaken===2&&C.entity===E,C=>{if(C.hopsTaken>=2)return[];let v=C.hopsTaken===0?w:x;return r(v).filter(j=>j.fact.subject===C.entity).map(j=>({action:j,nextState:{entity:j.fact.object,hopsTaken:C.hopsTaken+1}}))},{maxDepth:2,stateKey:C=>`${C.entity}#${C.hopsTaken}`});if(!_)return null;let y=new Set,T=[];for(let C of _.actions){T.push(i(C.fact));for(let v of C.aliasFacts){let j=v.id||`${v.subject}|${v.predicate}|${v.object}`;y.has(j)||(y.add(j),T.push(`${a(v)}${v.provenance?` (source: ${v.provenance})`:""}`))}}return{citation:T}}if(g&&$===da){let w=g.attributes.find(S=>S.prop==="mgx:ruleBase1")?.value,x=g.attributes.find(S=>S.prop==="mgx:ruleFilterProperty")?.value;if(!w||!x)return null;let R=await tm(e,w,n,s,o);if(!R)return null;let E=V(n),k=V(x),O=u.find(S=>S.predicate===d&&S.subject===E&&V(S.object)===k);return O?{citation:[...R.citation,i(O)]}:null}return null}async function Av(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:c,rows:l,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,p=String(t||"").trim().toLowerCase(),f=a(V,n),m=o(p).filter(g=>f.has(g.fact.object));if(m.length){let g=new Map;for(let $ of m)g.has($.fact.subject)||g.set($.fact.subject,[]),g.get($.fact.subject).push($);return[...g.entries()].map(([$,w])=>{let x=w.slice().sort((R,E)=>c(R.fact,E.fact))[0];return{subject:$,citation:[r(x.fact),...x.aliasFacts.map(R=>`${i(R)}${R.provenance?` (source: ${R.provenance})`:""}`)]}})}let h=em(e,p),b=h?.attributes?.find(g=>g.prop===ni)?.value;if(h&&b===ua){let g=h.attributes.find(k=>k.prop==="mgx:ruleBase1")?.value,$=h.attributes.find(k=>k.prop==="mgx:ruleBase2")?.value,w=V(n);return!g||!$||!w?[]:d({entity:w,hopsTaken:0},k=>{if(k.hopsTaken>=2)return[];let O=k.hopsTaken===0?$:g;return o(O).filter(S=>S.fact.object===k.entity).map(S=>({action:S,nextState:{entity:S.fact.subject,hopsTaken:k.hopsTaken+1}}))},{maxDepth:2,stateKey:k=>`${k.entity}#${k.hopsTaken}`}).filter(k=>k.node.hopsTaken===2).map(({node:k,path:O})=>{let S=new Set,_=[];for(let y of O.actions.slice().reverse()){_.push(r(y.fact));for(let T of y.aliasFacts){let C=T.id||`${T.subject}|${T.predicate}|${T.object}`;S.has(C)||(S.add(C),_.push(`${i(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{subject:k.entity,citation:_}})}if(h&&b===da){let g=h.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,$=h.attributes.find(E=>E.prop==="mgx:ruleFilterProperty")?.value;if(!g||!$)return[];let w=await Av(e,g,n,s),x=V($),R=[];for(let E of w){let k=V(E.subject),O=l.find(S=>S.predicate===u&&S.subject===k&&V(S.object)===x);O&&R.push({subject:E.subject,citation:[...E.citation,r(O)]})}return R}return[]}function wt(e,t={}){let n=nm(e),s=X$(e),o=[];for(let[r,i]of n.groups){let a=sm(r,i,n),c=s?.get(r);a.trust=Qa(c?c.inputs:a.assertions,t).score,o.push(a)}return o}function nm(e){let t=e?.individuals||[],n=new Map(t.filter(c=>c?.class===cs).map(c=>[c.id,c])),s=(e?.objectProperties||[]).find(c=>c?.prop===On),o=new Map;for(let c of s?.examples||[])o.has(c.subject)||o.set(c.subject,[]),o.get(c.subject).push(c.object);let r=new Map,i=new Map;for(let c of t){if(c?.class===Ht){let d=Zt(c.id),p=i.get(d);p?p.push(c):i.set(d,[c]);continue}if(c?.class!==tt||(c.attributes||[]).some(d=>d?.prop===la)||Yr(c.id))continue;let l=Zt(c.id),u=r.get(l);u?u.push(c):r.set(l,[c])}for(let[c,l]of i){let u=r.get(c);if(!u)continue;let d=u.filter(p=>!Hc(l,p.id,ti(fs(p,"mgx:factProvenance").split(" | ").filter(Boolean),fs(p,ut))));d.length!==u.length&&(d.length?r.set(c,d):r.delete(c))}let a=new Map;for(let[c,l]of r){l.sort((p,f)=>p.id<f.id?-1:p.id>f.id?1:0);let u=Lp(Qr(l[0],"subject"),Qr(l[0],"predicate")),d=a.get(u);d?d.push(c):a.set(u,[c])}return{groups:r,groupsByPair:a,statedByRecord:o,sourceTypeOf:c=>(n.get(c)?.attributes||[]).find(l=>l?.prop==="mgx:sourceType")?.value||""}}function sm(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=fs,i=Qr,a=[],c=[],l=[],u=new Set,d=new Set,p=[],f=new Set,m="";for(let g of t){if(po(g.id)){let S=qi(g.id),_=Uc(g);for(let y of _)c.includes(y)||(c.push(y),S&&l.push(S));a.push({id:g.id,sourceId:"",sourceType:S,provenance:"",createdAt:r(g,rs),ownTrust:Number(r(g,qr))||0,assertedAt:r(g,is),rollup:{count:Number(r(g,Hi))||_.length,sourceIds:_,earliest:r(g,rs),latest:r(g,is)}});continue}let $=r(g,"mgx:factProvenance").split(" | ").filter(Boolean);for(let S of $)u.add(S);let[w]=s.get(g.id)||[],x=w||r(g,Zo),R=o(x);w&&!c.includes(w)&&(c.push(w),R&&l.push(R));let E=r(g,ut),k=r(g,aa),O=r(g,gl).split(" ").filter(Boolean);for(let S of O)d.add(S);a.push({id:g.id,sourceId:x,sourceType:R,provenance:$.join(" | "),createdAt:E,...k?{observedAt:k}:{},...O.length?{extraction:O}:{},ownTrust:Number(r(g,_r))||0,assertedAt:ti($,E)}),m=m||i(g,"quantifier");for(let S of i(g,"justification").split(" | ")){let _=S.split(" ").filter(Boolean);if(!_.length)continue;let y=_.join(" ");f.has(y)||(f.add(y),p.push(_))}}let h=[],b=new Set;for(let g of p)for(let $ of g)b.has($)||(b.add($),h.push($));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:m,sourceIds:c,sourceTypes:l,...d.size?{extraction:[...d].sort()}:{},environments:p,justification:h,assertions:a}}function o0(e){let t=fs(e,Zo);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 Cv(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||zs();return await Us(e,c=>{let l=new Set,u=new Set,d=new Map;c.individuals=(c.individuals||[]).filter(p=>{if(p?.class!==tt)return!0;let f=Zt(p.id),m=o.has(p.id)?p.id:o.has(f)?f:"";if(!m)return!0;u.add(m),l.add(p.id);let h=o0(p),b=`${f}\0${h}`,g=fs(p,"mgx:factProvenance"),$=d.get(b);return $?($.ids.push(p.id),g&&$.tags.push(g)):d.set(b,{groupId:f,sourceId:h,ids:[p.id],tags:g?[g]:[],template:{label:p.label||"",subject:fs(p,"rdf:subject"),predicate:fs(p,"rdf:predicate"),object:fs(p,"rdf:object")}}),!1});for(let p of u)r.push(p);if(r.length){for(let p of l)i.push(p);for(let p of c.objectProperties||[]){let f=p.examples||[];p.examples=f.filter(m=>!l.has(m?.subject)&&!l.has(m?.object)),p.count=p.examples.length}for(let p of d.values()){let f=f$({groupId:p.groupId,sourceId:p.sourceId,recordIds:p.ids,retractedAt:a,template:p.template,provenance:[...p.tags,n].filter(Boolean).join(" | ")});f&&Bs(c,f)}hs(c)}}),{removed:r,records:i}}function r0(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==Ht)continue;let s=qc(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function i0(e,t){let n=[];for(let o of t||[]){let r=Yc(o);r&&n.push(r)}let s=[];return n.length?(await Us(e,o=>{let r=new Map;for(let a of n){let c=Bs(o,a),l=Zt(c.id),u=r.get(l);u?u.push(c):r.set(l,[c])}let i=new Set;for(let[a,c]of r)for(let l of nr(o,a)){let u=bo(o,l);if(!u)continue;let d=fs(u,"mgx:factProvenance").split(" | ").filter(Boolean);Hc(c,l,ti(d,fs(u,ut)))&&i.add(l)}if(i.size){Xp(o,i);for(let a of i)s.push(a)}hs(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function a0(e,{self:t="",acknowledgedBy:n=null}={}){let s=Xc(wt(e)),o=[];for(let r of e?.individuals||[])r?.class===Ht&&r.id&&o.push(r.id);return{roster:s,retirable:Jc({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function c0(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Us(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==Ht||!n.has(a.id)?!0:(r.add(a.id),!1)),!r.size)return;for(let a of r)s.push(a);let i=en(o);if(i)for(let a of r){i.individualsById.delete(a);let c=Zt(a),l=(i.retractionsByGroup.get(c)||[]).filter(u=>!r.has(u.id));l.length?i.retractionsByGroup.set(c,l):i.retractionsByGroup.delete(c)}hs(o)}),{retired:s}):{retired:s}}function Ov(e,{floor:t=l0}={}){let n=wt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(Fc(r.predicate)===Ff)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=Fc(r[0].predicate);i!==Df&&!Bf(r,i).contested||o.push(r.slice().sort((a,c)=>c.trust-a.trust||a.object.localeCompare(c.object)))}return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var ei,_p,mo,tt,Xo,cs,ls,Tp,Ap,LN,On,Cp,D$,ml,yp,z$,PN,I$,MN,$p,Op,Ip,B$,FN,Ds,aa,Zo,hl,la,gl,H$,fs,Qr,Lp,q$,X$,WN,Q$,N$,ev,tv,nv,sv,Cn,er,ho,Dp,go,gL,zp,Bp,bL,jL,hv,jp,_L,pl,AL,Gp,gv,Vp,bv,kp,en,jl,zs,qp,GL,ua,da,Jp,Qp,Rl,fa,Zp,e0,_l,ni,Tv,t0,n0,l0,si,u0,d0,We=P(()=>{Pt();Qe();zn();Ze();Ze();Un();Jy();Un();Mc();qf();ep();sp();rp();ta();ta();dp();qf();ep();sp();rp();ei=ne(".tmct","memory"),_p=ne(ei,"graph.json"),mo="Utterance",tt="Fact",Xo="Session",cs="Source",ls="Rule",Tp="mgx:saidInSession",Ap="mgx:inReplyTo",LN="mgx:derivedFrom",On="mgx:statedBy",Cp="mgx:canonicalisedFrom",D$="mgx:sourceReliability",ml="src:operator-chat",yp="src:teach-chat",z$="src:teach-node",PN=new Set(["visitor","tmct"]),I$=48,MN=[{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:Tp,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Ap,predicate:"inReplyTo",note:"tmct Utterance \u2192 the visitor Utterance it answers (the Q/A pairing)"},{prop:"rdf:subject",note:"reified fact: the triple's subject term"},{prop:"rdf:predicate",note:"reified fact: the triple's predicate term"},{prop:"rdf:object",note:"reified fact: the triple's object term"},{prop:"mgx:factProvenance",note:"LEGACY COMPAT SHIM: the ' | '-joined provenance tag string a fact came from; the source-of-truth is now the mgx:statedBy edges derived from it"},{prop:"mgx:sourceId",note:"the assertion key a Fact record is filed under \u2014 the Source id of the ONE party asserting it, which is also the @-suffix of the record's own id. `src:none` when no tag names a Source, so every record has a key rather than a hole"},{prop:"mgx:observedAt",note:"OPTIONAL valid time: when the asserting party WITNESSED the claim, as against mgx:createdAt's transaction time (when this store recorded it). A stale article read today loses to an eyewitness report from yesterday. Stored only when a caller supplies one \u2014 never fabricated, never backfilled"},{prop:"mgx:extractionFinding",note:"OPTIONAL: the space-joined structural findings the extractor recorded about how THIS assertion's sentence was read, from the closed vocabulary identifier-token | clause-fallback | pronoun-carry | definitional-frame. Per assertion, never per triple: a later clean re-assertion of the same triple carries none. Absence means no findings were recorded, never that the sentence was checked and read cleanly"},{prop:"mgx:supersedes",note:"the record id(s) this one replaced when its own source re-asserted the triple with a newer embedded timestamp. A space-joined LIST; absent, never empty, until the first supersession"},{prop:"mgx:supersededBy",note:"the record id(s) that replaced this one. Its presence is what makes a record a demoted leaf rather than a live head, and the group fold skips it: a source's past belief is not a second vote for the present one. A LIST, because one source with two live replicas can fork before they sync"},{prop:"mgx:factQuantifier",note:"OPTIONAL: the quantifier word a plural class-membership teach used ('every'/'some'/'a few'), for literal recall by 'how many Xs are Ys' \u2014 never real cardinality counting"},{prop:"mgx:factJustification",note:"an entailed Fact's supporting premise fact ids: ' | '-separated environments, one space-separated premise-id list per independent derivation, capped by syllogise's maxEnvironments knob; a value with no ' | ' is a single environment"},{prop:"mgx:ruleName",note:"a taught Rule's own name (e.g. 'grandparent') \u2014 the query-dispatcher's lookup key, PLAN_TAUGHT_RELATIONS.md \xA72/\xA73"},{prop:"mgx:ruleKind",note:"a taught Rule's SHAPE tag \u2014 the closed vocabulary compose2 | filter | recursive (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:ut,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:js,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:LN,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:On,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Cp,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:_r,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:Xa,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:Ic,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)"}];$p=e=>ia(e),Op="memory",Ip="sqlite",B$="row";FN=`
101
+ `))return r}}throw new ve("cannot find end of structure",{toml:e,ptr:t})}var cl=P(()=>{Jo();});function CN(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(Qr(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function ra(e,t,n,s,o){if(s===0)throw new ve("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[c,l]=r==="["?_$(e,t,s,o):R$(e,t,s,o);if(n){if(l=ps(e,l),e[l]===",")l++;else if(e[l]!==n)throw new ve("expected comma or end of structure",{toml:e,ptr:l})}return[c,l]}if(r==='"'||r==="'"){let[c,l]=il(e,t);if(n){if(l=ps(e,l),e[l]&&e[l]!==","&&e[l]!==n&&e[l]!==`
102
+ `&&e[l]!=="\r")throw new ve("unexpected character encountered",{toml:e,ptr:l});e[l]===","&&l++}return[c,l]}let i=k$(e,t,",",n),a=CN(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new ve("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=ps(e,t+a[1]),e[i]===","&&i++),[j$(a[0],e,t,o),i]}var gp=P(()=>{hp();bp();cl();Jo();});function ll(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new ve("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 ve("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,c]=il(e,t);s=e.indexOf(".",c);let l=e.slice(c,s<0||s>r?r:s),u=al(l);if(u>-1)throw new ve("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(l.trimStart())throw new ve("found extra tokens after the string part",{toml:e,ptr:c});if(r<c&&(r=e.indexOf(n,c),r<0))throw new ve("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(!ON.test(a))throw new ve("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,ps(e,r+1,!0,!0)]}function R$(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new ve("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=Qr(e,t);else if(i!==" "&&i!==" "&&i!==`
103
+ `&&i!=="\r"){let a,c=o,l=!1,[u,d]=ll(e,t-1);for(let m=0;m<u.length;m++){if(m&&(c=l?c[a]:c[a]={}),a=u[m],(l=Object.hasOwn(c,a))&&(typeof c[a]!="object"||r.has(c[a])))throw new ve("trying to redefine an already defined value",{toml:e,ptr:t});!l&&a==="__proto__"&&Object.defineProperty(c,a,{enumerable:!0,configurable:!0,writable:!0})}if(l)throw new ve("trying to redefine an already defined value",{toml:e,ptr:t});let[p,f]=ra(e,d,"}",n-1,s);r.add(p),c[a]=p,t=f}}if(!i)throw new ve("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function _$(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new ve("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=Qr(e,t);else if(r!==" "&&r!==" "&&r!==`
104
+ `&&r!=="\r"){let i=ra(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new ve("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var ON,bp=P(()=>{hp();gp();cl();Jo();ON=/^[a-zA-Z0-9-_]+[ \t]*$/});function T$(e,t,n,s){let o=t,r=n,i,a=!1,c;for(let l=0;l<e.length;l++){if(l){if(o=a?o[i]:o[i]={},r=(c=r[i]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],r=r[u].c}}if(i=e[l],(a=Object.hasOwn(o,i))&&r[i]?.t===0&&r[i]?.d)return null;a||(i==="__proto__"&&(Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(r,i,{enumerable:!0,configurable:!0,writable:!0})),r[i]={t:l<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(c=r[i],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[i]=[]),o[i].push(o={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}),c.d))return null;if(c.d=!0,s===1)o=a?o[i]:o[i]={};else if(s===0&&a)return null;return[i,o,c.c]}function Qo(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=ps(e,0);a<e.length;){if(e[a]==="["){let c=e[++a]==="[",l=ll(e,a+=+c,"]");if(c){if(e[l[1]-1]!=="]")throw new ve("expected end of table declaration",{toml:e,ptr:l[1]-1});l[1]++}let u=T$(l[0],s,o,c?2:1);if(!u)throw new ve("trying to redefine an already defined table or value",{toml:e,ptr:a});i=u[2],r=u[1],a=l[1]}else{let c=ll(e,a),l=T$(c[0],r,i,0);if(!l)throw new ve("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=ra(e,c[1],void 0,t,n);l[1][l[0]]=u[0],a=u[1]}if(a=ps(e,a,!0),e[a]&&e[a]!==`
105
+ `&&e[a]!=="\r")throw new ve("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=ps(e,a)}return s}var A$=P(()=>{bp();gp();cl();Jo();});var C$=P(()=>{});var ul=P(()=>{A$();C$();mp();Jo();});var wp={};Lt(wp,{CONFIG_FILE:()=>fl,loadTomlConfig:()=>pl,mergeEffective:()=>I$,normalizeConfig:()=>O$});async function pl(e,{file:t}={}){let n=t||ne(e,fl),s;try{s=await Oe(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return Qo(s)}catch(o){throw new Error(`Invalid ${fl} at ${n}: ${o&&o.message?o.message:o}`)}}async function IN(e,t){let n;if(Array.isArray(e))n=e;else{let o=Gt(t,String(e));n=(await Oe(o,"utf8")).split(`
106
+ `)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Gt(t,r))}return s}async function O$(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await IN(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Gt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Gt(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(x=>Gt(s,String(x)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},c={};a.enabled!==void 0&&(c.enabled=a.enabled),a.limit!==void 0&&(c.limit=a.limit),a.capture_unknown_context!==void 0&&(c.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(c.unknownContextLimit=a.unknown_context_limit),Object.keys(c).length&&(o.seed=c),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.news!==void 0&&(o.news=n.news),n.discourse!==void 0&&(o.discourse=n.discourse),n.recognition!==void 0&&(o.recognition=n.recognition),n.reasoning!==void 0&&(o.reasoning=n.reasoning);let l=n.index||{},u={};l.languages!==void 0&&(u.languages=l.languages),l.exclude!==void 0&&(u.exclude=l.exclude),l.secret_exclude!==void 0&&(u.secretExclude=l.secret_exclude),l.history_depth!==void 0&&(u.historyDepth=l.history_depth),l.include_text!==void 0&&(u.includeText=l.include_text),l.include_structure!==void 0&&(u.includeStructure=l.include_structure),l.respect_gitignore!==void 0&&(u.respectGitignore=l.respect_gitignore),l.markdown_sections!==void 0&&(u.markdownSections=l.markdown_sections),l.vue!==void 0&&(u.vue=l.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},p={};d.score_gap_k!==void 0&&(p.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(p.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(p.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(p.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(p.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(p.beamSearch=d.beam_search),d.beam_width!==void 0&&(p.beamWidth=d.beam_width),d.prose_layers!==void 0&&(p.proseLayers=d.prose_layers);let f=d.expansion||{},m={};f.strategy!==void 0&&(m.strategy=f.strategy),f.nodes!==void 0&&(m.nodes=f.nodes),f.q!==void 0&&(m.q=f.q),f.depth!==void 0&&(m.depth=f.depth),Object.keys(m).length&&(p.expansion=m),Object.keys(p).length&&(o.tune=p);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.enabled});let b=n.memory||{},g={};b.retention_versions!==void 0&&(g.retentionVersions=b.retention_versions),b.backend!==void 0&&(g.backend=b.backend),Object.keys(g).length&&(o.memory=g);let $=[];for(let[w,x]of NN)n[w]&&n[w][x]!==void 0&&$.push(`${w}.${x}`);return o.unwired=$,o}function dl(e,t="",n={}){for(let[s,o]of Object.entries(e||{})){if(o==null)continue;let r=t?`${t}.${s}`:s;Array.isArray(o)||typeof o!="object"?n[r]=o:dl(o,r,n)}return n}function I$({args:e={},toml:t=null,defaults:n={}}={}){let s=dl(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?dl(o):{},i=dl(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),c={},l={};for(let u of a)u in i?(c[u]=i[u],l[u]="arg"):u in r?(c[u]=r[u],l[u]="tmct.toml"):(c[u]=s[u],l[u]="default");return{effective:c,sources:l}}var fl,NN,ia=P(()=>{Pt();Qe();ul();fl="tmct.toml";NN=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Ws={};Lt(Ws,{BackendRejected:()=>An,BackendUnavailable:()=>Yo,CANONICALISED_FROM_PROP:()=>Cp,CAPABLE_OF_PREDICATE:()=>f0,CHAIN_KEEP_DEPTH:()=>t$,CHAIN_ROLLUP_THRESHOLD:()=>Bc,CREATED_AT_PROP:()=>ut,DEFAULT_RETENTION:()=>jp,EXTRACTION_FINDINGS:()=>Zc,EXTRACTION_FINDING_PROP:()=>gl,FACT_CLASS:()=>tt,GROUP_ROLLUP_THRESHOLD:()=>Zy,HAS_A_PREDICATE:()=>oi,IN_REPLY_TO_PROP:()=>Ap,MAX_ROW_BYTES:()=>qo,MEMORY_DIR_REL:()=>ti,MEMORY_GRAPH_REL:()=>_p,MEMORY_MANIFEST_REL:()=>gv,MEMORY_SESSION_CLASS:()=>Xo,MULTI_VALUED_PREDICATES:()=>p0,NODE_ID_REL:()=>Kp,OPERATOR_SOURCE_ID:()=>ml,RETRACTED_AT_PROP:()=>Kc,RETRACTED_COUNT_PROP:()=>Yf,RETRACTED_RECORD_IDS_PROP:()=>Vc,RETRACTION_CLASS:()=>Ht,RETRACTION_PREDICATE:()=>Gc,ROLLUP_COUNT_PROP:()=>qi,ROLLUP_EARLIEST_PROP:()=>as,ROLLUP_KEEP_PER_TYPE:()=>e$,ROLLUP_LATEST_PROP:()=>cs,ROLLUP_PRIOR_PROP:()=>Yr,ROLLUP_RECORD_IDS_PROP:()=>Hi,ROLLUP_SOURCE_IDS_PROP:()=>qr,ROW_BACKEND_CONTRACT_VERSION:()=>tl,ROW_BACKEND_KIND:()=>Jr,ROW_CLASSES:()=>el,RULE_CLASS:()=>ds,RULE_KIND_ACTION_CONSTRAINT:()=>em,RULE_KIND_ACTION_EFFECT:()=>pa,RULE_KIND_ACTION_PRECOND:()=>Rl,RULE_KIND_ACTION_SIGNATURE:()=>Zp,RULE_KIND_COMPOSE2:()=>da,RULE_KIND_FILTER:()=>fa,RULE_KIND_PROP:()=>si,RULE_KIND_RECURSIVE:()=>Qp,SAID_IN_SESSION_PROP:()=>Tp,SOURCE_CLASS:()=>us,SOURCE_RELIABILITY_PROP:()=>z$,STATED_BY_PROP:()=>On,SYLLOGISE_STATE_REL:()=>Vp,UPDATED_AT_PROP:()=>js,UTTERANCE_CLASS:()=>mo,admittedNodes:()=>Jc,appendCanonicalisedFromEdges:()=>XL,appendFact:()=>e0,appendFacts:()=>Kn,appendRetractions:()=>c0,appendRule:()=>Tl,appendUtterance:()=>YL,appendUtterances:()=>xv,applySeedPayload:()=>W$,assertValidRow:()=>ta,attachFactHeads:()=>X$,chainRollupIdFor:()=>Wf,cloneMemoryPayload:()=>Np,closeSqliteMemoryStore:()=>El,createInMemoryStore:()=>la,createSqliteMemoryStore:()=>Pp,createSqliteRowBackend:()=>_L,emptyMemory:()=>fs,factGroupId:()=>Zt,factHeadsOf:()=>J$,factIdForTriple:()=>Ee,factRecordIdForTag:()=>DN,factRecordIdsFor:()=>sr,findContradictions:()=>Ov,findRuleByName:()=>tm,findRulesByName:()=>r0,headRollupIdFor:()=>Uf,isChainRollupId:()=>Xr,isHeadRollupId:()=>po,isMemoryOrSqliteHandle:()=>vl,isRetractionId:()=>Jf,isRollupId:()=>Uc,isRowBackend:()=>nl,isRowHandle:()=>Nn,isValidRow:()=>v$,loadMemory:()=>mt,loadNodeId:()=>ML,loadSyllogiseState:()=>LL,normFactPredicate:()=>rs,normFactTerm:()=>V,openConfiguredMemoryBackend:()=>wo,openExistingMemoryBackend:()=>cL,openMemoryBackend:()=>Dp,openSqliteSeedStore:()=>qN,peersToConvince:()=>np,provSourceClassFor:()=>zL,provenanceTagToSource:()=>Un,readFactRows:()=>wt,readObjectSupersessions:()=>HN,readOnlyMemorySnapshot:()=>lL,readRetractions:()=>a0,readRuleRows:()=>Al,removeFacts:()=>Cv,resolveMemoryGraphFile:()=>aa,resolveRelationChase:()=>nm,resolveRelationChaseReverse:()=>Av,retirableRetractions:()=>l0,retireRetractions:()=>u0,retractedAtOf:()=>Ho,retractedRecordIds:()=>Ko,retractionFromWire:()=>Xc,retractionIdFor:()=>Xf,retractionScopeOf:()=>Qf,retractionWireFact:()=>Yc,rowBackendProblems:()=>ea,rowProblems:()=>sl,saveNodeId:()=>FL,saveSyllogiseState:()=>PL,snapshotMemory:()=>AL,sqliteSeedFactTermValues:()=>aL,stableRecordIds:()=>Qc,wrapRowBackend:()=>Mp,wrapRowBackendOverSqliteSeed:()=>YN});function fs(){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:MN.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function aa(e,t=null){if(vl(e))throw new Error("resolveMemoryGraphFile: dir is a store handle, not a file path (Backend A only)");return t===null?ne(e,_p):ne(e,ti,`graph.v${t}.json`)}function nr(e){return!!e&&typeof e=="object"&&e.backend===Op}function hs(e){return!!e&&typeof e=="object"&&e.backend===Ip}function Nn(e){return!!e&&typeof e=="object"&&e.backend===U$}function vl(e){return nr(e)||hs(e)||Nn(e)}function la(){return{backend:Op,payload:fs()}}function W$(e,t){t&&(e.payload={...e.payload,...t})}function Np(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function G$(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=qp(Un(t));if(n)return n}return{id:Ds,type:""}}function Zt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function DN(e,t){return`${e}@${V$(t).id}`}function V$(e){return qp(Un(e))||{id:Ds,type:""}}function K$(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=V$(s),i=t.get(o)||{sourceId:o,sourceType:r,tags:[]};i.tags.includes(s)||i.tags.push(s),t.set(o,i)}return t.size||t.set(Ds,{sourceId:Ds,sourceType:"",tags:[]}),[...t.values()]}function vp(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=Un(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function ni(e,t="",n=Math.max){return vp(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function zN(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 H$(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=G$(n("mgx:factProvenance")),o=n(ua).split(" ").filter(Boolean)[0]||null,r=Yi(e.id);return[e.id,Zt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(er)||s.id,r||s.type,Number(n(r?Yr:Tr))||0,n(ut),n(ca)||null,o,t]}function BN(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(tt))return;let t=e.prepare(q$);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(tt))t.run(...H$(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function UN(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function X$(e,t){return e&&t&&(e[Y$]=t),e}function GN(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 Q$(e,t,n,s){let o=e.prepare(WN),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=zs();for(let a of n){let c=t.groups.get(a);if(!c?.length){r.run(a),s?.delete(a);continue}let l=UN(om(a,c,t).assertions),u=Ug(l).score;o.run(a,u,JSON.stringify(l),i),s?.set(a,{trustBase:u,inputs:l})}}function VN(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(tt))return;let n=sm(yl(e));t.exec("BEGIN IMMEDIATE");try{Q$(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function KN(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=zs();for(let i of n){let[a,c]=i.split("\0");if(Dc(c)!==Ki)continue;let l=t.groupsByPair.get(i)||[];if(l.length<2)continue;let u=l.map(f=>{let m=om(f,t.groups.get(f),t);return m.trust=Za(m.assertions).score,m});if(new Set(u.map(f=>f.object)).size<2)continue;let d=Bf(u,Ki)?.winner?.id;if(!d)continue;let p=s.get(a,c);p?.to_id!==d&&o.run(a,c,(p?.ord??-1)+1,p?.to_id||"",d,r)}}function HN(e,{subject:t,predicate:n}={}){if(!hs(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 ev(){if(L$)return;L$=!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 Pp(e){ev();let{DatabaseSync:t}=await Promise.resolve().then(()=>(pp(),fp)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(FN),BN(n);let s=RL({backend:Ip,db:n,dbPath:e});return VN(s),s}function El(e){hs(e)&&e.db.close()}async function qN(e){ev();let{DatabaseSync:t}=await Promise.resolve().then(()=>(pp(),fp));try{return{backend:Ip,db:new t(e,{readOnly:!0}),dbPath:e,readOnly:!0}}catch(n){throw new Yo(`could not open the seed store ${e} read-only: ${n.message}`,{cause:n})}}function Mp(e,{basePayload:t=null,sqliteSeedStore:n=null,sqliteSeedOverlayRows:s=null,onOversizedRow:o="throw",copyOnRead:r=!0,log:i=void 0}={}){let a=ea(e);if(a.length)throw new An(`not a memory row backend: ${a.join("; ")}`);if(n&&!hs(n))throw new An("sqliteSeedStore must be an open sqlite store handle (openSqliteSeedStore)");if(n&&t)throw new An("a handle takes its seed either as a basePayload or as a sqliteSeedStore, never both");return{backend:U$,impl:e,cachedPayload:null,basePayload:Np(t),sqliteSeedStore:n,sqliteSeedOverlayRows:s?[...s]:null,sqliteSeedKeyOrds:null,baseRows:null,storedRows:null,onOversizedRow:o,copyOnRead:r,log:i}}function YN(e,t,{overlayRows:n=null,onOversizedRow:s="throw",copyOnRead:o=!0,log:r=void 0}={}){return Mp(e,{sqliteSeedStore:t,sqliteSeedOverlayRows:n,onOversizedRow:s,copyOnRead:o,log:r})}async function XN(e){let t=await e;if(Array.isArray(t))return t;let n=[];for await(let s of t)n.push(s);return n}function Ep(e,t){let n=new Map;for(let s of e)n.set(s.rowKey,s);for(let s of t)n.set(s.rowKey,s);return[...n.values()]}function JN(e){let t=new Set(e.storedRows.map(o=>o.rowKey)),n=e.sqliteSeedStore?iv(e).keys():e.baseRows.map(o=>o.rowKey),s=new Set;for(let o of n)t.has(o)||s.add(o);return s}async function bl(e,t,n){let s=await e.impl.readMeta(t);if(s==null)return n;try{return JSON.parse(s)}catch{return n}}async function Fp(e){if(!e.cachedPayload){let t=fs(),n=await XN(e.impl.readRows());e.storedRows=n.filter(o=>o?.rowClass!==Zi);let s={memory:await bl(e,tv,M$(e,"memory",t.memory)),prefixes:await bl(e,nv,M$(e,"prefixes",t.prefixes))};e.sqliteSeedStore?e.cachedPayload=Zo(av(e,s)):(e.baseRows=lp(e.basePayload||t,{onOversizedRow:"keep"}),e.cachedPayload=Zo(ol(Ep(e.baseRows,e.storedRows),{meta:s})))}return e.cachedPayload}async function QN(e){let t=await Fp(e);return e.copyOnRead===!1?t:Cn(t)}function ZN(e){return{...e,individuals:(e.individuals||[]).map(t=>({...t})),objectProperties:(e.objectProperties||[]).map(t=>({...t,examples:[...t.examples||[]]}))}}function rv(e){Nn(e)&&(e.cachedPayload=null,e.storedRows=null,e.baseRows=null)}function P$(e){let t;try{t=JSON.parse(e)}catch{return e}let n=t?.individual;return Array.isArray(n?.attributes)?JSON.stringify({...t,individual:{...n,attributes:n.attributes.filter(s=>s?.prop!==js)}}):e}function eL(e,t){return e?P$(e.json)!==P$(t.json):!0}async function tL(e,t){await Fp(e);let n=JN(e),s=e.sqliteSeedStore?e.storedRows:Ep(e.baseRows,e.storedRows),o=new Map(s.map(f=>[f.rowKey,f])),r=lp(e.sqliteSeedStore?nL(t,n):t,{priorRows:e.sqliteSeedStore?oL(e):s,onOversizedRow:e.onOversizedRow,...e.log?{log:e.log}:{}}),{puts:i,deletes:a}=up(s,r),c=i.filter(f=>!n.has(f.rowKey)).filter(f=>eL(o.get(f.rowKey),f)),l=a.filter(f=>!n.has(f));try{c.length&&await e.impl.putRows(c),l.length&&await e.impl.deleteRows(l),await e.impl.putMeta(tv,JSON.stringify(t.memory??fs().memory)),await e.impl.putMeta(nv,JSON.stringify(t.prefixes??fs().prefixes))}catch(f){throw rv(e),f}let u=new Set(l),d=new Map(e.storedRows.filter(f=>!u.has(f.rowKey)).map(f=>[f.rowKey,f]));for(let f of c)d.set(f.rowKey,f);e.storedRows=[...d.values()];let p={memory:t.memory,prefixes:t.prefixes};e.sqliteSeedStore&&!l.length?iL(e.cachedPayload,p,c):e.sqliteSeedStore?(e.cachedPayload=null,e.cachedPayload=Zo(av(e,p))):(e.cachedPayload=null,e.cachedPayload=Zo(ol(Ep(e.baseRows,e.storedRows),{meta:p})))}function nL(e,t){return t.size?{...e,individuals:(e?.individuals||[]).filter(n=>!t.has(String(n?.id??""))),objectProperties:(e?.objectProperties||[]).filter(n=>!t.has(`${ho}${n?.prop}`))}:e}function wl(e){return typeof e.iterate=="function"?e.iterate():e.all()}function*sL(e,t){let n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id");for(let o of wl(n)){if(t(o.id))continue;let r=zp.get(o.class)||"";yield{rowKey:o.id,rowClass:r,term:r==="fact"?V(o.subject||""):"",json:Up(o.ord,o.json)}}let s=e.db.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid");for(let o of e.db.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all()){if(t(`${ho}${o.prop}`))continue;let r=[];for(let i of s.all(o.prop)){let a={subject:i.subject,object:i.object,subjectLabel:i.subject_label,objectLabel:i.object_label};i.extra&&Object.assign(a,JSON.parse(i.extra)),r.push(a)}yield xl({predicate:o.predicate,prop:o.prop,count:o.count,examples:r},o.ord)}for(let o of Gp(e.db))t(o.rowKey)||(yield o)}function iv(e){if(e.sqliteSeedKeyOrds)return e.sqliteSeedKeyOrds;let t=e.sqliteSeedStore.db,n=new Map;for(let s of wl(t.prepare("SELECT id, ord FROM individuals")))n.set(s.id,s.ord);for(let s of wl(t.prepare("SELECT prop, ord FROM relations")))n.set(`${ho}${s.prop}`,s.ord);for(let s of Gp(t))n.set(s.rowKey,xp(s));for(let s of e.sqliteSeedOverlayRows||[])n.set(s.rowKey,xp(s));return e.sqliteSeedKeyOrds=n,n}function*oL(e){for(let[t,n]of iv(e))yield{rowKey:t,json:`{"ord":${n}}`};yield*e.storedRows}function*rL(...e){for(let t of e)yield*t}function av(e,t){let n=new Set(e.storedRows.map(o=>o.rowKey)),s=(e.sqliteSeedOverlayRows||[]).filter(o=>o?.rowKey&&!n.has(o.rowKey));for(let o of s)n.add(o.rowKey);return ol(rL(sL(e.sqliteSeedStore,o=>n.has(o)),s,e.storedRows),{meta:t})}function iL(e,t,n){if(e.memory=t.memory,e.prefixes=t.prefixes,!n.length)return rl(e);let s=new Map;for(let r=0;r<e.individuals.length;r+=1)s.set(e.individuals[r]?.id,r);let o=new Map;for(let r=0;r<e.objectProperties.length;r+=1)o.set(e.objectProperties[r]?.prop,r);for(let r of n){if(r.rowClass===Zi)continue;let i=JSON.parse(r.json);if(r.rowClass===tr){let l=i?.group;if(!l?.prop)continue;let u=o.get(l.prop);u===void 0?(o.set(l.prop,e.objectProperties.length),e.objectProperties.push(l)):e.objectProperties[u]=l;continue}let a=i?.individual;if(!a?.id)continue;let c=s.get(a.id);c===void 0?(s.set(a.id,e.individuals.length),e.individuals.push(a)):e.individuals[c]=a}return rl(e)}function*aL(e){for(let t of["subject","object"])for(let n of wl(e.db.prepare(`SELECT DISTINCT ${t} AS value FROM facts`)))n.value&&(yield n.value)}function M$(e,t,n){if(!e.sqliteSeedStore)return e.basePayload?.[t]??n;let s=e.sqliteSeedStore.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);if(!s)return n;try{return JSON.parse(s.v)}catch{return n}}async function Dp(e,t){if(Nn(t))return{dir:t,close:async()=>{await t.impl.close()}};if(nl(t)){let r=Mp(t);return{dir:r,close:async()=>{await r.impl.close()}}}if(t===Op)return{dir:la(),close:async()=>{}};let n=ne(e,".tmct","memory","graph.sqlite"),s=r=>Hu(r).then(()=>!0,()=>!1);!await s(n)&&await s(ne(e,_p))&&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 Xn($e(n),{recursive:!0});let o=await Pp(n);return{dir:o,close:async()=>El(o)}}async function cL(e,t=""){if(!e||typeof e!="string")return null;let n=ne(e,".tmct","memory","graph.sqlite");try{await Hu(n)}catch{return null}return Dp(e,t)}async function lL(e){if(!e)return null;let t=la();return W$(t,Np(await mt(e))),t}async function wo(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(ia(),wp));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Dp(e,n)}function uL(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=yl(e),e.cachedFactHeads=GN(e.db),e.cachedDataVersion=t),X$(Cn(e.cachedPayload),e.cachedFactHeads)}function yl(e){let t=e.db,n=fs(),s=(r,i)=>{let a=t.prepare("SELECT v FROM meta WHERE k = ?").get(r);return a?JSON.parse(a.v):i},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(r=>JSON.parse(r.json));return{generated_at:s("generated_at",n.generated_at),memory:s("memory",n.memory),prefixes:s("prefixes",n.prefixes),vocabulary:s("vocabulary",n.vocabulary),classes:s("classes",n.classes),objectProperties:lv(t).map(r=>r.group),individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function dL(e,t){let n=Cn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function fL(e,t){e.individuals=e.individuals.filter(n=>!t.has(n?.id))}function pL(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 mL(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,Cn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function hL(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function gL(e,t){e.objectProperties=e.objectProperties.filter(n=>!t.has(n?.prop))}function xp(e){let t=wL.exec(e?.json||"");if(t)return Number(t[1]);try{let n=Number(JSON.parse(e.json).ord);return Number.isFinite(n)?n:0}catch{return 0}}function cv(e,t,n){let s=zp.get(e?.class)||"";return{rowKey:String(e.id),rowClass:s,term:s==="fact"?V(Zr(e,"subject")):"",json:Up(t,n)}}function yL(e){let t={subject:e.subject,object:e.object,subjectLabel:e.subjectLabel??null,objectLabel:e.objectLabel??null};for(let n of Object.keys(e))Z$.has(n)||(t[n]=e[n]);return t}function xl(e,t){let n=(e.examples||[]).map(yL);return{rowKey:`${ho}${e.prop}`,rowClass:tr,term:"",json:JSON.stringify({ord:t,group:{predicate:e.predicate??null,prop:e.prop,count:Number.isFinite(e.count)?e.count:n.length,examples:n}})}}function lv(e){let t=new Map;for(let n of e.prepare("SELECT prop, ord, predicate, count FROM relations ORDER BY ord, prop").all())t.set(n.prop,{ord:n.ord,group:{predicate:n.predicate,prop:n.prop,count:n.count,examples:[]}});if(!t.size)return[];for(let n of e.prepare("SELECT prop, subject, object, subject_label, object_label, extra FROM edges ORDER BY rowid").all()){let s=t.get(n.prop);if(!s)continue;let o={subject:n.subject,object:n.object,subjectLabel:n.subject_label,objectLabel:n.object_label};n.extra&&Object.assign(o,JSON.parse(n.extra)),s.group.examples.push(o)}return[...t.values()]}function uv(e){let t=[],n=e.db.prepare("SELECT i.id AS id, i.ord AS ord, i.class AS class, i.json AS json, f.subject AS subject FROM individuals i LEFT JOIN facts f ON f.id = i.id ORDER BY i.ord, i.id").all();for(let s of n){let o=zp.get(s.class)||"";t.push({rowKey:s.id,rowClass:o,term:o==="fact"?V(s.subject||""):"",json:Up(s.ord,s.json)})}for(let s of lv(e.db))t.push(xl(s.group,s.ord));return t}function $L(e,t){let n=new Map,s=0,o=0;for(let a of t){let c=xp(a);n.set(a.rowKey,c),a.rowClass===tr?c>=o&&(o=c+1):c>=s&&(s=c+1)}let r=[],i=new Map;for(let a of e.individuals||[]){if(!a?.id)continue;let c=JSON.stringify(a),l=String(a.id),u=n.get(l)??s++;r.push(cv(a,u,c)),i.set(l,{kind:"individual",ord:u,individual:a,json:c})}for(let a of e.objectProperties||[]){if(!a?.prop)continue;let c=`${ho}${a.prop}`,l=n.get(c)??o++,u=xl(a,l);r.push(u),i.set(c,{kind:tr,ord:l,group:JSON.parse(u.json).group})}return{rows:r,partsByKey:i}}function vL(e){if(e.expiresAt!==void 0)return null;let t;try{t=JSON.parse(e.json)}catch{return null}if(!t||typeof t!="object"||!Number.isFinite(t.ord))return null;if(e.rowClass===tr){let r=t.group;if(!r?.prop)return null;let i=xl(r,t.ord);return i.rowKey!==e.rowKey||i.term!==e.term||i.json!==e.json?null:{kind:tr,ord:t.ord,group:r}}let n=t.individual;if(!n?.id)return null;let s=JSON.stringify(n),o=cv(n,t.ord,s);return o.rowKey!==e.rowKey||o.rowClass!==e.rowClass||o.term!==e.term||o.json!==e.json?null:{kind:"individual",ord:t.ord,individual:n,json:s}}function dv(e,{cache:t=null}={}){let n=e.db;return{db:n,cache:t,touchedGroups:new Set,touchedPairs:new Set,hasUnmappedRows:!!n.prepare(Bp).get(go),unmapped:null,upsertInd:n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),upsertFact:n.prepare(q$),deleteInd:n.prepare("DELETE FROM individuals WHERE id = ?"),deleteFact:n.prepare("DELETE FROM facts WHERE id = ?"),getFact:n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?"),upsertRel:n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),edgesForProp:n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),upsertEdge:n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),deleteEdge:n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),deleteGroupEdges:n.prepare("DELETE FROM edges WHERE prop = ?"),deleteRel:n.prepare("DELETE FROM relations WHERE prop = ?")}}function fv(e){return e.unmapped||(e.db.exec(bL),e.hasUnmappedRows=!0,e.unmapped={upsert:e.db.prepare(`INSERT OR REPLACE INTO ${go}(row_key, row_class, term, json, expires_at) VALUES (?, ?, ?, ?, ?)`),remove:e.db.prepare(`DELETE FROM ${go} WHERE row_key = ?`)}),e.unmapped}function Wp(e,t){e.hasUnmappedRows&&fv(e).remove.run(t)}function EL(e,{ord:t,individual:n,json:s}){e.upsertInd.run(n.id,t,n.class??null,n.label??null,s),n.class===tt&&(e.upsertFact.run(...H$(n,s)),e.touchedGroups.add(Zt(n.id)),e.touchedPairs.add(Lp(Zr(n,"subject"),Zr(n,"predicate")))),Wp(e,String(n.id)),e.cache&&dL(e.cache,n)}function xL(e,{ord:t,group:n}){let s=new Map(e.edgesForProp.all(n.prop).map(a=>[`${a.subject}\0${a.object}`,a])),o=new Set,r=e.cache?pL(e.cache,n.prop):null;for(let a of n.examples||[]){let c=`${a.subject}\0${a.object}`;o.add(c);let l=Object.keys(a).filter(f=>!Z$.has(f)),u=l.length?JSON.stringify(Object.fromEntries(l.map(f=>[f,a[f]]))):null,d=s.get(c);d&&(d.subject_label??null)===(a.subjectLabel??null)&&(d.object_label??null)===(a.objectLabel??null)&&(d.extra??null)===(u??null)||(e.upsertEdge.run(n.prop,a.subject,a.object,a.subjectLabel??null,a.objectLabel??null,u),r&&mL(r,a,l))}for(let a of s.keys()){if(o.has(a))continue;let[c,l]=a.split("\0");e.deleteEdge.run(n.prop,c,l)}r&&hL(r,o);let i=Number.isFinite(n.count)?n.count:(n.examples||[]).length;e.upsertRel.run(n.prop,t,n.predicate??null,i),Wp(e,`${ho}${n.prop}`),r&&(r.predicate=n.predicate??null,r.count=i)}function SL(e,t){fv(e).upsert.run(t.rowKey,t.rowClass,t.term,t.json,t.expiresAt??null)}function pv(e,t,n=null){for(let s of t){let o=n?.get(s.rowKey)||vL(s);if(!o){SL(e,s);continue}o.kind===tr?xL(e,o):EL(e,o)}}function mv(e,t){let n=new Set,s=new Set;for(let o of t){if(o.startsWith(ho)){let r=o.slice(ho.length);e.deleteGroupEdges.run(r),e.deleteRel.run(r),s.add(r)}else{let r=e.getFact.get(o);r&&(e.touchedGroups.add(r.triple_hash),e.touchedPairs.add(Lp(r.subject,r.predicate))),e.deleteInd.run(o),e.deleteFact.run(o),n.add(o)}Wp(e,o)}e.cache&&n.size&&fL(e.cache,n),e.cache&&s.size&&gL(e.cache,s)}function Sp(e,t,n){if(!e.touchedGroups.size)return;let s=sm(t);Q$(e.db,s,e.touchedGroups,n),KN(e.db,s,e.touchedPairs)}function jL(e,t){let n=e.db,s=fs(),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=Cn(t.generated_at??s.generated_at),o.memory=Cn(t.memory??s.memory),o.prefixes=Cn(t.prefixes??s.prefixes),o.vocabulary=Cn(t.vocabulary??s.vocabulary),o.classes=Cn(t.classes??s.classes),o.proseIndex=Cn(t.proseIndex??s.proseIndex));let i=dv(e,{cache:o}),a=uv(e),{rows:c,partsByKey:l}=$L(t,a),{puts:u,deletes:d}=up(a,c);pv(i,u,l),mv(i,d),Sp(i,t,e.cachedFactHeads),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}function Gp(e){if(!e.prepare(Bp).get(go))return[];let t=Math.floor(Date.now()/1e3),n=[];for(let s of e.prepare(`SELECT row_key, row_class, term, json, expires_at FROM ${go}`).all()){if(s.expires_at!==null&&s.expires_at<=t)continue;let o={rowKey:s.row_key,rowClass:s.row_class,term:s.term,json:s.json};s.expires_at!==null&&(o.expiresAt=s.expires_at),n.push(o)}return n}function F$(e,t){let n=e.db;n.exec("BEGIN IMMEDIATE");try{t(dv(e)),n.exec("COMMIT")}catch(s){throw n.exec("ROLLBACK"),s}finally{e.cachedPayload=null,e.cachedFactHeads=null}}function RL(e){return Object.assign(e,{async readRows(){return[...uv(e),...Gp(e.db)]},async readRowsByTerm(t){return(await e.readRows()).filter(n=>n.term===t)},async putRows(t){let n=(t||[]).map(s=>ta(s));n.length&&F$(e,s=>{pv(s,n),Sp(s,yl(e),null)})},async deleteRows(t){let n=[...t||[]];n.length&&F$(e,s=>{mv(s,n),Sp(s,yl(e),null)})},async readMeta(t){let n=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(t);return n?n.v:null},async putMeta(t,n){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(t,String(n)),e.cachedPayload=null,e.cachedFactHeads=null},async deleteAll(){let t=e.db;t.exec("BEGIN IMMEDIATE");try{for(let n of kL)t.exec(`DELETE FROM ${n}`);t.prepare(Bp).get(go)&&t.exec(`DELETE FROM ${go}`),t.exec("COMMIT")}catch(n){throw t.exec("ROLLBACK"),n}finally{e.cachedPayload=null,e.cachedFactHeads=null}},async close(){El(e)}})}function _L(e){let t=null,n=!1,s=()=>{if(n)throw new Yo("this row backend was closed and can no longer be used");return t=t||Pp(e),t},o=r=>async(...i)=>(await s())[r](...i);return{kind:Jr,contractVersion:1,readRows:o("readRows"),readRowsByTerm:o("readRowsByTerm"),putRows:o("putRows"),deleteRows:o("deleteRows"),readMeta:o("readMeta"),putMeta:o("putMeta"),deleteAll:o("deleteAll"),async close(){let r=t?await t:null;n=!0,r&&El(r)}}}async function hv(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await Er(n,t),await Ba(n,e)}async function Sl(e,t){await hv(e,JSON.stringify(t))}async function AL(e,{retentionVersions:t}={}){if(vl(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a store handle has no on-disk graph.json to snapshot");let n=aa(e),s;try{s=await Oe(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=TL(e),r;try{r=JSON.parse(await Oe(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??jp}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??jp);let i=r.version,a=aa(e,i);await Xn($e(a),{recursive:!0}),await hv(a,s),r.version=i+1;let c=null,l=i-r.retentionVersions;if(l>=0)try{await qu(aa(e,l)),c=l}catch(u){if(u?.code!=="ENOENT")throw u}return await Sl(o,r),{skipped:!1,version:i,prunedVersion:c}}async function mt(e){if(nr(e))return Zo(e.payload);if(hs(e))return Zo(uL(e));if(Nn(e))return QN(e);let t;try{t=await Oe($p(e),"utf8")}catch(n){if(n?.code==="ENOENT")return fs();throw n}return Zo(JSON.parse(t))}function OL(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==tt||!CL.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Wo(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 IL(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(c=>c?.prop===On),n=new Map;for(let c of t?.examples||[]){if(!c?.subject)continue;let l=n.get(c.subject);l?l.push(c):n.set(c.subject,[c])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let c of e.individuals){if(c?.class!==tt||String(c.id||"").includes("@")){a.push(c);continue}let l=w=>(c.attributes||[]).find(x=>x?.prop===w)?.value||"",u=l("rdf:subject"),d=l("rdf:predicate"),p=l("rdf:object");if(!u||!d||!p){a.push(c);continue}let f=Wo(u,d,p),m=l(ut),h=l("mgx:factProvenance"),b=n.get(c.id)||[],g=h?K$(h):[];for(let w of b)g.some(x=>x.sourceId===w.object)||g.push({sourceId:w.object,sourceType:"",tags:[]});g.length||g.push({sourceId:Ds,sourceType:"",tags:[]});let $=[];for(let w of g){let x={id:`${f}@${w.sourceId}`,label:c.label,class:tt,derived_from:Cn(c.derived_from)||[],mentions:Cn(c.mentions)||[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:u},{prop:"rdf:predicate",key:"predicate",value:d},{prop:"rdf:object",key:"object",value:p},{prop:ut,key:"createdAt",value:ni(w.tags,m,Math.min)||m||zs()},{prop:er,key:"sourceId",value:w.sourceId},...w.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.tags.join(" | ")}]:[],...l("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:l("mgx:hasProseTokens")}]:[],...l("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:l("mgx:factQuantifier")}]:[],...w.sourceType==="entailed"&&l("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:l("mgx:factJustification")}]:[]]};if(a.push(x),r.push(x),$.push(x.id),w.sourceId!==Ds){let R=b.find(E=>E?.object===w.sourceId);i.push({...R||{},subject:x.id,object:w.sourceId,subjectLabel:x.label,objectLabel:Yp(w.sourceId)})}}s.add(c.id),o.set(c.id,$)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(c=>!s.has(c?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:On,count:i.length,examples:i}));for(let c of e.objectProperties||[]){if(c?.prop===On||!c?.examples?.length)continue;let l=[];for(let u of c.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],p=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let f of d)for(let m of p)l.push({...u,subject:f,object:m})}c.examples=l,c.count=l.length}e.individuals=a,yv(e);for(let c of r)ei(e,c);return gs(e),e}async function NL(e,t){if(nr(e)){e.payload=t;return}if(hs(e)){jL(e,t);return}if(Nn(e)){await tL(e,t);return}await Xn($e($p(e)),{recursive:!0}),await Sl($p(e),t)}async function LL(e){if(nr(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(hs(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(bv);return t?.v?JSON.parse(t.v):null}if(Nn(e))return bl(e,sv,null);try{return JSON.parse(await Oe(ne(e,Vp),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function PL(e,t){if(nr(e)){e.syllogiseState=structuredClone(t);return}if(hs(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(bv,JSON.stringify(t));return}if(Nn(e)){await e.impl.putMeta(sv,JSON.stringify(t));return}let n=ne(e,Vp);await Xn($e(n),{recursive:!0}),await Sl(n,t)}async function ML(e){if(nr(e))return e.nodeId||null;if(hs(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(wv);return t?.v&&JSON.parse(t.v).nodeId||null}if(Nn(e))return(await bl(e,ov,null))?.nodeId||null;try{return JSON.parse(await Oe(ne(e,Kp),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function FL(e,t){if(nr(e)){e.nodeId=t;return}if(hs(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(wv,JSON.stringify({nodeId:t}));return}if(Nn(e)){await e.impl.putMeta(ov,JSON.stringify({nodeId:t}));return}let n=ne(e,Kp);await Xn($e(n),{recursive:!0}),await Sl(n,{nodeId:t})}function yv(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===us&&n.set(a.id,a),a.class===Ht&&Rp(r,a),a.class===tt)){let c=Zt(a.id),l=o.get(c);l?l.push(a.id):o.set(c,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===On);for(let a of i?.examples||[]){if(!a?.subject)continue;let c=s.get(a.subject);c?c.push(a.object):s.set(a.subject,[a.object])}return e[kp]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[kp]}function Rp(e,t){let n=Zt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function DL(e,t){let n=en(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===Ht&&Zt(s.id)===t)}async function Us(e,t){let n=Nn(e),s=n?ZN(await Fp(e)):await mt(e);try{yv(s);let o=await t(s)??s;return GL(o),KL(o),n||(o.proseIndex=Xa(o.individuals)),await NL(e,o),n?e.cachedPayload:o}catch(o){throw rv(e),o}}function Hp(e,t){return e?.attributes?.find(n=>n?.prop===ut)?.value||t||zs()}function In(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function qp(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${ml}:${e.sessionId}`:ml,type:"operator"};case"teach":return{id:e.sessionId?`${yp}:${e.sessionId}`:yp,type:"teach"};case"teachNode":return{id:`${B$}:${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:${Wi(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 zL(e){return sd[e]||null}function BL(e,t,n){let s=qp(t);if(!s)return null;let o=en(e),r=o?o.individualsById.get(s.id):e.individuals.find(l=>l?.id===s.id),i=Hp(r,t?.createdAt||n),a={id:s.id,label:Yp(s.id),class:us,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:ut,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},c=Bs(e,a);return o&&o.sourcesById.set(s.id,c),s.id}function kl(e){let t=en(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===us&&(n[s.id]=s);return n}function $v(e,t){let n=en(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===On)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function UL(e,t,n=Date.now(),s={}){let o=$v(e,t.id),r=(t.attributes||[]).find(c=>c?.prop===ut)?.value||"",{score:i,inputs:a}=Bg({sourceIds:o,createdAt:r},kl(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});In(t,Tr,"trustScore",String(i)),In(t,Ja,"trustInputs",JSON.stringify(a)),In(t,js,"updatedAt",new Date(n).toISOString())}function WL(e,t,n=Date.now(),s={}){let[o]=$v(e,t.id),r=o?kl(e)[o]:null,i=(r?.attributes||[]).find(l=>l?.prop==="mgx:sourceType")?.value||"",a=Qa(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let l=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*l))}let c=(t.attributes||[]).find(l=>l?.prop===ut)?.value||"";In(t,Tr,"trustScore",String(a)),In(t,Ja,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:c})),In(t,js,"updatedAt",new Date(n).toISOString())}function vv(e,t,n,s){t?.class===tt?WL(e,t,n,s):UL(e,t,n,s)}function ei(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===ut)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Un(i);if(!a)continue;let c=BL(e,a,r);c&&$l(e,{predicate:"statedBy",prop:On},{subject:t.id,object:c,subjectLabel:t.label,objectLabel:Yp(c)})}vv(e,t,n,s)}function GL(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===On),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==tt||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(ei(e,r,o),s=!0);s&&gs(e)}function KL(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=wt(e),n=new Set;for(let a of Ov(e,{factRows:t}))for(let c of a)n.add(c.id);let s=new Map;for(let a of t)for(let c of a.sourceIds){if(!VL(c))continue;let l=s.get(c)||{factsAsserted:0,factsContradicted:0};l.factsAsserted+=1,n.has(a.id)&&(l.factsContradicted+=1),s.set(c,l)}if(!s.size)return;let o=en(e);for(let[a,c]of s){let l=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);l&&(In(l,z$,"sourceReliability",String(Wg(c))),In(l,js,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===On),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let c=o?o.individualsById.get(a):e.individuals.find(l=>l?.id===a);c&&vv(e,c)}}function HL(e,t,n){if(!Uc(n?.id))return n;let s=Yi(n.id);if(!s)return Hf(t,n);let o=kl(e);return Hf(t,n,{priorFor:r=>Qa(s,o[r])})}function D$(e,t,n){return n?.class===Ht?m$(t,n):HL(e,t,n)}function Bs(e,t){let n=en(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,D$(e,o,t)),o.class===Ht&&Rp(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===Ht&&Rp(n.retractionsByGroup,t),t.class===tt){let r=Zt(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]=D$(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function $l(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(c=>c?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===On?en(e):null;if(r){let c=r.statedByBySubject.get(s.subject);if(!c||!c.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||zs()}),o.count=o.examples.length,c?c.push(s.object):r.statedByBySubject.set(s.subject,[s.object]);return}}let a=(o.examples||[]).find(c=>c?.subject===s.subject&&c?.object===s.object)?.createdAt||s.createdAt||zs();if(o.examples=(o.examples||[]).filter(c=>!(c?.subject===s.subject&&c?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r){let c=r.statedByBySubject.get(s.subject)||[];c.includes(s.object)||c.push(s.object),r.statedByBySubject.set(s.subject,c)}}function gs(e){let t=[Xo,mo,tt,us,ds];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 qL(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:Xo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:ut,key:"createdAt",value:n||zs()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Ev(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:c=""}){if(!PN.has(t))throw new Error(`utterance role must be "visitor" or "tmct", got ${JSON.stringify(t)}`);if(!o)throw new Error("utterance needs a sessionId");let l=String(s||""),u=os(n),d=`utt:${o}#${l}#${t}`,p=jl(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),f=Ya({doc:u}),m=e.individuals.find($=>$?.id===d),h=Hp(m,c||l),b={id:d,label:p,class:mo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:utteranceRole",key:"role",value:t},{prop:"mgx:utteranceText",key:"text",value:u},{prop:"mgx:utteranceTs",key:"ts",value:l},{prop:ut,key:"createdAt",value:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...f.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:f.join(" ")}]:[]]};Bs(e,b);let g=qL(e,o,r);if($l(e,{predicate:"saidInSession",prop:Tp},{subject:d,object:g,subjectLabel:p,objectLabel:String(o).slice(0,8)}),a){let $=e.individuals.find(w=>w?.id===a);$&&$l(e,{predicate:"inReplyTo",prop:Ap},{subject:d,object:a,subjectLabel:p,objectLabel:$.label})}return l&&l>String(e.generated_at||"")&&(e.generated_at=l),d}async function YL(e,t){let n;return await Us(e,s=>{n=Ev(s,t),gs(s)}),{id:n}}async function xv(e,t){let n=[];return t?.length?(await Us(e,s=>{for(let o of t)n.push(Ev(s,o));gs(s)}),{ids:n}):{ids:n}}async function XL(e,t){t?.length&&await Us(e,n=>{for(let s of t)for(let o of sr(n,s.factId))$l(n,{predicate:"canonicalisedFrom",prop:Cp},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function sr(e,t){let n=en(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===tt&&Zt(s.id)===t).map(s=>s.id)}function Sv(e,t,n,s=""){let o=K$(n);if(o.length===1&&o[0].sourceId===Ds&&sr(e,t).length)return[];let r=DL(e,t);if(r.length&&(o=o.filter(a=>!qc(r,`${t}@${a.sourceId}`,ni(a.tags,s))),!o.length))return o;let i=JL(e,t);return i.length?o.filter(a=>!u$(i,a.sourceId)):o}function JL(e,t){let n=en(e),s=n?n.factRecordsByGroup.get(t):sr(e,t),o=[];for(let r of s||[]){if(!po(r))continue;let i=bo(e,r);i&&o.push(i)}return o}function jv(e,t,{quantifier:n,environments:s}){let o=sr(e,t).map(i=>bo(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===ua)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(c=>c?.prop==="mgx:factJustification"));for(let a of i.length?i:o)In(a,"mgx:factJustification","justification",s.map(c=>c.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(In(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function QL(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===hl)?.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 Xp(e){if(!Array.isArray(e))return[];let t=new Set;for(let n of e){let s=os(n);s&&t.add(s)}return[...t].sort()}function kv(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:c,createdAt:l,observedAt:u,quantifier:d,environments:p,extraction:f=[]}=t,m=`${n}@${c.sourceId}`,h=en(e),b=h?h.individualsById.get(m):e.individuals.find(T=>T?.id===m),g=T=>(b?.attributes||[]).find(C=>C?.prop===T)?.value||"",$=g("mgx:factProvenance").split(" | ").filter(Boolean),w={assertedAt:vp(c.tags),observedAt:u},x=null,R=c.tags,E=w.assertedAt||l||zs(),k=u,O=[],S=d,_=f;if(b){let T={assertedAt:vp($),observedAt:g(ca)};zN(w,T)?(x={head:b,id:`${m}#v${QL(b)}`},O=[x.id]):(R=[...new Set([...$,...c.tags])],E=g(ut)||E,k=u||g(ca),O=g(hl).split(" ").filter(Boolean),_=Xp([...g(gl).split(" "),...f])),S=d||g("mgx:factQuantifier")}return{candidate:{id:m,label:i,class:tt,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:ut,key:"createdAt",value:E},{prop:er,key:"sourceId",value:c.sourceId},...R.length?[{prop:"mgx:factProvenance",key:"provenance",value:R.join(" | ")}]:[],...k?[{prop:ca,key:"observedAt",value:k}]:[],..._.length?[{prop:gl,key:"extraction",value:_.join(" ")}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...S?[{prop:"mgx:factQuantifier",key:"quantifier",value:S}]:[],...p?[{prop:"mgx:factJustification",key:"justification",value:p.map(T=>T.join(" ")).join(" | ")}]:[],...O.length?[{prop:hl,key:"supersedes",value:O.join(" ")}]:[]]},demote:x}}function ZL(e,t){let n=`${t}@${Ds}`,s=en(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 Rv(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${Ds}`)||ZL(e,Zt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};In(o,ua,"supersededBy",t.id),Bs(e,o),s.push(o.id)}return Bs(e,t),s.push(t.id),s}function bo(e,t){let n=en(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Jp(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=en(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Zt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function _v(e,t){let n=en(e),s=(n?n.factRecordsByGroup.get(t):sr(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=bo(e,u);if(!d)continue;let p=$=>(d.attributes||[]).find(w=>w?.prop===$)?.value||"";if(po(u)){i.set(Yi(u),d);continue}if(Xr(u)){a.set(p(er),d);continue}let f=p("mgx:factProvenance"),m=G$(f),h=f.split(" | ").filter(Boolean),b={id:u,sourceId:p(er)||m.id,assertedAt:ni(h,p(ut)),record:d};if(p(ua)){let $=r.get(b.sourceId);$?$.push(b):r.set(b.sourceId,[b]);continue}if(!m.type)continue;let g=o.get(m.type);g?g.push(b):o.set(m.type,[b])}let c=kl(e),l=[];for(let[u,d]of o){let p=c$({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:f=>Qa(u,c[f])});if(p){Bs(e,p.rollup),l.push(...p.absorbed);for(let f of p.absorbedSourceIds){for(let h of r.get(f)||[])l.push(h.id);r.delete(f);let m=a.get(f);m&&l.push(m.id),a.delete(f)}}}for(let[u,d]of r){let p=l$({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!p)continue;Bs(e,p.rollup),l.push(...p.absorbed);let f=bo(e,p.rewire);f&&In(f,hl,"supersedes",p.rollup.id)}return l}async function e0(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",extraction:c,premiseTrusts:l,ruleConfidence:u}={}){let d=V(t),p=rs(n),f=V(s);if(!d||!p||!f)throw new Error("a fact needs subject, predicate and object");let m=Wo(d,p,f),h=`${d} ${p} ${f}`,b=Ya({doc:h}),g=os(a),$=Xp(c);return await Us(e,async w=>{let x=Sv(w,m,os(o),r);for(let R of x.length?[]:jv(w,m,{quantifier:g}))ei(w,bo(w,R),void 0,{premiseTrusts:l,ruleConfidence:u});for(let R of x){let E=kv(w,{groupId:m,s:d,p,o:f,label:jl(h),tokens:b,group:R,createdAt:r,observedAt:i,quantifier:g,extraction:$});await op(E.candidate);for(let k of Rv(w,E))ei(w,bo(w,k),void 0,k===E.candidate.id?{premiseTrusts:l,ruleConfidence:u}:void 0)}Jp(w,_v(w,m)),gs(w)}),{id:m}}function t0(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 Kn(e,t){let n=[],s=0;for(let r of t||[]){let i=V(r?.subject),a=rs(r?.predicate),c=V(r?.object);if(!i||!a||!c){s+=1;continue}let l=`${i} ${a} ${c}`;n.push({id:Wo(i,a,c),s:i,p:a,o:c,text:l,tokens:Ya({doc:l}),provenance:os(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:os(r?.quantifier),extraction:Xp(r?.extraction),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:t0(r?.justification)})}let o=[];return n.length?(await Us(e,r=>{let i=[],a=new Set,c=new Map;for(let u of n){let d=Sv(r,u.id,u.provenance,u.createdAt);for(let p of d.length?[]:jv(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(p)||(a.add(p),i.push(p)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(p,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let p of d){let f=kv(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:jl(u.text),tokens:u.tokens,group:p,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments,extraction:u.extraction});for(let m of Rv(r,f))a.has(m)||(a.add(m),i.push(m));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&c.set(f.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)ei(r,bo(r,u),void 0,c.get(u));let l=[];for(let u of new Set(o))l.push(..._v(r,u));Jp(r,l),gs(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function Tl(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=Tv[n];if(!i)throw new Error(`a rule kind must be one of ${n0.join(", ")}, got ${JSON.stringify(n)}`);let a=V(t);if(!a)throw new Error("a rule needs a name");let c=s0[n]||new Set,l=i.map(([f])=>V(s?.[f])),u=i.filter(([f],m)=>!c.has(f)&&!l[m]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([f])=>f).join(" + ")}`);if(n===pa){let f=l[i.findIndex(([h])=>h==="objectRole")],m=l[i.findIndex(([h])=>h==="value")];if(!f&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=o0(n,a,l),p=jl(`${a} = ${n}(${l.join(", ")})`);return await Us(e,async f=>{let m=f.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",b=[...new Set([...h.split(" | "),os(o)].filter(Boolean))],g=Hp(m,r),$={id:d,label:p,class:ds,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:_l,key:"ruleName",value:a},{prop:si,key:"ruleKind",value:n},...i.map(([w,x],R)=>({prop:x,key:w,value:l[R],skip:!l[R]&&c.has(w)})).filter(w=>!w.skip).map(({skip:w,...x})=>x),{prop:ut,key:"createdAt",value:g},...b.length?[{prop:"mgx:factProvenance",key:"provenance",value:b.join(" | ")}]:[]]};await op($),Bs(f,$),ei(f,f.individuals.find(w=>w?.id===d)),gs(f)}),{id:d}}function tm(e,t){let n=V(t);return(e?.individuals||[]).find(s=>s?.class===ds&&(s.attributes||[]).find(o=>o?.prop===_l)?.value===n)}function r0(e,t){let n=V(t),s=o=>(o.attributes||[]).find(r=>r?.prop===si)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===ds&&(o.attributes||[]).find(r=>r?.prop===_l)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Al(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==ds)continue;let s=a=>(n.attributes||[]).find(c=>c?.prop===a)?.value,o=s(si),r=Tv[o];if(!r)continue;let i={};for(let[a,c]of r)i[a]=s(c)??"";t.push({id:n.id,name:s(_l)||"",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 nm(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:c,byTrust:l,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:p}=o,f=String(t||"").trim().toLowerCase(),m=c(V,n),h=c(V,s),b=r(f).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(b.length){let w=b.slice().sort((x,R)=>l(x.fact,R.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map(x=>`${a(x)}${x.provenance?` (source: ${x.provenance})`:""}`)]}}let g=tm(e,f),$=g?.attributes?.find(w=>w.prop===si)?.value;if(g&&$===da){let w=g.attributes.find(C=>C.prop==="mgx:ruleBase1")?.value,x=g.attributes.find(C=>C.prop==="mgx:ruleBase2")?.value,R=V(n),E=V(s);if(!w||!x||!R||!E)return null;let _=p({entity:R,hopsTaken:0},C=>C.hopsTaken===2&&C.entity===E,C=>{if(C.hopsTaken>=2)return[];let v=C.hopsTaken===0?w:x;return r(v).filter(j=>j.fact.subject===C.entity).map(j=>({action:j,nextState:{entity:j.fact.object,hopsTaken:C.hopsTaken+1}}))},{maxDepth:2,stateKey:C=>`${C.entity}#${C.hopsTaken}`});if(!_)return null;let y=new Set,T=[];for(let C of _.actions){T.push(i(C.fact));for(let v of C.aliasFacts){let j=v.id||`${v.subject}|${v.predicate}|${v.object}`;y.has(j)||(y.add(j),T.push(`${a(v)}${v.provenance?` (source: ${v.provenance})`:""}`))}}return{citation:T}}if(g&&$===fa){let w=g.attributes.find(S=>S.prop==="mgx:ruleBase1")?.value,x=g.attributes.find(S=>S.prop==="mgx:ruleFilterProperty")?.value;if(!w||!x)return null;let R=await nm(e,w,n,s,o);if(!R)return null;let E=V(n),k=V(x),O=u.find(S=>S.predicate===d&&S.subject===E&&V(S.object)===k);return O?{citation:[...R.citation,i(O)]}:null}return null}async function Av(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:c,rows:l,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,p=String(t||"").trim().toLowerCase(),f=a(V,n),m=o(p).filter(g=>f.has(g.fact.object));if(m.length){let g=new Map;for(let $ of m)g.has($.fact.subject)||g.set($.fact.subject,[]),g.get($.fact.subject).push($);return[...g.entries()].map(([$,w])=>{let x=w.slice().sort((R,E)=>c(R.fact,E.fact))[0];return{subject:$,citation:[r(x.fact),...x.aliasFacts.map(R=>`${i(R)}${R.provenance?` (source: ${R.provenance})`:""}`)]}})}let h=tm(e,p),b=h?.attributes?.find(g=>g.prop===si)?.value;if(h&&b===da){let g=h.attributes.find(k=>k.prop==="mgx:ruleBase1")?.value,$=h.attributes.find(k=>k.prop==="mgx:ruleBase2")?.value,w=V(n);return!g||!$||!w?[]:d({entity:w,hopsTaken:0},k=>{if(k.hopsTaken>=2)return[];let O=k.hopsTaken===0?$:g;return o(O).filter(S=>S.fact.object===k.entity).map(S=>({action:S,nextState:{entity:S.fact.subject,hopsTaken:k.hopsTaken+1}}))},{maxDepth:2,stateKey:k=>`${k.entity}#${k.hopsTaken}`}).filter(k=>k.node.hopsTaken===2).map(({node:k,path:O})=>{let S=new Set,_=[];for(let y of O.actions.slice().reverse()){_.push(r(y.fact));for(let T of y.aliasFacts){let C=T.id||`${T.subject}|${T.predicate}|${T.object}`;S.has(C)||(S.add(C),_.push(`${i(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{subject:k.entity,citation:_}})}if(h&&b===fa){let g=h.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,$=h.attributes.find(E=>E.prop==="mgx:ruleFilterProperty")?.value;if(!g||!$)return[];let w=await Av(e,g,n,s),x=V($),R=[];for(let E of w){let k=V(E.subject),O=l.find(S=>S.predicate===u&&S.subject===k&&V(S.object)===x);O&&R.push({subject:E.subject,citation:[...E.citation,r(O)]})}return R}return[]}function wt(e,t={}){let n=sm(e),s=J$(e),o=[];for(let[r,i]of n.groups){let a=om(r,i,n),c=s?.get(r);a.trust=Za(c?c.inputs:a.assertions,t).score,o.push(a)}return o}function sm(e){let t=e?.individuals||[],n=new Map(t.filter(c=>c?.class===us).map(c=>[c.id,c])),s=(e?.objectProperties||[]).find(c=>c?.prop===On),o=new Map;for(let c of s?.examples||[])o.has(c.subject)||o.set(c.subject,[]),o.get(c.subject).push(c.object);let r=new Map,i=new Map;for(let c of t){if(c?.class===Ht){let d=Zt(c.id),p=i.get(d);p?p.push(c):i.set(d,[c]);continue}if(c?.class!==tt||(c.attributes||[]).some(d=>d?.prop===ua)||Xr(c.id))continue;let l=Zt(c.id),u=r.get(l);u?u.push(c):r.set(l,[c])}for(let[c,l]of i){let u=r.get(c);if(!u)continue;let d=u.filter(p=>!qc(l,p.id,ni(ms(p,"mgx:factProvenance").split(" | ").filter(Boolean),ms(p,ut))));d.length!==u.length&&(d.length?r.set(c,d):r.delete(c))}let a=new Map;for(let[c,l]of r){l.sort((p,f)=>p.id<f.id?-1:p.id>f.id?1:0);let u=Lp(Zr(l[0],"subject"),Zr(l[0],"predicate")),d=a.get(u);d?d.push(c):a.set(u,[c])}return{groups:r,groupsByPair:a,statedByRecord:o,sourceTypeOf:c=>(n.get(c)?.attributes||[]).find(l=>l?.prop==="mgx:sourceType")?.value||""}}function om(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=ms,i=Zr,a=[],c=[],l=[],u=new Set,d=new Set,p=[],f=new Set,m="";for(let g of t){if(po(g.id)){let S=Yi(g.id),_=Wc(g);for(let y of _)c.includes(y)||(c.push(y),S&&l.push(S));a.push({id:g.id,sourceId:"",sourceType:S,provenance:"",createdAt:r(g,as),ownTrust:Number(r(g,Yr))||0,assertedAt:r(g,cs),rollup:{count:Number(r(g,qi))||_.length,sourceIds:_,earliest:r(g,as),latest:r(g,cs)}});continue}let $=r(g,"mgx:factProvenance").split(" | ").filter(Boolean);for(let S of $)u.add(S);let[w]=s.get(g.id)||[],x=w||r(g,er),R=o(x);w&&!c.includes(w)&&(c.push(w),R&&l.push(R));let E=r(g,ut),k=r(g,ca),O=r(g,gl).split(" ").filter(Boolean);for(let S of O)d.add(S);a.push({id:g.id,sourceId:x,sourceType:R,provenance:$.join(" | "),createdAt:E,...k?{observedAt:k}:{},...O.length?{extraction:O}:{},ownTrust:Number(r(g,Tr))||0,assertedAt:ni($,E)}),m=m||i(g,"quantifier");for(let S of i(g,"justification").split(" | ")){let _=S.split(" ").filter(Boolean);if(!_.length)continue;let y=_.join(" ");f.has(y)||(f.add(y),p.push(_))}}let h=[],b=new Set;for(let g of p)for(let $ of g)b.has($)||(b.add($),h.push($));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:m,sourceIds:c,sourceTypes:l,...d.size?{extraction:[...d].sort()}:{},environments:p,justification:h,assertions:a}}function i0(e){let t=ms(e,er);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 Cv(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||zs();return await Us(e,c=>{let l=new Set,u=new Set,d=new Map;c.individuals=(c.individuals||[]).filter(p=>{if(p?.class!==tt)return!0;let f=Zt(p.id),m=o.has(p.id)?p.id:o.has(f)?f:"";if(!m)return!0;u.add(m),l.add(p.id);let h=i0(p),b=`${f}\0${h}`,g=ms(p,"mgx:factProvenance"),$=d.get(b);return $?($.ids.push(p.id),g&&$.tags.push(g)):d.set(b,{groupId:f,sourceId:h,ids:[p.id],tags:g?[g]:[],template:{label:p.label||"",subject:ms(p,"rdf:subject"),predicate:ms(p,"rdf:predicate"),object:ms(p,"rdf:object")}}),!1});for(let p of u)r.push(p);if(r.length){for(let p of l)i.push(p);for(let p of c.objectProperties||[]){let f=p.examples||[];p.examples=f.filter(m=>!l.has(m?.subject)&&!l.has(m?.object)),p.count=p.examples.length}for(let p of d.values()){let f=p$({groupId:p.groupId,sourceId:p.sourceId,recordIds:p.ids,retractedAt:a,template:p.template,provenance:[...p.tags,n].filter(Boolean).join(" | ")});f&&Bs(c,f)}gs(c)}}),{removed:r,records:i}}function a0(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==Ht)continue;let s=Yc(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function c0(e,t){let n=[];for(let o of t||[]){let r=Xc(o);r&&n.push(r)}let s=[];return n.length?(await Us(e,o=>{let r=new Map;for(let a of n){let c=Bs(o,a),l=Zt(c.id),u=r.get(l);u?u.push(c):r.set(l,[c])}let i=new Set;for(let[a,c]of r)for(let l of sr(o,a)){let u=bo(o,l);if(!u)continue;let d=ms(u,"mgx:factProvenance").split(" | ").filter(Boolean);qc(c,l,ni(d,ms(u,ut)))&&i.add(l)}if(i.size){Jp(o,i);for(let a of i)s.push(a)}gs(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function l0(e,{self:t="",acknowledgedBy:n=null}={}){let s=Jc(wt(e)),o=[];for(let r of e?.individuals||[])r?.class===Ht&&r.id&&o.push(r.id);return{roster:s,retirable:Qc({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function u0(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Us(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==Ht||!n.has(a.id)?!0:(r.add(a.id),!1)),!r.size)return;for(let a of r)s.push(a);let i=en(o);if(i)for(let a of r){i.individualsById.delete(a);let c=Zt(a),l=(i.retractionsByGroup.get(c)||[]).filter(u=>!r.has(u.id));l.length?i.retractionsByGroup.set(c,l):i.retractionsByGroup.delete(c)}gs(o)}),{retired:s}):{retired:s}}function Ov(e,{floor:t=d0,factRows:n=null}={}){let s=(n||wt(e)).filter(i=>i.trust>=t),o=new Map;for(let i of s){if(Dc(i.predicate)===Ff)continue;let a=`${i.subject} ${i.predicate}`;o.has(a)||o.set(a,[]),o.get(a).push(i)}let r=[];for(let i of o.values()){if(new Set(i.map(c=>c.object)).size<2)continue;let a=Dc(i[0].predicate);a!==Df&&!Bf(i,a).contested||r.push(i.slice().sort((c,l)=>l.trust-c.trust||c.object.localeCompare(l.object)))}return r.sort((i,a)=>`${i[0].subject} ${i[0].predicate}`.localeCompare(`${a[0].subject} ${a[0].predicate}`))}var ti,_p,mo,tt,Xo,us,ds,Tp,Ap,LN,On,Cp,z$,ml,yp,B$,PN,N$,MN,$p,Op,Ip,U$,FN,Ds,ca,er,hl,ua,gl,q$,ms,Zr,Lp,Y$,J$,WN,Z$,L$,tv,nv,sv,ov,Cn,tr,ho,zp,go,bL,Bp,Up,wL,kL,gv,jp,TL,Zo,CL,Vp,bv,Kp,wv,kp,en,jl,zs,Yp,VL,da,fa,Qp,Zp,Rl,pa,em,n0,_l,si,Tv,s0,o0,d0,oi,f0,p0,We=P(()=>{Pt();Qe();Bn();Ze();Ze();Wn();Qy();Wn();Fc();qf();ep();sp();rp();na();na();dp();qf();ep();sp();rp();ti=ne(".tmct","memory"),_p=ne(ti,"graph.json"),mo="Utterance",tt="Fact",Xo="Session",us="Source",ds="Rule",Tp="mgx:saidInSession",Ap="mgx:inReplyTo",LN="mgx:derivedFrom",On="mgx:statedBy",Cp="mgx:canonicalisedFrom",z$="mgx:sourceReliability",ml="src:operator-chat",yp="src:teach-chat",B$="src:teach-node",PN=new Set(["visitor","tmct"]),N$=48,MN=[{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:Tp,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Ap,predicate:"inReplyTo",note:"tmct Utterance \u2192 the visitor Utterance it answers (the Q/A pairing)"},{prop:"rdf:subject",note:"reified fact: the triple's subject term"},{prop:"rdf:predicate",note:"reified fact: the triple's predicate term"},{prop:"rdf:object",note:"reified fact: the triple's object term"},{prop:"mgx:factProvenance",note:"LEGACY COMPAT SHIM: the ' | '-joined provenance tag string a fact came from; the source-of-truth is now the mgx:statedBy edges derived from it"},{prop:"mgx:sourceId",note:"the assertion key a Fact record is filed under \u2014 the Source id of the ONE party asserting it, which is also the @-suffix of the record's own id. `src:none` when no tag names a Source, so every record has a key rather than a hole"},{prop:"mgx:observedAt",note:"OPTIONAL valid time: when the asserting party WITNESSED the claim, as against mgx:createdAt's transaction time (when this store recorded it). A stale article read today loses to an eyewitness report from yesterday. Stored only when a caller supplies one \u2014 never fabricated, never backfilled"},{prop:"mgx:extractionFinding",note:"OPTIONAL: the space-joined structural findings the extractor recorded about how THIS assertion's sentence was read, from the closed vocabulary identifier-token | clause-fallback | pronoun-carry | definitional-frame. Per assertion, never per triple: a later clean re-assertion of the same triple carries none. Absence means no findings were recorded, never that the sentence was checked and read cleanly"},{prop:"mgx:supersedes",note:"the record id(s) this one replaced when its own source re-asserted the triple with a newer embedded timestamp. A space-joined LIST; absent, never empty, until the first supersession"},{prop:"mgx:supersededBy",note:"the record id(s) that replaced this one. Its presence is what makes a record a demoted leaf rather than a live head, and the group fold skips it: a source's past belief is not a second vote for the present one. A LIST, because one source with two live replicas can fork before they sync"},{prop:"mgx:factQuantifier",note:"OPTIONAL: the quantifier word a plural class-membership teach used ('every'/'some'/'a few'), for literal recall by 'how many Xs are Ys' \u2014 never real cardinality counting"},{prop:"mgx:factJustification",note:"an entailed Fact's supporting premise fact ids: ' | '-separated environments, one space-separated premise-id list per independent derivation, capped by syllogise's maxEnvironments knob; a value with no ' | ' is a single environment"},{prop:"mgx:ruleName",note:"a taught Rule's own name (e.g. 'grandparent') \u2014 the query-dispatcher's lookup key, PLAN_TAUGHT_RELATIONS.md \xA72/\xA73"},{prop:"mgx:ruleKind",note:"a taught Rule's SHAPE tag \u2014 the closed vocabulary compose2 | filter | recursive (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:ut,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:js,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:LN,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:On,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Cp,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:Tr,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:Ja,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:Nc,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)"}];$p=e=>aa(e),Op="memory",Ip="sqlite",U$="row";FN=`
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,93 +143,93 @@ 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
- `,Ds="src:none",aa="mgx:observedAt",Zo="mgx:sourceId",hl="mgx:supersedes",la="mgx:supersededBy",gl="mgx:extractionFinding";H$="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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";fs=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Qr=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Lp=(e,t)=>`${e}\0${t}`;q$=Symbol("materialised fact_heads index");X$=e=>e?.[q$]||null,WN="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";Q$=new Set(["subject","object","subjectLabel","objectLabel"]),N$=!1;ev="memory",tv="prefixes",nv="syllogiseState",sv="nodeId";Cn=e=>e===void 0?e:structuredClone(e);er="edge-group",ho="edge-group:",Dp=new Map([[tt,"fact"],[cs,"source"],[mo,"utterance"],[Xo,"session"],[ls,"rule"],[Ht,"retraction"]]),go="unmapped_rows",gL=`CREATE TABLE IF NOT EXISTS ${go} (
146
+ `,Ds="src:none",ca="mgx:observedAt",er="mgx:sourceId",hl="mgx:supersedes",ua="mgx:supersededBy",gl="mgx:extractionFinding";q$="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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";ms=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Zr=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Lp=(e,t)=>`${e}\0${t}`;Y$=Symbol("materialised fact_heads index");J$=e=>e?.[Y$]||null,WN="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";Z$=new Set(["subject","object","subjectLabel","objectLabel"]),L$=!1;tv="memory",nv="prefixes",sv="syllogiseState",ov="nodeId";Cn=e=>e===void 0?e:structuredClone(e);tr="edge-group",ho="edge-group:",zp=new Map([[tt,"fact"],[us,"source"],[mo,"utterance"],[Xo,"session"],[ds,"rule"],[Ht,"retraction"]]),go="unmapped_rows",bL=`CREATE TABLE IF NOT EXISTS ${go} (
147
147
  row_key TEXT PRIMARY KEY, row_class TEXT NOT NULL, term TEXT NOT NULL, json TEXT NOT NULL, expires_at INTEGER
148
- )`,zp="SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?",Bp=(e,t)=>`{"ord":${e},"individual":${t}}`,bL=/^\{"ord":(-?\d+),/;jL=Object.freeze(["meta","individuals","relations","edges","facts","fact_heads","fact_object_supersessions"]);hv=ne(ei,"manifest.json"),jp=5,_L=e=>ne(e,hv);pl=e=>OL(CL(e)),AL=/^fact:[0-9a-f]{8}$/;Gp=ne(ei,"syllogise-state.json"),gv="syllogiseState";Vp=ne(ei,"node-id.json"),bv="nodeId";kp=Symbol("mutateMemory lookup index");en=e=>e?.[kp]||null;jl=e=>e.length>I$?e.slice(0,I$-1)+"\u2026":e,zs=()=>new Date().toISOString();qp=e=>String(e).replace(/^src:/,"");GL=e=>typeof e=="string"&&(e.startsWith(`${ml}:`)||e.startsWith(`${yp}:`)||e.startsWith(`${z$}:`));ua="compose2",da="filter",Jp="recursive",Qp="action-signature",Rl="action-precond",fa="action-effect",Zp="action-constraint",e0=Object.freeze([ua,da,Jp,Qp,Rl,fa,Zp]),_l="mgx:ruleName",ni="mgx:ruleKind",Tv={[ua]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[da]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Jp]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[Qp]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Rl]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[fa]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[Zp]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},t0={[Rl]:new Set(["value","negate"]),[fa]:new Set(["objectRole","value"])},n0=(e,t,n)=>`rule:${Ui([e,t,...n].join("\0"))}`;l0=.5,si="mgx:hasA",u0="mgx:capableOf",d0=zf});async function Nn(e,t=null){try{if(t)return wt(await mt(t));let{dir:n,close:s}=await wo($e($e(e.graphFile)));try{return wt(await mt(n))}finally{await s()}}catch{return[]}}function Nv(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 Cl(e,t){let n=V(t),s=e.filter(a=>Iv.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,sr),i=o.length>sr?`
149
- \u2026+${o.length-sr} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
148
+ )`,Bp="SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?",Up=(e,t)=>`{"ord":${e},"individual":${t}}`,wL=/^\{"ord":(-?\d+),/;kL=Object.freeze(["meta","individuals","relations","edges","facts","fact_heads","fact_object_supersessions"]);gv=ne(ti,"manifest.json"),jp=5,TL=e=>ne(e,gv);Zo=e=>IL(OL(e)),CL=/^fact:[0-9a-f]{8}$/;Vp=ne(ti,"syllogise-state.json"),bv="syllogiseState";Kp=ne(ti,"node-id.json"),wv="nodeId";kp=Symbol("mutateMemory lookup index");en=e=>e?.[kp]||null;jl=e=>e.length>N$?e.slice(0,N$-1)+"\u2026":e,zs=()=>new Date().toISOString();Yp=e=>String(e).replace(/^src:/,"");VL=e=>typeof e=="string"&&(e.startsWith(`${ml}:`)||e.startsWith(`${yp}:`)||e.startsWith(`${B$}:`));da="compose2",fa="filter",Qp="recursive",Zp="action-signature",Rl="action-precond",pa="action-effect",em="action-constraint",n0=Object.freeze([da,fa,Qp,Zp,Rl,pa,em]),_l="mgx:ruleName",si="mgx:ruleKind",Tv={[da]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[fa]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Qp]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[Zp]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Rl]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[pa]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[em]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},s0={[Rl]:new Set(["value","negate"]),[pa]:new Set(["objectRole","value"])},o0=(e,t,n)=>`rule:${Wi([e,t,...n].join("\0"))}`;d0=.5,oi="mgx:hasA",f0="mgx:capableOf",p0=zf});async function Ln(e,t=null){try{if(t)return wt(await mt(t));let{dir:n,close:s}=await wo($e($e(e.graphFile)));try{return wt(await mt(n))}finally{await s()}}catch{return[]}}function Nv(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 Cl(e,t){let n=V(t),s=e.filter(a=>Iv.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,or),i=o.length>or?`
149
+ \u2026+${o.length-or} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
150
150
  ${r.join(`
151
151
  `)}${i}
152
- (${Nv(s)})`}function Ol(e,t){let n=V(t),s=e.filter(a=>Iv.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,sr).join(", ")}`),r.length){let a=r.length>sr?`, +${r.length-sr} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,sr).join(", ")}${a}`)}return i.push(`(${Nv(s)})`),i.join(`
153
- `)}var Iv,sr,or=P(()=>{Qe();We();Iv=new Set(["rdfs:subClassOf","rdf:type"]),sr=40});async function Lv(e,{graph:t,svc:n,config:s}){let o=pt(e,"symbol"),{match:r,candidates:i}=wn(n.graph,o);if(r)return pd(t,r,{candidates:i});let a=Ol(await Nn(s),o);if(a)return a;Ft(n,o,"symbol")}var Pv=P(()=>{Fe();or();ot()});async function Mv(e,{graph:t,svc:n,repoRoot:s}){let o=pt(e,"symbol"),{match:r,candidates:i}=Ft(n,o,"symbol"),a=Vt(r);if(!a)throw new Ne(`"${r.label}" (${r.class||"Entity"}) has no source span in the graph \u2014 it is likely a module. Use tmct_describe for its contents, then tmct_snippet one of the functions/classes it defines.`);let c;try{c=await Ms({readFile:Oe,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Bi})}catch(b){throw b instanceof Ne?b:new Ne(`could not read ${a.path} (${b?.code||b?.message||b})`)}let{text:l,truncated:u}=c,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,p=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,f=u?`
154
- \u2026 (truncated to ${Bi} lines; full span ${d})`:"",m=i.length?`
152
+ (${Nv(s)})`}function Ol(e,t){let n=V(t),s=e.filter(a=>Iv.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,or).join(", ")}`),r.length){let a=r.length>or?`, +${r.length-or} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,or).join(", ")}${a}`)}return i.push(`(${Nv(s)})`),i.join(`
153
+ `)}var Iv,or,rr=P(()=>{Qe();We();Iv=new Set(["rdfs:subClassOf","rdf:type"]),or=40});async function Lv(e,{graph:t,svc:n,config:s}){let o=pt(e,"symbol"),{match:r,candidates:i}=wn(n.graph,o);if(r)return pd(t,r,{candidates:i});let a=Ol(await Ln(s),o);if(a)return a;Ft(n,o,"symbol")}var Pv=P(()=>{Fe();rr();ot()});async function Mv(e,{graph:t,svc:n,repoRoot:s}){let o=pt(e,"symbol"),{match:r,candidates:i}=Ft(n,o,"symbol"),a=Vt(r);if(!a)throw new Ne(`"${r.label}" (${r.class||"Entity"}) has no source span in the graph \u2014 it is likely a module. Use tmct_describe for its contents, then tmct_snippet one of the functions/classes it defines.`);let c;try{c=await Ms({readFile:Oe,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Ui})}catch(b){throw b instanceof Ne?b:new Ne(`could not read ${a.path} (${b?.code||b?.message||b})`)}let{text:l,truncated:u}=c,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,p=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,f=u?`
154
+ \u2026 (truncated to ${Ui} lines; full span ${d})`:"",m=i.length?`
155
155
  (other matches: ${i.map(b=>b.label).join(", ")})`:"",h=gd(t,r);return`${p}
156
156
  ${l}${f}${h?`
157
- ${h}`:""}${m}`}var Fv=P(()=>{Pt();Xt();kc();Fe();ot()});var Dv,zv=P(()=>{Fe();ot();Dv=bt(gb)});function Bv(e,{graph:t,svc:n}){let{match:s}=Ft(n,pt(e,"module"),"module");return rb(t,s)}var Uv=P(()=>{Fe();ot()});async function Wv(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Ne("query is required");let r=mb(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=Ol(await Nn(n),s);if(i)return i}return r}var Gv=P(()=>{Xt();Fe();or()});async function Vv(e,{graph:t,svc:n,config:s}){let o=pt(e,"class"),{match:r}=wn(n.graph,o);if(r)return hb(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Cl(await Nn(s),o);if(i)return i;Ft(n,o,"class")}var Kv=P(()=>{Fe();or();ot()});async function Hv(e,{graph:t,svc:n,config:s}){let o=pt(e,"class"),{match:r}=wn(n.graph,o);if(r)return bb(t,r);let i=Cl(await Nn(s),o);if(i)return i;Ft(n,o,"class")}var qv=P(()=>{Fe();or();ot()});function Yv(e,{conceptBase:t="concept:",relationMap:n=p0}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=b=>{r.has(b)||r.set(b,b)},a=b=>{let g=b;for(;r.get(g)!==g;)g=r.get(g);for(;r.get(b)!==g;){let $=r.get(b);r.set(b,g),b=$}return g},c=(b,g)=>{let $=a(b),w=a(g);$!==w&&($<w?r.set(w,$):r.set($,w))},l=[];for(let b of e){let g=b.predicate;if(!s.has(g)&&!o.has(g))continue;let $=V(b.subject),w=V(b.object);!$||!w||(i($),i(w),s.has(g)?c($,w):l.push({s:$,o:w}))}let u=b=>t+b.replace(/ /g,"_"),d=new Map;for(let b of r.keys()){let g=a(b);d.has(g)||d.set(g,new Set),d.get(g).add(b)}let p=[];for(let[b,g]of d){let $=[...g].sort();p.push({id:u(b),prefLabel:b,altLabels:$.filter(w=>w!==b)})}p.sort((b,g)=>b.id<g.id?-1:b.id>g.id?1:0);let f=new Set,m=[];for(let{s:b,o:g}of l){let $=u(a(b)),w=u(a(g));if($===w)continue;let x=$<w?`${$}\0${w}`:`${w}\0${$}`;f.has(x)||(f.add(x),m.push({subject:$,object:w}))}return m.sort((b,g)=>`${b.subject}${b.object}`<`${g.subject}${g.object}`?-1:1),{concepts:p,related:m,conceptIdForTerm:b=>{let g=V(b);return r.has(g)?u(a(g)):null},namespace:f0}}function om(e,t,n={}){let s=Yv(e,n),o=s.conceptIdForTerm(t);if(!o)return null;let r=new Map(s.concepts.map(u=>[u.id,u])),i=r.get(o),a=V(t),c=[i.prefLabel,...i.altLabels].filter(u=>u!==a),l=s.related.filter(u=>u.subject===o||u.object===o).map(u=>r.get(u.subject===o?u.object:u.subject)).filter(Boolean);return{conceptId:o,prefLabel:i.prefLabel,altLabels:i.altLabels,synonyms:c,related:l}}var f0,p0,Il=P(()=>{Ze();f0="http://www.w3.org/2004/02/skos/core#",p0={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function rm(e,{config:t,memoryBackend:n=null}){let s=pt(e,"term"),o=om(await Nn(t,n),s);if(!o)throw new Ne(`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)"),uo({content:r.join(`
158
- `),data:o})}var Xv=P(()=>{Xt();Il();or();ot();rm.ownsGraphLoad=!0});function R0(e,t){let n=[];for(let s of t||[])s?.predicate===m0&&V(s.subject)===e&&n.push(V(s.object));return n}function Nl(e,t){let n=V(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of R0(i,t))s.has(a)||o.push(a)}}return r}var m0,h0,g0,b0,w0,y0,$0,v0,E0,x0,S0,j0,k0,Jv,im=P(()=>{Ze();m0="rdfs:subClassOf",h0='<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>',g0='<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>',b0='<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>',w0='<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>',y0='<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>',$0='<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>',v0='<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>',E0='<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>',x0='<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>',S0='<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>',j0='<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>',k0='<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>',Jv=Object.freeze({spider:h0,fly:g0,egg:b0,poodle:w0,dog:y0,animal:$0,room:v0,furniture:E0,portable:x0,person:S0,adventurer:j0,container:k0})});function _0(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function Qv(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of _0(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var Zv=P(()=>{});function T0(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function A0(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function sE(e){return A0(e).filter(t=>t?.property&&t.value!==void 0)}function C0(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function O0(e,t){let n=null,s=0;for(let o of e){let r=sE(o);r.length<=s||C0(r,t)&&(n=o,s=r.length)}return n}function I0(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 eE(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(c=>c.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,c.object));if(!i)continue;let a=I0(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function N0(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 tE(e,t){let n=t;for(let s of N0(e))n=n.split(s).join("");return n}function nE(e,t,n){let s=T0(e,n),o=O0(s,t);if(o&&!o.parameters)return o.svg;if(o)return tE(o,eE(o,t)||o.svg);for(let a of s){if(a.match||!a.parameters)continue;let c=eE(a,t);if(c)return c}let r=s.find(a=>!a.match&&!a.parameters);if(r)return r.svg;let i=s.find(a=>!a.match&&a.parameters);return i?tE(i,i.svg):null}function L0(e,t,n,s,o,r){for(let a of Nl(e,t)){let c=nE(a,n,s);if(c)return c;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=nE(r,n,s);return i||o[r]}function oE(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=L0(e,t,n,s,o,r);return i?Qv(a,i):a}var CV,OV,am=P(()=>{im();Zv();CV=Object.freeze(["left","half-left","half-right","right"]),OV=Object.freeze(["moving"])});function pa(e){for(let t of e||[])if(t?.predicate===P0&&Object.prototype.hasOwnProperty.call(rE,t.object))return rE[t.object];return 1}var P0,rE,cm=P(()=>{P0="mgx:hasProperty",rE=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function iE(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},c=a.resolveSpriteAsset;if(typeof c!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let l=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],p=a.rootFallback||"animal",f=a.classAncestorChain,m=a.sizeScaleFor,h=a.expressionPalette,b=[];r&&b.push({predicate:n,object:r}),i&&b.push({predicate:s,object:i});let g={rootFallback:p};a.instanceKey&&(g.instanceKey=a.instanceKey);let $=c(o,d,b,l,u,g),w=_=>c(_,[],b,l,{},{rootFallback:_}),x=_=>Object.prototype.hasOwnProperty.call(u,_),R=(_,y)=>{let T=l.filter(j=>j&&Array.isArray(j.classes)&&j.classes.indexOf(_)>=0),v=T.find(j=>j.svg===y)||T.find(j=>!j.match&&j.parameters)||null;return v?{classes:v.classes.slice(),parameters:Object.keys(v.parameters||{}).sort(),match:v.match||null}:null},E=null,k=null;if(typeof f=="function"){E=[];for(let _ of f(o,d)){let y=w(_);if(E.push({term:_,template:!!y,registry:x(_)}),y){k={term:_,via:"template",hops:E.length-1,root:!1,template:R(_,y)};break}if(x(_)){k={term:_,via:"registry",hops:E.length-1,root:!1,template:null};break}}if(!k){let _=w(p);E.push({term:p,template:!!_,registry:x(p),root:!0}),k={term:p,via:_?"template":"registry",hops:E.length-1,root:!0,template:_?R(p,_):null}}}let O=a.instanceKey?c(o,d,b,l,u,{rootFallback:p}):$,S=r?c(o,d,b.filter(_=>_.predicate!==n),l,u,{rootFallback:p}):null;return{class:o,expression:r||null,size:i||null,svg:$,scale:typeof m=="function"?m(b):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?O!==S:null,rootFallback:p,fellBackToRoot:k?!!k.root:null,chain:E,matched:k}}var aE=P(()=>{});var cE,lE,M0,MV,uE=P(()=>{am();cE="icon tier",lE="sprite tier",M0=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."})}),MV=Object.freeze(Object.values(M0).map(e=>e.predicate))});var dE,fE=P(()=>{dE=()=>[]});var pE,mE=P(()=>{pE=()=>[]});function B0(){let e=pE();return e.length?{templates:e,tier:lE}:{templates:dE(),tier:cE}}function hE(e){return e.map(t=>t.term).join(" -> ")}async function lm(e,{config:t,memoryBackend:n=null}){let s=pt(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(eo,o))throw new Ne(`"${o}" is not a sprite expression. The palette holds: ${D0().join(", ")}.`);if(r&&!z0(r))throw new Ne(`"${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}=B0(),c=await Nn(t,n),l=iE({class:s,expression:o,size:r},{factRows:c,templates:i,spriteRegistry:Jv,resolveSpriteAsset:oE,classAncestorChain:Nl,sizeScaleFor:pa,expressionPalette:eo});if(!l.svg||l.fellBackToRoot)throw new Ne(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${hE(l.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!l.expressionApplied)throw new Ne(`the ${a} draws "${s}" (matched at "${l.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,l.matched.hops===0?`matched at "${l.matched.term}", the class itself, via its own ${l.matched.via}`:`matched at "${l.matched.term}", ${l.matched.hops} hop(s) up the ancestor chain, via its ${l.matched.via}`,`ancestor chain walked: ${hE(l.chain)}`];return l.matched.template?.parameters.length&&d.push(`template parameters: ${l.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${l.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${l.svg.length} characters of SVG markup`),uo({content:d.join(`
159
- `),data:{class:l.class,expression:l.expression,size:l.size,tier:a,scale:l.scale,svg:l.svg,chain:l.chain,matched:l.matched,expressionApplied:l.expressionApplied}})}var F0,D0,z0,gE=P(()=>{Xt();im();am();Va();cm();aE();uE();fE();mE();or();ot();F0="mgx:hasProperty",D0=()=>Object.keys(eo).sort(),z0=e=>!!e&&pa([{predicate:F0,object:String(e)}])!==1;lm.ownsGraphLoad=!0});function bE(e,{graph:t}){return wb(t,{pkg:String(e?.package||"").trim()})}var wE=P(()=>{Fe()});function yE(e,{graph:t,svc:n}){let{match:s}=Ft(n,pt(e,"module"),"module");return Db(t,s)}var $E=P(()=>{Fe();ot()});function vE(e,{graph:t,codeDomainActive:n=null}){return vb(t,{codeDomainActive:n})}var EE=P(()=>{Fe()});function SE(e,t){return uo({content:e,data:t,text:`${e}${xE}${JSON.stringify(t,null,2)}`})}function jE(e,{graph:t}){let{content:n,tmct_ask:s}=co(t,pt(e,"query"));return SE(n,s)}var xE,Ll=P(()=>{es();ot();xE=`
157
+ ${h}`:""}${m}`}var Fv=P(()=>{Pt();Xt();Rc();Fe();ot()});var Dv,zv=P(()=>{Fe();ot();Dv=bt(bb)});function Bv(e,{graph:t,svc:n}){let{match:s}=Ft(n,pt(e,"module"),"module");return ib(t,s)}var Uv=P(()=>{Fe();ot()});async function Wv(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Ne("query is required");let r=hb(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=Ol(await Ln(n),s);if(i)return i}return r}var Gv=P(()=>{Xt();Fe();rr()});async function Vv(e,{graph:t,svc:n,config:s}){let o=pt(e,"class"),{match:r}=wn(n.graph,o);if(r)return gb(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Cl(await Ln(s),o);if(i)return i;Ft(n,o,"class")}var Kv=P(()=>{Fe();rr();ot()});async function Hv(e,{graph:t,svc:n,config:s}){let o=pt(e,"class"),{match:r}=wn(n.graph,o);if(r)return wb(t,r);let i=Cl(await Ln(s),o);if(i)return i;Ft(n,o,"class")}var qv=P(()=>{Fe();rr();ot()});function Yv(e,{conceptBase:t="concept:",relationMap:n=h0}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=b=>{r.has(b)||r.set(b,b)},a=b=>{let g=b;for(;r.get(g)!==g;)g=r.get(g);for(;r.get(b)!==g;){let $=r.get(b);r.set(b,g),b=$}return g},c=(b,g)=>{let $=a(b),w=a(g);$!==w&&($<w?r.set(w,$):r.set($,w))},l=[];for(let b of e){let g=b.predicate;if(!s.has(g)&&!o.has(g))continue;let $=V(b.subject),w=V(b.object);!$||!w||(i($),i(w),s.has(g)?c($,w):l.push({s:$,o:w}))}let u=b=>t+b.replace(/ /g,"_"),d=new Map;for(let b of r.keys()){let g=a(b);d.has(g)||d.set(g,new Set),d.get(g).add(b)}let p=[];for(let[b,g]of d){let $=[...g].sort();p.push({id:u(b),prefLabel:b,altLabels:$.filter(w=>w!==b)})}p.sort((b,g)=>b.id<g.id?-1:b.id>g.id?1:0);let f=new Set,m=[];for(let{s:b,o:g}of l){let $=u(a(b)),w=u(a(g));if($===w)continue;let x=$<w?`${$}\0${w}`:`${w}\0${$}`;f.has(x)||(f.add(x),m.push({subject:$,object:w}))}return m.sort((b,g)=>`${b.subject}${b.object}`<`${g.subject}${g.object}`?-1:1),{concepts:p,related:m,conceptIdForTerm:b=>{let g=V(b);return r.has(g)?u(a(g)):null},namespace:m0}}function rm(e,t,n={}){let s=Yv(e,n),o=s.conceptIdForTerm(t);if(!o)return null;let r=new Map(s.concepts.map(u=>[u.id,u])),i=r.get(o),a=V(t),c=[i.prefLabel,...i.altLabels].filter(u=>u!==a),l=s.related.filter(u=>u.subject===o||u.object===o).map(u=>r.get(u.subject===o?u.object:u.subject)).filter(Boolean);return{conceptId:o,prefLabel:i.prefLabel,altLabels:i.altLabels,synonyms:c,related:l}}var m0,h0,Il=P(()=>{Ze();m0="http://www.w3.org/2004/02/skos/core#",h0={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function im(e,{config:t,memoryBackend:n=null}){let s=pt(e,"term"),o=rm(await Ln(t,n),s);if(!o)throw new Ne(`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)"),uo({content:r.join(`
158
+ `),data:o})}var Xv=P(()=>{Xt();Il();rr();ot();im.ownsGraphLoad=!0});function T0(e,t){let n=[];for(let s of t||[])s?.predicate===g0&&V(s.subject)===e&&n.push(V(s.object));return n}function Nl(e,t){let n=V(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of T0(i,t))s.has(a)||o.push(a)}}return r}var g0,b0,w0,y0,$0,v0,E0,x0,S0,j0,k0,R0,_0,Jv,am=P(()=>{Ze();g0="rdfs:subClassOf",b0='<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>',w0='<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>',y0='<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>',$0='<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>',v0='<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>',E0='<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>',x0='<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>',S0='<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>',j0='<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>',k0='<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>',R0='<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>',_0='<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>',Jv=Object.freeze({spider:b0,fly:w0,egg:y0,poodle:$0,dog:v0,animal:E0,room:x0,furniture:S0,portable:j0,person:k0,adventurer:R0,container:_0})});function A0(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function Qv(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of A0(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var Zv=P(()=>{});function C0(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function O0(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function sE(e){return O0(e).filter(t=>t?.property&&t.value!==void 0)}function I0(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function N0(e,t){let n=null,s=0;for(let o of e){let r=sE(o);r.length<=s||I0(r,t)&&(n=o,s=r.length)}return n}function L0(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 eE(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(c=>c.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,c.object));if(!i)continue;let a=L0(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function P0(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 tE(e,t){let n=t;for(let s of P0(e))n=n.split(s).join("");return n}function nE(e,t,n){let s=C0(e,n),o=N0(s,t);if(o&&!o.parameters)return o.svg;if(o)return tE(o,eE(o,t)||o.svg);for(let a of s){if(a.match||!a.parameters)continue;let c=eE(a,t);if(c)return c}let r=s.find(a=>!a.match&&!a.parameters);if(r)return r.svg;let i=s.find(a=>!a.match&&a.parameters);return i?tE(i,i.svg):null}function M0(e,t,n,s,o,r){for(let a of Nl(e,t)){let c=nE(a,n,s);if(c)return c;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=nE(r,n,s);return i||o[r]}function oE(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=M0(e,t,n,s,o,r);return i?Qv(a,i):a}var IV,NV,cm=P(()=>{am();Zv();IV=Object.freeze(["left","half-left","half-right","right"]),NV=Object.freeze(["moving"])});function ma(e){for(let t of e||[])if(t?.predicate===F0&&Object.prototype.hasOwnProperty.call(rE,t.object))return rE[t.object];return 1}var F0,rE,lm=P(()=>{F0="mgx:hasProperty",rE=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function iE(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},c=a.resolveSpriteAsset;if(typeof c!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let l=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],p=a.rootFallback||"animal",f=a.classAncestorChain,m=a.sizeScaleFor,h=a.expressionPalette,b=[];r&&b.push({predicate:n,object:r}),i&&b.push({predicate:s,object:i});let g={rootFallback:p};a.instanceKey&&(g.instanceKey=a.instanceKey);let $=c(o,d,b,l,u,g),w=_=>c(_,[],b,l,{},{rootFallback:_}),x=_=>Object.prototype.hasOwnProperty.call(u,_),R=(_,y)=>{let T=l.filter(j=>j&&Array.isArray(j.classes)&&j.classes.indexOf(_)>=0),v=T.find(j=>j.svg===y)||T.find(j=>!j.match&&j.parameters)||null;return v?{classes:v.classes.slice(),parameters:Object.keys(v.parameters||{}).sort(),match:v.match||null}:null},E=null,k=null;if(typeof f=="function"){E=[];for(let _ of f(o,d)){let y=w(_);if(E.push({term:_,template:!!y,registry:x(_)}),y){k={term:_,via:"template",hops:E.length-1,root:!1,template:R(_,y)};break}if(x(_)){k={term:_,via:"registry",hops:E.length-1,root:!1,template:null};break}}if(!k){let _=w(p);E.push({term:p,template:!!_,registry:x(p),root:!0}),k={term:p,via:_?"template":"registry",hops:E.length-1,root:!0,template:_?R(p,_):null}}}let O=a.instanceKey?c(o,d,b,l,u,{rootFallback:p}):$,S=r?c(o,d,b.filter(_=>_.predicate!==n),l,u,{rootFallback:p}):null;return{class:o,expression:r||null,size:i||null,svg:$,scale:typeof m=="function"?m(b):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?O!==S:null,rootFallback:p,fellBackToRoot:k?!!k.root:null,chain:E,matched:k}}var aE=P(()=>{});var cE,lE,D0,DV,uE=P(()=>{cm();cE="icon tier",lE="sprite tier",D0=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."})}),DV=Object.freeze(Object.values(D0).map(e=>e.predicate))});var dE,fE=P(()=>{dE=()=>[]});var pE,mE=P(()=>{pE=()=>[]});function W0(){let e=pE();return e.length?{templates:e,tier:lE}:{templates:dE(),tier:cE}}function hE(e){return e.map(t=>t.term).join(" -> ")}async function um(e,{config:t,memoryBackend:n=null}){let s=pt(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(eo,o))throw new Ne(`"${o}" is not a sprite expression. The palette holds: ${B0().join(", ")}.`);if(r&&!U0(r))throw new Ne(`"${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}=W0(),c=await Ln(t,n),l=iE({class:s,expression:o,size:r},{factRows:c,templates:i,spriteRegistry:Jv,resolveSpriteAsset:oE,classAncestorChain:Nl,sizeScaleFor:ma,expressionPalette:eo});if(!l.svg||l.fellBackToRoot)throw new Ne(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${hE(l.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!l.expressionApplied)throw new Ne(`the ${a} draws "${s}" (matched at "${l.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,l.matched.hops===0?`matched at "${l.matched.term}", the class itself, via its own ${l.matched.via}`:`matched at "${l.matched.term}", ${l.matched.hops} hop(s) up the ancestor chain, via its ${l.matched.via}`,`ancestor chain walked: ${hE(l.chain)}`];return l.matched.template?.parameters.length&&d.push(`template parameters: ${l.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${l.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${l.svg.length} characters of SVG markup`),uo({content:d.join(`
159
+ `),data:{class:l.class,expression:l.expression,size:l.size,tier:a,scale:l.scale,svg:l.svg,chain:l.chain,matched:l.matched,expressionApplied:l.expressionApplied}})}var z0,B0,U0,gE=P(()=>{Xt();am();cm();Ka();lm();aE();uE();fE();mE();rr();ot();z0="mgx:hasProperty",B0=()=>Object.keys(eo).sort(),U0=e=>!!e&&ma([{predicate:z0,object:String(e)}])!==1;um.ownsGraphLoad=!0});function bE(e,{graph:t}){return yb(t,{pkg:String(e?.package||"").trim()})}var wE=P(()=>{Fe()});function yE(e,{graph:t,svc:n}){let{match:s}=Ft(n,pt(e,"module"),"module");return zb(t,s)}var $E=P(()=>{Fe();ot()});function vE(e,{graph:t,codeDomainActive:n=null}){return Eb(t,{codeDomainActive:n})}var EE=P(()=>{Fe()});function SE(e,t){return uo({content:e,data:t,text:`${e}${xE}${JSON.stringify(t,null,2)}`})}function jE(e,{graph:t}){let{content:n,tmct_ask:s}=co(t,pt(e,"query"));return SE(n,s)}var xE,Ll=P(()=>{ns();ot();xE=`
160
160
 
161
161
  ---tmct_ask---
162
- `});var kE,RE=P(()=>{Fe();ot();kE=bt($b)});var _E,TE=P(()=>{Fe();ot();_E=bt(Eb)});var AE,CE=P(()=>{Fe();ot();AE=bt(Tb)});var OE,IE=P(()=>{Fe();ot();OE=bt(Cb)});var NE,LE=P(()=>{Fe();ot();NE=bt(Ob)});var PE,ME=P(()=>{Fe();ot();PE=bt(Sb)});var FE,DE=P(()=>{Fe();ot();FE=bt(jb)});var zE,BE=P(()=>{Fe();ot();zE=bt(Rb)});var UE,WE=P(()=>{Fe();ot();UE=bt(Fb)});function U0(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function W0(e){let t=(e||[]).map(U0);return t.map(n=>JSON.stringify(n)).join(`
162
+ `});var kE,RE=P(()=>{Fe();ot();kE=bt(vb)});var _E,TE=P(()=>{Fe();ot();_E=bt(xb)});var AE,CE=P(()=>{Fe();ot();AE=bt(Ab)});var OE,IE=P(()=>{Fe();ot();OE=bt(Ob)});var NE,LE=P(()=>{Fe();ot();NE=bt(Ib)});var PE,ME=P(()=>{Fe();ot();PE=bt(jb)});var FE,DE=P(()=>{Fe();ot();FE=bt(kb)});var zE,BE=P(()=>{Fe();ot();zE=bt(_b)});var UE,WE=P(()=>{Fe();ot();UE=bt(Db)});function G0(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function V0(e){let t=(e||[]).map(G0);return t.map(n=>JSON.stringify(n)).join(`
163
163
  `)+(t.length?`
164
- `:"")}function GE(e){return W0(wt(e))}var VE=P(()=>{We()});async function um(e,{config:t,memoryBackend:n=null}){let s=n?null:await wo($e($e(t.graphFile))),o=n||s.dir;try{return GE(await mt(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var KE=P(()=>{VE();Qe();We();um.ownsGraphLoad=!0});async function dm(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 wo($e($e(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0,findings:!0}),c=a.extracted.length+a.optimistic.length,l=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${c} fact(s) grounded.`;return uo({content:c?`${l}
164
+ `:"")}function GE(e){return V0(wt(e))}var VE=P(()=>{We()});async function dm(e,{config:t,memoryBackend:n=null}){let s=n?null:await wo($e($e(t.graphFile))),o=n||s.dir;try{return GE(await mt(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var KE=P(()=>{VE();Qe();We();dm.ownsGraphLoad=!0});async function fm(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 wo($e($e(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0,findings:!0}),c=a.extracted.length+a.optimistic.length,l=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${c} fact(s) grounded.`;return uo({content:c?`${l}
165
165
  ${a.canonical.join(`
166
- `)}`:l,data:{...a,grounded:c}})}finally{await i()}}var HE=P(()=>{Qe();We();ot();dm.ownsGraphLoad=!0});var G0,qE=P(()=>{$f();_y();Pv();Fv();zv();Uv();Gv();Kv();qv();Xv();gE();wE();$E();EE();Ll();RE();TE();CE();IE();LE();ME();DE();BE();WE();KE();HE();G0=Object.freeze({tmct_context:yf,tmct_context_more:Ry,tmct_describe:Lv,tmct_snippet:Mv,tmct_signature:Dv,tmct_impact:Bv,tmct_search:Wv,tmct_members:Vv,tmct_subclasses:Hv,tmct_related:rm,tmct_sprite:lm,tmct_architecture:bE,tmct_exports:yE,tmct_untested:vE,tmct_ask:jE,tmct_tests_for:kE,tmct_history:_E,tmct_file_history:AE,tmct_method_history:OE,tmct_class_history:NE,tmct_callers:PE,tmct_callees:FE,tmct_calls:zE,tmct_cochanges:UE,tmct_export:um,tmct_ingest:dm})});var fm=P(()=>{});var Pl,pm=P(()=>{Pl=()=>({relations:[],constructions:[]})});var YE,XE=P(()=>{Pt();Qe();xg();Xt();$i();es();Tc();Ac();qE();Ll();ot();Lr();mc();fm();pm();Ac();$f();Ll();hc(void 0);pc(Pl);YE=Eg.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});function JE(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 ma(e){let t=String(e||"");return/^has$/i.test(t)?"have":/[a-z]ies$/i.test(t)&&!/[aeiou]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(?:ss|zz|x|ch|sh|o)es$/i.test(t)?t.slice(0,-2):/[sz]es$/i.test(t)?t.slice(0,-1):t.replace(/s$/i,"")}function hm(e){let t=ma(e);return/[^aeiou]e$/i.test(t)&&t.length>2?`${t.slice(0,-1)}ing`:`${t}ing`}function Fl(e){if(Gs[e])return Gs[e];let t=String(e??"");if(t.startsWith("mgxneg:")){let a=Fl(`mgx:${t.slice(7)}`);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[c,...l]=a.split(" ");return["does not",ma(c),...l].join(" ")}let n=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(t);if(n)return`is ${n[1].replace(/-/g," ")} than`;let s=new RegExp(`^mgx:(${Ml})-([a-z]+)$`,"i").exec(t);if(s)return`is ${s[1].toLowerCase()} ${s[2].toLowerCase()}`;let o=/^mgx:same-([a-z]+)-as$/i.exec(t);if(o)return`has the same ${o[1].toLowerCase()} as`;let r=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(t);if(r)return`${JE(r[1])}${r[2]?` ${r[2]}`:""}`;let i=t.indexOf(":");return i===-1?t:t.slice(i+1)}function QE(e){let t=typeof e=="string"?[e]:Array.isArray(e)?e:e?.extraction;if(!Array.isArray(t)||!t.length)return"";let n=new Set(t.map(s=>String(s)));return Object.entries(V0).filter(([s])=>n.has(s)).map(([,s])=>s).join(" ")}var Gs,Ml,V0,gm=P(()=>{Gs=Object.freeze({"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","owl:unionOf":"is either","owl:complementOf":"is anything that is not","owl:oneOf":"includes exactly","owl:differentFrom":"is not the same as","mgx:partOf":"is part of","mgx:memberOf":"is a member of","mgx:collectionOf":"is a collection of","mgx:hasA":"has","mgx:usedFor":"is used for","mgx:capableOf":"can","mgx:atLocation":"is found in","mgx:causes":"causes","mgx:hasProperty":"is","mgx:madeOf":"is made of","mgx:receivesAction":"can be","mgx:createdBy":"is created by","mgx:mannerOf":"is a way to","mgx:desires":"wants","mgx:locatedNear":"is typically near","mgx:motivatedByGoal":"is motivated by","mgx:obstructedBy":"can be prevented by","mgx:causesDesire":"makes you want to","mgx:hasSubevent":"involves","mgx:hasFirstSubevent":"begins with","mgx:hasLastSubevent":"ends with","mgx:hasPrerequisite":"requires","mgx:ownedBy":"is owned by","mgx:rendersAs":"renders as","mgx:nameFor":"is the name for","mgx:synonym":"means the same as","mgx:antonym":"is the opposite of","mgx:similarTo":"is similar to","mgx:relatedTo":"is related to","mgx:symbolOf":"is a symbol of","mgx:currently-in":"is in","mgx:located-in":"is in","mgx:fixed-in":"is fixed in","mgx:stands-locked-in":"stands locked in","mgx:works-in":"works in","mgx:pursues":"pursues","mgx:evades":"evades","mgx:consumes":"eats","mgx:vision-radius":"sees within","mgx:guards":"guards"}),Ml="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned";V0=Object.freeze({"clause-fallback":"(read from a clause fragment)","pronoun-carry":"(subject carried from the previous sentence)","identifier-token":"(identifier token)"})});var BH,UH,WH,Dl=P(()=>{BH=Object.freeze(["entity","set","event","measure"]),UH=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),WH=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 zl=P(()=>{});var xt,KH,HH,qH,YH,XH,JH,QH,ZH,eq,tq,nq,sq,oq,rq,iq,aq,qt,cq,lq,uq,yo=P(()=>{xt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},KH=xt("createRequire"),HH=xt("readFileSync"),qH=xt("access"),YH=xt("readFile"),XH=xt("writeFile"),JH=xt("appendFile"),QH=xt("mkdir"),ZH=xt("mkdtemp"),eq=xt("rename"),tq=xt("unlink"),nq=xt("rm"),sq=xt("stat"),oq=xt("copyFile"),rq=xt("readdir"),iq=xt("createReadStream"),aq=xt("createWriteStream"),qt=e=>String(e),cq=xt("randomBytes"),lq=xt("spawnSync"),uq=xt("createInterface")});var ix={};Lt(ix,{PHRASEBOOK_FILE:()=>tx,TECHNICAL_SLOTS:()=>bm,TEMPLATES_FILE:()=>ex,flatten:()=>ym,loadPhrasebook:()=>Y0,loadTemplates:()=>$m,loadTemplatesMerged:()=>q0,render:()=>rx,renderSegments:()=>ox,slotKind:()=>sx,slotsOf:()=>wm});function wm(e){let t=[];for(let n of String(e).matchAll(nx))t.includes(n[1])||t.push(n[1]);return t}function sx(e){return H0[e]||"entity"}function ym(e){let t="";for(let n of e)t+=n.text;return t}function ox(e,t={},n=ha){if(!n)throw new Error("renderSegments() before loadTemplates() \u2014 load the template library first");let s=n.get(e);if(!s)throw new Error(`unknown template id "${e}"`);let o=s.slots.filter(u=>t[u]===void 0||t[u]===null);if(o.length)throw new Error(`template "${e}" missing slot${o.length>1?"s":""}: ${o.join(", ")}`);let r=s.template,i=new RegExp(nx.source,"g"),a=[],c=0,l;for(;(l=i.exec(r))!==null;)l.index>c&&a.push({type:"prose",text:r.slice(c,l.index)}),a.push({type:sx(l[1]),text:String(t[l[1]])}),c=l.index+l[0].length;return c<r.length&&a.push({type:"prose",text:r.slice(c)}),a}async function $m(e=ex){let t=await Oe(e,"utf8"),n=new Map,s=t.split(`
167
- `);for(let o=0;o<s.length;o+=1){let r=s[o].trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(c){throw new Error(`${e}:${o+1}: not valid JSON: ${c.message}`)}for(let c of["id","class","template","register"])if(typeof i[c]!="string"||!i[c])throw new Error(`${e}:${o+1}: missing/empty "${c}"`);if(!K0.has(i.register))throw new Error(`${e}:${o+1}: register must be terse|friendly|technical, got "${i.register}"`);if(n.has(i.id))throw new Error(`${e}:${o+1}: duplicate template id "${i.id}"`);let a=wm(i.template);if(i.register==="technical"){let c=a.filter(l=>!bm.has(l));if(c.length)throw new Error(`${e}:${o+1}: technical template "${i.id}" uses non-mechanical slot${c.length>1?"s":""}: ${c.join(", ")} (allowed: ${[...bm].join(", ")})`);if(!a.includes("provenance"))throw new Error(`${e}:${o+1}: technical template "${i.id}" must carry a {provenance} fill (an advanced claim always shows its source)`)}n.set(i.id,{...i,slots:a})}return ha=n,n}async function q0(e=[]){let t=ha,n=new Map;try{for(let s of e){let o=await $m(s);for(let[r,i]of o){if(!r.includes(":"))throw new Error(`${s}: extension-pack template id "${r}" is not namespaced ("<packname>:<id>")`);if(n.has(r))throw new Error(`${s}: duplicate template id "${r}" already loaded from an earlier path`);n.set(r,i)}}}finally{ha=t}return n}function rx(e,t={},n=ha){if(!n)throw new Error("render() before loadTemplates() \u2014 load the template library first");return ym(ox(e,t,n))}async function Y0(e=tx){let t=await Oe(e,"utf8"),n=[],s=[],o=t.split(`
168
- `);for(let r=0;r<o.length;r+=1){let i=o[r].trim();if(!(!i||i.startsWith("#"))){if(i.startsWith("~")){let a=i.slice(1).split(",").map(c=>c.trim().toLowerCase()).filter(Boolean);if(a.length<2)throw new Error(`${e}:${r+1}: a synonym family needs at least 2 entries`);s.push(a);continue}n.push({pattern:i,slots:wm(i)})}}return{patterns:n,synonyms:s}}var X0,ZE,ex,tx,K0,nx,bm,H0,ha,Bl=P(()=>{Pt();yo();Qe();X0={},ZE=ne($e(qt(X0.url)),"..","..",".."),ex=ne(ZE,"data","templates","responses.jsonl"),tx=ne(ZE,"data","phrasebook","software-phrases.txt"),K0=new Set(["terse","friendly","technical"]),nx=/\{([A-Za-z][A-Za-z0-9]*)\}/g,bm=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]));H0={count:"number",when:"number",location:"path",commit:"path",provenance:"provenance"};ha=null});function Q0(e,t={}){let n=J0.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function Z0(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>Q0(s,t))):1}function lt(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:Z0(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 J0,ax=P(()=>{J0=/^src:corpus:(.+)$/});var St,gq,rr,bq,wq,yq,$q,vq,Eq,xq,Sq,jq,kq,Rq,_q,cx,e1,Tq,Aq,Cq,ir=P(()=>{St=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},gq=St("createRequire"),rr=St("readFileSync"),bq=St("access"),wq=St("readFile"),yq=St("writeFile"),$q=St("appendFile"),vq=St("mkdir"),Eq=St("mkdtemp"),xq=St("rename"),Sq=St("unlink"),jq=St("rm"),kq=St("stat"),Rq=St("copyFile"),_q=St("readdir"),cx=St("createReadStream"),e1=St("createWriteStream"),Tq=St("randomBytes"),Aq=St("spawnSync"),Cq=St("createInterface")});function vm(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 o1(e=n1){let t=Qo(rr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function Wl(){if(Ul===null)try{Ul=o1()}catch{Ul=[]}return Ul}var r1,t1,n1,s1,Fq,Ul,Gl=P(()=>{ir();yo();Qe();ll();Bl();r1={},t1=$e(qt(r1.url)),n1=ne(t1,"..","..","data","templates","grammar-rules.toml"),s1=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),Fq=Object.freeze(new Set(s1.filter(e=>e!=="prose")));Ul=null});function i1(){if(ga!==void 0)return ga;try{let e=lx?lx():a1();ga=e&&e.winkNLP&&e.model?e:null}catch{ga=null}return ga}function a1(){let e=process.getBuiltinModule("node:module").createRequire(c1.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function Vl(){if(oi!==void 0)return oi;let e=i1();if(!e)return oi=null,null;try{oi=e.winkNLP(e.model)}catch{oi=null}return oi}var c1,lx,ga,oi,Kl=P(()=>{c1={}});var Em=P(()=>{Kl()});var dx,ux=P(()=>{dx={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},rodent:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},yellow:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},terrestrial:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to",predicate:"mgx:partOf"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});var bx={};Lt(bx,{CODE_REF_SHAPE:()=>ql,DETERMINERS:()=>Sm,OF_CLASSIFIER_HEADS:()=>km,OF_PARTITIVE_HEADS:()=>Rm,QUANTIFIERS:()=>jm,classify:()=>_m,loadLexicon:()=>tn,lookupAdjective:()=>ya,lookupNoun:()=>dn,lookupProperName:()=>ri,lookupVerb:()=>wa,numberOf:()=>ba,predicateOf:()=>Hl,readsAsIndividualName:()=>Yl,thirdPerson:()=>mx,withProperNames:()=>gx});function ba(e){let t=String(e??"").trim().toLowerCase();return/^\d+$/.test(t)?Number(t):u1[t]??null}function mx(e){let t=String(e);return t==="have"?"has":/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/.test(t)?`${t}es`:`${t}s`}function Hl(e,t=px){if(e.predicate)return e.predicate;let n=e.prep?e.prep[0].toUpperCase()+e.prep.slice(1):"";return`${t}${mx(e.lemma)}${n}`}function hx(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 fx(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!d1.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(!f1.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 tn(e,t=px){if(!e&&xm.has(t))return xm.get(t);let n=dx,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return fx(s,n),e?(fx(s,e),s):(xm.set(t,s),s)}function gx(e,t){let n=new Map(e.properNames);for(let s of t)n.set(String(s).toLowerCase(),String(s));return{...e,properNames:n}}function dn(e,t,n={}){return p1(e,t,n)[0]??null}function p1(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,c=l=>{l&&!a.has(l.lemma)&&(a.add(l.lemma),i.push(l))};if(r){let l=e.nouns.get(r)??null;return n.singularOnly&&o?(c(o),c(l)):(c(l),c(o)),i}for(let l of hx(s))c(e.nouns.get(l));return i}function wa(e,t){return m1(e,t)[0]??null}function m1(e,t){let n=String(t??"").toLowerCase(),s=[],o=new Set;for(let r of hx(n)){let i=e.verbs.get(r);i&&!o.has(i.lemma)&&(o.add(i.lemma),s.push(i))}return s}function ya(e,t){return e.adjectives.get(String(t??"").toLowerCase())??null}function ri(e,t){return e.properNames.get(String(t??"").toLowerCase())??null}function Yl(e,t){let n=String(e??"");if(!n)return!1;if(ri(t,n)||ql.test(n)||/^[a-z][\w]*(?:-[\w]+)+$/i.test(n)||/^[A-Z]/.test(n))return!0;let s=dn(t,n);return s?s.lemma.toLowerCase()!==n.toLowerCase():!0}function _m(e,t=tn()){let n=String(e??"").trim();if(!n)return null;let s=n.toLowerCase();if(Sm[s])return{pos:"determiner",type:Sm[s]};if(jm[s])return{pos:"quantifier",type:jm[s]};let o=ba(s);if(o!=null)return{pos:"number",type:"cardinal",value:o};let r=ri(t,n);if(r)return{pos:"properName",type:"individual",canonical:r};let i=dn(t,s);if(i)return i.property?{pos:"noun",type:`${i.property}-property`,lemma:i.lemma,property:i.property}:{pos:"noun",type:"class",lemma:i.lemma};let a=wa(t,s);if(a)return{pos:"verb",type:"objectProperty",lemma:a.lemma,predicate:Hl(a,t.ns),...a.prep?{prep:a.prep}:{}};let c=ya(t,s);return c?{pos:"adjective",type:c.type,lemma:c.lemma}:null}var px,Sm,jm,km,Rm,u1,d1,f1,xm,ql,Vn=P(()=>{ux();px="tmct:",Sm=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),jm=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),km=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),Rm=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),u1=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});d1=new Set(["data","object"]),f1=new Set(["subclass","data"]);xm=new Map;ql=/[./\\#:@]/});var Hq,qq,Yq,h1,Xq,Jq,Qq,wx=P(()=>{es();Fe();Hq=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),qq=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),Yq=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`]}),h1=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"}),Xq=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"]}),Jq=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"}}),Qq=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});function vx(e){return!!e&&typeof e=="object"&&typeof e.s=="string"&&g1.test(e.s)&&typeof e.t=="string"&&e.t.length>0&&Number.isInteger(e.r)&&e.r>0}function $o(e){if(!e||typeof e!="object")return!1;for(let t of["term","title","text","summary","url"])if(typeof e[t]!="string"||!e[t])return!1;if(!Number.isInteger(e.revid)||e.revid<=0)return!1;for(let t of["isa","source","licence"])if(e[t]!==void 0&&(typeof e[t]!="string"||!e[t]))return!1;return!0}function Jl(e,t){let n=String(e??"").split(/(?<=[.!?])\s+/),s="";for(let o of n){let r=s?`${s} ${o}`:o;if(r.length>t)break;s=r}return s||String(e??"").slice(0,t)}function w1(e){let t=e,n;do n=t,t=t.replace(/\s*\([^()]*\)/g,"");while(t!==n);return t}function $x(e,t){let n=dn(t,e);return n?V(n.lemma):e}function Ex(e,t){let n=w1(String(e??"")).match(b1);if(!n)return null;let s=!n[1],o=[];for(let u of n[2].trim().split(/\s+/))if(y1.has(u)||(o.push(u),o.length>=6))break;let r=o;for(let u=r.indexOf("of");u>0;u=r.indexOf("of")){let d=r[u-1]?.split("-").pop(),p=d&&$x(d,t);if(p&&(v1.has(p)||E1.has(p))){r=r.slice(u+1);continue}r=r.slice(0,u);break}for(;r.length&&$1.has(r[0]);)r=r.slice(1);if(!r.length)return null;let i=r[r.length-1].split("-").pop();if(!i)return null;let a=$x(i,t);if(yx.has(i)||yx.has(a))return null;let c=dn(t,i);if(!c)return null;let l=V(c.lemma);return s&&(!/s$/.test(i)||V(i)===l)?null:l}var g1,Xl,b1,y1,yx,$1,v1,E1,ar=P(()=>{Ze();Vn();wx();g1=/^ref-[0-3][0-9a-f]$/;Xl=400;b1=/^[A-Z][^.!?]*? (?:is|are) (?:(a|an|the) )?([a-z][a-z -]{1,60})/;y1=new Set(["that","which","where","who","whose","whom","when","used","found","made","with","in","on","for","from","by","to","and","or"]),yx=new Set(["type","kind","sort","form","class","variety","group","part","piece","member","way","term","name","word","thing","example","family","genus","species","unit","series","set","list","number","amount","body","mass"]),$1=new Set(["a","an","the"]),v1=new Set(["type","kind","sort","form","class","variety","species","breed","genus","group","part","parts","piece","bunch","bit","name","set","way","unit","family","ability","color","series","mammal","practice","list","amount","mass","reworking","blockage","goddess","aura","development","consisting","announcement","messengers","subset","carrying","photograph","adding","use","science","songbird","symptom","accumulation","number","suborder","falling","management","evaluation","superorder","activity","interlacing","introduction"]),E1=new Set(["either","one","each","both","any"])});var $a,Ql=P(()=>{$a=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});function xx(e=process.env){return e?.TMCT_REFERENCE_PACK_DIR||ne(x1,"corpus","reference")}function Sx(e){try{return $a(rr(e))}catch{return null}}function Cm(e){if(Tm.has(e))return Tm.get(e);let t=null,n=Sx(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Tm.set(e,t),t}function S1(e,t){let n=`${e}\0${t}`;if(Am.has(n))return Am.get(n);let s=null,o=Sx(ne(e,"shards",`${t}.jsonl.gz`));if(o){s=new Map;for(let r of o.toString("utf8").split(`
169
- `))if(r.trim())try{let i=JSON.parse(r);$o(i)&&s.set(i.term,i)}catch{}}return Am.set(n,s),s}function Om(e,t){let n=Cm(e);if(!n)return null;let s=n[String(t??"")];return vx(s)?S1(e,s.s)?.get(s.t)??null:null}var j1,x1,Tm,Am,Im=P(()=>{ir();Ql();yo();Qe();ar();j1={},x1=ne($e(qt(j1.url)),"..","..","..");Tm=new Map,Am=new Map});function R1(e){if(!e||typeof e!="object")return!1;for(let t of["subject","predicate","object","provenance"])if(typeof e[t]!="string"||!e[t])return!1;return k1.includes(e.predicate)}function jx(e){return $o(e)?e.facts===void 0?!0:Array.isArray(e.facts)&&e.facts.length>0&&e.facts.every(R1):!1}function cr(e,t){return`research:${e}:${V(t)}`}function ii(e){if(!e||typeof e.name!="string"||!e.name||typeof e.create!="function")throw new Error("registerResearchSource: expected { name, create(options) }");_1.set(e.name,{name:e.name,create:e.create})}var k1,_1,pY,mY,lr=P(()=>{Ze();ar();k1=Object.freeze(["rdf:type","rdfs:subClassOf","mgx:partOf","mgx:hasA","mgx:usedFor","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:madeOf","mgx:createdBy","mgx:locatedNear","mgx:hasProperty"]);_1=new Map;pY=Object.freeze(["wikipedia","wikidata","simple-wikipedia","simple-wikipedia-pack","wiktionary","dbpedia"]),mY=Object.freeze({wikipedia:"simple-wikipedia",wikidata:"wikidata","simple-wikipedia":"simple-wikipedia","simple-wikipedia-pack":"simple-wikipedia-pack",wiktionary:"wiktionary",dbpedia:"dbpedia-lookup"})});function kx(e){let t=Number(e);return Number.isFinite(t)?t===408||t===429||t>=500:!1}var gY,Zl=P(()=>{gY=Object.freeze({failureThreshold:5,windowMs:6e4,cooldownMs:6e4})});function Ea({fetchImpl:e,timeoutMs:t=ai,minIntervalMs:n=Yt,retryAfterFloorMs:s=T1,maxFetchesPerTurn:o=A1,userAgent:r,waitForSlot:i=!1,validators:a=null}={}){let c=e??((...v)=>globalThis.fetch(...v)),l=new Map,u=0,d=0,p=!1,f=0,m=0,h=0,b=!1,g=!1,$=()=>{if(!r)return null;let v={"Api-User-Agent":r};return typeof document>"u"&&(v["User-Agent"]=r),v};function w(v){let j=Number(v)*1e3;d=Date.now()+Math.max(j||0,s)}function x(v){let j=a?.get(v);if(!j)return null;let M={};return j.etag&&(M["If-None-Match"]=j.etag),j.lastModified&&(M["If-Modified-Since"]=j.lastModified),Object.keys(M).length?M:null}function R(v,j){if(!a)return;let M=j.headers?.get?.("etag")??"",z=j.headers?.get?.("last-modified")??"";if(!M&&!z)return;let K=a.get(v)??{};a.set(v,{etag:M||K.etag||"",lastModified:z||K.lastModified||""})}async function E(v,{asJson:j}){if(b&&h>=o)return g=!0,null;f+=1,h+=1;let M=typeof AbortController=="function"?new AbortController:null,z=M?setTimeout(()=>M.abort(),t):null;try{let K={};M&&(K.signal=M.signal);let Y={...$()??{},...x(v)??{}};Object.keys(Y).length&&(K.headers=Y);let X;try{X=await c(v,K)}catch{return m+=1,null}if(X.status===429)return w(X.headers?.get?.("retry-after")),m+=1,null;if(X.status===304)return a?{notModified:!0}:null;if(!X.ok)return kx(X.status)&&(m+=1),null;if(R(v,X),j){let L=await X.json();return L?.error?.code==="maxlag"?(w(X.headers?.get?.("retry-after")),m+=1,null):L}return await X.text()}catch{return M?.signal?.aborted&&(m+=1),null}finally{z!==null&&clearTimeout(z)}}async function k(v){return E(v,{asJson:!0})}async function O(v){return E(v,{asJson:!1})}let S=()=>Math.max(d,u+n);async function _(){for(;;){let v=Date.now();if(!p&&v>=S())return u=v,p=!0,!0;if(!i)return!1;await new Promise(j=>setTimeout(j,Math.max(S()-v,25)))}}async function y(v,j,{remember:M=!0}={}){if(l.has(v))return l.get(v);if(!await _())return null;let z=null;try{z=await j()}catch{z=null}finally{p=!1}return M&&l.set(v,z),z}function T(){b=!0,h=0,g=!1}function C(){return{fetches:f,systemicFailures:m,fetchesThisTurn:h,budgetExhausted:g}}return{fetchJson:k,fetchText:O,cachedFetch:y,beginTurn:T,stats:C}}var ai,Yt,T1,A1,va,xa=P(()=>{Zl();ai=4e3,Yt=2e3,T1=5e3,A1=6,va=5});function M1({fetchImpl:e,origin:t=C1,timeoutMs:n=ai,minIntervalMs:s=Yt,lexicon:o=null,userAgent:r=P1,waitForSlot:i=!1,sourceName:a=I1,label:c=N1}={}){let l=Ea({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:r,waitForSlot:i});function u(f,m){let h=Array.isArray(m?.[1])?m[1]:[];for(let b of h){let g=V(b);if(g===f||g.startsWith(f))return String(b)}return null}async function d(f,m){let h=await l.fetchJson(`${t}/api/rest_v1/page/summary/${encodeURIComponent(m.replace(/ /g,"_"))}`);if(!h)return null;let b=String(h.extract??""),g=Number(h.revision),$={term:f,title:String(h.title??m),text:b,summary:Jl(b,Xl),url:String(h.content_urls?.desktop?.page??`${t}/wiki/${encodeURIComponent(m.replace(/ /g,"_"))}`),revid:g},w=o;if(!w)try{w=tn()}catch{w=null}let x=w?Ex(b,w):null;return x&&($.isa=x),$o($)?$:null}async function p(f){let m=await l.fetchJson(`${t}/w/api.php?action=opensearch&format=json&origin=*&maxlag=${va}&search=${encodeURIComponent(f)}&limit=3`),h=m?u(f,m):null;return h?d(f,h):null}return{name:a,origin:t,label:c,beginTurn(){l.beginTurn()},stats(){return l.stats()},provenanceTag(f){return cr(a,f)},async lookup(f){let m=String(f??"");return m?l.cachedFetch(m,()=>p(m)):null},async pageByTitle(f){let m=String(f??"").trim();return m?l.cachedFetch(`title\0${V(m)}`,()=>d(V(m),m)):null},async linkedTitles(f,{limit:m=25}={}){let h=String(f??"").trim();if(!h)return null;let b=await l.cachedFetch(`links\0${V(h)}`,async()=>{let $=(await l.fetchJson(`${t}/w/api.php?action=parse&format=json&formatversion=2&origin=*&maxlag=${va}&prop=links&redirects=1&page=${encodeURIComponent(h)}&section=0`))?.parse?.links;if(!Array.isArray($))return null;let w=new Set,x=[];for(let R of $){if(!R||R.ns!==0||R.exists===!1)continue;let E=String(R.title??R["*"]??"").trim(),k=V(E);!E||!k||w.has(k)||(w.add(k),x.push(E))}return x});return Array.isArray(b)?b.slice(0,Math.max(0,m)):null}}}function F1(e={}){return M1({origin:O1,sourceName:_x,label:L1,waitForSlot:!0,...e})}var C1,O1,I1,_x,N1,L1,P1,Tx=P(()=>{Ze();Vn();ar();lr();xa();C1="https://en.wikipedia.org",O1="https://simple.wikipedia.org",I1="wikipedia-live",_x="simple-wikipedia",N1="Wikipedia",L1="Simple English Wikipedia",P1="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)";ii({name:_x,create:F1})});function K1(e,t){let n=Array.isArray(t?.search)?t.search:[],s=null;for(let o of n){let r=String(o?.id??"");if(!Ox.test(r))continue;let i=V(o?.label??"");if(i===e)return r;s===null&&i.startsWith(e)&&(s=r)}return s}function H1(e){let t=[];for(let[n,s]of Object.entries(U1)){let o=e?.claims?.[n];if(!Array.isArray(o))continue;let r=0;for(let i of o){if(t.length>=V1)return t;if(r>=G1)break;let a=i?.mainsnak;if(a?.snaktype!=="value")continue;let c=String(a?.datavalue?.value?.id??"");Ox.test(c)&&(t.push({property:n,predicate:s,id:c}),r+=1)}}return t}function q1(e,t,n){for(let s of W1)for(let o of e){if(o.property!==s)continue;let r=t.get(o.id);if(r&&r!==n)return r}return null}function Y1({fetchImpl:e,origin:t=D1,timeoutMs:n=ai,minIntervalMs:s=Yt,userAgent:o=B1,waitForSlot:r=!1,sourceName:i=Cx}={}){let a=Ea({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:o,waitForSlot:r}),c=d=>`${t}/w/api.php?${new URLSearchParams({format:"json",origin:"*",maxlag:String(va),...d})}`;async function l(d){let p=new Map;if(!d.length)return p;let f=await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels",ids:d.join("|")}));for(let[m,h]of Object.entries(f?.entities??{})){let b=V(h?.labels?.en?.value??"");b&&p.set(m,b)}return p}async function u(d){let p=await a.fetchJson(c({action:"wbsearchentities",language:"en",uselang:"en",type:"item",limit:"5",search:d})),f=p?K1(d,p):null;if(!f)return null;let h=(await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels|descriptions|claims|info",ids:f})))?.entities?.[f];if(!h)return null;let b=H1(h),g=await l(b.map(O=>O.id)),$=cr(i,d),w=[],x=new Set;for(let O of b){let S=g.get(O.id);!S||S===d||x.has(`${O.predicate}\0${S}`)||(x.add(`${O.predicate}\0${S}`),w.push({subject:d,predicate:O.predicate,object:S,provenance:$}))}let R=String(h.descriptions?.en?.value??""),E={term:d,title:String(h.labels?.en?.value??""),text:R,summary:Jl(R,Xl),url:`${t}/wiki/${f}`,revid:Number(h.lastrevid),source:Ax,licence:z1},k=q1(b,g,d);return k&&(E.isa=k),w.length&&(E.facts=w),jx(E)?E:null}return{name:i,origin:t,label:Ax,beginTurn(){a.beginTurn()},stats(){return a.stats()},provenanceTag(d){return cr(i,d)},async lookup(d){let p=V(d??"");return p?a.cachedFetch(p,()=>u(p)):null}}}function X1(e={}){return Y1({waitForSlot:!0,...e})}var D1,Cx,Ax,z1,B1,U1,W1,G1,V1,Ox,Ix=P(()=>{Ze();ar();lr();xa();D1="https://www.wikidata.org",Cx="wikidata",Ax="Wikidata",z1="CC0 1.0",B1="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)",U1=Object.freeze({P31:"rdf:type",P279:"rdfs:subClassOf",P361:"mgx:partOf",P527:"mgx:hasA",P186:"mgx:madeOf",P366:"mgx:usedFor",P276:"mgx:atLocation",P1542:"mgx:causes",P170:"mgx:createdBy",P2670:"mgx:hasA"}),W1=["P279","P31"],G1=3,V1=12,Ox=/^Q[1-9][0-9]*$/;ii({name:Cx,create:X1})});function eP(e,t){let n=dn(t,e);return n?V(n.lemma):V(e)}function nP(e,t,n,s,o,r){if(!s||r<=0)return[];let i=new Set([n]),a=[];for(let c of String(t??"").matchAll(Q1)){if(a.length>=r)break;let l=eP(c[0],o);!l||!Tg(l)||i.has(l)||!s[l]||(i.add(l),Om(e,l)&&a.push(tP(l)))}return a}function sP({dir:e,lexicon:t=null,sourceName:n=Nx}={}){let s=e||xx(),o=t;function r(){if(o)return o;try{o=tn()}catch{o=null}return o}function i(a){let c=V(a??"");if(!c)return null;let l=Om(s,c);if(!l)return null;let u={...l,term:c};return $o(u)?u:null}return{name:n,origin:J1,provenanceTag(a){return cr(n,a)},async lookup(a){return i(a)},async pageByTitle(a){return i(a)},async linkedTitles(a,{limit:c=Z1}={}){let l=i(a);if(!l)return null;let u=Cm(s);return nP(s,l.text,l.term,u,r(),Math.max(0,c))}}}var J1,Nx,Q1,Z1,tP,Lx=P(()=>{Ze();Vn();zn();ar();Im();lr();J1="https://simple.wikipedia.org",Nx="simple-wikipedia-pack",Q1=/[A-Za-z][A-Za-z'-]*/g,Z1=25;tP=e=>e.charAt(0).toUpperCase()+e.slice(1);ii({name:Nx,create:sP})});var oP,rP,GY,Nm=P(()=>{Ze();Vn();Lr();lr();oP=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3,source:"wikipedia"}),rP=["this","is","about","the"],GY=rP.length});var Px=P(()=>{Pt();Qe();dp();Ze();We()});var Lm,eu,Sa=P(()=>{Lm=new Set(["person","place","object","event","time","quantity","organization","group","animal","plant","furniture","vehicle","insect","emotion","metal","liquid","weather","planet","jewelry","cutlery","government","material","artifact","location","structure","food","drink","clothing","body","language","mind","family","meal","season","number","entity","abstraction","physical_entity","attribute","state","act","communication","cognition","measure","unit"]),eu=new Set([...Lm,"property","concept","idea","content"])});var Mx=P(()=>{Ze();gm();Sa();Oi();Un()});var Fx=P(()=>{Ze()});var tu=P(()=>{kn();Or()});var Dx=P(()=>{Ze()});var iP,zx,Bx,Ux,S3,Wx=P(()=>{Dx();xa();iP=250,zx=Object.freeze([{id:"wikimedia-featured",name:"Wikimedia featured feed",kind:"contemporary",format:"wikimedia-feed",url:"https://api.wikimedia.org/feed/v1/wikipedia/en/featured",homepage:"https://www.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"hacker-news",name:"Hacker News",kind:"contemporary",format:"hn",url:"https://hacker-news.firebaseio.com/v0",homepage:"https://news.ycombinator.com/",licence:"user-submitted, discussion linked",browserVerified:"2026-08-08",minIntervalMs:iP,enabledByDefault:!0},{id:"usgs-quakes",name:"USGS earthquakes",kind:"contemporary",format:"usgs",url:"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson",homepage:"https://earthquake.usgs.gov/",licence:"US public domain",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"nyt-world",name:"NYT World News",kind:"contemporary",format:"rss",url:"https://rss.nytimes.com/services/xml/rss/nyt/World.xml",homepage:"https://www.nytimes.com/section/world",licence:"personal use with attribution",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"wikinews-published",name:"Wikinews",kind:"contemporary",format:"mediawiki",url:"https://en.wikinews.org/w/api.php",homepage:"https://en.wikinews.org/",licence:"CC BY 2.5",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"simple-wikipedia",name:"Simple English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://simple.wikipedia.org",homepage:"https://simple.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"wikidata",name:"Wikidata",kind:"kb",format:"wikidata",url:"https://www.wikidata.org",homepage:"https://www.wikidata.org/",licence:"CC0 1.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"wiktionary",name:"Wiktionary",kind:"kb",format:"wiktionary",url:"https://en.wiktionary.org",homepage:"https://en.wiktionary.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"dbpedia-lookup",name:"DBpedia Lookup",kind:"kb",format:"dbpedia-lookup",url:"https://lookup.dbpedia.org",homepage:"https://www.dbpedia.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!1},{id:"english-wikipedia",name:"English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://en.wikipedia.org",homepage:"https://en.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!1}]),Bx=Object.freeze(["wikimedia-featured","hacker-news","usgs-quakes","nyt-world","wikinews-published"]),Ux=Object.freeze(["simple-wikipedia","wikidata","wiktionary"]),S3=new Map(zx.map(e=>[e.id,e]))});var jt,k3,R3,_3,T3,A3,C3,O3,I3,N3,L3,P3,M3,F3,D3,z3,B3,U3,W3,G3,Pm=P(()=>{jt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},k3=jt("createRequire"),R3=jt("readFileSync"),_3=jt("access"),T3=jt("readFile"),A3=jt("writeFile"),C3=jt("appendFile"),O3=jt("mkdir"),I3=jt("mkdtemp"),N3=jt("rename"),L3=jt("unlink"),P3=jt("rm"),M3=jt("stat"),F3=jt("copyFile"),D3=jt("readdir"),z3=jt("createReadStream"),B3=jt("createWriteStream"),U3=jt("randomBytes"),W3=jt("spawnSync"),G3=jt("createInterface")});var Gx=P(()=>{});var Vx=P(()=>{Pt();Pm();Qe();ja();Gl();Em();We();Xt();Gx();Ze();zn();Kl();Vn()});var W5,G5,V5,K5,Fm=P(()=>{Ze();Mx();Fx();Ot();Vn();tu();Un();Wx();xa();lr();Zl();Vx();W5=Object.freeze({sources:Bx,kbSources:Ux,extraSources:Object.freeze([]),pollMinutes:15,enrichMinutes:10,enrichTermsPerCycle:3,negativeCacheTtlHours:24,syllogismsPerIngest:12,itemCap:30,newsFactCap:4e3,feedTop:3,windowHours:48,minIntervalMs:0}),G5=6*36e5,V5=Object.freeze({"simple-wikipedia":"simple-wikipedia",wikidata:"wikidata",wiktionary:"wiktionary","dbpedia-lookup":"dbpedia"}),K5=ks.teach});var Dm=P(()=>{Ze()});var pP,o4,Kx=P(()=>{ir();Ql();yo();Qe();Dm();Ze();pP={},o4=ne($e(qt(pP.url)),"..","..","..")});var i4,a4,c4,Hx=P(()=>{i4=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),a4=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"})}),c4=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion","ask-choice":"choiceQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});var m4,hP,gP,qx,h4,g4,b4,w4,y4,Yx=P(()=>{kn();tu();m4=Object.freeze({inline:"inline",enumerated:"enumerated"}),hP=new Set(["in","on","at","for","with","from","of","into","onto"]),gP=new Set(["you","i","it","he","she","they","we","there","someone","something","one","him","her","them","who","himself","herself","itself","themselves","myself","yourself"]),qx=new Set([...hP,"to","behind","before","near","next","along","alongside","under","over","between","among","during","without","about","by","as","like","that","if","when","while","being","because","since","until","so","and","but","or","immediately","likely","usually","normally","currently","is","are","was","were","do","does","did","has","have","had","will","would","could","should","might","must","can"]),h4=new Set([...qx,"be","been"]),g4=new RegExp("^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:(?:what|which)\\s+[a-z][\\w'-]*|where|when|why|how|who)\\s+(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\s+(.+?)[?.!]*$","i"),b4=new RegExp("^(.*?)\\b(?:what|who|which|where|when|why|how)\\s+(?:i|you|he|she|it|we|they)?\\s*(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\b","i"),w4=Object.freeze([{family:"AtLocation",predicates:Object.freeze(["mgx:atLocation","mgx:locatedNear"]),cue:/\b(where|located|location)\b/i},{family:"IsA/Synonym/HasProperty",predicates:Object.freeze(["rdfs:subClassOf","mgx:synonym","mgx:hasProperty"]),cue:/\b(kind of|type of|another word for|same as|synonym)\b/i},{family:"HasPrerequisite/HasSubevent",predicates:Object.freeze(["mgx:hasPrerequisite","mgx:hasSubevent","mgx:hasFirstSubevent","mgx:hasLastSubevent"]),cue:/\b(before|after|first|next|then|once you|in order to)\b/i},{family:"Desires/MotivatedByGoal",predicates:Object.freeze(["mgx:desires","mgx:motivatedByGoal","mgx:causesDesire"]),cue:/\b(want\w*|desire\w*|motivat\w*)\b/i},{family:"Causes",predicates:Object.freeze(["mgx:causes","mgx:causesDesire"]),cue:/\b(cause\w*|result(?:s|ed)? in|leads? to|led to)\b/i},{family:"PartOf/HasA/MadeOf",predicates:Object.freeze(["mgx:partOf","mgx:hasA","mgx:madeOf"]),cue:/\b(part of|made of|has a|have a)\b/i},{family:"CapableOf",predicates:Object.freeze(["mgx:capableOf","mgxneg:capableOf"]),cue:/\b(capable of|able to)\b/i},{family:"UsedFor",predicates:Object.freeze(["mgx:usedFor"]),cue:/\b(used for|used to|use for)\b/i}]),y4=new Set([...gP,...qx,"a","an","the","some","any","few","many","several","more","most","my","your","his","its","our","their","what","which","where","when","why","how","find","found","put","get","keep","store","place","buy","locate","hide","wear","carry","use","take","open","cross","need","want"])});function ka(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 nu(e,t,{cap:n=6,stopAt:s=null,toward:o=null}={}){let r=[e],i=new Set([e]),a=e;for(;r.length<n&&!(o&&a===o);){let c=[...t.get(a)||[]].filter(d=>!i.has(d)).sort(bP);if(!c.length)break;let l=o?c.filter(d=>d===o||Bm(d,t).has(o)):[];a=(l.length?l:c)[0];let u=s&&s.has(a);if(u&&r.length>1||(i.add(a),r.push(a),u))break}return r}function Bm(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 Um(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,Um(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function wP(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 yP(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let c=Bm(e,n),l=Bm(t,n);if(c.has(t)||l.has(e))return{distinct:!1,reason:"subsumes",lcs:c.has(t)?t:e};if(s.size)for(let h of c){let b=s.get(h);if(b){for(let g of l)if(b.has(g))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...c].filter(h=>l.has(h));if(!u.length)return c.size<2||l.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=h=>Um(h,n,o,new Set),p=u[0],f=d(p);for(let h of u){let b=d(h);(b>f||b===f&&h<p)&&(p=h,f=b)}if(f<=i)return{distinct:!0,reason:"root-subsumer",lcs:p};if(a){let h=a.get(p);return typeof h=="number"&&h<r?{distinct:!0,reason:"low-ic",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}return 2*f/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}function su(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],c=n||ka(t),l=wP(s),u=new Map,d=new Map(a.map($=>[$,$])),p=$=>{for(;d.get($)!==$;)d.set($,d.get(d.get($))),$=d.get($);return $},f=($,w)=>{let x=p($),R=p(w);x!==R&&d.set(x<R?R:x,x<R?x:R)},m=[];for(let $=0;$<a.length;$+=1)for(let w=$+1;w<a.length;w+=1){let x=yP(a[$],a[w],c,l,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[$],b:a[w],...x}),x.distinct||f(a[$],a[w])}let h=new Map;for(let $ of a){let w=p($);h.has(w)||h.set(w,[]),h.get(w).push($)}let b=$=>Um($,c,u,new Set),g=[...h.values()].map($=>{let w=[...$].sort(),x=w[0],R=b(x);for(let E of w){let k=b(E);k>R&&(R=k,x=E)}return{objects:w,label:x}}).sort(($,w)=>$.label.localeCompare(w.label));return{split:g.length>1,clusters:g,pairs:m}}var bP,ou=P(()=>{Ot();Sa();bP=(e,t)=>e<t?-1:e>t?1:0});var Xx=P(()=>{});function Jx(e,{pending:t=null}={}){return t?!0:String(e??"").split(`
170
- `).filter(n=>n.trim()!=="").length>1}var ru,_4,Qx=P(()=>{Xx();ru=Object.freeze({MEMORY_COUNT:"memory-count",MEMORY_CLASS:"memory-class",LETTER_WORDS:"letter-words",COLLECTION_CONTENTS:"collection-contents",TAUGHT_CLASS_COUNT:"taught-class-count",MEMBERSHIP_LIST:"membership-list",MEMBERSHIP_EXAMPLE:"membership-example",SKOS_NEIGHBOURHOOD:"skos-neighbourhood",WHAT_ELSE:"what-else",FACT_SET:"fact-set",FACT_READBACK:"fact-readback"}),_4=Object.freeze(Object.values(ru))});function Wm(e){return typeof e=="string"&&$P.test(e)}function Zx(e){return!!e&&typeof e=="object"&&ur(e.s)}function Gm(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Wm(e.world)&&ur(e.subject)&&ur(e.predicate)&&ur(e.object)}function Vm(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Wm(e.world)||!ur(e.name)||!EP.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(ur)}function Km(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Wm(e.world)&&ur(e.opening)}function eS(e){return Gm(e)||Vm(e)||Km(e)}function tS(e){let t=e||[],n=t.filter(l=>l.predicate===xP).sort((l,u)=>`${l.subject}\0${l.object}`.localeCompare(`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(l=>l.predicate==="rdf:type").map(l=>l.subject)),o=new Map;for(let l of t)l.predicate==="mgx:located-in"&&o.set(l.subject,l.object);let r=(l,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===l&&o.get(d.subject)===u),i=t.find(l=>typeof l.world=="string"&&l.kind==="fact"),a=(l,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:l,predicate:u,object:d}),c=[];for(let l of n){let u=l.subject,d=l.object;if(r(d,u))continue;let p=d,f=1;for(;s.has(p);)f+=1,p=`${d}-${f}`;s.add(p),c.push(a(p,"rdf:type",d)),c.push(a(p,"rdf:type","portable")),c.push(a(p,"mgx:located-in",u))}return c.length?[...t,...c]:t}var $P,vP,EP,ur,xP,dr=P(()=>{$P=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,vP=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),EP=new Set(vP),ur=e=>typeof e=="string"&&e.trim()!=="";xP="mgx:default-contains"});var SP,jP,C4,Ra=P(()=>{SP=Object.freeze(["mgx:consumes","mgx:display-name","mgx:evades","mgx:guards","mgx:hasMass","mgx:is-predator","mgx:mass-drain-per-turn","mgx:model","mgx:pursues","mgx:vision-radius"]),jP=Object.freeze(new Set(["mgx:consumes","mgx:evades","mgx:guards","mgx:pursues"])),C4=Object.freeze(["mgx:consumes","mgx:evades","mgx:pursues"])});var iu=P(()=>{});var kP,RP,_P,TP,AP,CP,OP,IP,NP,LP,PP,MP,FP,DP,zP,BP,UP,WP,GP,P4,VP,nS,M4,F4,sS=P(()=>{Vn();Or();kP="subClassOf",RP="typeAssertion",_P="relation",TP="someValuesFrom",AP="cardinality",CP="disjointWith",OP="possessive",IP="adjective",NP="capability",LP="union",PP="complement",MP="negativeType",FP="enumeration",DP="differentFrom",zP="bareExistential",BP="transitiveRole",UP="inverseRole",WP="universal",GP="subPropertyOf",P4=Object.freeze([kP,RP,_P,TP,AP,CP,OP,IP,NP,LP,PP,MP,FP,DP,zP,BP,UP,WP,GP]),VP=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),nS=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"]]),M4=Math.max(...[...nS.keys()].map(e=>e.split(" ").length)),F4=[...new Set([...VP,...[...nS.keys()].map(e=>e.split(" ")[0])])]});var fr=P(()=>{});var Hm=P(()=>{Fe();es();fr()});function Ut({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:vo.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 KP,vo,Se,HP,pr,ht,nn,fn,qP,oS,Bt,YP,XP,rS,V4,K4,H4,ci=P(()=>{KP=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),vo=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Se=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),HP=Object.freeze([Se.MemoryTerm]),pr=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),ht=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:vo.Parameter,name:e,kind:t,arg:n,required:s,note:o}),nn=()=>Object.freeze({type:vo.Precondition,pred:pr.graphLoaded}),fn=(e,t)=>Object.freeze({type:vo.Precondition,pred:pr.resolves,param:e,as:t}),qP=e=>Object.freeze({type:vo.Precondition,pred:pr.anyPresent,params:Object.freeze([...e])}),oS=()=>Object.freeze({type:vo.Precondition,pred:pr.memoryFacts}),Bt=(e,t=null)=>Object.freeze({type:vo.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});YP=Object.freeze([Ut({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[ht("query",Se.Query,{required:!1,note:"required unless a kind filter is given"}),ht("kind",Se.Kind,{required:!1}),ht("name",Se.Query,{required:!1}),ht("decorator",Se.Query,{required:!1})],preconditions:[nn(),qP(["query","kind"])],add:[Bt("matches","query")]}),Ut({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("description","symbol")]}),Ut({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("signature","symbol")]}),Ut({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[ht("module",Se.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[nn(),fn("module",Se.Symbol)],add:[Bt("impact","module")]}),Ut({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[ht("class",Se.Class,{arg:"class"})],preconditions:[nn(),fn("class",Se.Class)],add:[Bt("members","class")]}),Ut({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[ht("class",Se.Class,{arg:"class"})],preconditions:[nn(),fn("class",Se.Class)],add:[Bt("subclasses","class")]}),Ut({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[ht("module",Se.Module)],preconditions:[nn(),fn("module",Se.Module)],add:[Bt("exports","module")]}),Ut({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("callers","symbol")]}),Ut({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("callees","symbol")]}),Ut({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("calls","symbol")]}),Ut({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("tests","symbol")]}),Ut({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[nn()],add:[Bt("untested",null)]}),Ut({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("history","symbol")]}),Ut({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("cochanges","symbol")]}),Ut({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[ht("package",Se.Package,{required:!1})],preconditions:[nn()],add:[Bt("architecture","package")]}),Ut({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[ht("term",Se.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[oS(),fn("term",Se.MemoryTerm)],add:[Bt("related","term")]}),Ut({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[ht("class",Se.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),ht("expression",Se.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),ht("size",Se.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[oS(),fn("class",Se.MemoryTerm)],add:[Bt("sprite","class")]})]),XP=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),rS=YP,V4=XP(rS),K4=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"}),H4=Object.freeze({prefixes:KP,vocab:vo,kinds:Se,precond:pr,get capabilities(){return rS}})});var qm=P(()=>{ci()});var au=P(()=>{Un()});var Ym=P(()=>{ci()});function tM(e){let t={};for(let n of String(e).toLowerCase().match(/[a-z]+/g)||[])!t.expression&&Object.hasOwn(eo,n)&&(t.expression=n),!t.size&&pa([{predicate:eM,object:n}])!==1&&(t.size=n);return t}var hX,gX,bX,wX,eM,yX,Xm=P(()=>{es();Jn();Il();Ze();Fe();Va();cm();ci();Ym();hX=new RegExp(`\\b(?:${Object.keys(Yn).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s+")).join("|")})\\b`,"i"),gX=Object.freeze({"reverse:calls":{topic:"callers",arg:"symbol"},"forward:calls":{topic:"callees",arg:"symbol"},"reverse:tests":{topic:"tests",arg:"symbol"},"forward:tests":{topic:"tests",arg:"symbol"},"reverse:inherits":{topic:"subclasses",arg:"class"},"forward:reexports":{topic:"exports",arg:"module"},"forward:contains":{topic:"members",arg:"class"},"when:touches":{topic:"history",arg:"symbol"},"forward:cochange":{topic:"cochanges",arg:"symbol"},"reverse:cochange":{topic:"cochanges",arg:"symbol"}}),bX=Object.freeze({imports:"no importer/imports query tool in the registry (there is no tmct_imports); refusing beats mis-routing to calls",uses:"a query-side UNION (imports+calls+callsSymbol) with no single capability; a router that must emit ONE call cannot honour it \u2014 refuse",defines:"Module->symbol `defines` has no dedicated capability (tmct_members is Class-scoped `contains`); refuse rather than answer a different grain",serves:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool",denotes:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool"}),wX=Object.freeze({}),eM="mgx:hasProperty";yX=Object.freeze([{re:/\buntested\b|\bwithout\s+(?:a\s+)?tests?\b|\bhas\s+no\s+tests?\b|\bneeds?\s+(?:a\s+)?tests?\b/i,topic:"untested",noArg:!0,skipIfSuperlative:!0},{re:/\bblast\s*radius\b|\bimpacts?\b|\bimpacted\b|what\s+(?:a\s+)?change.*(?:reach|affect|touch)|what\s+(?:depends?\s+on|dependents?)\b/i,topic:"impact",arg:"module"},{re:/\bcall[\s-]*edges?\b|\bcall[\s-]*graph\b|\boutgoing\s+calls?\b|\bcall[\s-]*sites?\s+(?:of|in|out|from)\b/i,topic:"calls",arg:"symbol"},{re:/\bcallees?\b|wh(?:at|o)\s+does\s+\S+\s+call\b/i,topic:"callees",arg:"symbol"},{re:/\bcallers?\b|who\s+calls\b|what\s+calls\b/i,topic:"callers",arg:"symbol"},{re:/\btests?\b.*\b(?:for|cover|covering|of)\b|which\s+tests?\b|covers?\b|covered\b|test\s+coverage\b/i,topic:"tests",arg:"symbol"},{re:/\bcochang|change[- ]coupl/i,topic:"cochanges",arg:"symbol"},{re:/\bexports?\b|\bpublic\s+api\b/i,topic:"exports",arg:"module"},{re:/\bsubclasses?\b|children\s+of\b|\bextends?\b/i,topic:"subclasses",arg:"class"},{re:/\bmembers?\b|\bmethods?\s+of\b|\battributes?\s+of\b/i,topic:"members",arg:"class"},{re:/\bhistory\b|who\s+changed\b|commits?\s+(?:that\s+)?touch/i,topic:"history",arg:"symbol"},{re:/\bsignature\b/i,topic:"signature",arg:"symbol"},{re:/\bsynonyms?\b|\banother\s+word\s+for\b|\brelated\s+(?:words?|concepts?|to)\b/i,topic:"related",arg:"term"},{re:/\bsprite\b|\bicon\b|\bavatar\b|\bpicture\s+of\b|\bwhat\s+does\s+.+\s+look\s+like\b/i,topic:"sprite",arg:"class",slots:tM},{re:/\bdescribe\b|\bexplain\b|what\s+is\b|tell\s+me\s+about\b|definition\s+of\b/i,topic:"description",arg:"symbol"},{re:/\bsearch\b|\bfind\b|look\s+for\b/i,topic:"matches",arg:"query"}])});var cS=P(()=>{});var sM,lS=P(()=>{Xm();ci();Ym();cS();es();sM=Object.freeze([Object.freeze({id:"coverage-invariant",kind:"maintenance",invariant:"an impactful module must be tested",focusClass:"Module",modes:Object.freeze(["scoped","global"]),subGoals:Object.freeze(["impact","untested"]),priorityTopic:"impact",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"untested"}),b:Object.freeze({topic:"impact",of:"focus",withFocus:!0}),names:"the change's untested footprint",empty:"no coverage gap"}),achieves:"coverage-gap"}),Object.freeze({id:"cochange-risk-invariant",kind:"maintenance",invariant:"a module change-coupled with the focus must be tested",focusClass:"Module",modes:Object.freeze(["scoped"]),subGoals:Object.freeze(["cochanges","untested"]),priorityTopic:"cochanges",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"cochanges",of:"focus"}),b:Object.freeze({topic:"untested"}),names:"the change-coupled untested set",empty:"every change-coupled module is tested"}),achieves:"cochange-risk"})])});var cu=P(()=>{iu();au();Xm();lS();ci();qm()});function iM(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||ne(rM,"corpus","worlds")}function uS(e){try{return $a(rr(e))}catch{return null}}function dS(e){if(Qm.has(e))return Qm.get(e);let t=null,n=uS(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Qm.set(e,t),t}function aM(e,t){let n=dS(e);if(!n)return null;let s=n[String(t??"")];if(!Zx(s))return null;let o=`${e}\0${t}`;if(Zm.has(o))return Zm.get(o);let r=null,i=uS(ne(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],c=[],l=null;for(let u of i.toString("utf8").split(`
171
- `))if(u.trim())try{let d=JSON.parse(u);if(!eS(d)||d.world!==t)continue;Gm(d)?a.push(d):Vm(d)?c.push(d):Km(d)&&!l&&(l=d)}catch{}(a.length||c.length||l)&&(r={name:t,facts:tS(a),rules:c,meta:l})}return Zm.set(o,r),r}var lM,rM,Qm,Zm,cM,WX,lu=P(()=>{ir();Ql();yo();Qe();dr();lM={},rM=ne($e(qt(lM.url)),"..","..","..");Qm=new Map,Zm=new Map;cM=e=>({list:async()=>{let t=dS(e());return t?Object.keys(t).sort():null},load:async t=>aM(e(),t)}),WX=cM(()=>iM())});var QX,fS=P(()=>{Pt();Qe();zn();vi();Un();We();QX=ne(".tmct","memory","blocks")});var pS=P(()=>{fr()});var hS=P(()=>{zn();vi();fr()});var eh=P(()=>{zn();vi();fr()});var gS=P(()=>{eh();zn();Rs();fr()});var bS=P(()=>{});var wS=P(()=>{pS();hS();eh();gS();bS();fr()});var yS=P(()=>{fS();We();Tc();Gl();wS();Hm()});function li(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function du(e){let t=n=>pM.map((s,o)=>`--${n}-t${o+1}: ${li(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: ${li(e.taught,.12)}; --corpus-soft: ${li(e.corpus,.12)};`,`--entail-soft: ${li(e.entail,.14)}; --alert-soft: ${li(e.alert,.12)};`,`--sprite-pop: drop-shadow(0 0 .6px ${li(e.ink,e.popRimAlpha)}) drop-shadow(${e.popShadow});`].join(" ")}var uu,pM,G8,th=P(()=>{tu();uu=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)"})}),pM=[.35,.65,1];G8=`
166
+ `)}`:l,data:{...a,grounded:c}})}finally{await i()}}var HE=P(()=>{Qe();We();ot();fm.ownsGraphLoad=!0});var K0,qE=P(()=>{$f();Ty();Pv();Fv();zv();Uv();Gv();Kv();qv();Xv();gE();wE();$E();EE();Ll();RE();TE();CE();IE();LE();ME();DE();BE();WE();KE();HE();K0=Object.freeze({tmct_context:yf,tmct_context_more:_y,tmct_describe:Lv,tmct_snippet:Mv,tmct_signature:Dv,tmct_impact:Bv,tmct_search:Wv,tmct_members:Vv,tmct_subclasses:Hv,tmct_related:im,tmct_sprite:um,tmct_architecture:bE,tmct_exports:yE,tmct_untested:vE,tmct_ask:jE,tmct_tests_for:kE,tmct_history:_E,tmct_file_history:AE,tmct_method_history:OE,tmct_class_history:NE,tmct_callers:PE,tmct_callees:FE,tmct_calls:zE,tmct_cochanges:UE,tmct_export:dm,tmct_ingest:fm})});var pm=P(()=>{});var Pl,mm=P(()=>{Pl=()=>({relations:[],constructions:[]})});var YE,XE=P(()=>{Pt();Qe();Sg();Xt();vi();ns();Ac();Cc();qE();Ll();ot();Pr();hc();pm();mm();Cc();$f();Ll();gc(void 0);mc(Pl);YE=xg.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});function JE(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 ha(e){let t=String(e||"");return/^has$/i.test(t)?"have":/[a-z]ies$/i.test(t)&&!/[aeiou]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(?:ss|zz|x|ch|sh|o)es$/i.test(t)?t.slice(0,-2):/[sz]es$/i.test(t)?t.slice(0,-1):t.replace(/s$/i,"")}function gm(e){let t=ha(e);return/[^aeiou]e$/i.test(t)&&t.length>2?`${t.slice(0,-1)}ing`:`${t}ing`}function Fl(e){if(Gs[e])return Gs[e];let t=String(e??"");if(t.startsWith("mgxneg:")){let a=Fl(`mgx:${t.slice(7)}`);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[c,...l]=a.split(" ");return["does not",ha(c),...l].join(" ")}let n=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(t);if(n)return`is ${n[1].replace(/-/g," ")} than`;let s=new RegExp(`^mgx:(${Ml})-([a-z]+)$`,"i").exec(t);if(s)return`is ${s[1].toLowerCase()} ${s[2].toLowerCase()}`;let o=/^mgx:same-([a-z]+)-as$/i.exec(t);if(o)return`has the same ${o[1].toLowerCase()} as`;let r=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(t);if(r)return`${JE(r[1])}${r[2]?` ${r[2]}`:""}`;let i=t.indexOf(":");return i===-1?t:t.slice(i+1)}function QE(e){let t=typeof e=="string"?[e]:Array.isArray(e)?e:e?.extraction;if(!Array.isArray(t)||!t.length)return"";let n=new Set(t.map(s=>String(s)));return Object.entries(H0).filter(([s])=>n.has(s)).map(([,s])=>s).join(" ")}var Gs,Ml,H0,bm=P(()=>{Gs=Object.freeze({"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","owl:unionOf":"is either","owl:complementOf":"is anything that is not","owl:oneOf":"includes exactly","owl:differentFrom":"is not the same as","mgx:partOf":"is part of","mgx:memberOf":"is a member of","mgx:collectionOf":"is a collection of","mgx:hasA":"has","mgx:usedFor":"is used for","mgx:capableOf":"can","mgx:atLocation":"is found in","mgx:causes":"causes","mgx:hasProperty":"is","mgx:madeOf":"is made of","mgx:receivesAction":"can be","mgx:createdBy":"is created by","mgx:mannerOf":"is a way to","mgx:desires":"wants","mgx:locatedNear":"is typically near","mgx:motivatedByGoal":"is motivated by","mgx:obstructedBy":"can be prevented by","mgx:causesDesire":"makes you want to","mgx:hasSubevent":"involves","mgx:hasFirstSubevent":"begins with","mgx:hasLastSubevent":"ends with","mgx:hasPrerequisite":"requires","mgx:ownedBy":"is owned by","mgx:rendersAs":"renders as","mgx:nameFor":"is the name for","mgx:synonym":"means the same as","mgx:antonym":"is the opposite of","mgx:similarTo":"is similar to","mgx:relatedTo":"is related to","mgx:symbolOf":"is a symbol of","mgx:currently-in":"is in","mgx:located-in":"is in","mgx:fixed-in":"is fixed in","mgx:stands-locked-in":"stands locked in","mgx:works-in":"works in","mgx:pursues":"pursues","mgx:evades":"evades","mgx:consumes":"eats","mgx:vision-radius":"sees within","mgx:guards":"guards"}),Ml="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned";H0=Object.freeze({"clause-fallback":"(read from a clause fragment)","pronoun-carry":"(subject carried from the previous sentence)","identifier-token":"(identifier token)"})});var WH,GH,VH,Dl=P(()=>{WH=Object.freeze(["entity","set","event","measure"]),GH=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),VH=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 zl=P(()=>{});var xt,qH,YH,XH,JH,QH,ZH,eq,tq,nq,sq,oq,rq,iq,aq,cq,lq,qt,uq,dq,fq,yo=P(()=>{xt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},qH=xt("createRequire"),YH=xt("readFileSync"),XH=xt("access"),JH=xt("readFile"),QH=xt("writeFile"),ZH=xt("appendFile"),eq=xt("mkdir"),tq=xt("mkdtemp"),nq=xt("rename"),sq=xt("unlink"),oq=xt("rm"),rq=xt("stat"),iq=xt("copyFile"),aq=xt("readdir"),cq=xt("createReadStream"),lq=xt("createWriteStream"),qt=e=>String(e),uq=xt("randomBytes"),dq=xt("spawnSync"),fq=xt("createInterface")});var ix={};Lt(ix,{PHRASEBOOK_FILE:()=>tx,TECHNICAL_SLOTS:()=>wm,TEMPLATES_FILE:()=>ex,flatten:()=>$m,loadPhrasebook:()=>J0,loadTemplates:()=>vm,loadTemplatesMerged:()=>X0,render:()=>rx,renderSegments:()=>ox,slotKind:()=>sx,slotsOf:()=>ym});function ym(e){let t=[];for(let n of String(e).matchAll(nx))t.includes(n[1])||t.push(n[1]);return t}function sx(e){return Y0[e]||"entity"}function $m(e){let t="";for(let n of e)t+=n.text;return t}function ox(e,t={},n=ga){if(!n)throw new Error("renderSegments() before loadTemplates() \u2014 load the template library first");let s=n.get(e);if(!s)throw new Error(`unknown template id "${e}"`);let o=s.slots.filter(u=>t[u]===void 0||t[u]===null);if(o.length)throw new Error(`template "${e}" missing slot${o.length>1?"s":""}: ${o.join(", ")}`);let r=s.template,i=new RegExp(nx.source,"g"),a=[],c=0,l;for(;(l=i.exec(r))!==null;)l.index>c&&a.push({type:"prose",text:r.slice(c,l.index)}),a.push({type:sx(l[1]),text:String(t[l[1]])}),c=l.index+l[0].length;return c<r.length&&a.push({type:"prose",text:r.slice(c)}),a}async function vm(e=ex){let t=await Oe(e,"utf8"),n=new Map,s=t.split(`
167
+ `);for(let o=0;o<s.length;o+=1){let r=s[o].trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(c){throw new Error(`${e}:${o+1}: not valid JSON: ${c.message}`)}for(let c of["id","class","template","register"])if(typeof i[c]!="string"||!i[c])throw new Error(`${e}:${o+1}: missing/empty "${c}"`);if(!q0.has(i.register))throw new Error(`${e}:${o+1}: register must be terse|friendly|technical, got "${i.register}"`);if(n.has(i.id))throw new Error(`${e}:${o+1}: duplicate template id "${i.id}"`);let a=ym(i.template);if(i.register==="technical"){let c=a.filter(l=>!wm.has(l));if(c.length)throw new Error(`${e}:${o+1}: technical template "${i.id}" uses non-mechanical slot${c.length>1?"s":""}: ${c.join(", ")} (allowed: ${[...wm].join(", ")})`);if(!a.includes("provenance"))throw new Error(`${e}:${o+1}: technical template "${i.id}" must carry a {provenance} fill (an advanced claim always shows its source)`)}n.set(i.id,{...i,slots:a})}return ga=n,n}async function X0(e=[]){let t=ga,n=new Map;try{for(let s of e){let o=await vm(s);for(let[r,i]of o){if(!r.includes(":"))throw new Error(`${s}: extension-pack template id "${r}" is not namespaced ("<packname>:<id>")`);if(n.has(r))throw new Error(`${s}: duplicate template id "${r}" already loaded from an earlier path`);n.set(r,i)}}}finally{ga=t}return n}function rx(e,t={},n=ga){if(!n)throw new Error("render() before loadTemplates() \u2014 load the template library first");return $m(ox(e,t,n))}async function J0(e=tx){let t=await Oe(e,"utf8"),n=[],s=[],o=t.split(`
168
+ `);for(let r=0;r<o.length;r+=1){let i=o[r].trim();if(!(!i||i.startsWith("#"))){if(i.startsWith("~")){let a=i.slice(1).split(",").map(c=>c.trim().toLowerCase()).filter(Boolean);if(a.length<2)throw new Error(`${e}:${r+1}: a synonym family needs at least 2 entries`);s.push(a);continue}n.push({pattern:i,slots:ym(i)})}}return{patterns:n,synonyms:s}}var Q0,ZE,ex,tx,q0,nx,wm,Y0,ga,Bl=P(()=>{Pt();yo();Qe();Q0={},ZE=ne($e(qt(Q0.url)),"..","..",".."),ex=ne(ZE,"data","templates","responses.jsonl"),tx=ne(ZE,"data","phrasebook","software-phrases.txt"),q0=new Set(["terse","friendly","technical"]),nx=/\{([A-Za-z][A-Za-z0-9]*)\}/g,wm=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]));Y0={count:"number",when:"number",location:"path",commit:"path",provenance:"provenance"};ga=null});function e1(e,t={}){let n=Z0.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function t1(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>e1(s,t))):1}function lt(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:t1(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 Z0,ax=P(()=>{Z0=/^src:corpus:(.+)$/});var St,wq,ir,yq,$q,vq,Eq,xq,Sq,jq,kq,Rq,_q,Tq,Aq,cx,n1,Cq,Oq,Iq,ar=P(()=>{St=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},wq=St("createRequire"),ir=St("readFileSync"),yq=St("access"),$q=St("readFile"),vq=St("writeFile"),Eq=St("appendFile"),xq=St("mkdir"),Sq=St("mkdtemp"),jq=St("rename"),kq=St("unlink"),Rq=St("rm"),_q=St("stat"),Tq=St("copyFile"),Aq=St("readdir"),cx=St("createReadStream"),n1=St("createWriteStream"),Cq=St("randomBytes"),Oq=St("spawnSync"),Iq=St("createInterface")});function Em(e,t){let n=String(e).toLowerCase().replace(/^[^a-z]+/,"");if(!n)return null;for(let o of t.vowel_sound_consonants||[])if(n.startsWith(o))return!0;for(let o of t.consonant_sound_vowels||[])if(n.startsWith(o))return!1;let s=n[0];return"aeiou".includes(s)?!0:/[a-z]/.test(s)?!1:null}function i1(e=o1){let t=Qo(ir(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function Wl(){if(Ul===null)try{Ul=i1()}catch{Ul=[]}return Ul}var a1,s1,o1,r1,zq,Ul,Gl=P(()=>{ar();yo();Qe();ul();Bl();a1={},s1=$e(qt(a1.url)),o1=ne(s1,"..","..","data","templates","grammar-rules.toml"),r1=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),zq=Object.freeze(new Set(r1.filter(e=>e!=="prose")));Ul=null});function c1(){if(ba!==void 0)return ba;try{let e=lx?lx():l1();ba=e&&e.winkNLP&&e.model?e:null}catch{ba=null}return ba}function l1(){let e=process.getBuiltinModule("node:module").createRequire(u1.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function Vl(){if(ri!==void 0)return ri;let e=c1();if(!e)return ri=null,null;try{ri=e.winkNLP(e.model)}catch{ri=null}return ri}var u1,lx,ba,ri,Kl=P(()=>{u1={}});var xm=P(()=>{Kl()});var dx,ux=P(()=>{dx={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},rodent:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},yellow:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},terrestrial:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to",predicate:"mgx:partOf"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});var bx={};Lt(bx,{CODE_REF_SHAPE:()=>ql,DETERMINERS:()=>jm,OF_CLASSIFIER_HEADS:()=>Rm,OF_PARTITIVE_HEADS:()=>_m,QUANTIFIERS:()=>km,classify:()=>Tm,loadLexicon:()=>tn,lookupAdjective:()=>$a,lookupNoun:()=>dn,lookupProperName:()=>ii,lookupVerb:()=>ya,numberOf:()=>wa,predicateOf:()=>Hl,readsAsIndividualName:()=>Yl,thirdPerson:()=>mx,withProperNames:()=>gx});function wa(e){let t=String(e??"").trim().toLowerCase();return/^\d+$/.test(t)?Number(t):f1[t]??null}function mx(e){let t=String(e);return t==="have"?"has":/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:/(s|x|z|ch|sh)$/.test(t)?`${t}es`:`${t}s`}function Hl(e,t=px){if(e.predicate)return e.predicate;let n=e.prep?e.prep[0].toUpperCase()+e.prep.slice(1):"";return`${t}${mx(e.lemma)}${n}`}function hx(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 fx(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!p1.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(!m1.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 tn(e,t=px){if(!e&&Sm.has(t))return Sm.get(t);let n=dx,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return fx(s,n),e?(fx(s,e),s):(Sm.set(t,s),s)}function gx(e,t){let n=new Map(e.properNames);for(let s of t)n.set(String(s).toLowerCase(),String(s));return{...e,properNames:n}}function dn(e,t,n={}){return h1(e,t,n)[0]??null}function h1(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,c=l=>{l&&!a.has(l.lemma)&&(a.add(l.lemma),i.push(l))};if(r){let l=e.nouns.get(r)??null;return n.singularOnly&&o?(c(o),c(l)):(c(l),c(o)),i}for(let l of hx(s))c(e.nouns.get(l));return i}function ya(e,t){return g1(e,t)[0]??null}function g1(e,t){let n=String(t??"").toLowerCase(),s=[],o=new Set;for(let r of hx(n)){let i=e.verbs.get(r);i&&!o.has(i.lemma)&&(o.add(i.lemma),s.push(i))}return s}function $a(e,t){return e.adjectives.get(String(t??"").toLowerCase())??null}function ii(e,t){return e.properNames.get(String(t??"").toLowerCase())??null}function Yl(e,t){let n=String(e??"");if(!n)return!1;if(ii(t,n)||ql.test(n)||/^[a-z][\w]*(?:-[\w]+)+$/i.test(n)||/^[A-Z]/.test(n))return!0;let s=dn(t,n);return s?s.lemma.toLowerCase()!==n.toLowerCase():!0}function Tm(e,t=tn()){let n=String(e??"").trim();if(!n)return null;let s=n.toLowerCase();if(jm[s])return{pos:"determiner",type:jm[s]};if(km[s])return{pos:"quantifier",type:km[s]};let o=wa(s);if(o!=null)return{pos:"number",type:"cardinal",value:o};let r=ii(t,n);if(r)return{pos:"properName",type:"individual",canonical:r};let i=dn(t,s);if(i)return i.property?{pos:"noun",type:`${i.property}-property`,lemma:i.lemma,property:i.property}:{pos:"noun",type:"class",lemma:i.lemma};let a=ya(t,s);if(a)return{pos:"verb",type:"objectProperty",lemma:a.lemma,predicate:Hl(a,t.ns),...a.prep?{prep:a.prep}:{}};let c=$a(t,s);return c?{pos:"adjective",type:c.type,lemma:c.lemma}:null}var px,jm,km,Rm,_m,f1,p1,m1,Sm,ql,Hn=P(()=>{ux();px="tmct:",jm=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),km=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),Rm=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),_m=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),f1=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});p1=new Set(["data","object"]),m1=new Set(["subclass","data"]);Sm=new Map;ql=/[./\\#:@]/});var Yq,Xq,Jq,b1,Qq,Zq,eY,wx=P(()=>{ns();Fe();Yq=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),Xq=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),Jq=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`]}),b1=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"}),Qq=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"]}),Zq=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"}}),eY=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});function vx(e){return!!e&&typeof e=="object"&&typeof e.s=="string"&&w1.test(e.s)&&typeof e.t=="string"&&e.t.length>0&&Number.isInteger(e.r)&&e.r>0}function $o(e){if(!e||typeof e!="object")return!1;for(let t of["term","title","text","summary","url"])if(typeof e[t]!="string"||!e[t])return!1;if(!Number.isInteger(e.revid)||e.revid<=0)return!1;for(let t of["isa","source","licence"])if(e[t]!==void 0&&(typeof e[t]!="string"||!e[t]))return!1;return!0}function Jl(e,t){let n=String(e??"").split(/(?<=[.!?])\s+/),s="";for(let o of n){let r=s?`${s} ${o}`:o;if(r.length>t)break;s=r}return s||String(e??"").slice(0,t)}function $1(e){let t=e,n;do n=t,t=t.replace(/\s*\([^()]*\)/g,"");while(t!==n);return t}function $x(e,t){let n=dn(t,e);return n?V(n.lemma):e}function Ex(e,t){let n=$1(String(e??"")).match(y1);if(!n)return null;let s=!n[1],o=[];for(let u of n[2].trim().split(/\s+/))if(v1.has(u)||(o.push(u),o.length>=6))break;let r=o;for(let u=r.indexOf("of");u>0;u=r.indexOf("of")){let d=r[u-1]?.split("-").pop(),p=d&&$x(d,t);if(p&&(x1.has(p)||S1.has(p))){r=r.slice(u+1);continue}r=r.slice(0,u);break}for(;r.length&&E1.has(r[0]);)r=r.slice(1);if(!r.length)return null;let i=r[r.length-1].split("-").pop();if(!i)return null;let a=$x(i,t);if(yx.has(i)||yx.has(a))return null;let c=dn(t,i);if(!c)return null;let l=V(c.lemma);return s&&(!/s$/.test(i)||V(i)===l)?null:l}var w1,Xl,y1,v1,yx,E1,x1,S1,cr=P(()=>{Ze();Hn();wx();w1=/^ref-[0-3][0-9a-f]$/;Xl=400;y1=/^[A-Z][^.!?]*? (?:is|are) (?:(a|an|the) )?([a-z][a-z -]{1,60})/;v1=new Set(["that","which","where","who","whose","whom","when","used","found","made","with","in","on","for","from","by","to","and","or"]),yx=new Set(["type","kind","sort","form","class","variety","group","part","piece","member","way","term","name","word","thing","example","family","genus","species","unit","series","set","list","number","amount","body","mass"]),E1=new Set(["a","an","the"]),x1=new Set(["type","kind","sort","form","class","variety","species","breed","genus","group","part","parts","piece","bunch","bit","name","set","way","unit","family","ability","color","series","mammal","practice","list","amount","mass","reworking","blockage","goddess","aura","development","consisting","announcement","messengers","subset","carrying","photograph","adding","use","science","songbird","symptom","accumulation","number","suborder","falling","management","evaluation","superorder","activity","interlacing","introduction"]),S1=new Set(["either","one","each","both","any"])});var va,Ql=P(()=>{va=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});function xx(e=process.env){return e?.TMCT_REFERENCE_PACK_DIR||ne(j1,"corpus","reference")}function Sx(e){try{return va(ir(e))}catch{return null}}function Om(e){if(Am.has(e))return Am.get(e);let t=null,n=Sx(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Am.set(e,t),t}function k1(e,t){let n=`${e}\0${t}`;if(Cm.has(n))return Cm.get(n);let s=null,o=Sx(ne(e,"shards",`${t}.jsonl.gz`));if(o){s=new Map;for(let r of o.toString("utf8").split(`
169
+ `))if(r.trim())try{let i=JSON.parse(r);$o(i)&&s.set(i.term,i)}catch{}}return Cm.set(n,s),s}function Im(e,t){let n=Om(e);if(!n)return null;let s=n[String(t??"")];return vx(s)?k1(e,s.s)?.get(s.t)??null:null}var R1,j1,Am,Cm,Nm=P(()=>{ar();Ql();yo();Qe();cr();R1={},j1=ne($e(qt(R1.url)),"..","..","..");Am=new Map,Cm=new Map});function T1(e){if(!e||typeof e!="object")return!1;for(let t of["subject","predicate","object","provenance"])if(typeof e[t]!="string"||!e[t])return!1;return _1.includes(e.predicate)}function jx(e){return $o(e)?e.facts===void 0?!0:Array.isArray(e.facts)&&e.facts.length>0&&e.facts.every(T1):!1}function lr(e,t){return`research:${e}:${V(t)}`}function ai(e){if(!e||typeof e.name!="string"||!e.name||typeof e.create!="function")throw new Error("registerResearchSource: expected { name, create(options) }");A1.set(e.name,{name:e.name,create:e.create})}var _1,A1,hY,gY,ur=P(()=>{Ze();cr();_1=Object.freeze(["rdf:type","rdfs:subClassOf","mgx:partOf","mgx:hasA","mgx:usedFor","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:madeOf","mgx:createdBy","mgx:locatedNear","mgx:hasProperty"]);A1=new Map;hY=Object.freeze(["wikipedia","wikidata","simple-wikipedia","simple-wikipedia-pack","wiktionary","dbpedia"]),gY=Object.freeze({wikipedia:"simple-wikipedia",wikidata:"wikidata","simple-wikipedia":"simple-wikipedia","simple-wikipedia-pack":"simple-wikipedia-pack",wiktionary:"wiktionary",dbpedia:"dbpedia-lookup"})});function kx(e){let t=Number(e);return Number.isFinite(t)?t===408||t===429||t>=500:!1}var wY,Zl=P(()=>{wY=Object.freeze({failureThreshold:5,windowMs:6e4,cooldownMs:6e4})});function xa({fetchImpl:e,timeoutMs:t=ci,minIntervalMs:n=Yt,retryAfterFloorMs:s=C1,maxFetchesPerTurn:o=O1,userAgent:r,waitForSlot:i=!1,validators:a=null}={}){let c=e??((...v)=>globalThis.fetch(...v)),l=new Map,u=0,d=0,p=!1,f=0,m=0,h=0,b=!1,g=!1,$=()=>{if(!r)return null;let v={"Api-User-Agent":r};return typeof document>"u"&&(v["User-Agent"]=r),v};function w(v){let j=Number(v)*1e3;d=Date.now()+Math.max(j||0,s)}function x(v){let j=a?.get(v);if(!j)return null;let M={};return j.etag&&(M["If-None-Match"]=j.etag),j.lastModified&&(M["If-Modified-Since"]=j.lastModified),Object.keys(M).length?M:null}function R(v,j){if(!a)return;let M=j.headers?.get?.("etag")??"",z=j.headers?.get?.("last-modified")??"";if(!M&&!z)return;let K=a.get(v)??{};a.set(v,{etag:M||K.etag||"",lastModified:z||K.lastModified||""})}async function E(v,{asJson:j}){if(b&&h>=o)return g=!0,null;f+=1,h+=1;let M=typeof AbortController=="function"?new AbortController:null,z=M?setTimeout(()=>M.abort(),t):null;try{let K={};M&&(K.signal=M.signal);let Y={...$()??{},...x(v)??{}};Object.keys(Y).length&&(K.headers=Y);let X;try{X=await c(v,K)}catch{return m+=1,null}if(X.status===429)return w(X.headers?.get?.("retry-after")),m+=1,null;if(X.status===304)return a?{notModified:!0}:null;if(!X.ok)return kx(X.status)&&(m+=1),null;if(R(v,X),j){let L=await X.json();return L?.error?.code==="maxlag"?(w(X.headers?.get?.("retry-after")),m+=1,null):L}return await X.text()}catch{return M?.signal?.aborted&&(m+=1),null}finally{z!==null&&clearTimeout(z)}}async function k(v){return E(v,{asJson:!0})}async function O(v){return E(v,{asJson:!1})}let S=()=>Math.max(d,u+n);async function _(){for(;;){let v=Date.now();if(!p&&v>=S())return u=v,p=!0,!0;if(!i)return!1;await new Promise(j=>setTimeout(j,Math.max(S()-v,25)))}}async function y(v,j,{remember:M=!0}={}){if(l.has(v))return l.get(v);if(!await _())return null;let z=null;try{z=await j()}catch{z=null}finally{p=!1}return M&&l.set(v,z),z}function T(){b=!0,h=0,g=!1}function C(){return{fetches:f,systemicFailures:m,fetchesThisTurn:h,budgetExhausted:g}}return{fetchJson:k,fetchText:O,cachedFetch:y,beginTurn:T,stats:C}}var ci,Yt,C1,O1,Ea,Sa=P(()=>{Zl();ci=4e3,Yt=2e3,C1=5e3,O1=6,Ea=5});function D1({fetchImpl:e,origin:t=I1,timeoutMs:n=ci,minIntervalMs:s=Yt,lexicon:o=null,userAgent:r=F1,waitForSlot:i=!1,sourceName:a=L1,label:c=P1}={}){let l=xa({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:r,waitForSlot:i});function u(f,m){let h=Array.isArray(m?.[1])?m[1]:[];for(let b of h){let g=V(b);if(g===f||g.startsWith(f))return String(b)}return null}async function d(f,m){let h=await l.fetchJson(`${t}/api/rest_v1/page/summary/${encodeURIComponent(m.replace(/ /g,"_"))}`);if(!h)return null;let b=String(h.extract??""),g=Number(h.revision),$={term:f,title:String(h.title??m),text:b,summary:Jl(b,Xl),url:String(h.content_urls?.desktop?.page??`${t}/wiki/${encodeURIComponent(m.replace(/ /g,"_"))}`),revid:g},w=o;if(!w)try{w=tn()}catch{w=null}let x=w?Ex(b,w):null;return x&&($.isa=x),$o($)?$:null}async function p(f){let m=await l.fetchJson(`${t}/w/api.php?action=opensearch&format=json&origin=*&maxlag=${Ea}&search=${encodeURIComponent(f)}&limit=3`),h=m?u(f,m):null;return h?d(f,h):null}return{name:a,origin:t,label:c,beginTurn(){l.beginTurn()},stats(){return l.stats()},provenanceTag(f){return lr(a,f)},async lookup(f){let m=String(f??"");return m?l.cachedFetch(m,()=>p(m)):null},async pageByTitle(f){let m=String(f??"").trim();return m?l.cachedFetch(`title\0${V(m)}`,()=>d(V(m),m)):null},async linkedTitles(f,{limit:m=25}={}){let h=String(f??"").trim();if(!h)return null;let b=await l.cachedFetch(`links\0${V(h)}`,async()=>{let $=(await l.fetchJson(`${t}/w/api.php?action=parse&format=json&formatversion=2&origin=*&maxlag=${Ea}&prop=links&redirects=1&page=${encodeURIComponent(h)}&section=0`))?.parse?.links;if(!Array.isArray($))return null;let w=new Set,x=[];for(let R of $){if(!R||R.ns!==0||R.exists===!1)continue;let E=String(R.title??R["*"]??"").trim(),k=V(E);!E||!k||w.has(k)||(w.add(k),x.push(E))}return x});return Array.isArray(b)?b.slice(0,Math.max(0,m)):null}}}function z1(e={}){return D1({origin:N1,sourceName:_x,label:M1,waitForSlot:!0,...e})}var I1,N1,L1,_x,P1,M1,F1,Tx=P(()=>{Ze();Hn();cr();ur();Sa();I1="https://en.wikipedia.org",N1="https://simple.wikipedia.org",L1="wikipedia-live",_x="simple-wikipedia",P1="Wikipedia",M1="Simple English Wikipedia",F1="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)";ai({name:_x,create:z1})});function q1(e,t){let n=Array.isArray(t?.search)?t.search:[],s=null;for(let o of n){let r=String(o?.id??"");if(!Ox.test(r))continue;let i=V(o?.label??"");if(i===e)return r;s===null&&i.startsWith(e)&&(s=r)}return s}function Y1(e){let t=[];for(let[n,s]of Object.entries(G1)){let o=e?.claims?.[n];if(!Array.isArray(o))continue;let r=0;for(let i of o){if(t.length>=H1)return t;if(r>=K1)break;let a=i?.mainsnak;if(a?.snaktype!=="value")continue;let c=String(a?.datavalue?.value?.id??"");Ox.test(c)&&(t.push({property:n,predicate:s,id:c}),r+=1)}}return t}function X1(e,t,n){for(let s of V1)for(let o of e){if(o.property!==s)continue;let r=t.get(o.id);if(r&&r!==n)return r}return null}function J1({fetchImpl:e,origin:t=B1,timeoutMs:n=ci,minIntervalMs:s=Yt,userAgent:o=W1,waitForSlot:r=!1,sourceName:i=Cx}={}){let a=xa({fetchImpl:e,timeoutMs:n,minIntervalMs:s,userAgent:o,waitForSlot:r}),c=d=>`${t}/w/api.php?${new URLSearchParams({format:"json",origin:"*",maxlag:String(Ea),...d})}`;async function l(d){let p=new Map;if(!d.length)return p;let f=await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels",ids:d.join("|")}));for(let[m,h]of Object.entries(f?.entities??{})){let b=V(h?.labels?.en?.value??"");b&&p.set(m,b)}return p}async function u(d){let p=await a.fetchJson(c({action:"wbsearchentities",language:"en",uselang:"en",type:"item",limit:"5",search:d})),f=p?q1(d,p):null;if(!f)return null;let h=(await a.fetchJson(c({action:"wbgetentities",languages:"en",props:"labels|descriptions|claims|info",ids:f})))?.entities?.[f];if(!h)return null;let b=Y1(h),g=await l(b.map(O=>O.id)),$=lr(i,d),w=[],x=new Set;for(let O of b){let S=g.get(O.id);!S||S===d||x.has(`${O.predicate}\0${S}`)||(x.add(`${O.predicate}\0${S}`),w.push({subject:d,predicate:O.predicate,object:S,provenance:$}))}let R=String(h.descriptions?.en?.value??""),E={term:d,title:String(h.labels?.en?.value??""),text:R,summary:Jl(R,Xl),url:`${t}/wiki/${f}`,revid:Number(h.lastrevid),source:Ax,licence:U1},k=X1(b,g,d);return k&&(E.isa=k),w.length&&(E.facts=w),jx(E)?E:null}return{name:i,origin:t,label:Ax,beginTurn(){a.beginTurn()},stats(){return a.stats()},provenanceTag(d){return lr(i,d)},async lookup(d){let p=V(d??"");return p?a.cachedFetch(p,()=>u(p)):null}}}function Q1(e={}){return J1({waitForSlot:!0,...e})}var B1,Cx,Ax,U1,W1,G1,V1,K1,H1,Ox,Ix=P(()=>{Ze();cr();ur();Sa();B1="https://www.wikidata.org",Cx="wikidata",Ax="Wikidata",U1="CC0 1.0",W1="the-mechanical-code-talker (+https://tmct.polycode.co.uk/)",G1=Object.freeze({P31:"rdf:type",P279:"rdfs:subClassOf",P361:"mgx:partOf",P527:"mgx:hasA",P186:"mgx:madeOf",P366:"mgx:usedFor",P276:"mgx:atLocation",P1542:"mgx:causes",P170:"mgx:createdBy",P2670:"mgx:hasA"}),V1=["P279","P31"],K1=3,H1=12,Ox=/^Q[1-9][0-9]*$/;ai({name:Cx,create:Q1})});function nP(e,t){let n=dn(t,e);return n?V(n.lemma):V(e)}function oP(e,t,n,s,o,r){if(!s||r<=0)return[];let i=new Set([n]),a=[];for(let c of String(t??"").matchAll(eP)){if(a.length>=r)break;let l=nP(c[0],o);!l||!Ag(l)||i.has(l)||!s[l]||(i.add(l),Im(e,l)&&a.push(sP(l)))}return a}function rP({dir:e,lexicon:t=null,sourceName:n=Nx}={}){let s=e||xx(),o=t;function r(){if(o)return o;try{o=tn()}catch{o=null}return o}function i(a){let c=V(a??"");if(!c)return null;let l=Im(s,c);if(!l)return null;let u={...l,term:c};return $o(u)?u:null}return{name:n,origin:Z1,provenanceTag(a){return lr(n,a)},async lookup(a){return i(a)},async pageByTitle(a){return i(a)},async linkedTitles(a,{limit:c=tP}={}){let l=i(a);if(!l)return null;let u=Om(s);return oP(s,l.text,l.term,u,r(),Math.max(0,c))}}}var Z1,Nx,eP,tP,sP,Lx=P(()=>{Ze();Hn();Bn();cr();Nm();ur();Z1="https://simple.wikipedia.org",Nx="simple-wikipedia-pack",eP=/[A-Za-z][A-Za-z'-]*/g,tP=25;sP=e=>e.charAt(0).toUpperCase()+e.slice(1);ai({name:Nx,create:rP})});var iP,aP,KY,Lm=P(()=>{Ze();Hn();Pr();ur();iP=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3,source:"wikipedia"}),aP=["this","is","about","the"],KY=aP.length});var Px=P(()=>{Pt();Qe();dp();Ze();We()});var Pm,eu,ja=P(()=>{Pm=new Set(["person","place","object","event","time","quantity","organization","group","animal","plant","furniture","vehicle","insect","emotion","metal","liquid","weather","planet","jewelry","cutlery","government","material","artifact","location","structure","food","drink","clothing","body","language","mind","family","meal","season","number","entity","abstraction","physical_entity","attribute","state","act","communication","cognition","measure","unit"]),eu=new Set([...Pm,"property","concept","idea","content"])});var Mx=P(()=>{Ze();bm();ja();Ii();Wn()});var Fx=P(()=>{Ze()});var tu=P(()=>{kn();Ir()});var Dx=P(()=>{Ze()});var cP,zx,Bx,Ux,k3,Wx=P(()=>{Dx();Sa();cP=250,zx=Object.freeze([{id:"wikimedia-featured",name:"Wikimedia featured feed",kind:"contemporary",format:"wikimedia-feed",url:"https://api.wikimedia.org/feed/v1/wikipedia/en/featured",homepage:"https://www.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"hacker-news",name:"Hacker News",kind:"contemporary",format:"hn",url:"https://hacker-news.firebaseio.com/v0",homepage:"https://news.ycombinator.com/",licence:"user-submitted, discussion linked",browserVerified:"2026-08-08",minIntervalMs:cP,enabledByDefault:!0},{id:"usgs-quakes",name:"USGS earthquakes",kind:"contemporary",format:"usgs",url:"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson",homepage:"https://earthquake.usgs.gov/",licence:"US public domain",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"nyt-world",name:"NYT World News",kind:"contemporary",format:"rss",url:"https://rss.nytimes.com/services/xml/rss/nyt/World.xml",homepage:"https://www.nytimes.com/section/world",licence:"personal use with attribution",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"wikinews-published",name:"Wikinews",kind:"contemporary",format:"mediawiki",url:"https://en.wikinews.org/w/api.php",homepage:"https://en.wikinews.org/",licence:"CC BY 2.5",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"simple-wikipedia",name:"Simple English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://simple.wikipedia.org",homepage:"https://simple.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"wikidata",name:"Wikidata",kind:"kb",format:"wikidata",url:"https://www.wikidata.org",homepage:"https://www.wikidata.org/",licence:"CC0 1.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"wiktionary",name:"Wiktionary",kind:"kb",format:"wiktionary",url:"https://en.wiktionary.org",homepage:"https://en.wiktionary.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!0},{id:"dbpedia-lookup",name:"DBpedia Lookup",kind:"kb",format:"dbpedia-lookup",url:"https://lookup.dbpedia.org",homepage:"https://www.dbpedia.org/",licence:"CC BY-SA 3.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!1},{id:"english-wikipedia",name:"English Wikipedia",kind:"kb",format:"wikipedia-summary",url:"https://en.wikipedia.org",homepage:"https://en.wikipedia.org/",licence:"CC BY-SA 4.0",browserVerified:"2026-08-08",minIntervalMs:Yt,enabledByDefault:!1}]),Bx=Object.freeze(["wikimedia-featured","hacker-news","usgs-quakes","nyt-world","wikinews-published"]),Ux=Object.freeze(["simple-wikipedia","wikidata","wiktionary"]),k3=new Map(zx.map(e=>[e.id,e]))});var jt,_3,T3,A3,C3,O3,I3,N3,L3,P3,M3,F3,D3,z3,B3,U3,W3,G3,V3,K3,Mm=P(()=>{jt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},_3=jt("createRequire"),T3=jt("readFileSync"),A3=jt("access"),C3=jt("readFile"),O3=jt("writeFile"),I3=jt("appendFile"),N3=jt("mkdir"),L3=jt("mkdtemp"),P3=jt("rename"),M3=jt("unlink"),F3=jt("rm"),D3=jt("stat"),z3=jt("copyFile"),B3=jt("readdir"),U3=jt("createReadStream"),W3=jt("createWriteStream"),G3=jt("randomBytes"),V3=jt("spawnSync"),K3=jt("createInterface")});var Gx=P(()=>{});var Vx=P(()=>{Pt();Mm();Qe();ka();Gl();xm();We();Xt();Gx();Ze();Bn();Kl();Hn()});var V5,K5,H5,q5,Dm=P(()=>{Ze();Mx();Fx();Ot();Hn();tu();Wn();Wx();Sa();ur();Zl();Vx();V5=Object.freeze({sources:Bx,kbSources:Ux,extraSources:Object.freeze([]),pollMinutes:15,enrichMinutes:10,enrichTermsPerCycle:3,negativeCacheTtlHours:24,syllogismsPerIngest:12,itemCap:30,newsFactCap:4e3,feedTop:3,windowHours:48,minIntervalMs:0}),K5=6*36e5,H5=Object.freeze({"simple-wikipedia":"simple-wikipedia",wikidata:"wikidata",wiktionary:"wiktionary","dbpedia-lookup":"dbpedia"}),q5=ks.teach});var zm=P(()=>{Ze()});var hP,i4,Kx=P(()=>{ar();Ql();yo();Qe();zm();Ze();hP={},i4=ne($e(qt(hP.url)),"..","..","..")});var c4,l4,u4,Hx=P(()=>{c4=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),l4=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"})}),u4=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion","ask-choice":"choiceQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});var g4,bP,wP,qx,b4,w4,y4,$4,v4,Yx=P(()=>{kn();tu();g4=Object.freeze({inline:"inline",enumerated:"enumerated"}),bP=new Set(["in","on","at","for","with","from","of","into","onto"]),wP=new Set(["you","i","it","he","she","they","we","there","someone","something","one","him","her","them","who","himself","herself","itself","themselves","myself","yourself"]),qx=new Set([...bP,"to","behind","before","near","next","along","alongside","under","over","between","among","during","without","about","by","as","like","that","if","when","while","being","because","since","until","so","and","but","or","immediately","likely","usually","normally","currently","is","are","was","were","do","does","did","has","have","had","will","would","could","should","might","must","can"]),b4=new Set([...qx,"be","been"]),w4=new RegExp("^(?:in|at|on|from|by|with|for|of|to|off)\\s+(?:(?:what|which)\\s+[a-z][\\w'-]*|where|when|why|how|who)\\s+(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\s+(.+?)[?.!]*$","i"),y4=new RegExp("^(.*?)\\b(?:what|who|which|where|when|why|how)\\s+(?:i|you|he|she|it|we|they)?\\s*(?:is|are|was|were|do|does|did|can|could|should|would|will|has|have|might|must)\\b","i"),$4=Object.freeze([{family:"AtLocation",predicates:Object.freeze(["mgx:atLocation","mgx:locatedNear"]),cue:/\b(where|located|location)\b/i},{family:"IsA/Synonym/HasProperty",predicates:Object.freeze(["rdfs:subClassOf","mgx:synonym","mgx:hasProperty"]),cue:/\b(kind of|type of|another word for|same as|synonym)\b/i},{family:"HasPrerequisite/HasSubevent",predicates:Object.freeze(["mgx:hasPrerequisite","mgx:hasSubevent","mgx:hasFirstSubevent","mgx:hasLastSubevent"]),cue:/\b(before|after|first|next|then|once you|in order to)\b/i},{family:"Desires/MotivatedByGoal",predicates:Object.freeze(["mgx:desires","mgx:motivatedByGoal","mgx:causesDesire"]),cue:/\b(want\w*|desire\w*|motivat\w*)\b/i},{family:"Causes",predicates:Object.freeze(["mgx:causes","mgx:causesDesire"]),cue:/\b(cause\w*|result(?:s|ed)? in|leads? to|led to)\b/i},{family:"PartOf/HasA/MadeOf",predicates:Object.freeze(["mgx:partOf","mgx:hasA","mgx:madeOf"]),cue:/\b(part of|made of|has a|have a)\b/i},{family:"CapableOf",predicates:Object.freeze(["mgx:capableOf","mgxneg:capableOf"]),cue:/\b(capable of|able to)\b/i},{family:"UsedFor",predicates:Object.freeze(["mgx:usedFor"]),cue:/\b(used for|used to|use for)\b/i}]),v4=new Set([...wP,...qx,"a","an","the","some","any","few","many","several","more","most","my","your","his","its","our","their","what","which","where","when","why","how","find","found","put","get","keep","store","place","buy","locate","hide","wear","carry","use","take","open","cross","need","want"])});function Ra(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 nu(e,t,{cap:n=6,stopAt:s=null,toward:o=null}={}){let r=[e],i=new Set([e]),a=e;for(;r.length<n&&!(o&&a===o);){let c=[...t.get(a)||[]].filter(d=>!i.has(d)).sort(yP);if(!c.length)break;let l=o?c.filter(d=>d===o||Um(d,t).has(o)):[];a=(l.length?l:c)[0];let u=s&&s.has(a);if(u&&r.length>1||(i.add(a),r.push(a),u))break}return r}function Um(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 Wm(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,Wm(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function $P(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 vP(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let c=Um(e,n),l=Um(t,n);if(c.has(t)||l.has(e))return{distinct:!1,reason:"subsumes",lcs:c.has(t)?t:e};if(s.size)for(let h of c){let b=s.get(h);if(b){for(let g of l)if(b.has(g))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...c].filter(h=>l.has(h));if(!u.length)return c.size<2||l.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=h=>Wm(h,n,o,new Set),p=u[0],f=d(p);for(let h of u){let b=d(h);(b>f||b===f&&h<p)&&(p=h,f=b)}if(f<=i)return{distinct:!0,reason:"root-subsumer",lcs:p};if(a){let h=a.get(p);return typeof h=="number"&&h<r?{distinct:!0,reason:"low-ic",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}return 2*f/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:p}:{distinct:!1,reason:"shared-lineage",lcs:p}}function su(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],c=n||Ra(t),l=$P(s),u=new Map,d=new Map(a.map($=>[$,$])),p=$=>{for(;d.get($)!==$;)d.set($,d.get(d.get($))),$=d.get($);return $},f=($,w)=>{let x=p($),R=p(w);x!==R&&d.set(x<R?R:x,x<R?x:R)},m=[];for(let $=0;$<a.length;$+=1)for(let w=$+1;w<a.length;w+=1){let x=vP(a[$],a[w],c,l,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[$],b:a[w],...x}),x.distinct||f(a[$],a[w])}let h=new Map;for(let $ of a){let w=p($);h.has(w)||h.set(w,[]),h.get(w).push($)}let b=$=>Wm($,c,u,new Set),g=[...h.values()].map($=>{let w=[...$].sort(),x=w[0],R=b(x);for(let E of w){let k=b(E);k>R&&(R=k,x=E)}return{objects:w,label:x}}).sort(($,w)=>$.label.localeCompare(w.label));return{split:g.length>1,clusters:g,pairs:m}}var yP,ou=P(()=>{Ot();ja();yP=(e,t)=>e<t?-1:e>t?1:0});var Xx=P(()=>{});function Jx(e,{pending:t=null}={}){return t?!0:String(e??"").split(`
170
+ `).filter(n=>n.trim()!=="").length>1}var ru,A4,Qx=P(()=>{Xx();ru=Object.freeze({MEMORY_COUNT:"memory-count",MEMORY_CLASS:"memory-class",LETTER_WORDS:"letter-words",COLLECTION_CONTENTS:"collection-contents",TAUGHT_CLASS_COUNT:"taught-class-count",MEMBERSHIP_LIST:"membership-list",MEMBERSHIP_EXAMPLE:"membership-example",SKOS_NEIGHBOURHOOD:"skos-neighbourhood",WHAT_ELSE:"what-else",FACT_SET:"fact-set",FACT_READBACK:"fact-readback"}),A4=Object.freeze(Object.values(ru))});function Gm(e){return typeof e=="string"&&EP.test(e)}function Zx(e){return!!e&&typeof e=="object"&&dr(e.s)}function Vm(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Gm(e.world)&&dr(e.subject)&&dr(e.predicate)&&dr(e.object)}function Km(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Gm(e.world)||!dr(e.name)||!SP.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(dr)}function Hm(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Gm(e.world)&&dr(e.opening)}function eS(e){return Vm(e)||Km(e)||Hm(e)}function tS(e){let t=e||[],n=t.filter(l=>l.predicate===jP).sort((l,u)=>`${l.subject}\0${l.object}`.localeCompare(`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(l=>l.predicate==="rdf:type").map(l=>l.subject)),o=new Map;for(let l of t)l.predicate==="mgx:located-in"&&o.set(l.subject,l.object);let r=(l,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===l&&o.get(d.subject)===u),i=t.find(l=>typeof l.world=="string"&&l.kind==="fact"),a=(l,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:l,predicate:u,object:d}),c=[];for(let l of n){let u=l.subject,d=l.object;if(r(d,u))continue;let p=d,f=1;for(;s.has(p);)f+=1,p=`${d}-${f}`;s.add(p),c.push(a(p,"rdf:type",d)),c.push(a(p,"rdf:type","portable")),c.push(a(p,"mgx:located-in",u))}return c.length?[...t,...c]:t}var EP,xP,SP,dr,jP,fr=P(()=>{EP=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,xP=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),SP=new Set(xP),dr=e=>typeof e=="string"&&e.trim()!=="";jP="mgx:default-contains"});var kP,RP,I4,_a=P(()=>{kP=Object.freeze(["mgx:consumes","mgx:display-name","mgx:evades","mgx:guards","mgx:hasMass","mgx:is-predator","mgx:mass-drain-per-turn","mgx:model","mgx:pursues","mgx:vision-radius"]),RP=Object.freeze(new Set(["mgx:consumes","mgx:evades","mgx:guards","mgx:pursues"])),I4=Object.freeze(["mgx:consumes","mgx:evades","mgx:pursues"])});var iu=P(()=>{});var _P,TP,AP,CP,OP,IP,NP,LP,PP,MP,FP,DP,zP,BP,UP,WP,GP,VP,KP,F4,HP,nS,D4,z4,sS=P(()=>{Hn();Ir();_P="subClassOf",TP="typeAssertion",AP="relation",CP="someValuesFrom",OP="cardinality",IP="disjointWith",NP="possessive",LP="adjective",PP="capability",MP="union",FP="complement",DP="negativeType",zP="enumeration",BP="differentFrom",UP="bareExistential",WP="transitiveRole",GP="inverseRole",VP="universal",KP="subPropertyOf",F4=Object.freeze([_P,TP,AP,CP,OP,IP,NP,LP,PP,MP,FP,DP,zP,BP,UP,WP,GP,VP,KP]),HP=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),nS=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"]]),D4=Math.max(...[...nS.keys()].map(e=>e.split(" ").length)),z4=[...new Set([...HP,...[...nS.keys()].map(e=>e.split(" ")[0])])]});var pr=P(()=>{});var qm=P(()=>{Fe();ns();pr()});function Ut({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:vo.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 qP,vo,Se,YP,mr,ht,nn,fn,XP,oS,Bt,JP,QP,rS,H4,q4,Y4,li=P(()=>{qP=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),vo=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Se=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),YP=Object.freeze([Se.MemoryTerm]),mr=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),ht=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:vo.Parameter,name:e,kind:t,arg:n,required:s,note:o}),nn=()=>Object.freeze({type:vo.Precondition,pred:mr.graphLoaded}),fn=(e,t)=>Object.freeze({type:vo.Precondition,pred:mr.resolves,param:e,as:t}),XP=e=>Object.freeze({type:vo.Precondition,pred:mr.anyPresent,params:Object.freeze([...e])}),oS=()=>Object.freeze({type:vo.Precondition,pred:mr.memoryFacts}),Bt=(e,t=null)=>Object.freeze({type:vo.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});JP=Object.freeze([Ut({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[ht("query",Se.Query,{required:!1,note:"required unless a kind filter is given"}),ht("kind",Se.Kind,{required:!1}),ht("name",Se.Query,{required:!1}),ht("decorator",Se.Query,{required:!1})],preconditions:[nn(),XP(["query","kind"])],add:[Bt("matches","query")]}),Ut({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("description","symbol")]}),Ut({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("signature","symbol")]}),Ut({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[ht("module",Se.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[nn(),fn("module",Se.Symbol)],add:[Bt("impact","module")]}),Ut({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[ht("class",Se.Class,{arg:"class"})],preconditions:[nn(),fn("class",Se.Class)],add:[Bt("members","class")]}),Ut({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[ht("class",Se.Class,{arg:"class"})],preconditions:[nn(),fn("class",Se.Class)],add:[Bt("subclasses","class")]}),Ut({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[ht("module",Se.Module)],preconditions:[nn(),fn("module",Se.Module)],add:[Bt("exports","module")]}),Ut({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("callers","symbol")]}),Ut({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("callees","symbol")]}),Ut({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("calls","symbol")]}),Ut({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("tests","symbol")]}),Ut({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[nn()],add:[Bt("untested",null)]}),Ut({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("history","symbol")]}),Ut({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[ht("symbol",Se.Symbol)],preconditions:[nn(),fn("symbol",Se.Symbol)],add:[Bt("cochanges","symbol")]}),Ut({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[ht("package",Se.Package,{required:!1})],preconditions:[nn()],add:[Bt("architecture","package")]}),Ut({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[ht("term",Se.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[oS(),fn("term",Se.MemoryTerm)],add:[Bt("related","term")]}),Ut({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[ht("class",Se.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),ht("expression",Se.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),ht("size",Se.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[oS(),fn("class",Se.MemoryTerm)],add:[Bt("sprite","class")]})]),QP=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),rS=JP,H4=QP(rS),q4=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"}),Y4=Object.freeze({prefixes:qP,vocab:vo,kinds:Se,precond:mr,get capabilities(){return rS}})});var Ym=P(()=>{li()});var au=P(()=>{Wn()});var Xm=P(()=>{li()});function sM(e){let t={};for(let n of String(e).toLowerCase().match(/[a-z]+/g)||[])!t.expression&&Object.hasOwn(eo,n)&&(t.expression=n),!t.size&&ma([{predicate:nM,object:n}])!==1&&(t.size=n);return t}var bX,wX,yX,$X,nM,vX,Jm=P(()=>{ns();Zn();Il();Ze();Fe();Ka();lm();li();Xm();bX=new RegExp(`\\b(?:${Object.keys(Jn).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s+")).join("|")})\\b`,"i"),wX=Object.freeze({"reverse:calls":{topic:"callers",arg:"symbol"},"forward:calls":{topic:"callees",arg:"symbol"},"reverse:tests":{topic:"tests",arg:"symbol"},"forward:tests":{topic:"tests",arg:"symbol"},"reverse:inherits":{topic:"subclasses",arg:"class"},"forward:reexports":{topic:"exports",arg:"module"},"forward:contains":{topic:"members",arg:"class"},"when:touches":{topic:"history",arg:"symbol"},"forward:cochange":{topic:"cochanges",arg:"symbol"},"reverse:cochange":{topic:"cochanges",arg:"symbol"}}),yX=Object.freeze({imports:"no importer/imports query tool in the registry (there is no tmct_imports); refusing beats mis-routing to calls",uses:"a query-side UNION (imports+calls+callsSymbol) with no single capability; a router that must emit ONE call cannot honour it \u2014 refuse",defines:"Module->symbol `defines` has no dedicated capability (tmct_members is Class-scoped `contains`); refuse rather than answer a different grain",serves:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool",denotes:"a provider-declared edge with no capability in the registry; the ask lane traverses it directly, so refusing here beats mis-routing to a code-grain tool"}),$X=Object.freeze({}),nM="mgx:hasProperty";vX=Object.freeze([{re:/\buntested\b|\bwithout\s+(?:a\s+)?tests?\b|\bhas\s+no\s+tests?\b|\bneeds?\s+(?:a\s+)?tests?\b/i,topic:"untested",noArg:!0,skipIfSuperlative:!0},{re:/\bblast\s*radius\b|\bimpacts?\b|\bimpacted\b|what\s+(?:a\s+)?change.*(?:reach|affect|touch)|what\s+(?:depends?\s+on|dependents?)\b/i,topic:"impact",arg:"module"},{re:/\bcall[\s-]*edges?\b|\bcall[\s-]*graph\b|\boutgoing\s+calls?\b|\bcall[\s-]*sites?\s+(?:of|in|out|from)\b/i,topic:"calls",arg:"symbol"},{re:/\bcallees?\b|wh(?:at|o)\s+does\s+\S+\s+call\b/i,topic:"callees",arg:"symbol"},{re:/\bcallers?\b|who\s+calls\b|what\s+calls\b/i,topic:"callers",arg:"symbol"},{re:/\btests?\b.*\b(?:for|cover|covering|of)\b|which\s+tests?\b|covers?\b|covered\b|test\s+coverage\b/i,topic:"tests",arg:"symbol"},{re:/\bcochang|change[- ]coupl/i,topic:"cochanges",arg:"symbol"},{re:/\bexports?\b|\bpublic\s+api\b/i,topic:"exports",arg:"module"},{re:/\bsubclasses?\b|children\s+of\b|\bextends?\b/i,topic:"subclasses",arg:"class"},{re:/\bmembers?\b|\bmethods?\s+of\b|\battributes?\s+of\b/i,topic:"members",arg:"class"},{re:/\bhistory\b|who\s+changed\b|commits?\s+(?:that\s+)?touch/i,topic:"history",arg:"symbol"},{re:/\bsignature\b/i,topic:"signature",arg:"symbol"},{re:/\bsynonyms?\b|\banother\s+word\s+for\b|\brelated\s+(?:words?|concepts?|to)\b/i,topic:"related",arg:"term"},{re:/\bsprite\b|\bicon\b|\bavatar\b|\bpicture\s+of\b|\bwhat\s+does\s+.+\s+look\s+like\b/i,topic:"sprite",arg:"class",slots:sM},{re:/\bdescribe\b|\bexplain\b|what\s+is\b|tell\s+me\s+about\b|definition\s+of\b/i,topic:"description",arg:"symbol"},{re:/\bsearch\b|\bfind\b|look\s+for\b/i,topic:"matches",arg:"query"}])});var cS=P(()=>{});var rM,lS=P(()=>{Jm();li();Xm();cS();ns();rM=Object.freeze([Object.freeze({id:"coverage-invariant",kind:"maintenance",invariant:"an impactful module must be tested",focusClass:"Module",modes:Object.freeze(["scoped","global"]),subGoals:Object.freeze(["impact","untested"]),priorityTopic:"impact",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"untested"}),b:Object.freeze({topic:"impact",of:"focus",withFocus:!0}),names:"the change's untested footprint",empty:"no coverage gap"}),achieves:"coverage-gap"}),Object.freeze({id:"cochange-risk-invariant",kind:"maintenance",invariant:"a module change-coupled with the focus must be tested",focusClass:"Module",modes:Object.freeze(["scoped"]),subGoals:Object.freeze(["cochanges","untested"]),priorityTopic:"cochanges",coverageTopic:"untested",compose:Object.freeze({op:"intersect",a:Object.freeze({topic:"cochanges",of:"focus"}),b:Object.freeze({topic:"untested"}),names:"the change-coupled untested set",empty:"every change-coupled module is tested"}),achieves:"cochange-risk"})])});var cu=P(()=>{iu();au();Jm();lS();li();Ym()});function cM(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||ne(aM,"corpus","worlds")}function uS(e){try{return va(ir(e))}catch{return null}}function dS(e){if(Zm.has(e))return Zm.get(e);let t=null,n=uS(ne(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Zm.set(e,t),t}function lM(e,t){let n=dS(e);if(!n)return null;let s=n[String(t??"")];if(!Zx(s))return null;let o=`${e}\0${t}`;if(eh.has(o))return eh.get(o);let r=null,i=uS(ne(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],c=[],l=null;for(let u of i.toString("utf8").split(`
171
+ `))if(u.trim())try{let d=JSON.parse(u);if(!eS(d)||d.world!==t)continue;Vm(d)?a.push(d):Km(d)?c.push(d):Hm(d)&&!l&&(l=d)}catch{}(a.length||c.length||l)&&(r={name:t,facts:tS(a),rules:c,meta:l})}return eh.set(o,r),r}var dM,aM,Zm,eh,uM,VX,lu=P(()=>{ar();Ql();yo();Qe();fr();dM={},aM=ne($e(qt(dM.url)),"..","..","..");Zm=new Map,eh=new Map;uM=e=>({list:async()=>{let t=dS(e());return t?Object.keys(t).sort():null},load:async t=>lM(e(),t)}),VX=uM(()=>cM())});var e8,fS=P(()=>{Pt();Qe();Bn();Ei();Wn();We();e8=ne(".tmct","memory","blocks")});var pS=P(()=>{pr()});var hS=P(()=>{Bn();Ei();pr()});var th=P(()=>{Bn();Ei();pr()});var gS=P(()=>{th();Bn();Rs();pr()});var bS=P(()=>{});var wS=P(()=>{pS();hS();th();gS();bS();pr()});var yS=P(()=>{fS();We();Ac();Gl();wS();qm()});function ui(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function du(e){let t=n=>hM.map((s,o)=>`--${n}-t${o+1}: ${ui(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: ${ui(e.taught,.12)}; --corpus-soft: ${ui(e.corpus,.12)};`,`--entail-soft: ${ui(e.entail,.14)}; --alert-soft: ${ui(e.alert,.12)};`,`--sprite-pop: drop-shadow(0 0 .6px ${ui(e.ink,e.popRimAlpha)}) drop-shadow(${e.popShadow});`].join(" ")}var uu,hM,K8,nh=P(()=>{tu();uu=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)"})}),hM=[.35,.65,1];K8=`
172
172
  :root { color-scheme: light dark; ${du(uu.light)} }
173
173
  @media (prefers-color-scheme: dark) { :root { ${du(uu.dark)} } }
174
174
  :root[data-theme="dark"] { ${du(uu.dark)} }
175
175
  :root[data-theme="light"] { ${du(uu.light)} }
176
- `});var $S=P(()=>{th()});var vS=P(()=>{th()});var xS=P(()=>{We();dr();kn();ui()});var jS=P(()=>{Rs();We();iu();cu();ui()});var sh,vM,EM,xM,SM,jM,kM,U6,W6,ui=P(()=>{dr();Ra();iu();sS();Vn();Dl();Hm();qm();cu();au();lu();We();yS();$S();vS();xS();jS();sh="mgx:world-epoch",vM=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),EM=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),xM="mgx:is-open",SM="mgx:hasMass",jM="mgx:knows-about",kM="mgx:display-name",U6=new Set([...vM,...EM,xM,SM,jM,kM,"rdf:type",sh]),W6=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 di,V6,K6,H6,q6,Y6,X6,Eo=P(()=>{di=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),mudiii:Object.freeze({predatorInitialMass:20,predatorMassDecrementPerTurn:.08,predatorVisionRadius:4,preyInitialMass:8,preyMassDecrementPerTurn:.06,preyVisionRadius:3,preySpawnIntervalTurns:5,foodSpawnIntervalTurns:3,spawnedFoodMass:2,placedFoodMass:2,maxPreyPopulation:6,maxFoodItems:8,foodVisionGated:!0,blendPreyDecision:!1,preyThreatWeight:.5,teach:!1}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),adventure:Object.freeze({teach:!1}),planning:Object.freeze({maxDepth:300})}),V6=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"}),K6=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"}),H6=Object.freeze({predator_initial_mass:"predatorInitialMass",predator_mass_decrement_per_turn:"predatorMassDecrementPerTurn",predator_vision_radius:"predatorVisionRadius",prey_initial_mass:"preyInitialMass",prey_mass_decrement_per_turn:"preyMassDecrementPerTurn",prey_vision_radius:"preyVisionRadius",prey_spawn_interval_turns:"preySpawnIntervalTurns",food_spawn_interval_turns:"foodSpawnIntervalTurns",spawned_food_mass:"spawnedFoodMass",placed_food_mass:"placedFoodMass",max_prey_population:"maxPreyPopulation",max_food_items:"maxFoodItems",food_vision_gated:"foodVisionGated",blend_prey_decision:"blendPreyDecision",prey_threat_weight:"preyThreatWeight",teach:"teach"}),q6=Object.freeze({teach:"teach"}),Y6=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),X6=Object.freeze({max_depth:"maxDepth"})});var _S,RM,pu,_M,TM,TS,AS,AM,CM,Z6,OM,IM,CS=P(()=>{Eo();_S="spider-fly",RM=10,pu=Object.freeze({x:2,y:2}),_M=1,TM=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider",hunts:"prey"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly",hunts:null}),food:null}),TS=(e,t)=>`cell-${e}-${t}`,AS=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),AM=(e,t)=>AS(e,t,pu.x,pu.y)<=_M,CM=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})}),Z6=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"])]),OM="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.",IM=Object.freeze({name:_S,gridSize:RM,opening:OM,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:AM,webHomeCell:TS(pu.x,pu.y)})});var OS,PS,nJ,sJ,oJ,oh,IS,NS,LS,rh,rJ,iJ,mu=P(()=>{Eo();OS=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),PS=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})}),nJ=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),sJ=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),oJ=Object.freeze([OS.spawnedFood,OS.placedFood]),oh=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),IS=oh({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"}]}),NS=oh({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"}]}),LS=oh({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"}]}),rh=Object.freeze({[IS.name]:IS,[NS.name]:NS,[LS.name]:LS}),rJ=Object.freeze(Object.keys(rh)),iJ=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 ih=P(()=>{});var MS=P(()=>{});var Ta,OJ,UM,WM,GM,VM,KM,HM,qM,YM,XM,JM,QM,ZM,eF,tF,nF,sF,oF,IJ,ah=P(()=>{mu();ih();Rs();We();dr();MS();Ze();Eo();Ra();ui();Ta=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox",hunts:"prey"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin",hunts:null},food:{spawnedKind:"crumb",placedKind:"morsel"}}),OJ=Object.freeze(["predator","prey"]),UM="mgx:currently-in",WM="mgx:hasMass",GM="mgx:feels",VM="mgx:facing",KM="mgx:driven-facing",HM="mgx:eaten-by",qM="mgx:starved",YM="mgx:placed-by",XM="mgx:model",JM="mgx:rotation",QM="mgx:carrying",ZM="mgx:prey-eaten",eF="mgx:web-built-at-turn",tF="mgx:laid-at-turn",nF="mgx:hatched-into",sF="mgx:turn-played",oF=new Set([UM,WM,GM,VM,KM,HM,qM,YM,XM,JM,sF,QM,ZM,eF,tF,nF,"rdf:type",sh]),IJ=Object.freeze([...oF].sort())});var JJ,QJ,DS=P(()=>{CS();mu();ah();dr();lu();We();Eo();JJ=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"),QJ=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var _9,T9,A9,C9,O9,I9,N9,cF,lF,uF,dF,zS,BS,fF,L9,P9,US=P(()=>{mu();ah();ui();kn();dr();lu();We();Eo();Ra();ih();au();Rs();_9=Ta.predator.kind,T9=Ta.prey.kind,A9=Ta.food.spawnedKind,C9=Ta.food.placedKind,O9=Object.freeze(new Set(["river-crossing"])),I9=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"),N9=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"),cF="mgx:currently-in",lF="mgx:hasMass",uF="mgx:feels",dF="mgx:facing",zS="(fox|goblin|crumb|morsel)(?:-(\\d+))?",BS="(fox|goblin)(?:-(\\d+))?",fF="(crumb|morsel)(?:-(\\d+))?",L9=[{kind:"placement",predicate:cF,re:new RegExp(`^(?:the\\s+)?${zS}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:lF,re:new RegExp(`^(?:the\\s+)?${zS}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:uF,re:new RegExp(`^(?:the\\s+)?${BS}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:dF,re:new RegExp(`^(?:the\\s+)?${BS}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],P9=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${fF}\\s+there[.!\\s]*$`,"i")});var WS=P(()=>{Ra()});var kt,W9,G9,V9,K9,H9,q9,Y9,X9,J9,Q9,Z9,eQ,tQ,nQ,sQ,oQ,rQ,iQ,pF,GS=P(()=>{kt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},W9=kt("createRequire"),G9=kt("readFileSync"),V9=kt("access"),K9=kt("readFile"),H9=kt("writeFile"),q9=kt("appendFile"),Y9=kt("mkdir"),X9=kt("mkdtemp"),J9=kt("rename"),Q9=kt("unlink"),Z9=kt("rm"),eQ=kt("stat"),tQ=kt("copyFile"),nQ=kt("readdir"),sQ=kt("createReadStream"),oQ=kt("createWriteStream"),rQ=kt("randomBytes"),iQ=kt("spawnSync"),pF=kt("createInterface")});var Rt,cQ,lQ,uQ,dQ,fQ,pQ,mQ,hQ,gQ,bQ,wQ,yQ,$Q,vQ,EQ,xQ,SQ,VS,jQ,ch=P(()=>{Rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},cQ=Rt("createRequire"),lQ=Rt("readFileSync"),uQ=Rt("access"),dQ=Rt("readFile"),fQ=Rt("writeFile"),pQ=Rt("appendFile"),mQ=Rt("mkdir"),hQ=Rt("mkdtemp"),gQ=Rt("rename"),bQ=Rt("unlink"),wQ=Rt("rm"),yQ=Rt("stat"),$Q=Rt("copyFile"),vQ=Rt("readdir"),EQ=Rt("createReadStream"),xQ=Rt("createWriteStream"),SQ=Rt("randomBytes"),VS=Rt("spawnSync"),jQ=Rt("createInterface")});var KS=P(()=>{ch();Qe();Pt();Qe();ra();Xt()});var HS=P(()=>{});var mF,qS=P(()=>{Pt();Qe();We();HS();mF=ne(".tmct","sessions")});var YS=P(()=>{Pt();Qe();zl()});var XS,hu,JS=P(()=>{XS=Object.freeze({countNouns:{class:"Class",classes:"Class",function:"Function",functions:"Function",func:"Function",funcs:"Function",module:"Module",modules:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",method:"Method",methods:"Method",attribute:"Attribute",attributes:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",commit:"Commit",commits:"Commit",session:"Session",sessions:"Session"},classLabels:{Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},helpRows:[["/find <query>","lexical search across the graph"],["/search <query>","alias of /find"],["/context <symbol>","the sized edit bundle for a symbol (start here to change code)"],["/snippet <symbol>","exact source of one function/class/method"],["/describe <symbol>","a symbol's definition, kind and relations"],["/signature <symbol>","a symbol's signature only"],["/members <class>","the methods/attributes of a class"],["/subclasses <class>","the subclasses of a class"],["/impact <module>","what a change to this module or symbol reaches (impact closure)"],["/callers <symbol>","functions that call this symbol"],["/callees <symbol>","functions this symbol calls"],["/tests <symbol>","the tests covering this symbol"],["/untested","symbols with no covering test"],["/history <symbol>","the commit history of this symbol"],["/exports <module>","a module's public exports"],["/arch [package]","the architecture overview (optional package filter)"]],missRecoveryPointer:"for code structure, index this repo with `tmct index`, or point me at a .tmct/graph.json with --repo <path> (or try `npm run example:mini`)."}),hu=Object.freeze({countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""})});var _t,KQ,HQ,qQ,YQ,XQ,JQ,QQ,ZQ,e7,t7,n7,s7,o7,r7,i7,a7,c7,l7,QS,ZS=P(()=>{_t=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},KQ=_t("createRequire"),HQ=_t("readFileSync"),qQ=_t("access"),YQ=_t("readFile"),XQ=_t("writeFile"),JQ=_t("appendFile"),QQ=_t("mkdir"),ZQ=_t("mkdtemp"),e7=_t("rename"),t7=_t("unlink"),n7=_t("rm"),s7=_t("stat"),o7=_t("copyFile"),r7=_t("readdir"),i7=_t("createReadStream"),a7=_t("createWriteStream"),c7=_t("randomBytes"),l7=_t("spawnSync"),QS=_t("createInterface")});var oj={};Lt(oj,{CONTEXT_PASSAGE_PREDICATE:()=>tj,CO_OCCURS_PREDICATE:()=>gu,ingestUnknownFromAssertions:()=>bF,knownTermsFrom:()=>nj,passageFor:()=>sj});function nj(e,t){let n=new Set;for(let s of e?.individuals||[]){if(s?.class!==tt)continue;let o=a=>(s.attributes||[]).find(c=>c?.key===a)?.value,r=o("subject"),i=o("object");r&&n.add(V(r)),i&&n.add(V(i))}for(let s of t||[])s?.subject&&n.add(V(s.subject)),s?.object&&n.add(V(s.object));return n}function sj(e,t){let n=e?.surfaceText;if(typeof n=="string"&&n.trim())return n.replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\s+/g," ").trim();let s=xo(e?.start),o=xo(e?.end);return t?.surface&&s&&o?t.surface.replace("{start}",s).replace("{end}",o):null}function gF(e,t,n){let s=String(e||"").toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(Boolean),o=[],r=new Set;for(let i=0;i<s.length&&o.length<ej;i+=1){let a=[s[i]];i+1<s.length&&a.push(`${s[i]} ${s[i+1]}`);for(let c of a)if(!(hF.has(c)||r.has(c)||n.has(c))&&t.has(c)&&(o.push(c),r.add(c),o.length>=ej))break}return o}async function bF(e,{assertions:t,map:n,mappedFacts:s=[],memory:o,provenancePrefix:r="corpus:unknown",limit:i=500}={}){if(!Array.isArray(t)||!n)return{captured:0,linked:0,appended:0,skipped:0};let a=o||await mt(e),c=nj(a,s),l=new Set,u=[];for(let f of t){if(l.size>=i)break;let m=n.get(f.rel);if(!m||m.ace!=="none")continue;let h=xo(f.start),b=xo(f.end);if(!h||!b)continue;let g=V(h),$=V(b),w=!c.has(g),x=!c.has($);if(!w&&!x)continue;let R=sj(f,m);if(!R)continue;let E=[[h,b,w],[b,h,x]];for(let[k,O,S]of E){if(!S||l.size>=i)continue;let _=V(k);if(l.has(_))continue;let y=`${r} ${f.rel}`;u.push({subject:k,predicate:tj,object:R,provenance:y}),u.push({subject:k,predicate:gu,object:O,provenance:y});let T=gF(R,c,new Set([g,$]));for(let C of T)u.push({subject:k,predicate:gu,object:C,provenance:y});l.add(_),c.add(_)}}if(!u.length)return{captured:0,linked:0,appended:0,skipped:0};let d=await gs(e,u),p=u.filter(f=>f.predicate===gu).length;return{captured:l.size,linked:p,appended:d.appended,skipped:d.skipped}}var tj,gu,hF,ej,rj=P(()=>{We();bu();tj="mgx:contextPassage",gu="mgx:coOccursWith",hF=new Set(["a","an","the","is","are","was","were","be","being","been","to","of","for","in","on","at","with","by","as","and","or","that","this","it","its","you","your","related","kind","used"]),ej=3});var ij={};Lt(ij,{MAP_FILE:()=>Ca,SEON_CONCEPTS_FILE:()=>wu,SEON_DEFINITIONS_FILE:()=>wF,SLICE_FILE:()=>Aa,TIER2_DIR:()=>bs,TIER2_MANIFEST_FILE:()=>yF,WORDNET_DIR:()=>Oa,loadMap:()=>$u,loadSlice:()=>yu,seedMemory:()=>vF,termText:()=>xo,toFacts:()=>vu});async function yu(e=Aa){let t=QS({input:cx(e,"utf8"),crlfDelay:1/0}),n=[],s=0;for await(let o of t){s+=1;let r=o.trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(a){throw new Error(`${e}:${s}: not valid JSON: ${a.message}`)}for(let a of["start","rel","end"])if(typeof i[a]!="string"||!i[a])throw new Error(`${e}:${s}: assertion missing "${a}"`);n.push(i)}return n}async function $u(e=Ca){let n=Qo(await Oe(e,"utf8")).relation||[],s=new Map;for(let o of n){if(!o.rel)throw new Error(`${e}: a [[relation]] row is missing "rel"`);if(s.has(o.rel))throw new Error(`${e}: duplicate mapping for ${o.rel}`);if(!$F.has(o.ace))throw new Error(`${e}: ${o.rel} has unknown ace pattern ${JSON.stringify(o.ace)}`);if(o.ace!=="none"&&!o.predicate)throw new Error(`${e}: ${o.rel} maps to ${o.ace} but names no predicate URI`);s.set(o.rel,o)}return s}function vu(e,t,n="corpus:conceptnet"){let s=[];for(let o of e){let r=t.get(o.rel);if(!r)throw new Error(`slice/map drift: relation ${o.rel} has no row in conceptnet-map.toml`);if(r.ace==="none")continue;let i=xo(o.start),a=xo(o.end);if(!i||!a)continue;let c=r.predicate==="mgx:relatedTo"?n.replace(/^corpus:/,"corpus-weak:"):n;s.push({subject:i,predicate:r.predicate,object:a,provenance:`${c} ${o.rel}`})}return s}async function vF(e,{limit:t,slicePath:n=Aa,mapPath:s=Ca,prefer:o,provenancePrefix:r,captureUnknownContext:i=!1,unknownContextLimit:a}={}){let[c,l]=await Promise.all([yu(n),$u(s)]),u=vu(c,l,r);if(Array.isArray(o)&&o.length){let $=new Map(o.map((w,x)=>[w,x]));u=u.slice().sort((w,x)=>($.get(w.predicate)??o.length)-($.get(x.predicate)??o.length))}t!==void 0&&(u=u.slice(0,t));let d=($,w,x)=>`${V($)} ${w} ${V(x)}`,p=new Set,f=await mt(e);for(let $ of f.individuals||[]){if($?.class!=="Fact")continue;let w=x=>($.attributes||[]).find(R=>R.key===x)?.value;p.add(d(w("subject"),w("predicate"),w("object")))}let m=0,h=[];for(let $ of u){let w=d($.subject,$.predicate,$.object);if(p.has(w)){m+=1;continue}p.add(w),h.push($)}let b=await gs(e,h),g;if(i){let{ingestUnknownFromAssertions:$}=await Promise.resolve().then(()=>(rj(),oj));g=await $(e,{assertions:c,map:l,mappedFacts:u,memory:f,provenancePrefix:r?`${r}-unknown`:void 0,limit:a})}return{appended:b.appended,skipped:m+b.skipped,total:u.length,...g?{unknown:g}:{}}}var EF,fi,Aa,Ca,wu,wF,bs,yF,Oa,$7,$F,xo,bu=P(()=>{ir();Pt();ZS();yo();Qe();ll();We();EF={},fi=ne($e(qt(EF.url)),"..","..",".."),Aa=ne(fi,"corpus","conceptnet","slice.jsonl"),Ca=ne(fi,"src","adapters","corpus","conceptnet-map.toml"),wu=ne(fi,"corpus","domains","code","concepts.jsonl"),wF=ne(fi,"corpus","domains","code","definitions.jsonl"),bs=ne(fi,"corpus","tier2"),yF=ne(bs,"manifest.json"),Oa=ne(fi,"corpus","wordnet"),$7=ne(Oa,"manifest.json"),$F=new Set(["subClassOf","type","ObjectProperty","someValuesFrom","disjointWith","property","none"]);xo=e=>{let t=/^\/c\/en\/([^/]+)/.exec(String(e||""));return t?t[1].replace(/_/g," "):null}});var fj={};Lt(fj,{BUILTIN_EXTENSIONS:()=>kF,EXTENSION_KINDS:()=>Eu,activeDomainPacks:()=>ph,defaultCodeDomainPacks:()=>dj,defaultCodeLaneVocab:()=>uj,mergedLaneVocab:()=>fh,mergedLexiconExtra:()=>lj,resolveExtensions:()=>cj,seedActiveCorpusEntries:()=>TF,validateExtensionEntry:()=>aj,validateExtensionPack:()=>CF});function xu(){return{seon:{kind:"corpus",active:!1,corpusPath:wu,provenancePrefix:"corpus:seon"},code:{kind:"pack",active:!1,corpusPath:wu,provenancePrefix:"corpus:seon",vocabPath:SF,vocabData:XS,groundingKind:"extraction",groundingAdapter:"tmct index (the graphPaths provider seam)"},conceptnet:{kind:"corpus",active:!1,corpusPath:Aa,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:jF},human:{kind:"corpus",active:!0,corpusPath:ne(bs,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:ne(bs,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:ne(bs,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"pack",active:!1,corpusPath:ne(bs,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws",vocabPath:lh,vocabData:hu,groundingKind:"taught-only"},"tier2-python":{kind:"pack",active:!1,corpusPath:ne(bs,"python.jsonl"),provenancePrefix:"corpus:tier2-python",vocabPath:lh,vocabData:hu,groundingKind:"taught-only"},"tier2-java":{kind:"pack",active:!1,corpusPath:ne(bs,"java.jsonl"),provenancePrefix:"corpus:tier2-java",vocabPath:lh,vocabData:hu,groundingKind:"taught-only"},"tier2-general":{kind:"corpus",active:!1,corpusPath:ne(bs,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:ne(Oa,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:ne(Oa,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:ne(xF,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}function aj(e,t){if(!t||typeof t!="object")throw new Error(`extension "${e}": entry must be an object`);if(!Eu.includes(t.kind))throw new Error(`extension "${e}": unknown kind ${JSON.stringify(t.kind)} (must be one of ${Eu.join(", ")})`);if(t.active!==void 0&&typeof t.active!="boolean")throw new Error(`extension "${e}": "active" must be a boolean`);if(t.kind==="corpus"&&!t.corpusPath)throw new Error(`extension "${e}": a "corpus" entry needs corpus_path`);if(t.kind==="ontology"&&!t.corpusPath)throw new Error(`extension "${e}": an "ontology" entry needs ontology_path`);if(t.kind==="lexicon"&&!t.lexiconPath)throw new Error(`extension "${e}": a "lexicon" entry needs lexicon_path`);if(t.kind==="templates"&&!t.templatesPath)throw new Error(`extension "${e}": a "templates" entry needs templates_path`);if(t.kind==="pack"&&!t.corpusPath&&!t.lexiconPath&&!t.templatesPath&&!t.phrasebookPath)throw new Error(`extension "${e}": a "pack" entry needs at least one of corpus_path/lexicon_path/templates_path/phrasebook_path`);if(t.limit!==void 0&&!Number.isFinite(t.limit))throw new Error(`extension "${e}": "limit" must be a finite number`);if(t.prefer!==void 0&&!Array.isArray(t.prefer))throw new Error(`extension "${e}": "prefer" must be an array of predicate URIs`)}function _F(e,t,n,s){if(!t&&n.kind===void 0)throw new Error(`extension "${e}": an unrecognized extension needs a "kind" (one of ${Eu.join(", ")})`);let o={kind:n.kind!==void 0?n.kind:t?.kind,active:n.active!==void 0?!!n.active:!!t?.active},r=[["corpus_path","corpusPath"],["ontology_path","corpusPath"],["lexicon_path","lexiconPath"],["templates_path","templatesPath"],["phrasebook_path","phrasebookPath"],["map_path","mapPath"],["vocab_path","vocabPath"]];for(let[i,a]of r)n[i]!==void 0?o[a]=RF(s,n[i]):t?.[a]!==void 0&&(o[a]=t[a]);return o.provenancePrefix=n.provenance_prefix!==void 0?String(n.provenance_prefix):t?.provenancePrefix??`corpus:${e}`,n.limit!==void 0?o.limit=Number(n.limit):t?.limit!==void 0&&(o.limit=t.limit),n.prefer!==void 0?o.prefer=n.prefer:t?.prefer!==void 0&&(o.prefer=t.prefer),n.grounding_kind!==void 0?o.groundingKind=String(n.grounding_kind):t?.groundingKind!==void 0&&(o.groundingKind=t.groundingKind),n.grounding_adapter!==void 0?o.groundingAdapter=String(n.grounding_adapter):t?.groundingAdapter!==void 0&&(o.groundingAdapter=t.groundingAdapter),o}async function cj(e,{configFile:t}={}){let n=e?await fl(e,t?{file:t}:{}):null,s=xu(),o=n&&n.extensions&&typeof n.extensions=="object"?n.extensions:{},r=n&&n.bias&&typeof n.bias=="object"?n.bias:{},i=new Set([...Object.keys(s),...Object.keys(o)]),a=new Map;for(let p of i){let f=_F(p,s[p]||null,o[p]||{},e||process.cwd());aj(p,f),a.set(p,f)}let c={};for(let[p,f]of Object.entries(r)){if(typeof f!="number"||!Number.isFinite(f))throw new Error(`[bias] "${p}": bias must be a finite number, got ${JSON.stringify(f)}`);c[p]=f}let u=["seon","conceptnet",...[...a.keys()].filter(p=>p!=="seon"&&p!=="conceptnet").sort()].filter(p=>a.has(p));return{entries:new Map(u.map(p=>[p,a.get(p)])),biasByBundle:c}}async function TF(e,t,n={}){let{seedMemory:s}=await Promise.resolve().then(()=>(bu(),ij)),{captureUnknownContext:o,unknownContextLimit:r}=n,i={},a=0,c=0,l=0;for(let[u,d]of t instanceof Map?t:new Map)if(!(!d.active||!(d.kind==="corpus"||d.kind==="ontology"||d.kind==="pack"&&d.corpusPath)))try{let f=await s(e,{slicePath:d.corpusPath,mapPath:d.mapPath,provenancePrefix:d.provenancePrefix,limit:d.limit,prefer:d.prefer,captureUnknownContext:o,unknownContextLimit:r});i[u]={appended:f.appended,skipped:f.skipped,total:f.total},a+=f.appended,c+=f.skipped,l+=f.total}catch(f){i[u]={appended:0,skipped:0,total:0,error:f&&f.message?f.message:String(f)}}return{appended:a,skipped:c,total:l,perBundle:i}}async function lj(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&(r.kind!=="lexicon"&&r.kind!=="pack"||r.lexiconPath&&n.push({name:o,path:r.lexiconPath,bias:t[o]??1}));if(!n.length)return null;n.sort((o,r)=>o.bias-r.bias);let s={nouns:{},verbs:{},adjectives:{},properNames:[]};for(let o of n){let r;try{r=JSON.parse(await Oe(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": lexicon file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}if(Object.assign(s.nouns,r.nouns||{}),Object.assign(s.verbs,r.verbs||{}),Object.assign(s.adjectives,r.adjectives||{}),Array.isArray(r.properNames))for(let i of r.properNames)s.properNames.includes(i)||s.properNames.push(i)}return s}async function fh(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&(!r.vocabPath&&!r.vocabData||n.push({name:o,path:r.vocabPath,data:r.vocabData,bias:t[o]??1}));let s={countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""};if(!n.length)return s;n.sort((o,r)=>o.bias-r.bias);for(let o of n){let r;if(o.data)r=o.data;else try{r=JSON.parse(await Oe(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": vocab file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}Object.assign(s.countNouns,r.countNouns||{}),Object.assign(s.classLabels,r.classLabels||{}),Array.isArray(r.helpRows)&&s.helpRows.push(...r.helpRows),r.missRecoveryPointer&&(s.missRecoveryPointer=r.missRecoveryPointer)}return s}function uj(){if(!uh){let e={...xu().code,active:!0};uh=fh(new Map([["code",e]]),{})}return uh}async function AF(e,t){let n={name:e,groundingKind:t.groundingKind||"",groundingAdapter:t.groundingAdapter||"",commandCount:0,countNounCount:0};if(!t.vocabPath)return n;try{let s=JSON.parse(await Oe(t.vocabPath,"utf8"));n.commandCount=Array.isArray(s.helpRows)?s.helpRows.length:0,n.countNounCount=Object.keys(s.countNouns||{}).length}catch{}return n}async function ph(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&n.push({name:o,entry:r,bias:t[o]??1});n.sort((o,r)=>o.bias-r.bias||o.name.localeCompare(r.name));let s=[];for(let o of n)s.push(await AF(o.name,o.entry));return s}function dj(){if(!dh){let e={...xu().code,active:!0};dh=ph(new Map([["code",e]]),{})}return dh}async function CF(e,t){let n=[],s=o=>o&&(Ku(o)?o:Gt(e,o));if(t.corpusPath){let o=s(t.corpusPath);try{let r=await yu(o),i=await $u(s(t.mapPath)||Ca),a=vu(r,i,t.provenancePrefix||"corpus:pack");n.push({kind:"corpus",path:o,ok:!0,counts:{assertions:r.length,facts:a.length}})}catch(r){n.push({kind:"corpus",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.lexiconPath){let o=s(t.lexiconPath);try{let{loadLexicon:r}=await Promise.resolve().then(()=>(Vn(),bx)),i=JSON.parse(await Oe(o,"utf8")),a=r(i);n.push({kind:"lexicon",path:o,ok:!0,counts:{nouns:a.nouns.size,verbs:a.verbs.size,adjectives:a.adjectives.size,properNames:a.properNames.size}})}catch(r){n.push({kind:"lexicon",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.templatesPath){let o=s(t.templatesPath);try{let{loadTemplates:r}=await Promise.resolve().then(()=>(Bl(),ix)),i=await r(o),a=[...i.keys()].filter(c=>!c.includes(":"));if(a.length)throw new Error(`template id${a.length>1?"s":""} not namespaced "<packname>:<id>": ${a.join(", ")}`);n.push({kind:"templates",path:o,ok:!0,counts:{templates:i.size}})}catch(r){n.push({kind:"templates",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.vocabPath){let o=s(t.vocabPath);try{let r=JSON.parse(await Oe(o,"utf8")),i=r.countNouns&&typeof r.countNouns=="object"?Object.keys(r.countNouns).length:0,a=r.classLabels&&typeof r.classLabels=="object"?Object.keys(r.classLabels).length:0,c=Array.isArray(r.helpRows)?r.helpRows.length:0;n.push({kind:"vocab",path:o,ok:!0,counts:{countNouns:i,classLabels:a,helpRows:c}})}catch(r){n.push({kind:"vocab",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.kind==="pack"){let o=t.groundingKind;o!=="extraction"&&o!=="taught-only"?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:`a "pack" entry needs "grounding_kind" of "extraction" or "taught-only" (got ${JSON.stringify(o??null)})`}):o==="extraction"&&!t.groundingAdapter?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:'grounding_kind "extraction" needs "grounding_adapter" naming the adapter'}):n.push({kind:"grounding",path:"(pack manifest)",ok:!0,counts:o==="extraction"?{channel:o,adapter:t.groundingAdapter}:{channel:o}})}return{ok:n.length>0&&n.every(o=>o.ok),results:n}}var mh,xF,SF,lh,Eu,jF,kF,RF,uh,dh,hh=P(()=>{Qe();Pt();yo();JS();ra();bu();mh={},xF=ne($e(qt(mh.url)),"..","..","corpus","namenet"),SF=ne($e(qt(mh.url)),"..","..","corpus","domains","code","vocab.json"),lh=ne($e(qt(mh.url)),"..","..","corpus","tier2","vocab-empty.json"),Eu=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),jF=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:desires","mgx:motivatedByGoal","mgx:hasSubevent"];kF=Object.freeze(xu());RF=(e,t)=>{if(t==null)return;let n=String(t);return Ku(n)?n:Gt(e,n)};uh=null;dh=null});var pj=P(()=>{});var mj=P(()=>{Qe();ir();Pt();Pm();GS();ch();Xt();KS();Fe();qS();zl();YS();$i();hh();ja();Eo();Dl();cu();Nm();Fm();lr();pj()});var hj={};Lt(hj,{proseLemma:()=>NF});function NF(){if(mr!==void 0)return mr;try{let e=Vl();if(!e)return mr=null,mr;let t=e.its,n=new Map;mr=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{mr=null}return mr}var mr,gj=P(()=>{Kl()});var bj={};Lt(bj,{digestTermFromRows:()=>MF,loadDigestStructureTable:()=>PF,readDigestStructures:()=>LF});var LF,PF,MF,wj=P(()=>{LF=()=>null,PF=()=>null,MF=()=>null});var xh={};Lt(xh,{DEFAULT_MODULE_HOPS:()=>yh,DEFAULT_PROVE_BRANCHES:()=>Rj,DEFAULT_PROVE_NODES:()=>_j,DEFAULT_PROVE_STEPS:()=>kj,MAX_PROVEN_CASES:()=>Aj,MAX_ROLE_ASSERTIONS:()=>Tj,TABLEAU_RULE_CONFIDENCE:()=>WF,buildTableauKb:()=>fD,canonicalKey:()=>Ke,extractTableauModule:()=>hD,findTableauViolations:()=>mD,isSatisfiable:()=>vh,moduleHasDlShape:()=>bD,proveEntailment:()=>cD,proveSubsumption:()=>lD,proveSubsumptionOfNegation:()=>uD,toNNF:()=>sn});function Ke(e){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("canonicalKey: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return"top";case"bot":return"bot";case"atom":return`atom(${e.name})`;case"nom":return`nom(${e.ind})`;case"not":return`not(${Ke(e.c)})`;case"and":return`and(${e.cs.map(Ke).sort().join(",")})`;case"or":return`or(${e.cs.map(Ke).sort().join(",")})`;case"some":return`some(${e.r},${Ke(e.c)})`;case"all":return`all(${e.r},${Ke(e.c)})`;case"atLeast":return`atLeast(${e.n},${e.r},${Ke(e.c)})`;case"atMost":return`atMost(${e.n},${e.r},${Ke(e.c)})`;default:throw new TypeError(`canonicalKey: unknown expression tag "${e.t}"`)}}function Ia(e,t){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("toNNF: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return t?{t:"bot"}:{t:"top"};case"bot":return t?{t:"top"}:{t:"bot"};case"atom":return t?{t:"not",c:{t:"atom",name:e.name}}:{t:"atom",name:e.name};case"nom":return t?{t:"not",c:{t:"nom",ind:e.ind}}:{t:"nom",ind:e.ind};case"not":return Ia(e.c,!t);case"and":case"or":{let n=e.t==="and"?"or":"and",s=e.cs.map(o=>Ia(o,t));return s.sort((o,r)=>Ke(o).localeCompare(Ke(r))),{t:t?n:e.t,cs:s}}case"some":case"all":{let n=e.t==="some"?"all":"some",s=Ia(e.c,t);return{t:t?n:e.t,r:e.r,c:s}}case"atLeast":case"atMost":{let n=Ia(e.c,!1);return t?e.t==="atLeast"?{t:"atMost",n:e.n-1,r:e.r,c:n}:{t:"atLeast",n:e.n+1,r:e.r,c:n}:{t:e.t,n:e.n,r:e.r,c:n}}default:throw new TypeError(`toNNF: unknown expression tag "${e.t}"`)}}function sn(e){return Ia(e,!1)}function Wt(e){return[...new Set((Array.isArray(e)?e:[]).filter(Boolean))].sort()}function bh(e,t){let n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):t}function zF(e,t){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.floor(n):t}function jj(e,t){let n=new Set(e),s=!0;for(;s;){s=!1;for(let o of t)n.has(o.subject)&&!n.has(o.object)&&(n.add(o.object),s=!0),n.has(o.object)&&!n.has(o.subject)&&(n.add(o.subject),s=!0)}return n}function BF(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 UF(e,t){let n=(e||[]).map(([r,i])=>[$s(r),$s(i)]),s=BF(n.map(([r,i])=>[i,r])),o=new Map;for(let r of t){let i=$s(r);o.set(i,new Set([i,...s(i)]))}return o}function yj(e,t,n){let s=$s(t),o=$s(n);if(s===o)return!0;let r=e&&e.roleClosure?e.roleClosure.get(o):null;return r?r.has(s):!1}function ku(e,t,n,s){let o=[];for(let r of e.edges)if(r.from===n&&yj(t,r.r,s))o.push({to:r.to,fromFacts:r.fromFacts});else if(r.to===n){let i=t&&t.inverseOf?t.inverseOf.get($s(r.r)):null;i&&yj(t,i,s)&&o.push({to:r.from,fromFacts:r.fromFacts})}return o}function Su(e,t){return t==="fresh-0"?!1:e&&e.namedIndividuals&&e.namedIndividuals.has(t)?!0:!GF.test(t)}function Na(e,t){return e<t?`${e}\u241F${t}`:`${t}\u241F${e}`}function VF(e,t,n,s){if(t===n)return;let o=Na(t,n),r=e.inequalityFrom.get(o);e.inequalityFrom.set(o,Wt(r?[...r,...s]:s))}function Cj(e,t,n,s){return n===s?!1:Su(t,n)&&Su(t,s)?!0:e.inequalityFrom.has(Na(n,s))}function Oj(e,t,n){let s=e.inequalityFrom.get(Na(t,n));return s?s.slice():[]}function KF(e,t,n){let s=Su(e,t),o=Su(e,n);return s&&!o?[t,n]:o&&!s?[n,t]:t<n?[t,n]:[n,t]}function Ij(e,t,n,s){if(n===s)return n;let[o,r]=KF(t,n,s),i=e.nodes.get(o),a=e.nodes.get(r);if(!i||!a)return o;for(let[d,{expr:p,from:f}]of a.labels){let m=i.labels.get(d);i.labels.set(d,{expr:p,from:m?Wt([...m.from,...f]):f.slice()})}let c=[],l=new Map;for(let d of e.edges){let p=d.from===r?o:d.from,f=d.to===r?o:d.to,m=`${p}\u241F${d.r}\u241F${f}`,h=l.get(m);if(h)h.fromFacts=Wt([...h.fromFacts,...d.fromFacts]);else{let b={from:p,r:d.r,to:f,fromFacts:d.fromFacts.slice()};l.set(m,b),c.push(b)}}e.edges=c;for(let d of e.nodes.values())d.parent===r&&(d.parent=o);let u=new Map;for(let[d,p]of e.inequalityFrom){let[f,m]=d.split("\u241F"),h=f===r?o:f,b=m===r?o:m;if(h===b)continue;let g=Na(h,b),$=u.get(g);u.set(g,$?Wt([...$,...p]):p)}return e.inequalityFrom=u,e.nodes.delete(r),o}function $h(e,t){return{id:e,labels:new Map,parent:t??null,branchedOn:new Set,appliedAxioms:new Set,successorCount:0}}function Kn(e,t,n){let s=Ke(t);return e.labels.has(s)?!1:(e.labels.set(s,{expr:t,from:Wt(n)}),!0)}function pi(e){return[...e.labels.entries()].sort((t,n)=>t[0].localeCompare(n[0]))}function ju(e){if(e.labels.has("bot"))return{nodeId:e.id,keyA:"bot",keyB:"bot",premises:e.labels.get("bot").from.slice()};let t=[...e.labels.keys()].sort();for(let n of t){let{expr:s,from:o}=e.labels.get(n),r=Ke(sn(ys(s)));if(r<=n)continue;let i=e.labels.get(r);if(i)return{nodeId:e.id,keyA:n,keyB:r,premises:Wt([...o,...i.from])}}return null}function $j(e,t){let n=new Set;for(let s of e.edges)s.to===t&&n.add(s.r);return n}function Nj(e,t,n){let s=[...e.labels.keys()],o=!!(n&&n.inverseOf&&n.inverseOf.size>0),r=o?$j(t,e.id):null,i=e.parent;for(;i;){let a=t.nodes.get(i);if(!a)break;if(s.length===a.labels.size&&s.every(c=>a.labels.has(c))){if(!o)return!0;let c=$j(t,a.id);if(r.size===c.size&&[...r].every(l=>c.has(l)))return!0}i=a.parent}return!1}function vj(e){let t=new Map;for(let[n,s]of e.nodes)t.set(n,{id:s.id,labels:new Map(s.labels),parent:s.parent,branchedOn:new Set(s.branchedOn),appliedAxioms:new Set(s.appliedAxioms),successorCount:s.successorCount});return{nodes:t,edges:e.edges.slice(),closed:!1,clash:null,inequalityFrom:new Map(e.inequalityFrom),choices:(e.choices||[]).slice()}}function HF(e){for(let t of e.nodes.values())for(let[,{expr:n,from:s}]of pi(t)){if(n.t!=="and")continue;let o=!1;for(let r of n.cs)Kn(t,r,s)&&(o=!0);if(o)return{applied:!0,touched:[t.id]}}return{applied:!1,touched:[]}}function qF(e,t){let n=new Map;for(let o of e.nodes.values())for(let r of o.labels.keys())r.startsWith("nom(")&&(n.has(r)||n.set(r,[]),n.get(r).push(o.id));let s=[...n.keys()].sort();for(let o of s){let r=[...new Set(n.get(o))].sort();if(r.length<2)continue;let[i,a]=r;if(Cj(e,t,i,a)){let c=e.nodes.get(i).labels.get(o)?.from||[],l=e.nodes.get(a).labels.get(o)?.from||[];return{kind:"clash",clash:{nodeId:i,keyA:o,keyB:`merge(${i},${a})`,premises:Wt([...c,...l,...Oj(e,i,a)])}}}return{kind:"merge",a:i,b:a}}return{kind:"none"}}function YF(e,t){let n=t&&t.transitiveRoles instanceof Set?t.transitiveRoles:null;for(let s of e.nodes.values())for(let[,{expr:o,from:r}]of pi(s)){if(o.t!=="all")continue;let i=[];for(let{to:a,fromFacts:c}of ku(e,t,s.id,o.r)){let l=e.nodes.get(a);if(!l)continue;let u=[...r,...c];Kn(l,o.c,u)&&i.push(l.id),n&&n.has(o.r)&&Kn(l,o,u)&&i.push(l.id)}if(i.length)return{applied:!0,touched:i}}return{applied:!1,touched:[]}}function XF(e,t){for(let n of e.nodes.values())for(let s=0;s<t.axioms.length;s+=1){if(n.appliedAxioms.has(s))continue;let o=t.axioms[s];if(n.appliedAxioms.add(s),Kn(n,o.disjunction,o.from))return{applied:!0,touched:[n.id]}}return{applied:!1,touched:[]}}function JF(e,t){if(Ke(t)==="bot")return[];let n=Ke(sn(ys(t))),s=e.labels.get(n);return s?s.from:null}function QF(e,t,n){return n.some(s=>e.unionOrOneOfIds&&e.unionOrOneOfIds.has(s))&&t.every(s=>s.t==="atom"||s.t==="nom")}function ZF(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of pi(n)){if(o.t!=="or"||n.branchedOn.has(s))continue;let i=[...o.cs].sort((d,p)=>Ke(d).localeCompare(Ke(p)));if(i.some(d=>n.labels.has(Ke(d)))){n.branchedOn.add(s);continue}let a=i.map(d=>({c:d,clashFrom:JF(n,d)})),c=a.filter(d=>d.clashFrom===null).map(d=>d.c),l=a.filter(d=>d.clashFrom!==null).flatMap(d=>d.clashFrom),u=QF(t,i,r)?{cs:i,from:r}:null;return c.length===0?{kind:"clash",clash:{nodeId:n.id,keyA:Ke(i[0]),keyB:Ke(sn(ys(i[0]))),premises:Wt([...r,...l])},choice:u}:c.length===1?(n.branchedOn.add(s),Kn(n,c[0],[...r,...l]),{kind:"applied",touched:[n.id],choice:u}):(n.branchedOn.add(s),{kind:"split",node:n,from:r,disjuncts:c,choice:u})}return{kind:"none"}}function eD(e,t){for(let n of e.nodes.values())if(!Nj(n,e,t))for(let[,{expr:s,from:o}]of pi(n)){if(s.t!=="some")continue;let r=Ke(s.c);if(ku(e,t,n.id,s.r).some(c=>e.nodes.get(c.to)?.labels.has(r)))continue;n.successorCount+=1;let a=$h(`${n.id}.${n.successorCount}`,n.id);return Kn(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()}),{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function tD(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of pi(n)){if(o.t!=="atMost")continue;let i=Ke(o.c),a=[...new Set(ku(e,t,n.id,o.r).map(u=>u.to))].filter(u=>e.nodes.get(u)?.labels.has(i)).sort();if(a.length<=o.n)continue;let c=[];for(let u=0;u<a.length;u+=1)for(let d=u+1;d<a.length;d+=1)c.push([a[u],a[d]]);if(c.length===0){let u=e.nodes.get(a[0])?.labels.get(i)?.from||[];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`witness(${a[0]})`,premises:Wt([...r,...u])}}}let l=c.filter(([u,d])=>!Cj(e,t,u,d));if(l.length===0){let[u,d]=c[0];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`merge(${u},${d})`,premises:Wt([...r,...Oj(e,u,d)])}}}return{kind:"split-merge",pairs:l}}return{kind:"none"}}function nD(e,t){for(let n of e.nodes.values())if(!Nj(n,e,t))for(let[,{expr:s,from:o}]of pi(n)){if(s.t!=="atLeast")continue;let r=Ke(s.c),i=[...new Set(ku(e,t,n.id,s.r).map(c=>c.to))].filter(c=>e.nodes.get(c)?.labels.has(r)).sort();if(i.length>=s.n)continue;n.successorCount+=1;let a=$h(`${n.id}.${n.successorCount}`,n.id);Kn(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()});for(let c of i)VF(e,a.id,c,o);return{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function sD(e,t){for(let n of t){let s=e.nodes.get(n),o=s&&ju(s);if(o)return o}return null}function hr(e,t){let n=sD(e,t);return n?{kind:"clash",clash:n}:{kind:"applied"}}function oD(e,t){let n=HF(e);if(n.applied)return hr(e,n.touched);let s=YF(e,t);if(s.applied)return hr(e,s.touched);let o=qF(e,t);if(o.kind==="clash")return o;if(o.kind==="merge"){let u=Ij(e,t,o.a,o.b);return hr(e,[u])}let r=XF(e,t);if(r.applied)return hr(e,r.touched);let i=ZF(e,t);if(i.kind==="clash")return i;if(i.kind==="applied")return i.choice&&e.choices.push(i.choice),hr(e,i.touched);if(i.kind==="split")return i;let a=tD(e,t);if(a.kind==="clash"||a.kind==="split-merge")return a;let c=nD(e,t);if(c.applied)return hr(e,c.touched);let l=eD(e,t);return l.applied?hr(e,l.touched):{kind:"done"}}function rD(e){let t=[...e.nodes.values()].map(s=>({id:s.id,parent:s.parent,labels:[...s.labels.entries()].sort((o,r)=>o[0].localeCompare(r[0])).map(([,{expr:o,from:r}])=>({expr:o,from:r}))})),n=e.edges.map(({from:s,r:o,to:r,fromFacts:i})=>({from:s,r:o,to:r,fromFacts:i.slice()}));return{nodes:t,edges:n}}function iD(e,t,n){let s=bh(n.maxSteps,kj),o=bh(n.maxBranches,Rj),r=bh(n.maxNodes,_j),i=[e],a=0,c=1,l=[];for(;i.length;){let u=i.pop();if(u.closed){l.push(u.clash);continue}if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};for(;;){let d=oD(u,t);if(d.kind==="clash"){let p=d.choice?[...u.choices,d.choice]:u.choices.slice();l.push({...d.clash,choices:p});break}if(d.kind==="applied"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};continue}if(d.kind==="split"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.disjuncts.map(f=>{let m=vj(u);d.choice&&m.choices.push(d.choice);let h=m.nodes.get(d.node.id);Kn(h,f,d.from);let b=ju(h);return b&&(m.closed=!0,m.clash={...b,choices:m.choices.slice()}),m});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}if(d.kind==="split-merge"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.pairs.map(([f,m])=>{let h=vj(u),b=Ij(h,t,f,m),g=h.nodes.get(b),$=g&&ju(g);return $&&(h.closed=!0,h.clash={...$,choices:h.choices.slice()}),h});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}return{status:"satisfiable",model:rD(u),steps:a,branches:c}}if(c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c}}return{status:"unsatisfiable",clashes:l,steps:a,branches:c}}function aD(e,t){let n=new Map,s=i=>(n.has(i)||n.set(i,$h(i,null)),n.get(i));for(let i of e.individuals||[])s(i);for(let i of e.assertions||[])Kn(s(i.ind),i.expr,i.from);for(let i of t||[])!i||!i.ind||!i.expr||Kn(s(i.ind),sn(i.expr),i.from||[]);for(let[i,a]of e.nominalIndividuals||[])Kn(s(i),{t:"nom",ind:i},a);let o=new Map;for(let i of e.differentFrom||[]){if(!i||!i.a||!i.b||i.a===i.b)continue;let a=Na(i.a,i.b),c=o.get(a);o.set(a,Wt(c?[...c,...i.from]:i.from))}let r=[];for(let i of e.roleAssertions||[])s(i.a),s(i.b),r.push({from:i.a,r:i.r,to:i.b,fromFacts:i.from.slice()});return{nodes:n,edges:r,closed:!1,clash:null,inequalityFrom:o,choices:[]}}function vh(e,t=[],n={}){let s=aD(e,t);for(let r of s.nodes.values()){let i=ju(r);if(i){s.closed=!0,s.clash={...i,choices:[]};break}}let o=iD(s,e,n);return o.status==="exhausted"?{satisfiable:null,exhausted:o.reason,steps:o.steps,branches:o.branches}:o.status==="satisfiable"?{satisfiable:!0,model:o.model,steps:o.steps,branches:o.branches}:{satisfiable:!1,closedClashes:o.clashes,steps:o.steps,branches:o.branches}}function Eh(e,t,n){let s=vh(e,t,n);if(s.satisfiable===null)return{status:"exhausted",reason:s.exhausted,steps:s.steps,branches:s.branches};if(s.satisfiable===!1){let o=Wt(s.closedClashes.flatMap(l=>l?.premises||[])),r=new Map;for(let l of s.closedClashes)for(let u of l?.choices||[])for(let d of u.cs)r.set(Ke(d),d);let i=[...r.keys()].sort(),a=i.slice(0,Aj).map(l=>r.get(l)),c=i.length;return{status:"proved",premises:o,cases:a,casesTotal:c,steps:s.steps,branches:s.branches}}return{status:"disproved",model:s.model,steps:s.steps,branches:s.branches}}function cD(e,t,n,s={}){return Eh(e,[{ind:t,expr:sn(ys(n)),from:[]}],s)}function lD(e,t,n,s={}){let o=sn(xj([De(t),ys(De(n))]));return Eh(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function uD(e,t,n,s={}){let o=sn(xj([De(t),De(n)]));return Eh(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function dD(e){return e?e.keyA==="bot"?"bottom":`complement:${e.keyA}~${e.keyB}`:"unsatisfiable"}function fD(e){let t=Array.isArray(e)?e.filter(L=>L&&L.subject&&L.predicate):[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=[],d=[],p=[],f=[],m=new Set,h=[],b=[],g=[],$=[],w=(L,H,W)=>{L.has(H)||L.set(H,[]),L.get(H).push(W)};for(let L of t){let H=String(L.predicate).trim().toLowerCase();H==="owl:onproperty"?n.set(L.subject,{object:L.object,id:L.id}):H==="owl:somevaluesfrom"?s.set(L.subject,{object:L.object,id:L.id}):H==="owl:allvaluesfrom"?o.set(L.subject,{object:L.object,id:L.id}):H==="owl:onclass"?r.set(L.subject,{object:L.object,id:L.id}):H==="owl:mincardinality"?i.set(L.subject,{kind:"min",n:Number(L.object),id:L.id}):H==="owl:maxcardinality"?i.set(L.subject,{kind:"max",n:Number(L.object),id:L.id}):H==="owl:cardinality"?i.set(L.subject,{kind:"exact",n:Number(L.object),id:L.id}):H==="rdfs:subclassof"?u.push(L):H==="owl:disjointwith"?d.push(L):H==="rdf:type"?(p.push(L),String(L.object||"").toLowerCase()==="transitiveproperty"&&m.add(L.subject)):H==="mgxneg:subclassof"?f.push(L):H==="owl:unionof"?w(a,L.subject,L):H==="owl:complementof"?c.set(L.subject,L):H==="rdfs:subpropertyof"?h.push(L):H==="owl:differentfrom"?b.push(L):H==="owl:oneof"?w(l,L.subject,L):H==="owl:inverseof"?g.push(L):$.push(L)}let x=new Set;for(let L of p){let H=String(L.object||"").toLowerCase();wh.has(H)||x.add(L.subject)}let R=jj(x,$),E=L=>R.has(L)||Sj.test(L),k=$.filter(L=>E(L.subject)&&E(L.object)).sort((L,H)=>L.subject.localeCompare(H.subject)||L.predicate.localeCompare(H.predicate)||L.object.localeCompare(H.object)).slice(0,Tj).map(L=>({a:L.subject,r:L.predicate,b:L.object,from:[L.id]})),O=(L,H,W)=>({sub:L,sup:H,from:Wt(W),disjunction:sn(gh([ys(L),H]))}),S=[],_=[];for(let L of u){let H=L.object;if(!n.has(H)){S.push(O(De(L.subject),De(H),[L.id]));continue}let W=n.get(H),I=s.get(H);if(I){S.push(O(De(L.subject),FF(W.object,De(I.object)),[L.id,W.id,I.id]));continue}let D=o.get(H);if(D){S.push(O(De(L.subject),DF(W.object,De(D.object)),[L.id,W.id,D.id]));continue}let N=i.get(H),F=r.get(H);if(N&&F){let B=[L.id,W.id,F.id,N.id];N.kind==="min"?S.push(O(De(L.subject),{t:"atLeast",n:N.n,r:W.object,c:De(F.object)},B)):N.kind==="max"?S.push(O(De(L.subject),{t:"atMost",n:N.n,r:W.object,c:De(F.object)},B)):N.kind==="exact"&&(S.push(O(De(L.subject),{t:"atLeast",n:N.n,r:W.object,c:De(F.object)},B)),S.push(O(De(L.subject),{t:"atMost",n:N.n,r:W.object,c:De(F.object)},B)))}}for(let L of d)E(L.subject)?_.push({ind:L.subject,expr:sn(ys(De(L.object))),from:[L.id]}):S.push(O(De(L.subject),sn(ys(De(L.object))),[L.id]));for(let L of p)wh.has(String(L.object||"").toLowerCase())||_.push({ind:L.subject,expr:De(L.object),from:[L.id]});for(let L of f)_.push({ind:L.subject,expr:sn(ys(De(L.object))),from:[L.id]});for(let[L,H]of a){let W=[...H].sort((F,B)=>String(F.object).localeCompare(String(B.object))),I=W.map(F=>De(F.object)),D=W.map(F=>F.id),N=sn(gh(I));S.push(O(De(L),N,D)),S.push(O(N,De(L),D))}for(let[L,H]of c){let W=sn(ys(De(H.object)));S.push(O(De(L),W,[H.id])),S.push(O(W,De(L),[H.id]))}let y=new Map;for(let[L,H]of l){let W=[...H].sort((N,F)=>String(N.object).localeCompare(String(F.object))),I=W.map(N=>({t:"nom",ind:N.object})),D=W.map(N=>N.id);S.push(O(De(L),sn(gh(I)),D));for(let N of W){S.push(O({t:"nom",ind:N.object},De(L),[N.id]));let F=y.get(N.object);y.set(N.object,F?Wt([...F,N.id]):[N.id])}}let T=b.map(L=>({a:L.subject,b:L.object,from:[L.id]})).sort((L,H)=>L.a.localeCompare(H.a)||L.b.localeCompare(H.b)),C=new Map;for(let L of g)C.set(L.subject,L.object),C.has(L.object)||C.set(L.object,L.subject);let v=new Set;for(let{object:L}of n.values())v.add(L);for(let L of k)v.add(L.r);let j=h.map(L=>[L.subject,L.object]).sort((L,H)=>L[0].localeCompare(H[0])||L[1].localeCompare(H[1])),M=new Set([...v,...j.flat(),...C.keys(),...C.values()]),z=UF(j,M);S.sort((L,H)=>Ke(L.sub).localeCompare(Ke(H.sub))||Ke(L.sup).localeCompare(Ke(H.sup))||L.from.join(",").localeCompare(H.from.join(","))),_.sort((L,H)=>L.ind.localeCompare(H.ind)||Ke(L.expr).localeCompare(Ke(H.expr)));let K=[...new Set([..._.map(L=>L.ind),...k.flatMap(L=>[L.a,L.b])])].sort(),Y=new Set(K),X=new Set([...[...a.values()].flatMap(L=>L.map(H=>H.id)),...[...l.values()].flatMap(L=>L.map(H=>H.id))]);return{axioms:S,assertions:_,roles:[...v].sort(),individuals:K,transitiveRoles:m,roleClosure:z,namedIndividuals:Y,nominalIndividuals:y,differentFrom:T,inverseOf:C,roleAssertions:k,unionOrOneOfIds:X}}function pD(e,t){return{axioms:e.axioms,assertions:(e.assertions||[]).filter(n=>n.ind===t),roles:e.roles,individuals:[t],transitiveRoles:e.transitiveRoles,roleAssertions:e.roleAssertions,roleClosure:e.roleClosure,namedIndividuals:e.namedIndividuals,nominalIndividuals:e.nominalIndividuals,differentFrom:e.differentFrom,inverseOf:e.inverseOf,unionOrOneOfIds:e.unionOrOneOfIds}}function mD(e,t=null,n={}){let s=[...new Set(Array.isArray(t)&&t.length?t:e.individuals||[])].sort(),o=[];for(let r of s){let i=pD(e,r);if(!i.assertions.length)continue;let a=vh(i,[],n);if(a.satisfiable===null||a.satisfiable===!0)continue;let c=Wt(a.closedClashes.flatMap(l=>l?.premises||[]));o.push({subject:r,premises:c,kind:dD(a.closedClashes[0])})}return o.sort((r,i)=>r.subject.localeCompare(i.subject)),o}function ws(e,t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)}function hD(e,t,{hops:n=yh}={}){let s=Array.isArray(e)?e.filter(j=>j&&j.subject&&j.predicate):[],o=zF(n,yh),r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,m=new Map,h=new Map,b=[],g=new Map,$=new Set;for(let j of s){if(String(j.predicate).trim().toLowerCase()!=="rdf:type")continue;let M=String(j.object||"").toLowerCase();wh.has(M)||$.add(j.subject)}let w=s.filter(j=>!Ej.has(String(j.predicate).trim().toLowerCase())),x=jj($,w),R=j=>x.has(j)||Sj.test(j);for(let j of s){let M=String(j.predicate).trim().toLowerCase();M==="rdfs:subclassof"?(ws(r,j.subject,j.object),ws(i,j.object,j.subject)):M==="owl:onproperty"?a.set(j.subject,j.object):M==="owl:somevaluesfrom"||M==="owl:allvaluesfrom"||M==="owl:onclass"?(c.set(j.subject,j.object),ws(l,j.object,j.subject)):M==="owl:unionof"?(ws(u,j.subject,j.object),ws(d,j.object,j.subject)):M==="owl:complementof"?(p.set(j.subject,j.object),ws(f,j.object,j.subject)):M==="owl:oneof"?(ws(m,j.subject,j.object),ws(h,j.object,j.subject)):!Ej.has(M)&&R(j.subject)&&R(j.object)&&(b.push(j),ws(g,j.subject,j.object),ws(g,j.object,j.subject))}let E=new Map;function k(j){let M=E.get(j);if(M)return M;let z=new Set,K=[...r.get(j)||[],...i.get(j)||[]];for(;K.length;){let Y=K.pop();if(!z.has(Y)){z.add(Y);for(let X of r.get(Y)||[])z.has(X)||K.push(X);for(let X of i.get(Y)||[])z.has(X)||K.push(X)}}E.set(j,z);for(let Y of z)E.has(Y)||E.set(Y,z);return z}let O=new Set,S=new Map,_=[];function y(j,M){if(!j)return;let z=S.get(j);z!==void 0&&z>=M||(S.set(j,M),_.push({term:j,hopsLeft:M}))}let T=[...new Set((Array.isArray(t)?t:[]).map(j=>V(j)).filter(Boolean))];for(let j of T)y(j,o);let C=0;for(;C<_.length;){let{term:j,hopsLeft:M}=_[C];if(C+=1,S.get(j)===M){O.add(j);for(let z of k(j))O.add(z),y(z,M);if(!(M<=0)){c.has(j)&&y(c.get(j),o);for(let z of l.get(j)||[])y(z,o);for(let z of u.get(j)||[])y(z,M-1);for(let z of d.get(j)||[])y(z,M-1);p.has(j)&&y(p.get(j),M-1);for(let z of f.get(j)||[])y(z,M-1);for(let z of m.get(j)||[])y(z,M-1);for(let z of h.get(j)||[])y(z,M-1);for(let z of g.get(j)||[])y(z,o)}}}let v=new Set;for(let[j,M]of a)O.has(j)&&v.add($s(M));for(let j of b)(O.has(j.subject)||O.has(j.object))&&v.add($s(j.predicate));return s.filter(j=>{if(O.has(j.subject)||O.has(j.object))return!0;let M=String(j.predicate).trim().toLowerCase();return M==="rdfs:subpropertyof"||M==="owl:inverseof"||M==="rdf:type"&&String(j.object).toLowerCase()==="transitiveproperty"?v.has($s(j.subject)):!1})}function bD(e){return(Array.isArray(e)?e:[]).some(n=>{let s=String(n?.predicate||"").trim().toLowerCase();return gD.has(s)?!0:s==="rdf:type"&&String(n?.object||"").toLowerCase()==="transitiveproperty"})}var De,ys,xj,gh,FF,DF,Sj,$s,wh,kj,Rj,_j,WF,yh,Tj,Aj,GF,Ej,gD,Sh=P(()=>{Ze();De=e=>({t:"atom",name:e}),ys=e=>({t:"not",c:e}),xj=e=>({t:"and",cs:e}),gh=e=>({t:"or",cs:e}),FF=(e,t)=>({t:"some",r:e,c:t}),DF=(e,t)=>({t:"all",r:e,c:t});Sj=/[./\\#:@]/;$s=e=>V(e);wh=new Set(["restriction","transitiveproperty","class"]),kj=5e3,Rj=256,_j=512,WF=.95,yh=4,Tj=256,Aj=6,GF=/\.\d+$/;Ej=new Set(["owl:onproperty","owl:somevaluesfrom","owl:allvaluesfrom","owl:onclass","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subclassof","owl:disjointwith","rdf:type","mgxneg:subclassof","owl:unionof","owl:complementof","rdfs:subpropertyof","owl:differentfrom","owl:oneof","owl:inverseof"]);gD=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"])});var zj={};Lt(zj,{BOT:()=>pn,DEFAULT_EL_BUDGET:()=>Th,DEFAULT_EL_ROUNDS:()=>Ah,EL_RESTRICTION_RULE:()=>_h,EL_RULE_CONFIDENCE:()=>jh,EL_SUBSUMPTION_RULE:()=>Rh,ENTAILED_EL_PROVENANCE:()=>Fj,ENTAILED_EL_RESTRICTION_PROVENANCE:()=>Pa,TOP:()=>So,classifyEl:()=>OD,elGoalAxioms:()=>Pj,elGoalFor:()=>Mj,elUnsatisfiableClasses:()=>CD,normalizeElTBox:()=>kh,proveElSubsumption:()=>AD,saturateEl:()=>Ru});function wD(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 yD(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function kh(e,{budget:t=500}={}){let s=[...(Array.isArray(e)?e:[]).filter(y=>y&&y.id&&y.subject&&y.predicate&&y.object!==void 0&&y.object!==null)].sort((y,T)=>String(y.id).localeCompare(String(T.id))),o=s.length>t,r=o?s.slice(0,t):s,i=new Set,a=new Set,c=y=>{y&&y!==So&&y!==pn&&i.add(y)},l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,m=new Map,h=[],b=[],g=new Map,$=[];for(let y of r){if(y.subject===So||y.subject===pn||y.object===So||y.object===pn)continue;let T=y.predicate;ED(T)?(l.set(y.subject,y),c(y.subject)):xD(T)?(u.set(y.subject,y),c(y.subject),c(y.object)):SD(T)?d.set(y.subject,y):jD(T)?(p.set(y.subject,y),c(y.subject),c(y.object)):TD(T)?(f.set(y.subject,y),c(y.subject)):kD(T)?(m.has(y.subject)||m.set(y.subject,[]),m.get(y.subject).push(y),c(y.subject),c(y.object)):Lj(T)?(h.push(y),c(y.subject),c(y.object)):vD(T)?(b.push(y),c(y.subject),c(y.object)):$D(T)&&y.object==="transitiveproperty"?(g.has(y.subject)||g.set(y.subject,y),a.add(y.subject)):RD(T)&&($.push(y),a.add(y.subject),a.add(y.object))}let w=new Set([...l.keys()].filter(y=>u.has(y))),x=new Set([...l.keys()].filter(y=>d.has(y)));for(let y of x)i.delete(y);let R=new Map;for(let y of w)R.set(y,{role:l.get(y).object,filler:u.get(y).object});let E=new Map;for(let y of Af(r))y.kind!=="min"&&y.kind!=="exactly"||y.n>=1&&(w.has(y.restriction)||!l.has(y.restriction)||!p.has(y.restriction)||!f.has(y.restriction)||(E.set(y.restriction,y.onClass),R.set(y.restriction,{role:"has",filler:y.onClass})));let k=new Set(m.keys()),O=[],S=new Map;for(let y of h){let T=y.subject,C=y.object;if(k.has(T)){S.has(T)||S.set(T,y);continue}if(w.has(C)){let{role:v,filler:j}=R.get(C),M=l.get(C),z=u.get(C);O.push({form:"someRight",sub:T,role:v,filler:j,from:[y.id,M.id,z.id]}),O.push({form:"someLeft",role:v,filler:j,sup:C,from:[M.id,z.id]});continue}if(E.has(C)){let v=E.get(C),j=l.get(C),M=p.get(C),z=f.get(C);O.push({form:"someRight",sub:T,role:"has",filler:v,from:[y.id,j.id,M.id,z.id]}),O.push({form:"someLeft",role:"has",filler:v,sup:C,from:[j.id,M.id,z.id]});continue}x.has(C)||O.push({form:"sub",sub:T,sup:C,from:[y.id]})}for(let[y,T]of m){let C=S.get(y);if(!C)continue;let v=new Map;for(let K of T)v.has(K.object)||v.set(K.object,K);let j=[...v.keys()].sort();if(j.length<2)continue;let M=j[0],z=[v.get(j[0]).id];for(let K=1;K<j.length;K+=1){let Y=j[K],X=K===j.length-1,L=X?C.object:`${M}-and-${Y}`,H=[M,Y].sort(),W=v.get(Y).id,I=X?[...z,W,C.id]:[...z,W];O.push({form:"and",subs:H,sup:L,from:I}),z=[...z,W],M=L}}for(let y of b)O.push({form:"and",subs:[y.subject,y.object].sort(),sup:pn,from:[y.id]});let _=[];for(let y of[...g.keys()].sort())_.push({kind:"transitive",role:y,from:[g.get(y).id]});for(let y of[...$].sort((T,C)=>`${T.subject}${ue}${T.object}`.localeCompare(`${C.subject}${ue}${C.object}`)))_.push({kind:"sub",sub:y.subject,sup:y.object,from:[y.id]});return{axioms:O,roleAxioms:_,concepts:i,roles:a,restrictionOf:R,truncated:o}}function Ru(e,{budget:t=2e3,rounds:n=64,focus:s=null}={}){let o=e?.axioms||[],r=e?.roleAxioms||[],i=[...e?.concepts||[]].sort(),a=s instanceof Set?s.size?s:null:yD(s),c=(...y)=>!a||y.some(T=>a.has(T)),l=new Map,u=new Map,d=new Map,p=new Map;for(let y of o)if(y.form==="sub")l.has(y.sub)||l.set(y.sub,[]),l.get(y.sub).push({sup:y.sup,from:y.from});else if(y.form==="and"){let[T,C]=y.subs;for(let[v,j]of[[T,C],[C,T]])u.has(v)||u.set(v,[]),u.get(v).push({other:j,sup:y.sup,from:y.from})}else if(y.form==="someRight")d.has(y.sub)||d.set(y.sub,[]),d.get(y.sub).push({role:y.role,filler:y.filler,from:y.from});else if(y.form==="someLeft"){let T=`${y.role}${ue}${y.filler}`;p.has(T)||p.set(T,[]),p.get(T).push({sup:y.sup,from:y.from})}let f=new Map,m=new Set,h=new Map;for(let y of r)y.kind==="sub"?(f.has(y.sub)||f.set(y.sub,[]),f.get(y.sub).push({sup:y.sup,from:y.from})):y.kind==="transitive"&&(m.add(y.role),h.has(y.role)||h.set(y.role,y.from));let b=new Map;for(let y of i)b.set(y,new Set([y,So]));let g=new Map,$=new Map,w=new Map,x=(y,T)=>y===T?[]:$.get(`${y}${ue}${T}`)||[],R=(y,T)=>w.get(`${y}${ue}${T}`)||[],E=(...y)=>{let T=new Set,C=[];for(let v of y)for(let j of v||[])!j||T.has(j)||(T.add(j),C.push(j));return C},k=0,O=!1,S=0;for(let y=0;y<n;y+=1){S+=1;let T=[];for(let[v,j]of b)for(let M of j)for(let{sup:z,from:K}of l.get(M)||[])j.has(z)||c(v,M,z)&&T.push({kind:"sub",A:v,X:z,from:E(x(v,M),K),sortKey:`1${ue}${v}${ue}${z}${ue}${M}`});for(let[v,j]of b)for(let M of j)for(let{other:z,sup:K,from:Y}of u.get(M)||[])j.has(z)&&(j.has(K)||c(v,M,z,K)&&T.push({kind:"sub",A:v,X:K,from:E(x(v,M),x(v,z),Y),sortKey:`2${ue}${v}${ue}${K}${ue}${[M,z].sort().join(ue)}`}));for(let[v,j]of b)for(let M of j)for(let{role:z,filler:K,from:Y}of d.get(M)||[]){let X=`${v}${ue}${K}`;(g.get(z)||La).has(X)||c(v,M,K)&&T.push({kind:"role",role:z,A:v,B:K,from:E(x(v,M),Y),sortKey:`3${ue}${z}${ue}${v}${ue}${K}${ue}${M}`})}for(let[v,j]of g)for(let M of j){let[z,K]=M.split(ue),Y=b.get(K)||La;for(let X of Y)for(let{sup:L,from:H}of p.get(`${v}${ue}${X}`)||[]){let W=b.get(z);!W||W.has(L)||c(z,K,X,L)&&T.push({kind:"sub",A:z,X:L,from:E(R(v,M),x(K,X),H),sortKey:`4${ue}${z}${ue}${L}${ue}${v}${ue}${K}${ue}${X}`})}}for(let[v,j]of g)for(let M of j){let[z,K]=M.split(ue);if(!(b.get(K)||La).has(pn))continue;let Y=b.get(z);!Y||Y.has(pn)||c(z,K)&&T.push({kind:"sub",A:z,X:pn,from:E(R(v,M),x(K,pn)),sortKey:`5${ue}${z}${ue}${v}${ue}${K}`})}for(let[v,j]of g)for(let{sup:M,from:z}of f.get(v)||[])for(let K of j){if((g.get(M)||La).has(K))continue;let[Y,X]=K.split(ue);c(Y,X)&&T.push({kind:"role",role:M,A:Y,B:X,from:E(R(v,K),z),sortKey:`6${ue}${M}${ue}${Y}${ue}${X}${ue}${v}`})}for(let v of[...m].sort()){let j=g.get(v);if(j)for(let M of j){let[z,K]=M.split(ue);for(let Y of j){let[X,L]=Y.split(ue);if(X!==K)continue;let H=`${z}${ue}${L}`;j.has(H)||c(z,K,L)&&T.push({kind:"role",role:v,A:z,B:L,from:E(R(v,M),R(v,Y),h.get(v)),sortKey:`7${ue}${v}${ue}${z}${ue}${L}${ue}${K}`})}}}if(!T.length){O=!0;break}T.sort((v,j)=>v.sortKey<j.sortKey?-1:v.sortKey>j.sortKey?1:0);let C=!1;for(let v of T){if(k>=t)break;if(v.kind==="sub"){let j=b.get(v.A);if(!j||j.has(v.X))continue;j.add(v.X),$.set(`${v.A}${ue}${v.X}`,v.from),k+=1,C=!0}else{g.has(v.role)||g.set(v.role,new Set);let j=g.get(v.role),M=`${v.A}${ue}${v.B}`;if(j.has(M))continue;j.add(M),w.set(`${v.role}${ue}${M}`,v.from),k+=1,C=!0}}if(k>=t)break;if(!C){O=!0;break}}let _=[...b.entries()].filter(([,y])=>y.has(pn)).map(([y])=>y).sort();return{subsumers:b,roleEdges:g,unsatisfiable:_,derivationOf:$,rounds:S,truncated:!O}}function Pj(e,t,{budget:n=200}={}){let o=[...(e?.axioms||[]).filter(a=>a.form==="someRight")].sort((a,c)=>{let l=`${a.role}${ue}${a.filler}${ue}${a.sub}`,u=`${c.role}${ue}${c.filler}${ue}${c.sub}`;return l<u?-1:l>u?1:0}),r=[],i=new Set;for(let a of o){let l=[...t?.get(a.filler)||new Set([a.filler,So])].filter(u=>u!==So&&u!==pn).sort();for(let u of l){let d=`some-${a.role}-${u}`;if(!i.has(d)&&(i.add(d),r.push({form:"someLeft",role:a.role,filler:u,sup:d,from:[]}),r.length>=n))return r}}return r}function Mj(e,t){let n=V(e),s=V(t),o=`some-${n}-${s}`;return{axiom:{form:"someLeft",role:n,filler:s,sup:o,from:[]},name:o}}function AD(e,t,{role:n,filler:s},{budget:o=2e3,rounds:r=64}={}){let i=V(t),a=kh(e,{budget:o}),{axiom:c,name:l}=Mj(n,s),u=new Set(a.concepts);u.add(i),u.add(c.filler);let d={...a,axioms:[...a.axioms,c],concepts:u},p=Ru(d,{budget:o,rounds:r});return(p.subsumers.get(i)||La).has(l)?{proved:!0,premises:p.derivationOf.get(`${i}${ue}${l}`)||[]}:{proved:!1,exhausted:p.truncated}}function Dj(e,{budget:t=Th,rounds:n=Ah,focus:s=null}={}){let o=kh(e,{budget:t}),r=Ru(o,{budget:t,rounds:n,focus:s}),i=Pj(o,r.subsumers),a=new Map(i.map(d=>[d.sup,{role:d.role,filler:d.filler}])),c={...o,axioms:[...o.axioms,...i]},l=Ru(c,{budget:t,rounds:n,focus:s}),u=o.truncated||r.truncated||l.truncated;return{normalized:o,goals:i,goalInfo:a,finalPass:l,truncated:u}}function CD(e,t={}){let{finalPass:n,truncated:s}=Dj(e,t);return{unsatisfiable:n.unsatisfiable,premisesOf:o=>n.derivationOf.get(`${o}${ue}${pn}`)||[],truncated:s}}async function OD(e,{budget:t=Th,rounds:n=Ah,focus:s=null,maxEnvironments:o=Wr,store:r}={}){let{loadMemory:i,readFactRows:a,appendFacts:c}=wD(r,["loadMemory","readFactRows","appendFacts"],"classifyEl"),l=await i(e),u=a(l),{normalized:d,goals:p,goalInfo:f,finalPass:m,truncated:h}=Dj(u,{budget:t,rounds:n,focus:s}),b=new Map;for(let _ of u)b.set(`${_.subject}${ue}${_.predicate}${ue}${_.object}`,_.trust);let g=new Map(u.map(_=>[_.id,_])),$=_=>(_||[]).map(y=>g.get(y)?.trust).filter(y=>typeof y=="number"),w=new Set(u.filter(_=>Lj(_.predicate)).map(_=>`${_.subject}${ue}${_.object}`)),x=[],R=[],E=new Set,k=[...m.subsumers.keys()].sort();for(let _ of k){let y=m.subsumers.get(_);if(y.has(pn))continue;let T=[...y].filter(C=>C!==_&&C!==So&&C!==pn).sort();for(let C of T){let v=`${_}${ue}${C}`;if(w.has(v))continue;let j=m.derivationOf.get(v)||[],M=f.get(C);if(M){E.has(C)||(E.add(C),x.push({subject:C,predicate:Dt,object:"owl:Restriction",provenance:Pa,justification:[j]}),x.push({subject:C,predicate:Rn,object:M.role,provenance:Pa,justification:[j]}),x.push({subject:C,predicate:_n,object:M.filler,provenance:Pa,justification:[j]}));let z=$(j),K=x.length;x.push({subject:_,predicate:Be,object:C,provenance:Pa,justification:[j],...z.length?{premiseTrusts:z,ruleConfidence:jh}:{}}),R.push({toWriteIndex:K,subject:_,object:C,rule:_h})}else if(d.concepts.has(C)){let z=$(j),K=x.length;x.push({subject:_,predicate:Be,object:C,provenance:Fj,justification:[j],...z.length?{premiseTrusts:z,ruleConfidence:jh}:{}}),R.push({toWriteIndex:K,subject:_,object:C,rule:Rh})}}}let{ids:O}=await c(e,x),S=R.map(_=>({id:O[_.toWriteIndex],subject:_.subject,object:_.object,rule:_.rule}));return{derived:S,count:S.length,budget:t,rounds:n,truncated:h,unsatisfiable:m.unsatisfiable,goalCount:p.length}}var ue,So,pn,vs,Lj,$D,vD,ED,xD,SD,jD,kD,RD,_D,TD,La,Rh,Fj,_h,Pa,jh,Th,Ah,Bj=P(()=>{Ze();Ot();ue="\u241F",So="top",pn="bot";vs=e=>String(e||"").trim().toLowerCase(),Lj=e=>vs(e)==="rdfs:subclassof",$D=e=>vs(e)==="rdf:type",vD=e=>vs(e)==="owl:disjointwith",ED=e=>vs(e)==="owl:onproperty",xD=e=>vs(e)==="owl:somevaluesfrom",SD=e=>vs(e)==="owl:allvaluesfrom",jD=e=>vs(e)==="owl:onclass",kD=e=>vs(e)==="owl:intersectionof",RD=e=>vs(e)==="rdfs:subpropertyof",_D=new Set(["owl:cardinality","owl:mincardinality","owl:maxcardinality"]),TD=e=>_D.has(vs(e));La=new Set;Rh="elSubsumption",Fj=`entailed:${Rh}`,_h="elRestriction",Pa=`entailed:${_h}`,jh=.95,Th=2e3,Ah=64});var Uj={};Lt(Uj,{DEFAULT_REASONING_CONFIG:()=>_u,resolveReasoningConfig:()=>MD});function LD(e,t){let n=Number(e);return Number.isInteger(n)&&n>0?n:t}function PD(e,t){return typeof e=="boolean"?e:t}function MD(e){let t=e?.reasoning||{},n={..._u};for(let[s,o]of Object.entries(ID))t[s]!==void 0&&(n[o]=LD(t[s],_u[o]));for(let[s,o]of Object.entries(ND))t[s]!==void 0&&(n[o]=PD(t[s],_u[o]));return n}var _u,ID,ND,Wj=P(()=>{_u=Object.freeze({syllogiseBudget:50,syllogiseDepth:32,classifyBudget:2e3,classifyRounds:64,maxEnvironments:4,proveSteps:5e3,proveBranches:256,proveNodes:512,askProveFallback:!0,askProveSteps:1e3,askProveBranches:64,askProveNodes:128}),ID=Object.freeze({syllogise_budget:"syllogiseBudget",syllogise_depth:"syllogiseDepth",classify_budget:"classifyBudget",classify_rounds:"classifyRounds",max_environments:"maxEnvironments",prove_steps:"proveSteps",prove_branches:"proveBranches",prove_nodes:"proveNodes",ask_prove_steps:"askProveSteps",ask_prove_branches:"askProveBranches",ask_prove_nodes:"askProveNodes"}),ND=Object.freeze({ask_prove_fallback:"askProveFallback"})});function Bh(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 ${Tu(e.entityType)}`;if(t==="list")return`list/enumerate ${Tu(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${Tu(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 Bh(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&&Ln[o]?Ln[o]:`filter/traverse ${Tu(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&&Ln[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?Ln[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function qh(e){let t=new Map;for(let n of e)t.has(Kj(n))||t.set(Kj(n),n);return t}function Oh(e,t=br){let n=[],s=[];for(let c of e)c.predicate===t&&(s.push([c.subject,c.object]),gr(c)&&n.push([c.subject,c.object]));let o=new Map,r=new Map,i=new Set,a=(c,l,u)=>{!l||!u||l===u||(c.has(l)||c.set(l,new Set),c.get(l).add(u))};for(let[c,l]of s)a(r,c,l),l&&i.add(l);for(let[c,l]of n)a(o,c,l);return{strictEdges:n,broadEdges:s,strictSucc:o,broadSucc:r,reachableHeads:i}}function Ih(e,t,n,s,o){let r=s.reachableHeads,i=!1;for(let a of n)if(r.has(a)){i=!0;break}return i?e(t,n,[],s.strictSucc,o)||e(t,n,[],s.broadSucc,o):null}function VD(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function KD(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(gj(),hj)),s=n();return s?VD(t,s(t)):t}catch{return t}}function Xh(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)||HD.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 Lu(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return si;if(t==="can")return"mgx:capableOf";try{let n=await KD(t);return n==="have"?si:ss(`mgx:${n}`)}catch{return ss(`mgx:${t}`)}}function ez(e,t){let n=String(t||"").match(ZD);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function Ma(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(es(),Ey)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function Yj(e){return e.predicate===WD&&e.object==="transitiveproperty"||e.predicate===wk}function Mh(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function az(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of iz)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 Uh(e){return e.replace(/#node:[0-9a-f]+/g,"")}function Qh(e){let t=QE(e),n=e.provenance?` (source: ${Uh(e.provenance)})`:"";return`${t?` ${t}`:""}${n}`}function ko(e){return`${Ks(e)}${Qh(e)}`}function se(e){let t=Qh(e);return e.predicate===wk?`${hm(e.subject)} implies ${hm(e.object)}${t}`:e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Ks(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Ks(e)}${t}`:e.provenance.includes("corpus:")?`${Ks(e)}${t}`:e.provenance.includes("reference:")?`${Ks(e)}${t}`:`i learned: ${Ks(e)}${t}`}function Jj(e,t,n,{toward:s=null}={}){let o=se(e);if(!Pn.has(e.predicate)||!n.has(e.subject))return o;let r=nu(e.object,t,{cap:6,stopAt:eu,toward:s});if(r.length<=1)return o;let i=` \u2192 ${r.slice(1).join(" \u2192 ")}`,a=Qh(e);return!a||!o.endsWith(a)?o+i:o.slice(0,o.length-a.length)+i+a}function Qj(e,t,n,{indent:s=""}={}){let o=t.filter(R=>R.predicate===br).map(R=>[R.subject,R.object]),r=ka(o),i=e.map(R=>`${s}${Jj(R,r,n)}`),a=e.filter(R=>Pn.has(R.predicate)&&n.has(R.subject)),c=[...new Set(a.map(R=>R.object))];if(c.length<2)return{lines:i,grouped:null};let l=t.filter(R=>R.predicate==="owl:disjointWith").map(R=>[R.subject,R.object]),{split:u,clusters:d}=su(c,{parents:r,disjointEdges:l});if(!u)return{lines:i,grouped:null};let p=a[0].subject,f=new Map;for(let R of d)for(let E of R.objects)f.set(E,R);let m=e.filter(R=>!(Pn.has(R.predicate)&&n.has(R.subject))),h=[],b=[],g=0,$=R=>{let E=Jj(R,r,n);return g<_e?(g+=1,`${s}${E}`):(b.push(E),null)};for(let R of d){let E=a.filter(k=>f.get(k.object)===R).map($).filter(Boolean);E.length&&h.push(`${s}${p}, the ${R.label}:
176
+ `});var $S=P(()=>{nh()});var vS=P(()=>{nh()});var xS=P(()=>{We();fr();kn();di()});var jS=P(()=>{Rs();We();iu();cu();di()});var oh,xM,SM,jM,kM,RM,_M,G6,V6,di=P(()=>{fr();_a();iu();sS();Hn();Dl();qm();Ym();cu();au();lu();We();yS();$S();vS();xS();jS();oh="mgx:world-epoch",xM=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),SM=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),jM="mgx:is-open",kM="mgx:hasMass",RM="mgx:knows-about",_M="mgx:display-name",G6=new Set([...xM,...SM,jM,kM,RM,_M,"rdf:type",oh]),V6=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 fi,H6,q6,Y6,X6,J6,Q6,Eo=P(()=>{fi=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),mudiii:Object.freeze({predatorInitialMass:20,predatorMassDecrementPerTurn:.08,predatorVisionRadius:4,preyInitialMass:8,preyMassDecrementPerTurn:.06,preyVisionRadius:3,preySpawnIntervalTurns:5,foodSpawnIntervalTurns:3,spawnedFoodMass:2,placedFoodMass:2,maxPreyPopulation:6,maxFoodItems:8,foodVisionGated:!0,blendPreyDecision:!1,preyThreatWeight:.5,teach:!1}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),adventure:Object.freeze({teach:!1}),planning:Object.freeze({maxDepth:300})}),H6=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"}),q6=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"}),Y6=Object.freeze({predator_initial_mass:"predatorInitialMass",predator_mass_decrement_per_turn:"predatorMassDecrementPerTurn",predator_vision_radius:"predatorVisionRadius",prey_initial_mass:"preyInitialMass",prey_mass_decrement_per_turn:"preyMassDecrementPerTurn",prey_vision_radius:"preyVisionRadius",prey_spawn_interval_turns:"preySpawnIntervalTurns",food_spawn_interval_turns:"foodSpawnIntervalTurns",spawned_food_mass:"spawnedFoodMass",placed_food_mass:"placedFoodMass",max_prey_population:"maxPreyPopulation",max_food_items:"maxFoodItems",food_vision_gated:"foodVisionGated",blend_prey_decision:"blendPreyDecision",prey_threat_weight:"preyThreatWeight",teach:"teach"}),X6=Object.freeze({teach:"teach"}),J6=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),Q6=Object.freeze({max_depth:"maxDepth"})});var _S,TM,pu,AM,CM,TS,AS,OM,IM,tJ,NM,LM,CS=P(()=>{Eo();_S="spider-fly",TM=10,pu=Object.freeze({x:2,y:2}),AM=1,CM=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider",hunts:"prey"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly",hunts:null}),food:null}),TS=(e,t)=>`cell-${e}-${t}`,AS=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),OM=(e,t)=>AS(e,t,pu.x,pu.y)<=AM,IM=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})}),tJ=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"])]),NM="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.",LM=Object.freeze({name:_S,gridSize:TM,opening:NM,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:OM,webHomeCell:TS(pu.x,pu.y)})});var OS,PS,oJ,rJ,iJ,rh,IS,NS,LS,ih,aJ,cJ,mu=P(()=>{Eo();OS=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),PS=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})}),oJ=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),rJ=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),iJ=Object.freeze([OS.spawnedFood,OS.placedFood]),rh=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),IS=rh({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"}]}),NS=rh({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"}]}),LS=rh({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"}]}),ih=Object.freeze({[IS.name]:IS,[NS.name]:NS,[LS.name]:LS}),aJ=Object.freeze(Object.keys(ih)),cJ=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 ah=P(()=>{});var MS=P(()=>{});var Aa,NJ,GM,VM,KM,HM,qM,YM,XM,JM,QM,ZM,eF,tF,nF,sF,oF,rF,iF,LJ,ch=P(()=>{mu();ah();Rs();We();fr();MS();Ze();Eo();_a();di();Aa=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox",hunts:"prey"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin",hunts:null},food:{spawnedKind:"crumb",placedKind:"morsel"}}),NJ=Object.freeze(["predator","prey"]),GM="mgx:currently-in",VM="mgx:hasMass",KM="mgx:feels",HM="mgx:facing",qM="mgx:driven-facing",YM="mgx:eaten-by",XM="mgx:starved",JM="mgx:placed-by",QM="mgx:model",ZM="mgx:rotation",eF="mgx:carrying",tF="mgx:prey-eaten",nF="mgx:web-built-at-turn",sF="mgx:laid-at-turn",oF="mgx:hatched-into",rF="mgx:turn-played",iF=new Set([GM,VM,KM,HM,qM,YM,XM,JM,QM,ZM,rF,eF,tF,nF,sF,oF,"rdf:type",oh]),LJ=Object.freeze([...iF].sort())});var ZJ,e9,DS=P(()=>{CS();mu();ch();fr();lu();We();Eo();ZJ=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"),e9=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var A9,C9,O9,I9,N9,L9,P9,uF,dF,fF,pF,zS,BS,mF,M9,F9,US=P(()=>{mu();ch();di();kn();fr();lu();We();Eo();_a();ah();au();Rs();A9=Aa.predator.kind,C9=Aa.prey.kind,O9=Aa.food.spawnedKind,I9=Aa.food.placedKind,N9=Object.freeze(new Set(["river-crossing"])),L9=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"),P9=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"),uF="mgx:currently-in",dF="mgx:hasMass",fF="mgx:feels",pF="mgx:facing",zS="(fox|goblin|crumb|morsel)(?:-(\\d+))?",BS="(fox|goblin)(?:-(\\d+))?",mF="(crumb|morsel)(?:-(\\d+))?",M9=[{kind:"placement",predicate:uF,re:new RegExp(`^(?:the\\s+)?${zS}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:dF,re:new RegExp(`^(?:the\\s+)?${zS}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:fF,re:new RegExp(`^(?:the\\s+)?${BS}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:pF,re:new RegExp(`^(?:the\\s+)?${BS}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],F9=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${mF}\\s+there[.!\\s]*$`,"i")});var WS=P(()=>{_a()});var kt,V9,K9,H9,q9,Y9,X9,J9,Q9,Z9,eQ,tQ,nQ,sQ,oQ,rQ,iQ,aQ,cQ,hF,GS=P(()=>{kt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},V9=kt("createRequire"),K9=kt("readFileSync"),H9=kt("access"),q9=kt("readFile"),Y9=kt("writeFile"),X9=kt("appendFile"),J9=kt("mkdir"),Q9=kt("mkdtemp"),Z9=kt("rename"),eQ=kt("unlink"),tQ=kt("rm"),nQ=kt("stat"),sQ=kt("copyFile"),oQ=kt("readdir"),rQ=kt("createReadStream"),iQ=kt("createWriteStream"),aQ=kt("randomBytes"),cQ=kt("spawnSync"),hF=kt("createInterface")});var Rt,uQ,dQ,fQ,pQ,mQ,hQ,gQ,bQ,wQ,yQ,$Q,vQ,EQ,xQ,SQ,jQ,kQ,VS,RQ,lh=P(()=>{Rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},uQ=Rt("createRequire"),dQ=Rt("readFileSync"),fQ=Rt("access"),pQ=Rt("readFile"),mQ=Rt("writeFile"),hQ=Rt("appendFile"),gQ=Rt("mkdir"),bQ=Rt("mkdtemp"),wQ=Rt("rename"),yQ=Rt("unlink"),$Q=Rt("rm"),vQ=Rt("stat"),EQ=Rt("copyFile"),xQ=Rt("readdir"),SQ=Rt("createReadStream"),jQ=Rt("createWriteStream"),kQ=Rt("randomBytes"),VS=Rt("spawnSync"),RQ=Rt("createInterface")});var KS=P(()=>{lh();Qe();Pt();Qe();ia();Xt()});var HS=P(()=>{});var gF,qS=P(()=>{Pt();Qe();We();HS();gF=ne(".tmct","sessions")});var YS=P(()=>{Pt();Qe();zl()});var XS,hu,JS=P(()=>{XS=Object.freeze({countNouns:{class:"Class",classes:"Class",function:"Function",functions:"Function",func:"Function",funcs:"Function",module:"Module",modules:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",method:"Method",methods:"Method",attribute:"Attribute",attributes:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",commit:"Commit",commits:"Commit",session:"Session",sessions:"Session"},classLabels:{Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},helpRows:[["/find <query>","lexical search across the graph"],["/search <query>","alias of /find"],["/context <symbol>","the sized edit bundle for a symbol (start here to change code)"],["/snippet <symbol>","exact source of one function/class/method"],["/describe <symbol>","a symbol's definition, kind and relations"],["/signature <symbol>","a symbol's signature only"],["/members <class>","the methods/attributes of a class"],["/subclasses <class>","the subclasses of a class"],["/impact <module>","what a change to this module or symbol reaches (impact closure)"],["/callers <symbol>","functions that call this symbol"],["/callees <symbol>","functions this symbol calls"],["/tests <symbol>","the tests covering this symbol"],["/untested","symbols with no covering test"],["/history <symbol>","the commit history of this symbol"],["/exports <module>","a module's public exports"],["/arch [package]","the architecture overview (optional package filter)"]],missRecoveryPointer:"for code structure, index this repo with `tmct index`, or point me at a .tmct/graph.json with --repo <path> (or try `npm run example:mini`)."}),hu=Object.freeze({countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""})});var _t,qQ,YQ,XQ,JQ,QQ,ZQ,e7,t7,n7,s7,o7,r7,i7,a7,c7,l7,u7,d7,QS,ZS=P(()=>{_t=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},qQ=_t("createRequire"),YQ=_t("readFileSync"),XQ=_t("access"),JQ=_t("readFile"),QQ=_t("writeFile"),ZQ=_t("appendFile"),e7=_t("mkdir"),t7=_t("mkdtemp"),n7=_t("rename"),s7=_t("unlink"),o7=_t("rm"),r7=_t("stat"),i7=_t("copyFile"),a7=_t("readdir"),c7=_t("createReadStream"),l7=_t("createWriteStream"),u7=_t("randomBytes"),d7=_t("spawnSync"),QS=_t("createInterface")});var oj={};Lt(oj,{CONTEXT_PASSAGE_PREDICATE:()=>tj,CO_OCCURS_PREDICATE:()=>gu,ingestUnknownFromAssertions:()=>yF,knownTermsFrom:()=>nj,passageFor:()=>sj});function nj(e,t){let n=new Set;for(let s of e?.individuals||[]){if(s?.class!==tt)continue;let o=a=>(s.attributes||[]).find(c=>c?.key===a)?.value,r=o("subject"),i=o("object");r&&n.add(V(r)),i&&n.add(V(i))}for(let s of t||[])s?.subject&&n.add(V(s.subject)),s?.object&&n.add(V(s.object));return n}function sj(e,t){let n=e?.surfaceText;if(typeof n=="string"&&n.trim())return n.replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\s+/g," ").trim();let s=xo(e?.start),o=xo(e?.end);return t?.surface&&s&&o?t.surface.replace("{start}",s).replace("{end}",o):null}function wF(e,t,n){let s=String(e||"").toLowerCase().replace(/[^a-z0-9\s]/g," ").split(/\s+/).filter(Boolean),o=[],r=new Set;for(let i=0;i<s.length&&o.length<ej;i+=1){let a=[s[i]];i+1<s.length&&a.push(`${s[i]} ${s[i+1]}`);for(let c of a)if(!(bF.has(c)||r.has(c)||n.has(c))&&t.has(c)&&(o.push(c),r.add(c),o.length>=ej))break}return o}async function yF(e,{assertions:t,map:n,mappedFacts:s=[],memory:o,provenancePrefix:r="corpus:unknown",limit:i=500}={}){if(!Array.isArray(t)||!n)return{captured:0,linked:0,appended:0,skipped:0};let a=o||await mt(e),c=nj(a,s),l=new Set,u=[];for(let f of t){if(l.size>=i)break;let m=n.get(f.rel);if(!m||m.ace!=="none")continue;let h=xo(f.start),b=xo(f.end);if(!h||!b)continue;let g=V(h),$=V(b),w=!c.has(g),x=!c.has($);if(!w&&!x)continue;let R=sj(f,m);if(!R)continue;let E=[[h,b,w],[b,h,x]];for(let[k,O,S]of E){if(!S||l.size>=i)continue;let _=V(k);if(l.has(_))continue;let y=`${r} ${f.rel}`;u.push({subject:k,predicate:tj,object:R,provenance:y}),u.push({subject:k,predicate:gu,object:O,provenance:y});let T=wF(R,c,new Set([g,$]));for(let C of T)u.push({subject:k,predicate:gu,object:C,provenance:y});l.add(_),c.add(_)}}if(!u.length)return{captured:0,linked:0,appended:0,skipped:0};let d=await Kn(e,u),p=u.filter(f=>f.predicate===gu).length;return{captured:l.size,linked:p,appended:d.appended,skipped:d.skipped}}var tj,gu,bF,ej,rj=P(()=>{We();bu();tj="mgx:contextPassage",gu="mgx:coOccursWith",bF=new Set(["a","an","the","is","are","was","were","be","being","been","to","of","for","in","on","at","with","by","as","and","or","that","this","it","its","you","your","related","kind","used"]),ej=3});var ij={};Lt(ij,{MAP_FILE:()=>Oa,SEON_CONCEPTS_FILE:()=>wu,SEON_DEFINITIONS_FILE:()=>$F,SLICE_FILE:()=>Ca,TIER2_DIR:()=>bs,TIER2_MANIFEST_FILE:()=>vF,WORDNET_DIR:()=>Ia,loadMap:()=>$u,loadSlice:()=>yu,seedMemory:()=>xF,termText:()=>xo,toFacts:()=>vu});async function yu(e=Ca){let t=QS({input:cx(e,"utf8"),crlfDelay:1/0}),n=[],s=0;for await(let o of t){s+=1;let r=o.trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch(a){throw new Error(`${e}:${s}: not valid JSON: ${a.message}`)}for(let a of["start","rel","end"])if(typeof i[a]!="string"||!i[a])throw new Error(`${e}:${s}: assertion missing "${a}"`);n.push(i)}return n}async function $u(e=Oa){let n=Qo(await Oe(e,"utf8")).relation||[],s=new Map;for(let o of n){if(!o.rel)throw new Error(`${e}: a [[relation]] row is missing "rel"`);if(s.has(o.rel))throw new Error(`${e}: duplicate mapping for ${o.rel}`);if(!EF.has(o.ace))throw new Error(`${e}: ${o.rel} has unknown ace pattern ${JSON.stringify(o.ace)}`);if(o.ace!=="none"&&!o.predicate)throw new Error(`${e}: ${o.rel} maps to ${o.ace} but names no predicate URI`);s.set(o.rel,o)}return s}function vu(e,t,n="corpus:conceptnet"){let s=[];for(let o of e){let r=t.get(o.rel);if(!r)throw new Error(`slice/map drift: relation ${o.rel} has no row in conceptnet-map.toml`);if(r.ace==="none")continue;let i=xo(o.start),a=xo(o.end);if(!i||!a)continue;let c=r.predicate==="mgx:relatedTo"?n.replace(/^corpus:/,"corpus-weak:"):n;s.push({subject:i,predicate:r.predicate,object:a,provenance:`${c} ${o.rel}`})}return s}async function xF(e,{limit:t,slicePath:n=Ca,mapPath:s=Oa,prefer:o,provenancePrefix:r,captureUnknownContext:i=!1,unknownContextLimit:a}={}){let[c,l]=await Promise.all([yu(n),$u(s)]),u=vu(c,l,r);if(Array.isArray(o)&&o.length){let $=new Map(o.map((w,x)=>[w,x]));u=u.slice().sort((w,x)=>($.get(w.predicate)??o.length)-($.get(x.predicate)??o.length))}t!==void 0&&(u=u.slice(0,t));let d=($,w,x)=>`${V($)} ${w} ${V(x)}`,p=new Set,f=await mt(e);for(let $ of f.individuals||[]){if($?.class!=="Fact")continue;let w=x=>($.attributes||[]).find(R=>R.key===x)?.value;p.add(d(w("subject"),w("predicate"),w("object")))}let m=0,h=[];for(let $ of u){let w=d($.subject,$.predicate,$.object);if(p.has(w)){m+=1;continue}p.add(w),h.push($)}let b=await Kn(e,h),g;if(i){let{ingestUnknownFromAssertions:$}=await Promise.resolve().then(()=>(rj(),oj));g=await $(e,{assertions:c,map:l,mappedFacts:u,memory:f,provenancePrefix:r?`${r}-unknown`:void 0,limit:a})}return{appended:b.appended,skipped:m+b.skipped,total:u.length,...g?{unknown:g}:{}}}var SF,pi,Ca,Oa,wu,$F,bs,vF,Ia,E7,EF,xo,bu=P(()=>{ar();Pt();ZS();yo();Qe();ul();We();SF={},pi=ne($e(qt(SF.url)),"..","..",".."),Ca=ne(pi,"corpus","conceptnet","slice.jsonl"),Oa=ne(pi,"src","adapters","corpus","conceptnet-map.toml"),wu=ne(pi,"corpus","domains","code","concepts.jsonl"),$F=ne(pi,"corpus","domains","code","definitions.jsonl"),bs=ne(pi,"corpus","tier2"),vF=ne(bs,"manifest.json"),Ia=ne(pi,"corpus","wordnet"),E7=ne(Ia,"manifest.json"),EF=new Set(["subClassOf","type","ObjectProperty","someValuesFrom","disjointWith","property","none"]);xo=e=>{let t=/^\/c\/en\/([^/]+)/.exec(String(e||""));return t?t[1].replace(/_/g," "):null}});var fj={};Lt(fj,{BUILTIN_EXTENSIONS:()=>_F,EXTENSION_KINDS:()=>Eu,activeDomainPacks:()=>mh,defaultCodeDomainPacks:()=>dj,defaultCodeLaneVocab:()=>uj,mergedLaneVocab:()=>ph,mergedLexiconExtra:()=>lj,resolveExtensions:()=>cj,seedActiveCorpusEntries:()=>CF,validateExtensionEntry:()=>aj,validateExtensionPack:()=>IF});function xu(){return{seon:{kind:"corpus",active:!1,corpusPath:wu,provenancePrefix:"corpus:seon"},code:{kind:"pack",active:!1,corpusPath:wu,provenancePrefix:"corpus:seon",vocabPath:kF,vocabData:XS,groundingKind:"extraction",groundingAdapter:"tmct index (the graphPaths provider seam)"},conceptnet:{kind:"corpus",active:!1,corpusPath:Ca,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:RF},human:{kind:"corpus",active:!0,corpusPath:ne(bs,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:ne(bs,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:ne(bs,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"pack",active:!1,corpusPath:ne(bs,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws",vocabPath:uh,vocabData:hu,groundingKind:"taught-only"},"tier2-python":{kind:"pack",active:!1,corpusPath:ne(bs,"python.jsonl"),provenancePrefix:"corpus:tier2-python",vocabPath:uh,vocabData:hu,groundingKind:"taught-only"},"tier2-java":{kind:"pack",active:!1,corpusPath:ne(bs,"java.jsonl"),provenancePrefix:"corpus:tier2-java",vocabPath:uh,vocabData:hu,groundingKind:"taught-only"},"tier2-general":{kind:"corpus",active:!1,corpusPath:ne(bs,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:ne(Ia,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:ne(Ia,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:ne(jF,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}function aj(e,t){if(!t||typeof t!="object")throw new Error(`extension "${e}": entry must be an object`);if(!Eu.includes(t.kind))throw new Error(`extension "${e}": unknown kind ${JSON.stringify(t.kind)} (must be one of ${Eu.join(", ")})`);if(t.active!==void 0&&typeof t.active!="boolean")throw new Error(`extension "${e}": "active" must be a boolean`);if(t.kind==="corpus"&&!t.corpusPath)throw new Error(`extension "${e}": a "corpus" entry needs corpus_path`);if(t.kind==="ontology"&&!t.corpusPath)throw new Error(`extension "${e}": an "ontology" entry needs ontology_path`);if(t.kind==="lexicon"&&!t.lexiconPath)throw new Error(`extension "${e}": a "lexicon" entry needs lexicon_path`);if(t.kind==="templates"&&!t.templatesPath)throw new Error(`extension "${e}": a "templates" entry needs templates_path`);if(t.kind==="pack"&&!t.corpusPath&&!t.lexiconPath&&!t.templatesPath&&!t.phrasebookPath)throw new Error(`extension "${e}": a "pack" entry needs at least one of corpus_path/lexicon_path/templates_path/phrasebook_path`);if(t.limit!==void 0&&!Number.isFinite(t.limit))throw new Error(`extension "${e}": "limit" must be a finite number`);if(t.prefer!==void 0&&!Array.isArray(t.prefer))throw new Error(`extension "${e}": "prefer" must be an array of predicate URIs`)}function AF(e,t,n,s){if(!t&&n.kind===void 0)throw new Error(`extension "${e}": an unrecognized extension needs a "kind" (one of ${Eu.join(", ")})`);let o={kind:n.kind!==void 0?n.kind:t?.kind,active:n.active!==void 0?!!n.active:!!t?.active},r=[["corpus_path","corpusPath"],["ontology_path","corpusPath"],["lexicon_path","lexiconPath"],["templates_path","templatesPath"],["phrasebook_path","phrasebookPath"],["map_path","mapPath"],["vocab_path","vocabPath"]];for(let[i,a]of r)n[i]!==void 0?o[a]=TF(s,n[i]):t?.[a]!==void 0&&(o[a]=t[a]);return o.provenancePrefix=n.provenance_prefix!==void 0?String(n.provenance_prefix):t?.provenancePrefix??`corpus:${e}`,n.limit!==void 0?o.limit=Number(n.limit):t?.limit!==void 0&&(o.limit=t.limit),n.prefer!==void 0?o.prefer=n.prefer:t?.prefer!==void 0&&(o.prefer=t.prefer),n.grounding_kind!==void 0?o.groundingKind=String(n.grounding_kind):t?.groundingKind!==void 0&&(o.groundingKind=t.groundingKind),n.grounding_adapter!==void 0?o.groundingAdapter=String(n.grounding_adapter):t?.groundingAdapter!==void 0&&(o.groundingAdapter=t.groundingAdapter),o}async function cj(e,{configFile:t}={}){let n=e?await pl(e,t?{file:t}:{}):null,s=xu(),o=n&&n.extensions&&typeof n.extensions=="object"?n.extensions:{},r=n&&n.bias&&typeof n.bias=="object"?n.bias:{},i=new Set([...Object.keys(s),...Object.keys(o)]),a=new Map;for(let p of i){let f=AF(p,s[p]||null,o[p]||{},e||process.cwd());aj(p,f),a.set(p,f)}let c={};for(let[p,f]of Object.entries(r)){if(typeof f!="number"||!Number.isFinite(f))throw new Error(`[bias] "${p}": bias must be a finite number, got ${JSON.stringify(f)}`);c[p]=f}let u=["seon","conceptnet",...[...a.keys()].filter(p=>p!=="seon"&&p!=="conceptnet").sort()].filter(p=>a.has(p));return{entries:new Map(u.map(p=>[p,a.get(p)])),biasByBundle:c}}async function CF(e,t,n={}){let{seedMemory:s}=await Promise.resolve().then(()=>(bu(),ij)),{captureUnknownContext:o,unknownContextLimit:r}=n,i={},a=0,c=0,l=0;for(let[u,d]of t instanceof Map?t:new Map)if(!(!d.active||!(d.kind==="corpus"||d.kind==="ontology"||d.kind==="pack"&&d.corpusPath)))try{let f=await s(e,{slicePath:d.corpusPath,mapPath:d.mapPath,provenancePrefix:d.provenancePrefix,limit:d.limit,prefer:d.prefer,captureUnknownContext:o,unknownContextLimit:r});i[u]={appended:f.appended,skipped:f.skipped,total:f.total},a+=f.appended,c+=f.skipped,l+=f.total}catch(f){i[u]={appended:0,skipped:0,total:0,error:f&&f.message?f.message:String(f)}}return{appended:a,skipped:c,total:l,perBundle:i}}async function lj(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&(r.kind!=="lexicon"&&r.kind!=="pack"||r.lexiconPath&&n.push({name:o,path:r.lexiconPath,bias:t[o]??1}));if(!n.length)return null;n.sort((o,r)=>o.bias-r.bias);let s={nouns:{},verbs:{},adjectives:{},properNames:[]};for(let o of n){let r;try{r=JSON.parse(await Oe(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": lexicon file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}if(Object.assign(s.nouns,r.nouns||{}),Object.assign(s.verbs,r.verbs||{}),Object.assign(s.adjectives,r.adjectives||{}),Array.isArray(r.properNames))for(let i of r.properNames)s.properNames.includes(i)||s.properNames.push(i)}return s}async function ph(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&(!r.vocabPath&&!r.vocabData||n.push({name:o,path:r.vocabPath,data:r.vocabData,bias:t[o]??1}));let s={countNouns:{},classLabels:{},helpRows:[],missRecoveryPointer:""};if(!n.length)return s;n.sort((o,r)=>o.bias-r.bias);for(let o of n){let r;if(o.data)r=o.data;else try{r=JSON.parse(await Oe(o.path,"utf8"))}catch(i){throw new Error(`extension "${o.name}": vocab file ${o.path} \u2014 ${i&&i.message?i.message:i}`)}Object.assign(s.countNouns,r.countNouns||{}),Object.assign(s.classLabels,r.classLabels||{}),Array.isArray(r.helpRows)&&s.helpRows.push(...r.helpRows),r.missRecoveryPointer&&(s.missRecoveryPointer=r.missRecoveryPointer)}return s}function uj(){if(!dh){let e={...xu().code,active:!0};dh=ph(new Map([["code",e]]),{})}return dh}async function OF(e,t){let n={name:e,groundingKind:t.groundingKind||"",groundingAdapter:t.groundingAdapter||"",commandCount:0,countNounCount:0};if(!t.vocabPath)return n;try{let s=JSON.parse(await Oe(t.vocabPath,"utf8"));n.commandCount=Array.isArray(s.helpRows)?s.helpRows.length:0,n.countNounCount=Object.keys(s.countNouns||{}).length}catch{}return n}async function mh(e,t={}){let n=[];for(let[o,r]of e instanceof Map?e:new Map)r.active&&r.kind==="pack"&&n.push({name:o,entry:r,bias:t[o]??1});n.sort((o,r)=>o.bias-r.bias||o.name.localeCompare(r.name));let s=[];for(let o of n)s.push(await OF(o.name,o.entry));return s}function dj(){if(!fh){let e={...xu().code,active:!0};fh=mh(new Map([["code",e]]),{})}return fh}async function IF(e,t){let n=[],s=o=>o&&(Ku(o)?o:Gt(e,o));if(t.corpusPath){let o=s(t.corpusPath);try{let r=await yu(o),i=await $u(s(t.mapPath)||Oa),a=vu(r,i,t.provenancePrefix||"corpus:pack");n.push({kind:"corpus",path:o,ok:!0,counts:{assertions:r.length,facts:a.length}})}catch(r){n.push({kind:"corpus",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.lexiconPath){let o=s(t.lexiconPath);try{let{loadLexicon:r}=await Promise.resolve().then(()=>(Hn(),bx)),i=JSON.parse(await Oe(o,"utf8")),a=r(i);n.push({kind:"lexicon",path:o,ok:!0,counts:{nouns:a.nouns.size,verbs:a.verbs.size,adjectives:a.adjectives.size,properNames:a.properNames.size}})}catch(r){n.push({kind:"lexicon",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.templatesPath){let o=s(t.templatesPath);try{let{loadTemplates:r}=await Promise.resolve().then(()=>(Bl(),ix)),i=await r(o),a=[...i.keys()].filter(c=>!c.includes(":"));if(a.length)throw new Error(`template id${a.length>1?"s":""} not namespaced "<packname>:<id>": ${a.join(", ")}`);n.push({kind:"templates",path:o,ok:!0,counts:{templates:i.size}})}catch(r){n.push({kind:"templates",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.vocabPath){let o=s(t.vocabPath);try{let r=JSON.parse(await Oe(o,"utf8")),i=r.countNouns&&typeof r.countNouns=="object"?Object.keys(r.countNouns).length:0,a=r.classLabels&&typeof r.classLabels=="object"?Object.keys(r.classLabels).length:0,c=Array.isArray(r.helpRows)?r.helpRows.length:0;n.push({kind:"vocab",path:o,ok:!0,counts:{countNouns:i,classLabels:a,helpRows:c}})}catch(r){n.push({kind:"vocab",path:o,ok:!1,error:r&&r.message?r.message:String(r)})}}if(t.kind==="pack"){let o=t.groundingKind;o!=="extraction"&&o!=="taught-only"?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:`a "pack" entry needs "grounding_kind" of "extraction" or "taught-only" (got ${JSON.stringify(o??null)})`}):o==="extraction"&&!t.groundingAdapter?n.push({kind:"grounding",path:"(pack manifest)",ok:!1,error:'grounding_kind "extraction" needs "grounding_adapter" naming the adapter'}):n.push({kind:"grounding",path:"(pack manifest)",ok:!0,counts:o==="extraction"?{channel:o,adapter:t.groundingAdapter}:{channel:o}})}return{ok:n.length>0&&n.every(o=>o.ok),results:n}}var hh,jF,kF,uh,Eu,RF,_F,TF,dh,fh,gh=P(()=>{Qe();Pt();yo();JS();ia();bu();hh={},jF=ne($e(qt(hh.url)),"..","..","corpus","namenet"),kF=ne($e(qt(hh.url)),"..","..","corpus","domains","code","vocab.json"),uh=ne($e(qt(hh.url)),"..","..","corpus","tier2","vocab-empty.json"),Eu=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),RF=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf","mgx:atLocation","mgx:causes","mgx:desires","mgx:motivatedByGoal","mgx:hasSubevent"];_F=Object.freeze(xu());TF=(e,t)=>{if(t==null)return;let n=String(t);return Ku(n)?n:Gt(e,n)};dh=null;fh=null});var pj=P(()=>{});var mj=P(()=>{Qe();ar();Pt();Mm();GS();lh();Xt();KS();Fe();qS();zl();YS();vi();gh();ka();Eo();Dl();cu();Lm();Dm();ur();pj()});var hj={};Lt(hj,{proseLemma:()=>PF});function PF(){if(hr!==void 0)return hr;try{let e=Vl();if(!e)return hr=null,hr;let t=e.its,n=new Map;hr=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{hr=null}return hr}var hr,gj=P(()=>{Kl()});var bj={};Lt(bj,{digestTermFromRows:()=>DF,loadDigestStructureTable:()=>FF,readDigestStructures:()=>MF});var MF,FF,DF,wj=P(()=>{MF=()=>null,FF=()=>null,DF=()=>null});var Sh={};Lt(Sh,{DEFAULT_MODULE_HOPS:()=>$h,DEFAULT_PROVE_BRANCHES:()=>Rj,DEFAULT_PROVE_NODES:()=>_j,DEFAULT_PROVE_STEPS:()=>kj,MAX_PROVEN_CASES:()=>Aj,MAX_ROLE_ASSERTIONS:()=>Tj,TABLEAU_RULE_CONFIDENCE:()=>VF,buildTableauKb:()=>mD,canonicalKey:()=>Ke,extractTableauModule:()=>bD,findTableauViolations:()=>gD,isSatisfiable:()=>Eh,moduleHasDlShape:()=>yD,proveEntailment:()=>uD,proveSubsumption:()=>dD,proveSubsumptionOfNegation:()=>fD,toNNF:()=>sn});function Ke(e){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("canonicalKey: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return"top";case"bot":return"bot";case"atom":return`atom(${e.name})`;case"nom":return`nom(${e.ind})`;case"not":return`not(${Ke(e.c)})`;case"and":return`and(${e.cs.map(Ke).sort().join(",")})`;case"or":return`or(${e.cs.map(Ke).sort().join(",")})`;case"some":return`some(${e.r},${Ke(e.c)})`;case"all":return`all(${e.r},${Ke(e.c)})`;case"atLeast":return`atLeast(${e.n},${e.r},${Ke(e.c)})`;case"atMost":return`atMost(${e.n},${e.r},${Ke(e.c)})`;default:throw new TypeError(`canonicalKey: unknown expression tag "${e.t}"`)}}function Na(e,t){if(!e||typeof e!="object"||typeof e.t!="string")throw new TypeError("toNNF: expr must be a concept-expression object carrying a t tag");switch(e.t){case"top":return t?{t:"bot"}:{t:"top"};case"bot":return t?{t:"top"}:{t:"bot"};case"atom":return t?{t:"not",c:{t:"atom",name:e.name}}:{t:"atom",name:e.name};case"nom":return t?{t:"not",c:{t:"nom",ind:e.ind}}:{t:"nom",ind:e.ind};case"not":return Na(e.c,!t);case"and":case"or":{let n=e.t==="and"?"or":"and",s=e.cs.map(o=>Na(o,t));return s.sort((o,r)=>Ke(o).localeCompare(Ke(r))),{t:t?n:e.t,cs:s}}case"some":case"all":{let n=e.t==="some"?"all":"some",s=Na(e.c,t);return{t:t?n:e.t,r:e.r,c:s}}case"atLeast":case"atMost":{let n=Na(e.c,!1);return t?e.t==="atLeast"?{t:"atMost",n:e.n-1,r:e.r,c:n}:{t:"atLeast",n:e.n+1,r:e.r,c:n}:{t:e.t,n:e.n,r:e.r,c:n}}default:throw new TypeError(`toNNF: unknown expression tag "${e.t}"`)}}function sn(e){return Na(e,!1)}function Wt(e){return[...new Set((Array.isArray(e)?e:[]).filter(Boolean))].sort()}function wh(e,t){let n=Number(e);return Number.isFinite(n)&&n>0?Math.floor(n):t}function UF(e,t){let n=Number(e);return Number.isFinite(n)&&n>=0?Math.floor(n):t}function jj(e,t){let n=new Set(e),s=!0;for(;s;){s=!1;for(let o of t)n.has(o.subject)&&!n.has(o.object)&&(n.add(o.object),s=!0),n.has(o.object)&&!n.has(o.subject)&&(n.add(o.subject),s=!0)}return n}function WF(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 GF(e,t){let n=(e||[]).map(([r,i])=>[$s(r),$s(i)]),s=WF(n.map(([r,i])=>[i,r])),o=new Map;for(let r of t){let i=$s(r);o.set(i,new Set([i,...s(i)]))}return o}function yj(e,t,n){let s=$s(t),o=$s(n);if(s===o)return!0;let r=e&&e.roleClosure?e.roleClosure.get(o):null;return r?r.has(s):!1}function ku(e,t,n,s){let o=[];for(let r of e.edges)if(r.from===n&&yj(t,r.r,s))o.push({to:r.to,fromFacts:r.fromFacts});else if(r.to===n){let i=t&&t.inverseOf?t.inverseOf.get($s(r.r)):null;i&&yj(t,i,s)&&o.push({to:r.from,fromFacts:r.fromFacts})}return o}function Su(e,t){return t==="fresh-0"?!1:e&&e.namedIndividuals&&e.namedIndividuals.has(t)?!0:!KF.test(t)}function La(e,t){return e<t?`${e}\u241F${t}`:`${t}\u241F${e}`}function HF(e,t,n,s){if(t===n)return;let o=La(t,n),r=e.inequalityFrom.get(o);e.inequalityFrom.set(o,Wt(r?[...r,...s]:s))}function Cj(e,t,n,s){return n===s?!1:Su(t,n)&&Su(t,s)?!0:e.inequalityFrom.has(La(n,s))}function Oj(e,t,n){let s=e.inequalityFrom.get(La(t,n));return s?s.slice():[]}function qF(e,t,n){let s=Su(e,t),o=Su(e,n);return s&&!o?[t,n]:o&&!s?[n,t]:t<n?[t,n]:[n,t]}function Ij(e,t,n,s){if(n===s)return n;let[o,r]=qF(t,n,s),i=e.nodes.get(o),a=e.nodes.get(r);if(!i||!a)return o;for(let[d,{expr:p,from:f}]of a.labels){let m=i.labels.get(d);i.labels.set(d,{expr:p,from:m?Wt([...m.from,...f]):f.slice()})}let c=[],l=new Map;for(let d of e.edges){let p=d.from===r?o:d.from,f=d.to===r?o:d.to,m=`${p}\u241F${d.r}\u241F${f}`,h=l.get(m);if(h)h.fromFacts=Wt([...h.fromFacts,...d.fromFacts]);else{let b={from:p,r:d.r,to:f,fromFacts:d.fromFacts.slice()};l.set(m,b),c.push(b)}}e.edges=c;for(let d of e.nodes.values())d.parent===r&&(d.parent=o);let u=new Map;for(let[d,p]of e.inequalityFrom){let[f,m]=d.split("\u241F"),h=f===r?o:f,b=m===r?o:m;if(h===b)continue;let g=La(h,b),$=u.get(g);u.set(g,$?Wt([...$,...p]):p)}return e.inequalityFrom=u,e.nodes.delete(r),o}function vh(e,t){return{id:e,labels:new Map,parent:t??null,branchedOn:new Set,appliedAxioms:new Set,successorCount:0}}function qn(e,t,n){let s=Ke(t);return e.labels.has(s)?!1:(e.labels.set(s,{expr:t,from:Wt(n)}),!0)}function mi(e){return[...e.labels.entries()].sort((t,n)=>t[0].localeCompare(n[0]))}function ju(e){if(e.labels.has("bot"))return{nodeId:e.id,keyA:"bot",keyB:"bot",premises:e.labels.get("bot").from.slice()};let t=[...e.labels.keys()].sort();for(let n of t){let{expr:s,from:o}=e.labels.get(n),r=Ke(sn(ys(s)));if(r<=n)continue;let i=e.labels.get(r);if(i)return{nodeId:e.id,keyA:n,keyB:r,premises:Wt([...o,...i.from])}}return null}function $j(e,t){let n=new Set;for(let s of e.edges)s.to===t&&n.add(s.r);return n}function Nj(e,t,n){let s=[...e.labels.keys()],o=!!(n&&n.inverseOf&&n.inverseOf.size>0),r=o?$j(t,e.id):null,i=e.parent;for(;i;){let a=t.nodes.get(i);if(!a)break;if(s.length===a.labels.size&&s.every(c=>a.labels.has(c))){if(!o)return!0;let c=$j(t,a.id);if(r.size===c.size&&[...r].every(l=>c.has(l)))return!0}i=a.parent}return!1}function vj(e){let t=new Map;for(let[n,s]of e.nodes)t.set(n,{id:s.id,labels:new Map(s.labels),parent:s.parent,branchedOn:new Set(s.branchedOn),appliedAxioms:new Set(s.appliedAxioms),successorCount:s.successorCount});return{nodes:t,edges:e.edges.slice(),closed:!1,clash:null,inequalityFrom:new Map(e.inequalityFrom),choices:(e.choices||[]).slice()}}function YF(e){for(let t of e.nodes.values())for(let[,{expr:n,from:s}]of mi(t)){if(n.t!=="and")continue;let o=!1;for(let r of n.cs)qn(t,r,s)&&(o=!0);if(o)return{applied:!0,touched:[t.id]}}return{applied:!1,touched:[]}}function XF(e,t){let n=new Map;for(let o of e.nodes.values())for(let r of o.labels.keys())r.startsWith("nom(")&&(n.has(r)||n.set(r,[]),n.get(r).push(o.id));let s=[...n.keys()].sort();for(let o of s){let r=[...new Set(n.get(o))].sort();if(r.length<2)continue;let[i,a]=r;if(Cj(e,t,i,a)){let c=e.nodes.get(i).labels.get(o)?.from||[],l=e.nodes.get(a).labels.get(o)?.from||[];return{kind:"clash",clash:{nodeId:i,keyA:o,keyB:`merge(${i},${a})`,premises:Wt([...c,...l,...Oj(e,i,a)])}}}return{kind:"merge",a:i,b:a}}return{kind:"none"}}function JF(e,t){let n=t&&t.transitiveRoles instanceof Set?t.transitiveRoles:null;for(let s of e.nodes.values())for(let[,{expr:o,from:r}]of mi(s)){if(o.t!=="all")continue;let i=[];for(let{to:a,fromFacts:c}of ku(e,t,s.id,o.r)){let l=e.nodes.get(a);if(!l)continue;let u=[...r,...c];qn(l,o.c,u)&&i.push(l.id),n&&n.has(o.r)&&qn(l,o,u)&&i.push(l.id)}if(i.length)return{applied:!0,touched:i}}return{applied:!1,touched:[]}}function QF(e,t){for(let n of e.nodes.values())for(let s=0;s<t.axioms.length;s+=1){if(n.appliedAxioms.has(s))continue;let o=t.axioms[s];if(n.appliedAxioms.add(s),qn(n,o.disjunction,o.from))return{applied:!0,touched:[n.id]}}return{applied:!1,touched:[]}}function ZF(e,t){if(Ke(t)==="bot")return[];let n=Ke(sn(ys(t))),s=e.labels.get(n);return s?s.from:null}function eD(e,t,n){return n.some(s=>e.unionOrOneOfIds&&e.unionOrOneOfIds.has(s))&&t.every(s=>s.t==="atom"||s.t==="nom")}function tD(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of mi(n)){if(o.t!=="or"||n.branchedOn.has(s))continue;let i=[...o.cs].sort((d,p)=>Ke(d).localeCompare(Ke(p)));if(i.some(d=>n.labels.has(Ke(d)))){n.branchedOn.add(s);continue}let a=i.map(d=>({c:d,clashFrom:ZF(n,d)})),c=a.filter(d=>d.clashFrom===null).map(d=>d.c),l=a.filter(d=>d.clashFrom!==null).flatMap(d=>d.clashFrom),u=eD(t,i,r)?{cs:i,from:r}:null;return c.length===0?{kind:"clash",clash:{nodeId:n.id,keyA:Ke(i[0]),keyB:Ke(sn(ys(i[0]))),premises:Wt([...r,...l])},choice:u}:c.length===1?(n.branchedOn.add(s),qn(n,c[0],[...r,...l]),{kind:"applied",touched:[n.id],choice:u}):(n.branchedOn.add(s),{kind:"split",node:n,from:r,disjuncts:c,choice:u})}return{kind:"none"}}function nD(e,t){for(let n of e.nodes.values())if(!Nj(n,e,t))for(let[,{expr:s,from:o}]of mi(n)){if(s.t!=="some")continue;let r=Ke(s.c);if(ku(e,t,n.id,s.r).some(c=>e.nodes.get(c.to)?.labels.has(r)))continue;n.successorCount+=1;let a=vh(`${n.id}.${n.successorCount}`,n.id);return qn(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()}),{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function sD(e,t){for(let n of e.nodes.values())for(let[s,{expr:o,from:r}]of mi(n)){if(o.t!=="atMost")continue;let i=Ke(o.c),a=[...new Set(ku(e,t,n.id,o.r).map(u=>u.to))].filter(u=>e.nodes.get(u)?.labels.has(i)).sort();if(a.length<=o.n)continue;let c=[];for(let u=0;u<a.length;u+=1)for(let d=u+1;d<a.length;d+=1)c.push([a[u],a[d]]);if(c.length===0){let u=e.nodes.get(a[0])?.labels.get(i)?.from||[];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`witness(${a[0]})`,premises:Wt([...r,...u])}}}let l=c.filter(([u,d])=>!Cj(e,t,u,d));if(l.length===0){let[u,d]=c[0];return{kind:"clash",clash:{nodeId:n.id,keyA:s,keyB:`merge(${u},${d})`,premises:Wt([...r,...Oj(e,u,d)])}}}return{kind:"split-merge",pairs:l}}return{kind:"none"}}function oD(e,t){for(let n of e.nodes.values())if(!Nj(n,e,t))for(let[,{expr:s,from:o}]of mi(n)){if(s.t!=="atLeast")continue;let r=Ke(s.c),i=[...new Set(ku(e,t,n.id,s.r).map(c=>c.to))].filter(c=>e.nodes.get(c)?.labels.has(r)).sort();if(i.length>=s.n)continue;n.successorCount+=1;let a=vh(`${n.id}.${n.successorCount}`,n.id);qn(a,s.c,o),e.nodes.set(a.id,a),e.edges.push({from:n.id,r:s.r,to:a.id,fromFacts:o.slice()});for(let c of i)HF(e,a.id,c,o);return{applied:!0,touched:[a.id]}}return{applied:!1,touched:[]}}function rD(e,t){for(let n of t){let s=e.nodes.get(n),o=s&&ju(s);if(o)return o}return null}function gr(e,t){let n=rD(e,t);return n?{kind:"clash",clash:n}:{kind:"applied"}}function iD(e,t){let n=YF(e);if(n.applied)return gr(e,n.touched);let s=JF(e,t);if(s.applied)return gr(e,s.touched);let o=XF(e,t);if(o.kind==="clash")return o;if(o.kind==="merge"){let u=Ij(e,t,o.a,o.b);return gr(e,[u])}let r=QF(e,t);if(r.applied)return gr(e,r.touched);let i=tD(e,t);if(i.kind==="clash")return i;if(i.kind==="applied")return i.choice&&e.choices.push(i.choice),gr(e,i.touched);if(i.kind==="split")return i;let a=sD(e,t);if(a.kind==="clash"||a.kind==="split-merge")return a;let c=oD(e,t);if(c.applied)return gr(e,c.touched);let l=nD(e,t);return l.applied?gr(e,l.touched):{kind:"done"}}function aD(e){let t=[...e.nodes.values()].map(s=>({id:s.id,parent:s.parent,labels:[...s.labels.entries()].sort((o,r)=>o[0].localeCompare(r[0])).map(([,{expr:o,from:r}])=>({expr:o,from:r}))})),n=e.edges.map(({from:s,r:o,to:r,fromFacts:i})=>({from:s,r:o,to:r,fromFacts:i.slice()}));return{nodes:t,edges:n}}function cD(e,t,n){let s=wh(n.maxSteps,kj),o=wh(n.maxBranches,Rj),r=wh(n.maxNodes,_j),i=[e],a=0,c=1,l=[];for(;i.length;){let u=i.pop();if(u.closed){l.push(u.clash);continue}if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};for(;;){let d=iD(u,t);if(d.kind==="clash"){let p=d.choice?[...u.choices,d.choice]:u.choices.slice();l.push({...d.clash,choices:p});break}if(d.kind==="applied"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};if(u.nodes.size>r)return{status:"exhausted",reason:"nodes",steps:a,branches:c};continue}if(d.kind==="split"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.disjuncts.map(f=>{let m=vj(u);d.choice&&m.choices.push(d.choice);let h=m.nodes.get(d.node.id);qn(h,f,d.from);let b=ju(h);return b&&(m.closed=!0,m.clash={...b,choices:m.choices.slice()}),m});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}if(d.kind==="split-merge"){if(a+=1,a>s)return{status:"exhausted",reason:"steps",steps:a,branches:c};let p=d.pairs.map(([f,m])=>{let h=vj(u),b=Ij(h,t,f,m),g=h.nodes.get(b),$=g&&ju(g);return $&&(h.closed=!0,h.clash={...$,choices:h.choices.slice()}),h});for(let f=p.length-1;f>=0;f-=1){if(c+=1,c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c};i.push(p[f])}break}return{status:"satisfiable",model:aD(u),steps:a,branches:c}}if(c>o)return{status:"exhausted",reason:"branches",steps:a,branches:c}}return{status:"unsatisfiable",clashes:l,steps:a,branches:c}}function lD(e,t){let n=new Map,s=i=>(n.has(i)||n.set(i,vh(i,null)),n.get(i));for(let i of e.individuals||[])s(i);for(let i of e.assertions||[])qn(s(i.ind),i.expr,i.from);for(let i of t||[])!i||!i.ind||!i.expr||qn(s(i.ind),sn(i.expr),i.from||[]);for(let[i,a]of e.nominalIndividuals||[])qn(s(i),{t:"nom",ind:i},a);let o=new Map;for(let i of e.differentFrom||[]){if(!i||!i.a||!i.b||i.a===i.b)continue;let a=La(i.a,i.b),c=o.get(a);o.set(a,Wt(c?[...c,...i.from]:i.from))}let r=[];for(let i of e.roleAssertions||[])s(i.a),s(i.b),r.push({from:i.a,r:i.r,to:i.b,fromFacts:i.from.slice()});return{nodes:n,edges:r,closed:!1,clash:null,inequalityFrom:o,choices:[]}}function Eh(e,t=[],n={}){let s=lD(e,t);for(let r of s.nodes.values()){let i=ju(r);if(i){s.closed=!0,s.clash={...i,choices:[]};break}}let o=cD(s,e,n);return o.status==="exhausted"?{satisfiable:null,exhausted:o.reason,steps:o.steps,branches:o.branches}:o.status==="satisfiable"?{satisfiable:!0,model:o.model,steps:o.steps,branches:o.branches}:{satisfiable:!1,closedClashes:o.clashes,steps:o.steps,branches:o.branches}}function xh(e,t,n){let s=Eh(e,t,n);if(s.satisfiable===null)return{status:"exhausted",reason:s.exhausted,steps:s.steps,branches:s.branches};if(s.satisfiable===!1){let o=Wt(s.closedClashes.flatMap(l=>l?.premises||[])),r=new Map;for(let l of s.closedClashes)for(let u of l?.choices||[])for(let d of u.cs)r.set(Ke(d),d);let i=[...r.keys()].sort(),a=i.slice(0,Aj).map(l=>r.get(l)),c=i.length;return{status:"proved",premises:o,cases:a,casesTotal:c,steps:s.steps,branches:s.branches}}return{status:"disproved",model:s.model,steps:s.steps,branches:s.branches}}function uD(e,t,n,s={}){return xh(e,[{ind:t,expr:sn(ys(n)),from:[]}],s)}function dD(e,t,n,s={}){let o=sn(xj([De(t),ys(De(n))]));return xh(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function fD(e,t,n,s={}){let o=sn(xj([De(t),De(n)]));return xh(e,[{ind:"fresh-0",expr:o,from:[]}],s)}function pD(e){return e?e.keyA==="bot"?"bottom":`complement:${e.keyA}~${e.keyB}`:"unsatisfiable"}function mD(e){let t=Array.isArray(e)?e.filter(L=>L&&L.subject&&L.predicate):[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=[],d=[],p=[],f=[],m=new Set,h=[],b=[],g=[],$=[],w=(L,H,W)=>{L.has(H)||L.set(H,[]),L.get(H).push(W)};for(let L of t){let H=String(L.predicate).trim().toLowerCase();H==="owl:onproperty"?n.set(L.subject,{object:L.object,id:L.id}):H==="owl:somevaluesfrom"?s.set(L.subject,{object:L.object,id:L.id}):H==="owl:allvaluesfrom"?o.set(L.subject,{object:L.object,id:L.id}):H==="owl:onclass"?r.set(L.subject,{object:L.object,id:L.id}):H==="owl:mincardinality"?i.set(L.subject,{kind:"min",n:Number(L.object),id:L.id}):H==="owl:maxcardinality"?i.set(L.subject,{kind:"max",n:Number(L.object),id:L.id}):H==="owl:cardinality"?i.set(L.subject,{kind:"exact",n:Number(L.object),id:L.id}):H==="rdfs:subclassof"?u.push(L):H==="owl:disjointwith"?d.push(L):H==="rdf:type"?(p.push(L),String(L.object||"").toLowerCase()==="transitiveproperty"&&m.add(L.subject)):H==="mgxneg:subclassof"?f.push(L):H==="owl:unionof"?w(a,L.subject,L):H==="owl:complementof"?c.set(L.subject,L):H==="rdfs:subpropertyof"?h.push(L):H==="owl:differentfrom"?b.push(L):H==="owl:oneof"?w(l,L.subject,L):H==="owl:inverseof"?g.push(L):$.push(L)}let x=new Set;for(let L of p){let H=String(L.object||"").toLowerCase();yh.has(H)||x.add(L.subject)}let R=jj(x,$),E=L=>R.has(L)||Sj.test(L),k=$.filter(L=>E(L.subject)&&E(L.object)).sort((L,H)=>L.subject.localeCompare(H.subject)||L.predicate.localeCompare(H.predicate)||L.object.localeCompare(H.object)).slice(0,Tj).map(L=>({a:L.subject,r:L.predicate,b:L.object,from:[L.id]})),O=(L,H,W)=>({sub:L,sup:H,from:Wt(W),disjunction:sn(bh([ys(L),H]))}),S=[],_=[];for(let L of u){let H=L.object;if(!n.has(H)){S.push(O(De(L.subject),De(H),[L.id]));continue}let W=n.get(H),I=s.get(H);if(I){S.push(O(De(L.subject),zF(W.object,De(I.object)),[L.id,W.id,I.id]));continue}let D=o.get(H);if(D){S.push(O(De(L.subject),BF(W.object,De(D.object)),[L.id,W.id,D.id]));continue}let N=i.get(H),F=r.get(H);if(N&&F){let B=[L.id,W.id,F.id,N.id];N.kind==="min"?S.push(O(De(L.subject),{t:"atLeast",n:N.n,r:W.object,c:De(F.object)},B)):N.kind==="max"?S.push(O(De(L.subject),{t:"atMost",n:N.n,r:W.object,c:De(F.object)},B)):N.kind==="exact"&&(S.push(O(De(L.subject),{t:"atLeast",n:N.n,r:W.object,c:De(F.object)},B)),S.push(O(De(L.subject),{t:"atMost",n:N.n,r:W.object,c:De(F.object)},B)))}}for(let L of d)E(L.subject)?_.push({ind:L.subject,expr:sn(ys(De(L.object))),from:[L.id]}):S.push(O(De(L.subject),sn(ys(De(L.object))),[L.id]));for(let L of p)yh.has(String(L.object||"").toLowerCase())||_.push({ind:L.subject,expr:De(L.object),from:[L.id]});for(let L of f)_.push({ind:L.subject,expr:sn(ys(De(L.object))),from:[L.id]});for(let[L,H]of a){let W=[...H].sort((F,B)=>String(F.object).localeCompare(String(B.object))),I=W.map(F=>De(F.object)),D=W.map(F=>F.id),N=sn(bh(I));S.push(O(De(L),N,D)),S.push(O(N,De(L),D))}for(let[L,H]of c){let W=sn(ys(De(H.object)));S.push(O(De(L),W,[H.id])),S.push(O(W,De(L),[H.id]))}let y=new Map;for(let[L,H]of l){let W=[...H].sort((N,F)=>String(N.object).localeCompare(String(F.object))),I=W.map(N=>({t:"nom",ind:N.object})),D=W.map(N=>N.id);S.push(O(De(L),sn(bh(I)),D));for(let N of W){S.push(O({t:"nom",ind:N.object},De(L),[N.id]));let F=y.get(N.object);y.set(N.object,F?Wt([...F,N.id]):[N.id])}}let T=b.map(L=>({a:L.subject,b:L.object,from:[L.id]})).sort((L,H)=>L.a.localeCompare(H.a)||L.b.localeCompare(H.b)),C=new Map;for(let L of g)C.set(L.subject,L.object),C.has(L.object)||C.set(L.object,L.subject);let v=new Set;for(let{object:L}of n.values())v.add(L);for(let L of k)v.add(L.r);let j=h.map(L=>[L.subject,L.object]).sort((L,H)=>L[0].localeCompare(H[0])||L[1].localeCompare(H[1])),M=new Set([...v,...j.flat(),...C.keys(),...C.values()]),z=GF(j,M);S.sort((L,H)=>Ke(L.sub).localeCompare(Ke(H.sub))||Ke(L.sup).localeCompare(Ke(H.sup))||L.from.join(",").localeCompare(H.from.join(","))),_.sort((L,H)=>L.ind.localeCompare(H.ind)||Ke(L.expr).localeCompare(Ke(H.expr)));let K=[...new Set([..._.map(L=>L.ind),...k.flatMap(L=>[L.a,L.b])])].sort(),Y=new Set(K),X=new Set([...[...a.values()].flatMap(L=>L.map(H=>H.id)),...[...l.values()].flatMap(L=>L.map(H=>H.id))]);return{axioms:S,assertions:_,roles:[...v].sort(),individuals:K,transitiveRoles:m,roleClosure:z,namedIndividuals:Y,nominalIndividuals:y,differentFrom:T,inverseOf:C,roleAssertions:k,unionOrOneOfIds:X}}function hD(e,t){return{axioms:e.axioms,assertions:(e.assertions||[]).filter(n=>n.ind===t),roles:e.roles,individuals:[t],transitiveRoles:e.transitiveRoles,roleAssertions:e.roleAssertions,roleClosure:e.roleClosure,namedIndividuals:e.namedIndividuals,nominalIndividuals:e.nominalIndividuals,differentFrom:e.differentFrom,inverseOf:e.inverseOf,unionOrOneOfIds:e.unionOrOneOfIds}}function gD(e,t=null,n={}){let s=[...new Set(Array.isArray(t)&&t.length?t:e.individuals||[])].sort(),o=[];for(let r of s){let i=hD(e,r);if(!i.assertions.length)continue;let a=Eh(i,[],n);if(a.satisfiable===null||a.satisfiable===!0)continue;let c=Wt(a.closedClashes.flatMap(l=>l?.premises||[]));o.push({subject:r,premises:c,kind:pD(a.closedClashes[0])})}return o.sort((r,i)=>r.subject.localeCompare(i.subject)),o}function ws(e,t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)}function bD(e,t,{hops:n=$h}={}){let s=Array.isArray(e)?e.filter(j=>j&&j.subject&&j.predicate):[],o=UF(n,$h),r=new Map,i=new Map,a=new Map,c=new Map,l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,m=new Map,h=new Map,b=[],g=new Map,$=new Set;for(let j of s){if(String(j.predicate).trim().toLowerCase()!=="rdf:type")continue;let M=String(j.object||"").toLowerCase();yh.has(M)||$.add(j.subject)}let w=s.filter(j=>!Ej.has(String(j.predicate).trim().toLowerCase())),x=jj($,w),R=j=>x.has(j)||Sj.test(j);for(let j of s){let M=String(j.predicate).trim().toLowerCase();M==="rdfs:subclassof"?(ws(r,j.subject,j.object),ws(i,j.object,j.subject)):M==="owl:onproperty"?a.set(j.subject,j.object):M==="owl:somevaluesfrom"||M==="owl:allvaluesfrom"||M==="owl:onclass"?(c.set(j.subject,j.object),ws(l,j.object,j.subject)):M==="owl:unionof"?(ws(u,j.subject,j.object),ws(d,j.object,j.subject)):M==="owl:complementof"?(p.set(j.subject,j.object),ws(f,j.object,j.subject)):M==="owl:oneof"?(ws(m,j.subject,j.object),ws(h,j.object,j.subject)):!Ej.has(M)&&R(j.subject)&&R(j.object)&&(b.push(j),ws(g,j.subject,j.object),ws(g,j.object,j.subject))}let E=new Map;function k(j){let M=E.get(j);if(M)return M;let z=new Set,K=[...r.get(j)||[],...i.get(j)||[]];for(;K.length;){let Y=K.pop();if(!z.has(Y)){z.add(Y);for(let X of r.get(Y)||[])z.has(X)||K.push(X);for(let X of i.get(Y)||[])z.has(X)||K.push(X)}}E.set(j,z);for(let Y of z)E.has(Y)||E.set(Y,z);return z}let O=new Set,S=new Map,_=[];function y(j,M){if(!j)return;let z=S.get(j);z!==void 0&&z>=M||(S.set(j,M),_.push({term:j,hopsLeft:M}))}let T=[...new Set((Array.isArray(t)?t:[]).map(j=>V(j)).filter(Boolean))];for(let j of T)y(j,o);let C=0;for(;C<_.length;){let{term:j,hopsLeft:M}=_[C];if(C+=1,S.get(j)===M){O.add(j);for(let z of k(j))O.add(z),y(z,M);if(!(M<=0)){c.has(j)&&y(c.get(j),o);for(let z of l.get(j)||[])y(z,o);for(let z of u.get(j)||[])y(z,M-1);for(let z of d.get(j)||[])y(z,M-1);p.has(j)&&y(p.get(j),M-1);for(let z of f.get(j)||[])y(z,M-1);for(let z of m.get(j)||[])y(z,M-1);for(let z of h.get(j)||[])y(z,M-1);for(let z of g.get(j)||[])y(z,o)}}}let v=new Set;for(let[j,M]of a)O.has(j)&&v.add($s(M));for(let j of b)(O.has(j.subject)||O.has(j.object))&&v.add($s(j.predicate));return s.filter(j=>{if(O.has(j.subject)||O.has(j.object))return!0;let M=String(j.predicate).trim().toLowerCase();return M==="rdfs:subpropertyof"||M==="owl:inverseof"||M==="rdf:type"&&String(j.object).toLowerCase()==="transitiveproperty"?v.has($s(j.subject)):!1})}function yD(e){return(Array.isArray(e)?e:[]).some(n=>{let s=String(n?.predicate||"").trim().toLowerCase();return wD.has(s)?!0:s==="rdf:type"&&String(n?.object||"").toLowerCase()==="transitiveproperty"})}var De,ys,xj,bh,zF,BF,Sj,$s,yh,kj,Rj,_j,VF,$h,Tj,Aj,KF,Ej,wD,jh=P(()=>{Ze();De=e=>({t:"atom",name:e}),ys=e=>({t:"not",c:e}),xj=e=>({t:"and",cs:e}),bh=e=>({t:"or",cs:e}),zF=(e,t)=>({t:"some",r:e,c:t}),BF=(e,t)=>({t:"all",r:e,c:t});Sj=/[./\\#:@]/;$s=e=>V(e);yh=new Set(["restriction","transitiveproperty","class"]),kj=5e3,Rj=256,_j=512,VF=.95,$h=4,Tj=256,Aj=6,KF=/\.\d+$/;Ej=new Set(["owl:onproperty","owl:somevaluesfrom","owl:allvaluesfrom","owl:onclass","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subclassof","owl:disjointwith","rdf:type","mgxneg:subclassof","owl:unionof","owl:complementof","rdfs:subpropertyof","owl:differentfrom","owl:oneof","owl:inverseof"]);wD=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"])});var zj={};Lt(zj,{BOT:()=>pn,DEFAULT_EL_BUDGET:()=>Ah,DEFAULT_EL_ROUNDS:()=>Ch,EL_RESTRICTION_RULE:()=>Th,EL_RULE_CONFIDENCE:()=>kh,EL_SUBSUMPTION_RULE:()=>_h,ENTAILED_EL_PROVENANCE:()=>Fj,ENTAILED_EL_RESTRICTION_PROVENANCE:()=>Ma,TOP:()=>So,classifyEl:()=>ND,elGoalAxioms:()=>Pj,elGoalFor:()=>Mj,elUnsatisfiableClasses:()=>ID,normalizeElTBox:()=>Rh,proveElSubsumption:()=>OD,saturateEl:()=>Ru});function $D(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 vD(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=V(s);o&&n.add(o)}return n.size?n:null}function Rh(e,{budget:t=500}={}){let s=[...(Array.isArray(e)?e:[]).filter(y=>y&&y.id&&y.subject&&y.predicate&&y.object!==void 0&&y.object!==null)].sort((y,T)=>String(y.id).localeCompare(String(T.id))),o=s.length>t,r=o?s.slice(0,t):s,i=new Set,a=new Set,c=y=>{y&&y!==So&&y!==pn&&i.add(y)},l=new Map,u=new Map,d=new Map,p=new Map,f=new Map,m=new Map,h=[],b=[],g=new Map,$=[];for(let y of r){if(y.subject===So||y.subject===pn||y.object===So||y.object===pn)continue;let T=y.predicate;SD(T)?(l.set(y.subject,y),c(y.subject)):jD(T)?(u.set(y.subject,y),c(y.subject),c(y.object)):kD(T)?d.set(y.subject,y):RD(T)?(p.set(y.subject,y),c(y.subject),c(y.object)):CD(T)?(f.set(y.subject,y),c(y.subject)):_D(T)?(m.has(y.subject)||m.set(y.subject,[]),m.get(y.subject).push(y),c(y.subject),c(y.object)):Lj(T)?(h.push(y),c(y.subject),c(y.object)):xD(T)?(b.push(y),c(y.subject),c(y.object)):ED(T)&&y.object==="transitiveproperty"?(g.has(y.subject)||g.set(y.subject,y),a.add(y.subject)):TD(T)&&($.push(y),a.add(y.subject),a.add(y.object))}let w=new Set([...l.keys()].filter(y=>u.has(y))),x=new Set([...l.keys()].filter(y=>d.has(y)));for(let y of x)i.delete(y);let R=new Map;for(let y of w)R.set(y,{role:l.get(y).object,filler:u.get(y).object});let E=new Map;for(let y of Af(r))y.kind!=="min"&&y.kind!=="exactly"||y.n>=1&&(w.has(y.restriction)||!l.has(y.restriction)||!p.has(y.restriction)||!f.has(y.restriction)||(E.set(y.restriction,y.onClass),R.set(y.restriction,{role:"has",filler:y.onClass})));let k=new Set(m.keys()),O=[],S=new Map;for(let y of h){let T=y.subject,C=y.object;if(k.has(T)){S.has(T)||S.set(T,y);continue}if(w.has(C)){let{role:v,filler:j}=R.get(C),M=l.get(C),z=u.get(C);O.push({form:"someRight",sub:T,role:v,filler:j,from:[y.id,M.id,z.id]}),O.push({form:"someLeft",role:v,filler:j,sup:C,from:[M.id,z.id]});continue}if(E.has(C)){let v=E.get(C),j=l.get(C),M=p.get(C),z=f.get(C);O.push({form:"someRight",sub:T,role:"has",filler:v,from:[y.id,j.id,M.id,z.id]}),O.push({form:"someLeft",role:"has",filler:v,sup:C,from:[j.id,M.id,z.id]});continue}x.has(C)||O.push({form:"sub",sub:T,sup:C,from:[y.id]})}for(let[y,T]of m){let C=S.get(y);if(!C)continue;let v=new Map;for(let K of T)v.has(K.object)||v.set(K.object,K);let j=[...v.keys()].sort();if(j.length<2)continue;let M=j[0],z=[v.get(j[0]).id];for(let K=1;K<j.length;K+=1){let Y=j[K],X=K===j.length-1,L=X?C.object:`${M}-and-${Y}`,H=[M,Y].sort(),W=v.get(Y).id,I=X?[...z,W,C.id]:[...z,W];O.push({form:"and",subs:H,sup:L,from:I}),z=[...z,W],M=L}}for(let y of b)O.push({form:"and",subs:[y.subject,y.object].sort(),sup:pn,from:[y.id]});let _=[];for(let y of[...g.keys()].sort())_.push({kind:"transitive",role:y,from:[g.get(y).id]});for(let y of[...$].sort((T,C)=>`${T.subject}${ue}${T.object}`.localeCompare(`${C.subject}${ue}${C.object}`)))_.push({kind:"sub",sub:y.subject,sup:y.object,from:[y.id]});return{axioms:O,roleAxioms:_,concepts:i,roles:a,restrictionOf:R,truncated:o}}function Ru(e,{budget:t=2e3,rounds:n=64,focus:s=null}={}){let o=e?.axioms||[],r=e?.roleAxioms||[],i=[...e?.concepts||[]].sort(),a=s instanceof Set?s.size?s:null:vD(s),c=(...y)=>!a||y.some(T=>a.has(T)),l=new Map,u=new Map,d=new Map,p=new Map;for(let y of o)if(y.form==="sub")l.has(y.sub)||l.set(y.sub,[]),l.get(y.sub).push({sup:y.sup,from:y.from});else if(y.form==="and"){let[T,C]=y.subs;for(let[v,j]of[[T,C],[C,T]])u.has(v)||u.set(v,[]),u.get(v).push({other:j,sup:y.sup,from:y.from})}else if(y.form==="someRight")d.has(y.sub)||d.set(y.sub,[]),d.get(y.sub).push({role:y.role,filler:y.filler,from:y.from});else if(y.form==="someLeft"){let T=`${y.role}${ue}${y.filler}`;p.has(T)||p.set(T,[]),p.get(T).push({sup:y.sup,from:y.from})}let f=new Map,m=new Set,h=new Map;for(let y of r)y.kind==="sub"?(f.has(y.sub)||f.set(y.sub,[]),f.get(y.sub).push({sup:y.sup,from:y.from})):y.kind==="transitive"&&(m.add(y.role),h.has(y.role)||h.set(y.role,y.from));let b=new Map;for(let y of i)b.set(y,new Set([y,So]));let g=new Map,$=new Map,w=new Map,x=(y,T)=>y===T?[]:$.get(`${y}${ue}${T}`)||[],R=(y,T)=>w.get(`${y}${ue}${T}`)||[],E=(...y)=>{let T=new Set,C=[];for(let v of y)for(let j of v||[])!j||T.has(j)||(T.add(j),C.push(j));return C},k=0,O=!1,S=0;for(let y=0;y<n;y+=1){S+=1;let T=[];for(let[v,j]of b)for(let M of j)for(let{sup:z,from:K}of l.get(M)||[])j.has(z)||c(v,M,z)&&T.push({kind:"sub",A:v,X:z,from:E(x(v,M),K),sortKey:`1${ue}${v}${ue}${z}${ue}${M}`});for(let[v,j]of b)for(let M of j)for(let{other:z,sup:K,from:Y}of u.get(M)||[])j.has(z)&&(j.has(K)||c(v,M,z,K)&&T.push({kind:"sub",A:v,X:K,from:E(x(v,M),x(v,z),Y),sortKey:`2${ue}${v}${ue}${K}${ue}${[M,z].sort().join(ue)}`}));for(let[v,j]of b)for(let M of j)for(let{role:z,filler:K,from:Y}of d.get(M)||[]){let X=`${v}${ue}${K}`;(g.get(z)||Pa).has(X)||c(v,M,K)&&T.push({kind:"role",role:z,A:v,B:K,from:E(x(v,M),Y),sortKey:`3${ue}${z}${ue}${v}${ue}${K}${ue}${M}`})}for(let[v,j]of g)for(let M of j){let[z,K]=M.split(ue),Y=b.get(K)||Pa;for(let X of Y)for(let{sup:L,from:H}of p.get(`${v}${ue}${X}`)||[]){let W=b.get(z);!W||W.has(L)||c(z,K,X,L)&&T.push({kind:"sub",A:z,X:L,from:E(R(v,M),x(K,X),H),sortKey:`4${ue}${z}${ue}${L}${ue}${v}${ue}${K}${ue}${X}`})}}for(let[v,j]of g)for(let M of j){let[z,K]=M.split(ue);if(!(b.get(K)||Pa).has(pn))continue;let Y=b.get(z);!Y||Y.has(pn)||c(z,K)&&T.push({kind:"sub",A:z,X:pn,from:E(R(v,M),x(K,pn)),sortKey:`5${ue}${z}${ue}${v}${ue}${K}`})}for(let[v,j]of g)for(let{sup:M,from:z}of f.get(v)||[])for(let K of j){if((g.get(M)||Pa).has(K))continue;let[Y,X]=K.split(ue);c(Y,X)&&T.push({kind:"role",role:M,A:Y,B:X,from:E(R(v,K),z),sortKey:`6${ue}${M}${ue}${Y}${ue}${X}${ue}${v}`})}for(let v of[...m].sort()){let j=g.get(v);if(j)for(let M of j){let[z,K]=M.split(ue);for(let Y of j){let[X,L]=Y.split(ue);if(X!==K)continue;let H=`${z}${ue}${L}`;j.has(H)||c(z,K,L)&&T.push({kind:"role",role:v,A:z,B:L,from:E(R(v,M),R(v,Y),h.get(v)),sortKey:`7${ue}${v}${ue}${z}${ue}${L}${ue}${K}`})}}}if(!T.length){O=!0;break}T.sort((v,j)=>v.sortKey<j.sortKey?-1:v.sortKey>j.sortKey?1:0);let C=!1;for(let v of T){if(k>=t)break;if(v.kind==="sub"){let j=b.get(v.A);if(!j||j.has(v.X))continue;j.add(v.X),$.set(`${v.A}${ue}${v.X}`,v.from),k+=1,C=!0}else{g.has(v.role)||g.set(v.role,new Set);let j=g.get(v.role),M=`${v.A}${ue}${v.B}`;if(j.has(M))continue;j.add(M),w.set(`${v.role}${ue}${M}`,v.from),k+=1,C=!0}}if(k>=t)break;if(!C){O=!0;break}}let _=[...b.entries()].filter(([,y])=>y.has(pn)).map(([y])=>y).sort();return{subsumers:b,roleEdges:g,unsatisfiable:_,derivationOf:$,rounds:S,truncated:!O}}function Pj(e,t,{budget:n=200}={}){let o=[...(e?.axioms||[]).filter(a=>a.form==="someRight")].sort((a,c)=>{let l=`${a.role}${ue}${a.filler}${ue}${a.sub}`,u=`${c.role}${ue}${c.filler}${ue}${c.sub}`;return l<u?-1:l>u?1:0}),r=[],i=new Set;for(let a of o){let l=[...t?.get(a.filler)||new Set([a.filler,So])].filter(u=>u!==So&&u!==pn).sort();for(let u of l){let d=`some-${a.role}-${u}`;if(!i.has(d)&&(i.add(d),r.push({form:"someLeft",role:a.role,filler:u,sup:d,from:[]}),r.length>=n))return r}}return r}function Mj(e,t){let n=V(e),s=V(t),o=`some-${n}-${s}`;return{axiom:{form:"someLeft",role:n,filler:s,sup:o,from:[]},name:o}}function OD(e,t,{role:n,filler:s},{budget:o=2e3,rounds:r=64}={}){let i=V(t),a=Rh(e,{budget:o}),{axiom:c,name:l}=Mj(n,s),u=new Set(a.concepts);u.add(i),u.add(c.filler);let d={...a,axioms:[...a.axioms,c],concepts:u},p=Ru(d,{budget:o,rounds:r});return(p.subsumers.get(i)||Pa).has(l)?{proved:!0,premises:p.derivationOf.get(`${i}${ue}${l}`)||[]}:{proved:!1,exhausted:p.truncated}}function Dj(e,{budget:t=Ah,rounds:n=Ch,focus:s=null}={}){let o=Rh(e,{budget:t}),r=Ru(o,{budget:t,rounds:n,focus:s}),i=Pj(o,r.subsumers),a=new Map(i.map(d=>[d.sup,{role:d.role,filler:d.filler}])),c={...o,axioms:[...o.axioms,...i]},l=Ru(c,{budget:t,rounds:n,focus:s}),u=o.truncated||r.truncated||l.truncated;return{normalized:o,goals:i,goalInfo:a,finalPass:l,truncated:u}}function ID(e,t={}){let{finalPass:n,truncated:s}=Dj(e,t);return{unsatisfiable:n.unsatisfiable,premisesOf:o=>n.derivationOf.get(`${o}${ue}${pn}`)||[],truncated:s}}async function ND(e,{budget:t=Ah,rounds:n=Ch,focus:s=null,maxEnvironments:o=Gr,store:r}={}){let{loadMemory:i,readFactRows:a,appendFacts:c}=$D(r,["loadMemory","readFactRows","appendFacts"],"classifyEl"),l=await i(e),u=a(l),{normalized:d,goals:p,goalInfo:f,finalPass:m,truncated:h}=Dj(u,{budget:t,rounds:n,focus:s}),b=new Map;for(let _ of u)b.set(`${_.subject}${ue}${_.predicate}${ue}${_.object}`,_.trust);let g=new Map(u.map(_=>[_.id,_])),$=_=>(_||[]).map(y=>g.get(y)?.trust).filter(y=>typeof y=="number"),w=new Set(u.filter(_=>Lj(_.predicate)).map(_=>`${_.subject}${ue}${_.object}`)),x=[],R=[],E=new Set,k=[...m.subsumers.keys()].sort();for(let _ of k){let y=m.subsumers.get(_);if(y.has(pn))continue;let T=[...y].filter(C=>C!==_&&C!==So&&C!==pn).sort();for(let C of T){let v=`${_}${ue}${C}`;if(w.has(v))continue;let j=m.derivationOf.get(v)||[],M=f.get(C);if(M){E.has(C)||(E.add(C),x.push({subject:C,predicate:Dt,object:"owl:Restriction",provenance:Ma,justification:[j]}),x.push({subject:C,predicate:Rn,object:M.role,provenance:Ma,justification:[j]}),x.push({subject:C,predicate:_n,object:M.filler,provenance:Ma,justification:[j]}));let z=$(j),K=x.length;x.push({subject:_,predicate:Be,object:C,provenance:Ma,justification:[j],...z.length?{premiseTrusts:z,ruleConfidence:kh}:{}}),R.push({toWriteIndex:K,subject:_,object:C,rule:Th})}else if(d.concepts.has(C)){let z=$(j),K=x.length;x.push({subject:_,predicate:Be,object:C,provenance:Fj,justification:[j],...z.length?{premiseTrusts:z,ruleConfidence:kh}:{}}),R.push({toWriteIndex:K,subject:_,object:C,rule:_h})}}}let{ids:O}=await c(e,x),S=R.map(_=>({id:O[_.toWriteIndex],subject:_.subject,object:_.object,rule:_.rule}));return{derived:S,count:S.length,budget:t,rounds:n,truncated:h,unsatisfiable:m.unsatisfiable,goalCount:p.length}}var ue,So,pn,vs,Lj,ED,xD,SD,jD,kD,RD,_D,TD,AD,CD,Pa,_h,Fj,Th,Ma,kh,Ah,Ch,Bj=P(()=>{Ze();Ot();ue="\u241F",So="top",pn="bot";vs=e=>String(e||"").trim().toLowerCase(),Lj=e=>vs(e)==="rdfs:subclassof",ED=e=>vs(e)==="rdf:type",xD=e=>vs(e)==="owl:disjointwith",SD=e=>vs(e)==="owl:onproperty",jD=e=>vs(e)==="owl:somevaluesfrom",kD=e=>vs(e)==="owl:allvaluesfrom",RD=e=>vs(e)==="owl:onclass",_D=e=>vs(e)==="owl:intersectionof",TD=e=>vs(e)==="rdfs:subpropertyof",AD=new Set(["owl:cardinality","owl:mincardinality","owl:maxcardinality"]),CD=e=>AD.has(vs(e));Pa=new Set;_h="elSubsumption",Fj=`entailed:${_h}`,Th="elRestriction",Ma=`entailed:${Th}`,kh=.95,Ah=2e3,Ch=64});var Uj={};Lt(Uj,{DEFAULT_REASONING_CONFIG:()=>_u,resolveReasoningConfig:()=>DD});function MD(e,t){let n=Number(e);return Number.isInteger(n)&&n>0?n:t}function FD(e,t){return typeof e=="boolean"?e:t}function DD(e){let t=e?.reasoning||{},n={..._u};for(let[s,o]of Object.entries(LD))t[s]!==void 0&&(n[o]=MD(t[s],_u[o]));for(let[s,o]of Object.entries(PD))t[s]!==void 0&&(n[o]=FD(t[s],_u[o]));return n}var _u,LD,PD,Wj=P(()=>{_u=Object.freeze({syllogiseBudget:50,syllogiseDepth:32,classifyBudget:2e3,classifyRounds:64,maxEnvironments:4,proveSteps:5e3,proveBranches:256,proveNodes:512,askProveFallback:!0,askProveSteps:1e3,askProveBranches:64,askProveNodes:128}),LD=Object.freeze({syllogise_budget:"syllogiseBudget",syllogise_depth:"syllogiseDepth",classify_budget:"classifyBudget",classify_rounds:"classifyRounds",max_environments:"maxEnvironments",prove_steps:"proveSteps",prove_branches:"proveBranches",prove_nodes:"proveNodes",ask_prove_steps:"askProveSteps",ask_prove_branches:"askProveBranches",ask_prove_nodes:"askProveNodes"}),PD=Object.freeze({ask_prove_fallback:"askProveFallback"})});function Uh(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 ${Tu(e.entityType)}`;if(t==="list")return`list/enumerate ${Tu(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${Tu(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 Uh(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&&Pn[o]?Pn[o]:`filter/traverse ${Tu(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&&Pn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?Pn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function Yh(e){let t=new Map;for(let n of e)t.has(Kj(n))||t.set(Kj(n),n);return t}function Ih(e,t=wr){let n=[],s=[];for(let c of e)c.predicate===t&&(s.push([c.subject,c.object]),br(c)&&n.push([c.subject,c.object]));let o=new Map,r=new Map,i=new Set,a=(c,l,u)=>{!l||!u||l===u||(c.has(l)||c.set(l,new Set),c.get(l).add(u))};for(let[c,l]of s)a(r,c,l),l&&i.add(l);for(let[c,l]of n)a(o,c,l);return{strictEdges:n,broadEdges:s,strictSucc:o,broadSucc:r,reachableHeads:i}}function Nh(e,t,n,s,o){let r=s.reachableHeads,i=!1;for(let a of n)if(r.has(a)){i=!0;break}return i?e(t,n,[],s.strictSucc,o)||e(t,n,[],s.broadSucc,o):null}function HD(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function qD(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(gj(),hj)),s=n();return s?HD(t,s(t)):t}catch{return t}}function Jh(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)||YD.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 Lu(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return oi;if(t==="can")return"mgx:capableOf";try{let n=await qD(t);return n==="have"?oi:rs(`mgx:${n}`)}catch{return rs(`mgx:${t}`)}}function nz(e,t){let n=String(t||"").match(tz);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function Fa(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(ns(),xy)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function Yj(e){return e.predicate===VD&&e.object==="transitiveproperty"||e.predicate===wk}function Fh(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function lz(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of cz)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 Wh(e){return e.replace(/#node:[0-9a-f]+/g,"")}function Zh(e){let t=QE(e),n=e.provenance?` (source: ${Wh(e.provenance)})`:"";return`${t?` ${t}`:""}${n}`}function ko(e){return`${Ks(e)}${Zh(e)}`}function se(e){let t=Zh(e);return e.predicate===wk?`${gm(e.subject)} implies ${gm(e.object)}${t}`:e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Ks(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Ks(e)}${t}`:e.provenance.includes("corpus:")?`${Ks(e)}${t}`:e.provenance.includes("reference:")?`${Ks(e)}${t}`:`i learned: ${Ks(e)}${t}`}function Jj(e,t,n,{toward:s=null}={}){let o=se(e);if(!Mn.has(e.predicate)||!n.has(e.subject))return o;let r=nu(e.object,t,{cap:6,stopAt:eu,toward:s});if(r.length<=1)return o;let i=` \u2192 ${r.slice(1).join(" \u2192 ")}`,a=Zh(e);return!a||!o.endsWith(a)?o+i:o.slice(0,o.length-a.length)+i+a}function Qj(e,t,n,{indent:s=""}={}){let o=t.filter(R=>R.predicate===wr).map(R=>[R.subject,R.object]),r=Ra(o),i=e.map(R=>`${s}${Jj(R,r,n)}`),a=e.filter(R=>Mn.has(R.predicate)&&n.has(R.subject)),c=[...new Set(a.map(R=>R.object))];if(c.length<2)return{lines:i,grouped:null};let l=t.filter(R=>R.predicate==="owl:disjointWith").map(R=>[R.subject,R.object]),{split:u,clusters:d}=su(c,{parents:r,disjointEdges:l});if(!u)return{lines:i,grouped:null};let p=a[0].subject,f=new Map;for(let R of d)for(let E of R.objects)f.set(E,R);let m=e.filter(R=>!(Mn.has(R.predicate)&&n.has(R.subject))),h=[],b=[],g=0,$=R=>{let E=Jj(R,r,n);return g<_e?(g+=1,`${s}${E}`):(b.push(E),null)};for(let R of d){let E=a.filter(k=>f.get(k.object)===R).map($).filter(Boolean);E.length&&h.push(`${s}${p}, the ${R.label}:
177
177
  ${E.join(`
178
178
  `)}`)}if(m.length){let R=m.map($).filter(Boolean);R.length&&h.push(`${s}also about ${p}:
179
179
  ${R.join(`
180
180
  `)}`)}let w=b.length?`
181
181
  ${s}\u2026and ${b.length} more \u2014 say 'more' to see them.`:"",x={text:h.join(`
182
- `)+w,replace:!0,...b.length?{pending:{items:b,noun:"facts"}}:{}};return{lines:i,grouped:x}}async function lz(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(wj(),bj)))}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("; ")})
182
+ `)+w,replace:!0,...b.length?{pending:{items:b,noun:"facts"}}:{}};return{lines:i,grouped:x}}async function dz(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(wj(),bj)))}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("; ")})
183
183
  `:"",c=`Say 'show the facts' for all ${s.length} stored facts.`;return{text:`${r.paragraphs.join(`
184
184
 
185
185
  `)}
186
186
 
187
- ${a}${c}`,pending:{items:s,noun:"facts"}}}function wr(e){let t=Wl().find(n=>n.kind==="article");return t&&vm(String(e||""),t)?"an":"a"}function Sk(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${se(e)}; ${se(t)}. To settle it, say "forget that ${e.subject} is ${wr(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${se(t)}`,replace:!0}:e?{text:`yes \u2014 ${se(e)}`,replace:!0}:null}function uz(e,t){return{text:`you've told me both ${ko(e)} and ${ko(t)} \u2014 together those contradict, and I won't derive an answer from an inconsistency. To settle it, say "forget that ${e.subject} is ${wr(e.object)} ${e.object}".`,replace:!0}}function Au(e){let t=e[0],n=e[e.length-1];return`${e.map(s=>ko(s)).join("; ")}; so ${t.subject} is a ${n.object}`}async function Cu(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(We(),Ws)),n=await t(e),s=[];for(let o of n.individuals||[]){if(o?.class!=="Fact")continue;let r=a=>(o.attributes||[]).find(c=>c.key===a)?.value||"",i=r("extraction").split(" ").filter(Boolean);s.push({subject:r("subject"),predicate:r("predicate"),object:r("object"),provenance:r("provenance"),...i.length?{extraction:i}:{}})}return s}catch{return[]}}async function rt(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(We(),Ws)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function dz(e){if(!Ou)try{Ou=tn().nounPlurals}catch{Ou=new Map}return Ou.get(e)??null}function Mu(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return dn(tn(),t)?.lemma||t}catch{return t}}function fz(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return Mu(e);let n=Mu(Xh(t[1]));return`${wr(n)} ${n}`}function ee(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(pz,"").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=dz(i);a&&s.add(e(a))}return s}function Zj(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 Rk(e,t=null){let n=Fu(e),s=n.match(mz);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(gz);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function Gh(e){let t=String(e||"").replace(yz,"");if(t!==e){let s=t.match(jo);if(s)return s}let n=String(e||"").match($z);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(jo):null}function Ez(e,t,n){let s=String(e||"").trim().split(/\s+/).filter(Boolean);if(s.length<2)return null;let o=t.filter(r=>Pn.has(r.predicate));if(!o.length)return null;for(let r=1;r<s.length;r+=1){let i=ee(n,s.slice(0,r).join(" ")),a=s.slice(r).join(" "),c=ee(n,a);if(o.some(l=>c.has(l.subject)&&i.has(l.object)))return a}return null}function _k(e,t,n){if(t.has(n))return!0;for(let s of ee(e,n))if(t.has(s))return!0;return!1}function Tk(e,t,n,s){let o=a=>a.predicate===Nu&&s(a.object)===n||a.predicate===`tmct:${n}`&&a.object==="true",r=(a,c)=>_k(s,a,c.subject),i=e.find(a=>r(t,a)&&o(a));if(i)return[i];for(let a of e.filter(c=>Pn.has(c.predicate)&&r(t,c))){let c=ee(s,a.object),l=e.find(u=>r(c,u)&&o(u));if(l)return[a,l]}return null}function Rz(e,t,n,s){let o=a=>a.predicate==="mgx:capableOf"&&n.has(s(a.object)),r=(a,c)=>_k(s,a,c.subject),i=e.find(a=>r(t,a)&&o(a));if(i)return[i];for(let a of e.filter(c=>Pn.has(c.predicate)&&r(t,c))){let c=ee(s,a.object),l=e.find(u=>r(c,u)&&o(u));if(l)return[a,l]}return null}function _z(e){let t=String(e??"").trim().match(/^([\w-]+)\s+(\S.*)$/);if(!t)return null;let n=ba(t[1]);return n===null?null:{count:n,part:t[2]}}function Pu(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 nk(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function Uz(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=>ko(s)).join("; ")}function ok(e,t,n,{maxHops:s=3}={}){let o=ee(V,e),r=ee(V,t),i=Pc(o,r,n,{maxHops:s}),a=c=>{let l=c&&c.length?Uz(c,n):null;return l?` \u2014 via: ${l}`:""};if(i.verdict==="both")return{text:`I have both, at the same level of detail \u2014 my sources disagree, so I won't pick:
187
+ ${a}${c}`,pending:{items:s,noun:"facts"}}}function yr(e){let t=Wl().find(n=>n.kind==="article");return t&&Em(String(e||""),t)?"an":"a"}function Sk(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${se(e)}; ${se(t)}. To settle it, say "forget that ${e.subject} is ${yr(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${se(t)}`,replace:!0}:e?{text:`yes \u2014 ${se(e)}`,replace:!0}:null}function fz(e,t){return{text:`you've told me both ${ko(e)} and ${ko(t)} \u2014 together those contradict, and I won't derive an answer from an inconsistency. To settle it, say "forget that ${e.subject} is ${yr(e.object)} ${e.object}".`,replace:!0}}function Au(e){let t=e[0],n=e[e.length-1];return`${e.map(s=>ko(s)).join("; ")}; so ${t.subject} is a ${n.object}`}async function Cu(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(We(),Ws)),n=await t(e),s=[];for(let o of n.individuals||[]){if(o?.class!=="Fact")continue;let r=a=>(o.attributes||[]).find(c=>c.key===a)?.value||"",i=r("extraction").split(" ").filter(Boolean);s.push({subject:r("subject"),predicate:r("predicate"),object:r("object"),provenance:r("provenance"),...i.length?{extraction:i}:{}})}return s}catch{return[]}}async function rt(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(We(),Ws)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function pz(e){if(!Ou)try{Ou=tn().nounPlurals}catch{Ou=new Map}return Ou.get(e)??null}function Mu(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return dn(tn(),t)?.lemma||t}catch{return t}}function mz(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return Mu(e);let n=Mu(Jh(t[1]));return`${yr(n)} ${n}`}function ee(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(hz,"").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=pz(i);a&&s.add(e(a))}return s}function Zj(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 Rk(e,t=null){let n=Fu(e),s=n.match(gz);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(wz);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function Vh(e){let t=String(e||"").replace(vz,"");if(t!==e){let s=t.match(jo);if(s)return s}let n=String(e||"").match(Ez);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(jo):null}function Sz(e,t,n){let s=String(e||"").trim().split(/\s+/).filter(Boolean);if(s.length<2)return null;let o=t.filter(r=>Mn.has(r.predicate));if(!o.length)return null;for(let r=1;r<s.length;r+=1){let i=ee(n,s.slice(0,r).join(" ")),a=s.slice(r).join(" "),c=ee(n,a);if(o.some(l=>c.has(l.subject)&&i.has(l.object)))return a}return null}function _k(e,t,n){if(t.has(n))return!0;for(let s of ee(e,n))if(t.has(s))return!0;return!1}function Tk(e,t,n,s){let o=a=>a.predicate===Nu&&s(a.object)===n||a.predicate===`tmct:${n}`&&a.object==="true",r=(a,c)=>_k(s,a,c.subject),i=e.find(a=>r(t,a)&&o(a));if(i)return[i];for(let a of e.filter(c=>Mn.has(c.predicate)&&r(t,c))){let c=ee(s,a.object),l=e.find(u=>r(c,u)&&o(u));if(l)return[a,l]}return null}function Tz(e,t,n,s){let o=a=>a.predicate==="mgx:capableOf"&&n.has(s(a.object)),r=(a,c)=>_k(s,a,c.subject),i=e.find(a=>r(t,a)&&o(a));if(i)return[i];for(let a of e.filter(c=>Mn.has(c.predicate)&&r(t,c))){let c=ee(s,a.object),l=e.find(u=>r(c,u)&&o(u));if(l)return[a,l]}return null}function Az(e){let t=String(e??"").trim().match(/^([\w-]+)\s+(\S.*)$/);if(!t)return null;let n=wa(t[1]);return n===null?null:{count:n,part:t[2]}}function Pu(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 nk(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function Gz(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=>ko(s)).join("; ")}function ok(e,t,n,{maxHops:s=3}={}){let o=ee(V,e),r=ee(V,t),i=Mc(o,r,n,{maxHops:s}),a=c=>{let l=c&&c.length?Gz(c,n):null;return l?` \u2014 via: ${l}`:""};if(i.verdict==="both")return{text:`I have both, at the same level of detail \u2014 my sources disagree, so I won't pick:
188
188
  ${[...i.negative,...i.positive].map(se).join(`
189
189
  `)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let c=i.verdict==="no"?i.negative[0]:i.positive[0],l=`${i.verdict} \u2014 ${se(c)}${a(i.chain)}`;return i.overrides&&(l+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${se(i.overrides.fact)}`),{text:l,replace:!0}}return null}function rk(e,t,n,{maxHops:s=3}={}){let o=ee(V,e),r=ee(V,t),i=Pf(o,r,n,{maxHops:s});if(!i)return null;let a=`${e} is a kind of ${i.klass}`,c=`I don't know if ${e} can ${t}.`;if(i.positive.length||i.negative.length){let u=[`${i.positive.length} can ${t}`,`${i.negative.length} cannot`,`${i.unknown.length} I have nothing on`].join(", "),d=[...i.positive,...i.negative].slice(0,Lf).map(p=>se(p.fact));return{text:`${c} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
190
190
  ${d.join(`
191
191
  `)}`,replace:!0,miss:!0}}let l=Mf(r,n,{exclude:new Set([...o,i.klass])});if(l.length){let u=l.slice(0,Lf),d=l.slice(u.length);return{text:`${c} ${a}, and nothing I know about ${i.klass} says whether one can ${t}. I do know ${l.length} thing${l.length===1?"":"s"} that can ${t}${d.length?` (first ${u.length} shown)`:""}:
192
192
  ${u.map(se).join(`
193
- `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(se),noun:"facts"}}:{}}}return{text:`${c} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function Vz(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 En(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 Ck(e,t,n,s,o={},r=null,i=null){return Ok(Ik(await sB(e,t,n,s,o,r,i),n,t),ru.FACT_SET)}function Ok(e,t){return!e||e.miss||typeof e.text!="string"||!Jx(e.text,e)?e:{...e,enumerationLane:t}}function Ik(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=Bh(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Gj),!o){let r=s.match(Wh),i=r?null:Fu(s).match(kk)||Rk(s),a=r?r[2]:i?i[1]:null;a&&!Vh.has(a.toLowerCase())&&(o=Gj)}if(!o){let r=s.match(Lk);r&&(o=Bh({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function Fh(e,t,n,s,o=null,r=[]){let{ON_PROPERTY_PREDICATE:i,SOME_VALUES_FROM_PREDICATE:a}=await Promise.resolve().then(()=>(Ot(),un)),c=await rt(e,t),l=new Map,u=new Map;for(let f of c)f.predicate===i?l.set(f.subject,f.object):f.predicate===a&&u.set(f.subject,f.object);let d=c.filter(f=>f.predicate===br&&n.has(f.subject)&&l.has(f.object)&&u.has(f.object)),p=d.filter(f=>s.has(u.get(f.object))).sort((f,m)=>f.object.localeCompare(m.object))[0];if(p){let f=new Map(c.map(b=>[b.id,b])),m=(p.justification||[]).map(b=>f.get(b)).filter(b=>b&&b.predicate===br),h=m.length?m:[p];return{text:`yes \u2014 ${[...r,...h].map(se).join("; ")}`,replace:!0}}return d.length&&o?{text:`I can't confirm that \u2014 nothing I remember composes to it yet. Run "/classify ${o}", then ask me again.`,replace:!0,miss:!0}:null}async function Qz(e,t,n){let{extractTableauModule:s,buildTableauKb:o,findTableauViolations:r}=await Promise.resolve().then(()=>(Sh(),xh)),{elUnsatisfiableClasses:i}=await Promise.resolve().then(()=>(Bj(),zj)),a=e.filter(h=>h.predicate==="rdf:type"&&t.has(h.subject)).map(h=>h.object),c=[...new Set([...t,...a])],l=s(e,c),u=new Map(l.map(h=>[h.id,h])),d=o(l),p=d.individuals.filter(h=>t.has(h));if(p.length){let h={maxSteps:n.proveSteps,maxBranches:n.proveBranches,maxNodes:n.proveNodes},b=r(d,p,h)[0];if(b){let g=b.premises.map($=>u.get($)).filter(Boolean).map(se).join("; ");return`I can't answer that \u2014 what I've been told about ${b.subject} is inconsistent: ${g||"the facts I hold about it clash"}. I'd need one of those retracted before I can answer honestly.`}}let f=i(l,{budget:n.classifyBudget,rounds:n.classifyRounds,focus:new Set(c)}),m=f.unsatisfiable.find(h=>t.has(h)||a.includes(h));if(m){let h=f.premisesOf(m).map(b=>u.get(b)).filter(Boolean).map(se).join("; ");return`I can't answer that \u2014 "${m}" can never have any members: ${h||"its own subclass chain is unsatisfiable"}. I'd need one of those retracted before I can answer honestly.`}return null}function eB(e){return e.some(t=>{let n=String(t?.predicate||"").trim().toLowerCase();return Zz.has(n)?!0:n==="rdf:type"&&String(t?.object||"").toLowerCase()==="transitiveproperty"})}function tB(e,t){return t>e.length?`one of ${t} possibilities`:e.map(n=>n.t==="nom"?n.ind:n.name).map(n=>`${wr(n)} ${n}`).join(" or ")}function ak(e,t,n,{negate:s=!1}={}){let o=s?`is not a ${n}`:`is a ${n}`;return!e.cases||!e.cases.length?`so ${t} ${o}.`:`in every case \u2014 ${tB(e.cases,e.casesTotal)} \u2014 ${t} ${o}.`}async function nB(e,t,n,s,o,r,i){if(!eB(n))return null;let{extractTableauModule:a,buildTableauKb:c,proveEntailment:l,proveSubsumption:u,proveSubsumptionOfNegation:d,findTableauViolations:p,moduleHasDlShape:f}=await Promise.resolve().then(()=>(Sh(),xh)),{normFactTerm:m}=await Promise.resolve().then(()=>(We(),Ws)),h=pk(o,n,m(s)),b=pk(r,n,m(i)),g=n.filter(C=>C.predicate==="rdf:type"&&o.has(C.subject)).map(C=>C.object),$=a(n,[h,b,...g]);if(!f($))return null;let w=await Pk(e);if(!w.askProveFallback)return null;let x=c($),R={maxSteps:w.askProveSteps,maxBranches:w.askProveBranches,maxNodes:w.askProveNodes},E=x.namedIndividuals.has(h),k=new Map($.map(C=>[C.id,C]));if(E){let C=p(x,[h],R)[0];if(C){let v=C.premises.map(j=>k.get(j)).filter(Boolean).map(se).join("; ");return{text:`I can't answer that \u2014 what I've been told about ${C.subject} is inconsistent: ${v||"the facts I hold about it clash"}. I'd need one of those retracted before I can answer honestly.`,replace:!0}}}let O=C=>C.premises.map(v=>k.get(v)).filter(Boolean).map(se).join("; "),S=E?l(x,h,{t:"atom",name:b},R):u(x,h,b,R);if(S.status==="proved"){let C=O(S),v=ak(S,s,i);return{text:`yes \u2014 ${C}; ${v}`,replace:!0}}if(S.status==="exhausted")return{budgetExhausted:!0};let _=E?l(x,h,{t:"not",c:{t:"atom",name:b}},R):d(x,h,b,R);if(_.status==="exhausted")return{budgetExhausted:!0};if(_.status!=="proved")return null;let y=O(_),T=ak(_,s,i,{negate:!0});return{text:`no \u2014 ${y}; ${T}`,replace:!0}}async function sB(e,t,n,s,o={},r=null,i=null){let a,c;try{({normFactTerm:a,normFactPredicate:c}=await Promise.resolve().then(()=>(We(),Ws)))}catch{return null}let l=String(t).trim(),u=l.match(Oz);if(u){let W=ee(a,u[1]),I=(await rt(e,r)).filter(D=>D.predicate==="mgx:usedFor"&&W.has(D.object));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
193
+ `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(se),noun:"facts"}}:{}}}return{text:`${c} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function Hz(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 En(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 Ck(e,t,n,s,o={},r=null,i=null){return Ok(Ik(await rB(e,t,n,s,o,r,i),n,t),ru.FACT_SET)}function Ok(e,t){return!e||e.miss||typeof e.text!="string"||!Jx(e.text,e)?e:{...e,enumerationLane:t}}function Ik(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=Uh(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Gj),!o){let r=s.match(Gh),i=r?null:Fu(s).match(kk)||Rk(s),a=r?r[2]:i?i[1]:null;a&&!Kh.has(a.toLowerCase())&&(o=Gj)}if(!o){let r=s.match(Lk);r&&(o=Uh({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function Dh(e,t,n,s,o=null,r=[]){let{ON_PROPERTY_PREDICATE:i,SOME_VALUES_FROM_PREDICATE:a}=await Promise.resolve().then(()=>(Ot(),un)),c=await rt(e,t),l=new Map,u=new Map;for(let f of c)f.predicate===i?l.set(f.subject,f.object):f.predicate===a&&u.set(f.subject,f.object);let d=c.filter(f=>f.predicate===wr&&n.has(f.subject)&&l.has(f.object)&&u.has(f.object)),p=d.filter(f=>s.has(u.get(f.object))).sort((f,m)=>f.object.localeCompare(m.object))[0];if(p){let f=new Map(c.map(b=>[b.id,b])),m=(p.justification||[]).map(b=>f.get(b)).filter(b=>b&&b.predicate===wr),h=m.length?m:[p];return{text:`yes \u2014 ${[...r,...h].map(se).join("; ")}`,replace:!0}}return d.length&&o?{text:`I can't confirm that \u2014 nothing I remember composes to it yet. Run "/classify ${o}", then ask me again.`,replace:!0,miss:!0}:null}async function eB(e,t,n){let{extractTableauModule:s,buildTableauKb:o,findTableauViolations:r}=await Promise.resolve().then(()=>(jh(),Sh)),{elUnsatisfiableClasses:i}=await Promise.resolve().then(()=>(Bj(),zj)),a=e.filter(h=>h.predicate==="rdf:type"&&t.has(h.subject)).map(h=>h.object),c=[...new Set([...t,...a])],l=s(e,c),u=new Map(l.map(h=>[h.id,h])),d=o(l),p=d.individuals.filter(h=>t.has(h));if(p.length){let h={maxSteps:n.proveSteps,maxBranches:n.proveBranches,maxNodes:n.proveNodes},b=r(d,p,h)[0];if(b){let g=b.premises.map($=>u.get($)).filter(Boolean).map(se).join("; ");return`I can't answer that \u2014 what I've been told about ${b.subject} is inconsistent: ${g||"the facts I hold about it clash"}. I'd need one of those retracted before I can answer honestly.`}}let f=i(l,{budget:n.classifyBudget,rounds:n.classifyRounds,focus:new Set(c)}),m=f.unsatisfiable.find(h=>t.has(h)||a.includes(h));if(m){let h=f.premisesOf(m).map(b=>u.get(b)).filter(Boolean).map(se).join("; ");return`I can't answer that \u2014 "${m}" can never have any members: ${h||"its own subclass chain is unsatisfiable"}. I'd need one of those retracted before I can answer honestly.`}return null}function nB(e){return e.some(t=>{let n=String(t?.predicate||"").trim().toLowerCase();return tB.has(n)?!0:n==="rdf:type"&&String(t?.object||"").toLowerCase()==="transitiveproperty"})}function sB(e,t){return t>e.length?`one of ${t} possibilities`:e.map(n=>n.t==="nom"?n.ind:n.name).map(n=>`${yr(n)} ${n}`).join(" or ")}function ak(e,t,n,{negate:s=!1}={}){let o=s?`is not a ${n}`:`is a ${n}`;return!e.cases||!e.cases.length?`so ${t} ${o}.`:`in every case \u2014 ${sB(e.cases,e.casesTotal)} \u2014 ${t} ${o}.`}async function oB(e,t,n,s,o,r,i){if(!nB(n))return null;let{extractTableauModule:a,buildTableauKb:c,proveEntailment:l,proveSubsumption:u,proveSubsumptionOfNegation:d,findTableauViolations:p,moduleHasDlShape:f}=await Promise.resolve().then(()=>(jh(),Sh)),{normFactTerm:m}=await Promise.resolve().then(()=>(We(),Ws)),h=pk(o,n,m(s)),b=pk(r,n,m(i)),g=n.filter(C=>C.predicate==="rdf:type"&&o.has(C.subject)).map(C=>C.object),$=a(n,[h,b,...g]);if(!f($))return null;let w=await Pk(e);if(!w.askProveFallback)return null;let x=c($),R={maxSteps:w.askProveSteps,maxBranches:w.askProveBranches,maxNodes:w.askProveNodes},E=x.namedIndividuals.has(h),k=new Map($.map(C=>[C.id,C]));if(E){let C=p(x,[h],R)[0];if(C){let v=C.premises.map(j=>k.get(j)).filter(Boolean).map(se).join("; ");return{text:`I can't answer that \u2014 what I've been told about ${C.subject} is inconsistent: ${v||"the facts I hold about it clash"}. I'd need one of those retracted before I can answer honestly.`,replace:!0}}}let O=C=>C.premises.map(v=>k.get(v)).filter(Boolean).map(se).join("; "),S=E?l(x,h,{t:"atom",name:b},R):u(x,h,b,R);if(S.status==="proved"){let C=O(S),v=ak(S,s,i);return{text:`yes \u2014 ${C}; ${v}`,replace:!0}}if(S.status==="exhausted")return{budgetExhausted:!0};let _=E?l(x,h,{t:"not",c:{t:"atom",name:b}},R):d(x,h,b,R);if(_.status==="exhausted")return{budgetExhausted:!0};if(_.status!=="proved")return null;let y=O(_),T=ak(_,s,i,{negate:!0});return{text:`no \u2014 ${y}; ${T}`,replace:!0}}async function rB(e,t,n,s,o={},r=null,i=null){let a,c;try{({normFactTerm:a,normFactPredicate:c}=await Promise.resolve().then(()=>(We(),Ws)))}catch{return null}let l=String(t).trim(),u=l.match(Nz);if(u){let W=ee(a,u[1]),I=(await rt(e,r)).filter(D=>D.predicate==="mgx:usedFor"&&W.has(D.object));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
194
194
  \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
195
- `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}for(let{predicate:W,re:I}of Hz){let D=l.match(I);if(!D)continue;let N=ee(a,D[1]),F=(await rt(e,r)).filter(fe=>fe.predicate===W&&N.has(fe.object));if(!F.length)continue;let U=lt(En(F),o).map(se),G=U.slice(0,_e),Q=U.slice(_e),ie=Q.length?`
195
+ `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}for(let{predicate:W,re:I}of Yz){let D=l.match(I);if(!D)continue;let N=ee(a,D[1]),F=(await rt(e,r)).filter(fe=>fe.predicate===W&&N.has(fe.object));if(!F.length)continue;let U=lt(En(F),o).map(se),G=U.slice(0,_e),Q=U.slice(_e),ie=Q.length?`
196
196
  \u2026and ${Q.length} more \u2014 say 'more' to see them.`:"";return{text:G.join(`
197
- `)+ie,replace:!0,...Q.length?{pending:{items:Q,noun:"facts"}}:{}}}let d=l.match(Wz),p=d?null:l.match(Gz),f=d?d[1]:p?.[2],m=d?d[2]:p?.[1],h=f&&m?Vz(m):null;if(h){let W=`mgx:${h.replace(/\s+/g,"-")}-than`,I=await rt(e,r),D=ee(a,f),N=[...D].sort((U,G)=>U.length-G.length)[0],F=U=>D.has(U)||U.startsWith(`${N}-`)||U.startsWith(`${N} `)||I.some(G=>Pn.has(G.predicate)&&G.subject===U&&D.has(G.object)),B=En(I.filter(U=>U.predicate===W&&gr(U))).filter(U=>U.subject!==U.object&&F(U.subject)&&F(U.object));if(B.length){let U=new Set,G=new Map;for(let Z of B)U.add(Z.subject),U.add(Z.object),G.set(Z.object,(G.get(Z.object)||0)+1),G.has(Z.subject)||G.set(Z.subject,G.get(Z.subject)||0);let Q=new Map(G),ie=[],fe=null;for(;Q.size;){let Z=[...Q.keys()].filter(te=>Q.get(te)===0);if(Z.length!==1){fe=Z.length===0?{text:`I can't order the ${N}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} ${N} from what I know \u2014 nothing compares ${Z[0]} and ${Z[1]}. Teach me, e.g. "${Z[0]} is ${h} than ${Z[1]}".`,replace:!0,miss:!0};break}let J=Z[0];ie.push(J),Q.delete(J);for(let te of B)te.subject===J&&Q.has(te.object)&&Q.set(te.object,Q.get(te.object)-1)}if(fe)return fe;let ae=ie.slice(0,-1).map((Z,J)=>B.find(te=>te.subject===Z&&te.object===ie[J+1]));if(ae.every(Boolean)){let Z=ae.map(J=>ko(J)).join("; ");return{text:`${ie[0]} \u2014 ${Z}; so ${ie[0]} is the ${m} ${N}`,replace:!0}}}}let b=s?l.match(Iz)||l.match(Nz):null;if(b){let W=ee(a,b[1]),I=(await rt(e,r)).filter(D=>Er(D.predicate)!==null&&W.has(D.subject));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
197
+ `)+ie,replace:!0,...Q.length?{pending:{items:Q,noun:"facts"}}:{}}}let d=l.match(Vz),p=d?null:l.match(Kz),f=d?d[1]:p?.[2],m=d?d[2]:p?.[1],h=f&&m?Hz(m):null;if(h){let W=`mgx:${h.replace(/\s+/g,"-")}-than`,I=await rt(e,r),D=ee(a,f),N=[...D].sort((U,G)=>U.length-G.length)[0],F=U=>D.has(U)||U.startsWith(`${N}-`)||U.startsWith(`${N} `)||I.some(G=>Mn.has(G.predicate)&&G.subject===U&&D.has(G.object)),B=En(I.filter(U=>U.predicate===W&&br(U))).filter(U=>U.subject!==U.object&&F(U.subject)&&F(U.object));if(B.length){let U=new Set,G=new Map;for(let Z of B)U.add(Z.subject),U.add(Z.object),G.set(Z.object,(G.get(Z.object)||0)+1),G.has(Z.subject)||G.set(Z.subject,G.get(Z.subject)||0);let Q=new Map(G),ie=[],fe=null;for(;Q.size;){let Z=[...Q.keys()].filter(te=>Q.get(te)===0);if(Z.length!==1){fe=Z.length===0?{text:`I can't order the ${N}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} ${N} from what I know \u2014 nothing compares ${Z[0]} and ${Z[1]}. Teach me, e.g. "${Z[0]} is ${h} than ${Z[1]}".`,replace:!0,miss:!0};break}let J=Z[0];ie.push(J),Q.delete(J);for(let te of B)te.subject===J&&Q.has(te.object)&&Q.set(te.object,Q.get(te.object)-1)}if(fe)return fe;let ae=ie.slice(0,-1).map((Z,J)=>B.find(te=>te.subject===Z&&te.object===ie[J+1]));if(ae.every(Boolean)){let Z=ae.map(J=>ko(J)).join("; ");return{text:`${ie[0]} \u2014 ${Z}; so ${ie[0]} is the ${m} ${N}`,replace:!0}}}}let b=s?l.match(Lz)||l.match(Pz):null;if(b){let W=ee(a,b[1]),I=(await rt(e,r)).filter(D=>xr(D.predicate)!==null&&W.has(D.subject));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
198
198
  \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
199
- `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}let g=l.match(Lz);if(g){let W=g[1].toLowerCase(),I=ee(a,g[2].replace(/^(?:an?|the)\s+/i,"").trim()),D=(await rt(e,r)).filter(N=>Er(N.predicate)===W&&I.has(N.object));if(D.length){let F=lt(En(D),o).map(se),B=F.slice(0,_e),U=F.slice(_e),G=U.length?`
199
+ `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}let g=l.match(Mz);if(g){let W=g[1].toLowerCase(),I=ee(a,g[2].replace(/^(?:an?|the)\s+/i,"").trim()),D=(await rt(e,r)).filter(N=>xr(N.predicate)===W&&I.has(N.object));if(D.length){let F=lt(En(D),o).map(se),B=F.slice(0,_e),U=F.slice(_e),G=U.length?`
200
200
  \u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
201
- `)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}{let W=l.match(Pz),I=W?W[2]:g&&["in","inside"].includes(g[1].toLowerCase())?g[2]:null;if(I!=null){let D=W&&W[1].toLowerCase()==="parts"?["mgx:partOf"]:oz,N=ee(a,I.replace(/^(?:an?|the)\s+/i,"").trim()),F=(await rt(e,r)).filter(B=>D.includes(B.predicate)&&N.has(B.object)).sort(zD);if(F.length){let U=lt(En(F),o).map(se),G=U.slice(0,_e),Q=U.slice(_e),ie=Q.length?`
201
+ `)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}{let W=l.match(Fz),I=W?W[2]:g&&["in","inside"].includes(g[1].toLowerCase())?g[2]:null;if(I!=null){let D=W&&W[1].toLowerCase()==="parts"?["mgx:partOf"]:iz,N=ee(a,I.replace(/^(?:an?|the)\s+/i,"").trim()),F=(await rt(e,r)).filter(B=>D.includes(B.predicate)&&N.has(B.object)).sort(UD);if(F.length){let U=lt(En(F),o).map(se),G=U.slice(0,_e),Q=U.slice(_e),ie=Q.length?`
202
202
  \u2026and ${Q.length} more \u2014 say 'more' to see them.`:"";return{text:G.join(`
203
- `)+ie,replace:!0,...Q.length?{pending:{items:Q,noun:"facts"}}:{}}}}}let $=l.match(Mz);if($){let W=$[3].toLowerCase(),I=ee(a,$[2]),D=new Set([...ee(a,$[1])].map(F=>c(`mgx:${W}-${F.replace(/\s+/g,"-")}`))),N=(await rt(e,r)).filter(F=>D.has(c(F.predicate))&&I.has(a(F.subject)));if(N.length){let B=lt(En(N),o).map(se),U=B.slice(0,_e),G=B.slice(_e),Q=G.length?`
203
+ `)+ie,replace:!0,...Q.length?{pending:{items:Q,noun:"facts"}}:{}}}}}let $=l.match(Dz);if($){let W=$[3].toLowerCase(),I=ee(a,$[2]),D=new Set([...ee(a,$[1])].map(F=>c(`mgx:${W}-${F.replace(/\s+/g,"-")}`))),N=(await rt(e,r)).filter(F=>D.has(c(F.predicate))&&I.has(a(F.subject)));if(N.length){let B=lt(En(N),o).map(se),U=B.slice(0,_e),G=B.slice(_e),Q=G.length?`
204
204
  \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
205
- `)+Q,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,x=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!x&&!ik.test(l)){let W=l.match(Lk)||l.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);W&&(w=Js(W[1]))}if(!w&&s){let W=l.match($B);W&&(w=Js(gn(W[1].trim())))}if(!w&&n?.ambiguous&&Array.isArray(n.candidateParses)){let W=n.candidateParses.find(I=>I?.shape==="meta"&&I.object);W&&(w=Js(String(W.object)))}if(w){let W=az(w),{predicate:I}=W,D=W.subject.replace(/^(?:the|an?)\s+/i,"").trim()||W.subject,N=!1;if(I&&Vs.test(D)){if(!i){let oe=String(Gs[I]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${D.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${oe?` ${oe}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}D=i,N=!0}let F=ee(a,D),B=await rt(e,r);if(!B.some(oe=>F.has(oe.subject)||F.has(oe.object))){let oe=Ez(D,B,a);oe&&(D=oe,F=ee(a,D))}let U=(await rt(e,r)).filter(oe=>F.has(oe.subject)&&!qj.has(oe.predicate)&&!Yj(oe)&&!Xj.has(oe.predicate)),G=I?U.filter(oe=>c(oe.predicate)===I):U;if(!I&&G.length&&!G.some(Dh)&&(G=[]),!G.length){if(I&&(U.length||N))return{text:`I don't have any "${Gs[I]}" facts about ${D}.`,replace:s,...U.length?{}:{miss:!0}};if(!I){let oe=lt((await rt(e,r)).filter(Ae=>F.has(Ae.object)),o);if(oe.length&&!oe.some(Dh)&&(oe=[]),oe.length){let Ae=oe.map(se),pe=Ae.slice(0,_e),je=Ae.slice(_e),Le=je.length?`
205
+ `)+Q,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,x=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!x&&!ik.test(l)){let W=l.match(Lk)||l.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);W&&(w=Js(W[1]))}if(!w&&s){let W=l.match(EB);W&&(w=Js(gn(W[1].trim())))}if(!w&&n?.ambiguous&&Array.isArray(n.candidateParses)){let W=n.candidateParses.find(I=>I?.shape==="meta"&&I.object);W&&(w=Js(String(W.object)))}if(w){let W=lz(w),{predicate:I}=W,D=W.subject.replace(/^(?:the|an?)\s+/i,"").trim()||W.subject,N=!1;if(I&&Vs.test(D)){if(!i){let oe=String(Gs[I]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${D.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${oe?` ${oe}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}D=i,N=!0}let F=ee(a,D),B=await rt(e,r);if(!B.some(oe=>F.has(oe.subject)||F.has(oe.object))){let oe=Sz(D,B,a);oe&&(D=oe,F=ee(a,D))}let U=(await rt(e,r)).filter(oe=>F.has(oe.subject)&&!qj.has(oe.predicate)&&!Yj(oe)&&!Xj.has(oe.predicate)),G=I?U.filter(oe=>c(oe.predicate)===I):U;if(!I&&G.length&&!G.some(zh)&&(G=[]),!G.length){if(I&&(U.length||N))return{text:`I don't have any "${Gs[I]}" facts about ${D}.`,replace:s,...U.length?{}:{miss:!0}};if(!I){let oe=lt((await rt(e,r)).filter(Ae=>F.has(Ae.object)),o);if(oe.length&&!oe.some(zh)&&(oe=[]),oe.length){let Ae=oe.map(se),pe=Ae.slice(0,_e),je=Ae.slice(_e),Le=je.length?`
206
206
  \u2026and ${je.length} more \u2014 say 'more' to see them.`:"";return{text:pe.join(`
207
- `)+Le,replace:s,...je.length?{pending:{items:je,noun:"facts"}}:{}}}}return null}G=lt(G,o);let Q=await rt(e,r),{lines:ie,grouped:fe}=Qj(G,Q,F),ae=!I&&ie.length>cz?await lz(D,G,Q,ie):null;if(ae)return{...ae,replace:s};if(fe)return{...fe,replace:s};let Z=ie.slice(0,_e),J=ie.slice(_e),te=J.length?`
207
+ `)+Le,replace:s,...je.length?{pending:{items:je,noun:"facts"}}:{}}}}return null}G=lt(G,o);let Q=await rt(e,r),{lines:ie,grouped:fe}=Qj(G,Q,F),ae=!I&&ie.length>uz?await dz(D,G,Q,ie):null;if(ae)return{...ae,replace:s};if(fe)return{...fe,replace:s};let Z=ie.slice(0,_e),J=ie.slice(_e),te=J.length?`
208
208
  \u2026and ${J.length} more \u2014 say 'more' to see them.`:"";return{text:Z.join(`
209
- `)+te,replace:s,...J.length?{pending:{items:J,noun:"facts"}}:{}}}if(!s)return null;let R=l.match(UD);if(R){let I=`mgx:${R[2].toLowerCase().replace(/\s+/g,"-")}-than`,D=await Cu(e),N=ae=>{let Z=ae.replace(/^(?:an?|the)\s+/i,"").trim();return i&&Vs.test(Z)?i:Z},F=N(R[1]),B=N(R[3]),U=ee(a,F),G=ee(a,B),Q=D.find(ae=>ae.predicate===I&&U.has(ae.subject)&&G.has(ae.object));if(Q){let ae=D.find(J=>J.predicate===I&&U.has(J.object)&&G.has(J.subject)),Z=ae?` \u2014 though you also told me the opposite: ${se(ae)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${se(Q)}${Z}`,replace:!0}}let ie=D.filter(ae=>ae.predicate===I&&(U.has(ae.subject)||U.has(ae.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${ie.length?` I do know: ${ie.slice(0,3).map(se).join("; ")}.`:""} If it's true, teach me: "${F} is ${R[2].toLowerCase()} than ${B}".`,replace:!0,miss:!0}}let E=Pu(l).match(kz);if(E){let W=ee(a,E[1]),I=E[2].toLowerCase(),D=await rt(e,r),N=Tk(D,W,I,a)??Rz(D,W,new Set([`be ${I}`,I]),a);if(N)return{text:`yes \u2014 ${N.map(se).join("; ")}`,replace:!0}}for(let{predicate:W,phrase:I,re:D}of Xz){let N=l.match(D);if(!N)continue;let F=await Cu(e),B=ee(a,N[1]),U=ee(a,N[2]),G=F.find(Z=>Z.predicate===W&&B.has(Z.subject)&&U.has(Z.object));if(G)return{text:`yes \u2014 ${se(G)}`,replace:!0};let[Q]=I.split(" "),ie=await Lu(ma(Q));if(ie!==W){let Z=ie.replace(/^mgx:/,"mgxneg:");if(F.some(J=>(J.predicate===ie||J.predicate===Z)&&B.has(J.subject)))continue}let fe=Yz.has(W)?` If it's true, teach me: "${N[1]} ${I} ${N[2]}".`:"",ae=F.filter(Z=>Z.predicate===W&&B.has(Z.subject));if(ae.length){let Z=ae.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${I} ${N[2]}. I do know: ${Z}.${fe}`,replace:!0,miss:!0}}if(!n?.parsed&&F.some(Z=>B.has(Z.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${I} ${N[2]}.${fe}`,replace:!0,miss:!0};break}let k=l.match(jo)||Gh(l);if(k){let W=ee(a,k[1]),I=ee(a,k[2]),D=await rt(e,r),N=G=>W.has(G.subject)&&I.has(G.object),{DISJOINT_PREDICATE:F}=await Promise.resolve().then(()=>(Ot(),un)),B=G=>W.has(G.subject)||W.has(G.object)||I.has(G.subject)||I.has(G.object);return D.some(G=>G.predicate===F&&gr(G)&&B(G))?null:Sk(D.find(G=>Pn.has(G.predicate)&&N(G)),D.find(G=>G.predicate===Nc&&N(G)))}let O=Pu(l),S=O.match(xz);if(S){let W=await rt(e,r),I=S[1],D=ok(S[2],S[3],W);if(D&&O!==sk(l)&&(D=nk(D)),D&&I)return{text:`I can't speak for ${I.trim()} ${S[2]} \u2014 what I remember is generic, not universal. ${D.text}.`,replace:!0};if(D)return D;let N=ee(a,S[2]),F=W.filter(B=>B.predicate==="mgx:capableOf"&&N.has(B.subject));if(F.length){let B=F.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${S[2]} can ${S[3]}. I do know: ${B}. If it's true, teach me: "a ${F[0].subject} can ${S[3]}".`,replace:!0,miss:!0}}return rk(S[2],S[3],W)}let _=l.match(jz);if(_){let W=ee(a,_[1]),I=ee(a,_[2]),N=(await Cu(e)).map(F=>({fact:F,quantified:tk.has(F.predicate)&&I.has(F.subject)?_z(F.object):null})).find(({quantified:F})=>F&&[...ee(a,F.part)].some(B=>W.has(B)));if(N)return{text:`${N.quantified.count} \u2014 ${se(N.fact)}`,replace:!0}}let y=l.match(Sz);if(y){let W=ee(a,y[1]),I=ee(a,y[2]),D=await Cu(e),N=G=>D.find(Q=>tk.has(Q.predicate)&&G.has(Q.subject)&&I.has(Q.object)),F=N(W);if(F)return{text:`yes \u2014 ${se(F)}`,replace:!0};let B=[{terms:W,chain:[]}],U=new Set;for(let G=0;G<4;G+=1){let Q=[];for(let{terms:ie,chain:fe}of B){let ae=D.filter(Z=>Pn.has(Z.predicate)&&ie.has(Z.subject)&&!U.has(Z.object));for(let Z of ae){if(U.has(Z.object))continue;U.add(Z.object);let J=[...fe,Z],te=ee(a,Z.object),oe=N(te);if(oe)return{text:`yes \u2014 ${[...J.map(se),se(oe)].join("; ")}`,replace:!0};let Ae=await Fh(e,r,te,I,null,J);if(Ae)return Ae;Q.push({terms:te,chain:J})}}if(!Q.length)break;B=Q}return Fh(e,r,W,I,y[1].trim())}let T=l.match(Tz);if(T){let W=ee(a,T[1]),I=ee(a,T[3]),D=await Fh(e,r,W,I,T[1].trim());if(D)return D}let C=Pu(l),v=C.match(Fz);if(v){let W=await rt(e,r),I=!!v[1],D=ee(a,v[2]),N=ee(a,v[3]),F=ok(v[2],v[3],W);if(F&&C!==sk(l)&&(F=nk(F)),F&&I)return{text:`I can't speak for ${v[1].trim()} ${v[2]} \u2014 what I remember is generic, not universal. ${F.text}.`,replace:!0};if(F)return F;if(s){let B=W.filter(G=>G.predicate==="mgx:capableOf"&&D.has(G.subject));if(B.length){let G=B.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${v[2]} can ${v[3]}. I do know: ${G}. If it's true, teach me: "a ${B[0].subject} can ${v[3]}".`,replace:!0,miss:!0}}let U=rk(v[2],v[3],W);if(U)return U;if(!/\s/.test(v[2].trim())&&!W.some(G=>D.has(G.subject)||D.has(G.object))){let G=Xh(Mu(v[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${v[2]}" yet. Teach me "a ${G} can ${v[3]}" (or "a ${G} cannot ${v[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let j=l.match(Az);if(j){let W=ee(a,j[1]),I=(await rt(e,r)).filter(G=>(G.predicate==="mgx:capableOf"||G.predicate===Gr)&&W.has(G.subject));if(!I.length)return null;let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
209
+ `)+te,replace:s,...J.length?{pending:{items:J,noun:"facts"}}:{}}}if(!s)return null;let R=l.match(GD);if(R){let I=`mgx:${R[2].toLowerCase().replace(/\s+/g,"-")}-than`,D=await Cu(e),N=ae=>{let Z=ae.replace(/^(?:an?|the)\s+/i,"").trim();return i&&Vs.test(Z)?i:Z},F=N(R[1]),B=N(R[3]),U=ee(a,F),G=ee(a,B),Q=D.find(ae=>ae.predicate===I&&U.has(ae.subject)&&G.has(ae.object));if(Q){let ae=D.find(J=>J.predicate===I&&U.has(J.object)&&G.has(J.subject)),Z=ae?` \u2014 though you also told me the opposite: ${se(ae)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${se(Q)}${Z}`,replace:!0}}let ie=D.filter(ae=>ae.predicate===I&&(U.has(ae.subject)||U.has(ae.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${ie.length?` I do know: ${ie.slice(0,3).map(se).join("; ")}.`:""} If it's true, teach me: "${F} is ${R[2].toLowerCase()} than ${B}".`,replace:!0,miss:!0}}let E=Pu(l).match(_z);if(E){let W=ee(a,E[1]),I=E[2].toLowerCase(),D=await rt(e,r),N=Tk(D,W,I,a)??Tz(D,W,new Set([`be ${I}`,I]),a);if(N)return{text:`yes \u2014 ${N.map(se).join("; ")}`,replace:!0}}for(let{predicate:W,phrase:I,re:D}of Qz){let N=l.match(D);if(!N)continue;let F=await Cu(e),B=ee(a,N[1]),U=ee(a,N[2]),G=F.find(Z=>Z.predicate===W&&B.has(Z.subject)&&U.has(Z.object));if(G)return{text:`yes \u2014 ${se(G)}`,replace:!0};let[Q]=I.split(" "),ie=await Lu(ha(Q));if(ie!==W){let Z=ie.replace(/^mgx:/,"mgxneg:");if(F.some(J=>(J.predicate===ie||J.predicate===Z)&&B.has(J.subject)))continue}let fe=Jz.has(W)?` If it's true, teach me: "${N[1]} ${I} ${N[2]}".`:"",ae=F.filter(Z=>Z.predicate===W&&B.has(Z.subject));if(ae.length){let Z=ae.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${I} ${N[2]}. I do know: ${Z}.${fe}`,replace:!0,miss:!0}}if(!n?.parsed&&F.some(Z=>B.has(Z.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${I} ${N[2]}.${fe}`,replace:!0,miss:!0};break}let k=l.match(jo)||Vh(l);if(k){let W=ee(a,k[1]),I=ee(a,k[2]),D=await rt(e,r),N=G=>W.has(G.subject)&&I.has(G.object),{DISJOINT_PREDICATE:F}=await Promise.resolve().then(()=>(Ot(),un)),B=G=>W.has(G.subject)||W.has(G.object)||I.has(G.subject)||I.has(G.object);return D.some(G=>G.predicate===F&&br(G)&&B(G))?null:Sk(D.find(G=>Mn.has(G.predicate)&&N(G)),D.find(G=>G.predicate===Lc&&N(G)))}let O=Pu(l),S=O.match(jz);if(S){let W=await rt(e,r),I=S[1],D=ok(S[2],S[3],W);if(D&&O!==sk(l)&&(D=nk(D)),D&&I)return{text:`I can't speak for ${I.trim()} ${S[2]} \u2014 what I remember is generic, not universal. ${D.text}.`,replace:!0};if(D)return D;let N=ee(a,S[2]),F=W.filter(B=>B.predicate==="mgx:capableOf"&&N.has(B.subject));if(F.length){let B=F.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${S[2]} can ${S[3]}. I do know: ${B}. If it's true, teach me: "a ${F[0].subject} can ${S[3]}".`,replace:!0,miss:!0}}return rk(S[2],S[3],W)}let _=l.match(Rz);if(_){let W=ee(a,_[1]),I=ee(a,_[2]),N=(await Cu(e)).map(F=>({fact:F,quantified:tk.has(F.predicate)&&I.has(F.subject)?Az(F.object):null})).find(({quantified:F})=>F&&[...ee(a,F.part)].some(B=>W.has(B)));if(N)return{text:`${N.quantified.count} \u2014 ${se(N.fact)}`,replace:!0}}let y=l.match(kz);if(y){let W=ee(a,y[1]),I=ee(a,y[2]),D=await Cu(e),N=G=>D.find(Q=>tk.has(Q.predicate)&&G.has(Q.subject)&&I.has(Q.object)),F=N(W);if(F)return{text:`yes \u2014 ${se(F)}`,replace:!0};let B=[{terms:W,chain:[]}],U=new Set;for(let G=0;G<4;G+=1){let Q=[];for(let{terms:ie,chain:fe}of B){let ae=D.filter(Z=>Mn.has(Z.predicate)&&ie.has(Z.subject)&&!U.has(Z.object));for(let Z of ae){if(U.has(Z.object))continue;U.add(Z.object);let J=[...fe,Z],te=ee(a,Z.object),oe=N(te);if(oe)return{text:`yes \u2014 ${[...J.map(se),se(oe)].join("; ")}`,replace:!0};let Ae=await Dh(e,r,te,I,null,J);if(Ae)return Ae;Q.push({terms:te,chain:J})}}if(!Q.length)break;B=Q}return Dh(e,r,W,I,y[1].trim())}let T=l.match(Cz);if(T){let W=ee(a,T[1]),I=ee(a,T[3]),D=await Dh(e,r,W,I,T[1].trim());if(D)return D}let C=Pu(l),v=C.match(zz);if(v){let W=await rt(e,r),I=!!v[1],D=ee(a,v[2]),N=ee(a,v[3]),F=ok(v[2],v[3],W);if(F&&C!==sk(l)&&(F=nk(F)),F&&I)return{text:`I can't speak for ${v[1].trim()} ${v[2]} \u2014 what I remember is generic, not universal. ${F.text}.`,replace:!0};if(F)return F;if(s){let B=W.filter(G=>G.predicate==="mgx:capableOf"&&D.has(G.subject));if(B.length){let G=B.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${v[2]} can ${v[3]}. I do know: ${G}. If it's true, teach me: "a ${B[0].subject} can ${v[3]}".`,replace:!0,miss:!0}}let U=rk(v[2],v[3],W);if(U)return U;if(!/\s/.test(v[2].trim())&&!W.some(G=>D.has(G.subject)||D.has(G.object))){let G=Jh(Mu(v[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${v[2]}" yet. Teach me "a ${G} can ${v[3]}" (or "a ${G} cannot ${v[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let j=l.match(Oz);if(j){let W=ee(a,j[1]),I=(await rt(e,r)).filter(G=>(G.predicate==="mgx:capableOf"||G.predicate===Vr)&&W.has(G.subject));if(!I.length)return null;let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
210
210
  \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
211
- `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}let M=l.match(Bz);if(M){let W=ee(a,M[1]),I=ee(a,M[2]),D=await rt(e,r),N=En(D.filter(F=>F.predicate==="mgx:capableOf"&&I.has(F.object))).filter(F=>Pc(new Set([F.subject]),I,D).verdict==="yes");if(N.length){let{findIsaChain:F,buildSubClassSuccessors:B,SUBCLASS_PREDICATE:U,TYPE_PREDICATE:G}=await Promise.resolve().then(()=>(Ot(),un)),Q=D.filter(ce=>ce.predicate===U),ie=D.filter(ce=>ce.predicate===G),fe=Q.map(ce=>[ce.subject,ce.object]),ae=ie.map(ce=>[ce.subject,ce.object]),Z=B(fe),J=ce=>(ce.predicate===U?Q:ie).find(le=>le.subject===ce.subject&&le.object===ce.object),te=new Map,oe=N.filter(ce=>W.has(ce.subject)?!0:(te.has(ce.subject)||te.set(ce.subject,F(ce.subject,W,ae,Z,{maxHops:3})),!!te.get(ce.subject))),pe=lt(oe.length?oe:N,o).map(ce=>{let le=oe.length?te.get(ce.subject):null;if(!le||le.length<2)return se(ce);let me=le.map(J);if(!me.every(Boolean))return se(ce);let Je=me.map(It=>ko(It)).join("; ");return`${se(ce)} \u2014 via: ${Je}`}),je=pe.slice(0,_e),Le=pe.slice(_e),ke=Le.length?`
211
+ `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}let M=l.match(Wz);if(M){let W=ee(a,M[1]),I=ee(a,M[2]),D=await rt(e,r),N=En(D.filter(F=>F.predicate==="mgx:capableOf"&&I.has(F.object))).filter(F=>Mc(new Set([F.subject]),I,D).verdict==="yes");if(N.length){let{findIsaChain:F,buildSubClassSuccessors:B,SUBCLASS_PREDICATE:U,TYPE_PREDICATE:G}=await Promise.resolve().then(()=>(Ot(),un)),Q=D.filter(ce=>ce.predicate===U),ie=D.filter(ce=>ce.predicate===G),fe=Q.map(ce=>[ce.subject,ce.object]),ae=ie.map(ce=>[ce.subject,ce.object]),Z=B(fe),J=ce=>(ce.predicate===U?Q:ie).find(le=>le.subject===ce.subject&&le.object===ce.object),te=new Map,oe=N.filter(ce=>W.has(ce.subject)?!0:(te.has(ce.subject)||te.set(ce.subject,F(ce.subject,W,ae,Z,{maxHops:3})),!!te.get(ce.subject))),pe=lt(oe.length?oe:N,o).map(ce=>{let le=oe.length?te.get(ce.subject):null;if(!le||le.length<2)return se(ce);let me=le.map(J);if(!me.every(Boolean))return se(ce);let Je=me.map(It=>ko(It)).join("; ");return`${se(ce)} \u2014 via: ${Je}`}),je=pe.slice(0,_e),Le=pe.slice(_e),ke=Le.length?`
212
212
  \u2026and ${Le.length} more \u2014 say 'more' to see them.`:"";return{text:(oe.length?"":`nothing I remember ties these to "${M[1]}", but:
213
213
  `)+je.join(`
214
- `)+ke,replace:!0,...Le.length?{pending:{items:Le,noun:"facts"}}:{}}}}let z=l.match(zz);if(z&&z[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let W=ee(a,z[1]),I=(await rt(e,r)).filter(D=>D.predicate==="mgxneg:capableOf"&&W.has(D.object));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
214
+ `)+ke,replace:!0,...Le.length?{pending:{items:Le,noun:"facts"}}:{}}}}let z=l.match(Uz);if(z&&z[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let W=ee(a,z[1]),I=(await rt(e,r)).filter(D=>D.predicate==="mgxneg:capableOf"&&W.has(D.object));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
215
215
  \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
216
- `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${z[1].trim()}.`,replace:!0,miss:!0}}let K=l.match(Dz);if(K&&K[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let W=ee(a,K[1]),I=Mf(W,await rt(e,r));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
216
+ `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${z[1].trim()}.`,replace:!0,miss:!0}}let K=l.match(Bz);if(K&&K[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let W=ee(a,K[1]),I=Mf(W,await rt(e,r));if(I.length){let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
217
217
  \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
218
- `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}let Y=l.match(Cz);if(Y&&!Jz.has(Y[1].trim().split(/\s+/)[0]?.toLowerCase())){let W=ee(a,Y[1]),I=(await rt(e,r)).filter(G=>G.predicate==="mgx:hasA"&&W.has(G.object));if(!I.length)return null;let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
218
+ `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}let Y=l.match(Iz);if(Y&&!Zz.has(Y[1].trim().split(/\s+/)[0]?.toLowerCase())){let W=ee(a,Y[1]),I=(await rt(e,r)).filter(G=>G.predicate==="mgx:hasA"&&W.has(G.object));if(!I.length)return null;let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
219
219
  \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
220
- `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}let X=l.match(ik),L=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:X?.[1];if(L){let W=ee(a,L),I=(await rt(e,r)).filter(G=>Pn.has(G.predicate)&&W.has(G.object));if(!I.length)return null;let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
220
+ `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}let X=l.match(ik),L=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:X?.[1];if(L){let W=ee(a,L),I=(await rt(e,r)).filter(G=>Mn.has(G.predicate)&&W.has(G.object));if(!I.length)return null;let N=lt(En(I),o).map(se),F=N.slice(0,_e),B=N.slice(_e),U=B.length?`
221
221
  \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
222
- `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}let H=l.match(vz);if(H){let W=ee(a,H[1]),I=await rt(e,r),D=re=>!String(re.provenance||"").includes("corpus:")&&!String(re.provenance||"").includes("web:"),N=I.filter(re=>Pn.has(re.predicate)&&D(re)),F=new Set,B=W;for(let re=0;re<8&&B.size;re+=1){let Pe=new Set;for(let ze of N)B.has(ze.object)&&!F.has(ze.subject)&&Pe.add(ze.subject);if(!Pe.size)break;for(let ze of Pe)F.add(ze);let it=new Set;for(let ze of Pe)for(let qs of ee(a,ze))it.add(qs);B=it}let U=I.filter(re=>W.has(re.subject)||W.has(re.object)||F.has(re.subject));if(!U.length){let re=a(H[1]).split(/\s+/).filter(Pe=>Pe.length>=4&&!jk.has(Pe));if(re.length){let Pe=ze=>new Set(String(ze||"").split(/\s+/)),it=ze=>{let qs=Pe(ze);return re.some(A=>qs.has(A))};U=I.filter(ze=>it(ze.subject)||it(ze.object))}}U=U.filter(re=>!qj.has(re.predicate)&&!Yj(re)&&!Xj.has(re.predicate));let G=U.length>0&&!U.some(Dh);if(!U.length)return null;let{findConsistencyViolations:Q,TYPE_PREDICATE:ie,SUBCLASS_PREDICATE:fe,DISJOINT_PREDICATE:ae}=await Promise.resolve().then(()=>(Ot(),un)),Z=re=>!re.provenance?.includes("corpus:")&&!re.provenance?.includes("web:"),J=I.filter(re=>re.predicate===ie&&Z(re)).map(re=>[re.subject,re.object]),te=I.filter(re=>re.predicate===fe&&Z(re)).map(re=>[re.subject,re.object]),oe=I.filter(re=>re.predicate===ae&&Z(re)).map(re=>[re.subject,re.object]);if(oe.length){let Pe=Q(J,te,oe,{focus:W,budget:5}).find(it=>W.has(it.subject));if(Pe)return{text:`I can't answer that \u2014 what I've been told about ${Pe.subject} is inconsistent: it's taught to be both ${Pe.classA} and ${Pe.classB}, but ${Pe.viaA} and ${Pe.viaB} are disjoint (${Pe.viaA} owl:disjointWith ${Pe.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let Ae=await Pk(e),pe=await Qz(I,W,Ae);if(pe)return{text:pe,replace:!0};let je=U.find(re=>W.has(re.subject)||W.has(re.object)),Le=je?W.has(je.subject)?je.subject:je.object:H[1].trim(),ke=U.some(re=>F.has(re.subject)&&!W.has(re.subject)&&!W.has(re.object));U=lt(U,o);let Xe=`${U.length} remembered fact${U.length===1?"":"s"} about ${Le}${ke?" (including its known subtypes)":""}:`,{lines:ce,grouped:le}=Qj(U,I,W,{indent:" "});if(le)return{...le,text:`${Xe}
222
+ `)+U,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}let H=l.match(xz);if(H){let W=ee(a,H[1]),I=await rt(e,r),D=re=>!String(re.provenance||"").includes("corpus:")&&!String(re.provenance||"").includes("web:"),N=I.filter(re=>Mn.has(re.predicate)&&D(re)),F=new Set,B=W;for(let re=0;re<8&&B.size;re+=1){let Pe=new Set;for(let ze of N)B.has(ze.object)&&!F.has(ze.subject)&&Pe.add(ze.subject);if(!Pe.size)break;for(let ze of Pe)F.add(ze);let it=new Set;for(let ze of Pe)for(let qs of ee(a,ze))it.add(qs);B=it}let U=I.filter(re=>W.has(re.subject)||W.has(re.object)||F.has(re.subject));if(!U.length){let re=a(H[1]).split(/\s+/).filter(Pe=>Pe.length>=4&&!jk.has(Pe));if(re.length){let Pe=ze=>new Set(String(ze||"").split(/\s+/)),it=ze=>{let qs=Pe(ze);return re.some(A=>qs.has(A))};U=I.filter(ze=>it(ze.subject)||it(ze.object))}}U=U.filter(re=>!qj.has(re.predicate)&&!Yj(re)&&!Xj.has(re.predicate));let G=U.length>0&&!U.some(zh);if(!U.length)return null;let{findConsistencyViolations:Q,TYPE_PREDICATE:ie,SUBCLASS_PREDICATE:fe,DISJOINT_PREDICATE:ae}=await Promise.resolve().then(()=>(Ot(),un)),Z=re=>!re.provenance?.includes("corpus:")&&!re.provenance?.includes("web:"),J=I.filter(re=>re.predicate===ie&&Z(re)).map(re=>[re.subject,re.object]),te=I.filter(re=>re.predicate===fe&&Z(re)).map(re=>[re.subject,re.object]),oe=I.filter(re=>re.predicate===ae&&Z(re)).map(re=>[re.subject,re.object]);if(oe.length){let Pe=Q(J,te,oe,{focus:W,budget:5}).find(it=>W.has(it.subject));if(Pe)return{text:`I can't answer that \u2014 what I've been told about ${Pe.subject} is inconsistent: it's taught to be both ${Pe.classA} and ${Pe.classB}, but ${Pe.viaA} and ${Pe.viaB} are disjoint (${Pe.viaA} owl:disjointWith ${Pe.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let Ae=await Pk(e),pe=await eB(I,W,Ae);if(pe)return{text:pe,replace:!0};let je=U.find(re=>W.has(re.subject)||W.has(re.object)),Le=je?W.has(je.subject)?je.subject:je.object:H[1].trim(),ke=U.some(re=>F.has(re.subject)&&!W.has(re.subject)&&!W.has(re.object));U=lt(U,o);let Xe=`${U.length} remembered fact${U.length===1?"":"s"} about ${Le}${ke?" (including its known subtypes)":""}:`,{lines:ce,grouped:le}=Qj(U,I,W,{indent:" "});if(le)return{...le,text:`${Xe}
223
223
  ${le.text}`,...G?{weakOnly:!0}:{}};let me=ce.slice(0,_e),Je=ce.slice(_e),It=Je.length?`
224
224
  \u2026and ${Je.length} more \u2014 say 'more' to see them.`:"";return{text:`${Xe}
225
225
  ${me.join(`
226
- `)}${It}`,replace:!0,...Je.length?{pending:{items:Je.map(re=>re.trim()),noun:"facts"}}:{},...G?{weakOnly:!0}:{}}}return null}async function hB(e,t){let n=await Ma(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(i=>i?.id===n.id))?.class;if(!s)return null;let{defaultCodeLaneVocab:o}=await Promise.resolve().then(()=>(hh(),fj)),{classLabels:r}=await o();return r[s]?r[s][0]:null}function Iu(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<bB;r+=1){let i=null;for(let a of e.relations||[])if(gB.test(`${a?.prop||""} ${a?.predicate||""}`)&&(i=(a.edges||[]).find(c=>c?.subject===o)||null,i))break;if(!i||s.has(i.object))break;s.add(i.object),n.push({id:i.object,label:i.objectLabel||i.object}),o=i.object}return n}async function Nk(e,t,n,s,o=null,r=null,i={},a=null){return Ok(Ik(await wB(e,t,n,s,o,r,i,a),n,t),ru.FACT_READBACK)}async function wB(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let c;try{({normFactTerm:c}=await Promise.resolve().then(()=>(We(),Ws)))}catch{return null}let l=String(t).trim();if(o){let I=l.match(jo);if(I){let D=await Ma(o,I[1]);if(D){let N=ee(c,gn(I[2])),F=Iu(o,D.id).find(U=>[...ee(c,U.label)].some(G=>N.has(G)));if(F)return{text:`yes \u2014 the code graph says ${D.label} inherits ${F.label}.`,replace:!0};let B=await Ma(o,gn(I[2]));if(B&&Iu(o,B.id).some(U=>U.id===D.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${B.label} inherits ${D.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=l.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await rt(e,a);if(!d.length){if(!jo.test(u)&&!Wh.test(u)){let D=u.match(lk);if(D){let N=D[1].trim(),F=Vs.test(N)?r||null:N;if(F&&!/^there\b/i.test(F)&&!n?.parsed&&!dk.test(N)&&!uk.test(N)&&!Hj.test(D[2].trim()))return fk(F,D[2].trim().toLowerCase())}}let I=u.match(jo)||Gh(l);if(!(I&&!/^there\b/i.test(I[1].trim())||ek.test(l)))return null}let p=d.filter(I=>Pn.has(I.predicate)),f=(I,D)=>D.trust-I.trust,m=I=>{let D=I.map(se),N=D.slice(0,_e),F=D.slice(_e),B=F.length?`
226
+ `)}${It}`,replace:!0,...Je.length?{pending:{items:Je.map(re=>re.trim()),noun:"facts"}}:{},...G?{weakOnly:!0}:{}}}return null}async function bB(e,t){let n=await Fa(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(i=>i?.id===n.id))?.class;if(!s)return null;let{defaultCodeLaneVocab:o}=await Promise.resolve().then(()=>(gh(),fj)),{classLabels:r}=await o();return r[s]?r[s][0]:null}function Iu(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<yB;r+=1){let i=null;for(let a of e.relations||[])if(wB.test(`${a?.prop||""} ${a?.predicate||""}`)&&(i=(a.edges||[]).find(c=>c?.subject===o)||null,i))break;if(!i||s.has(i.object))break;s.add(i.object),n.push({id:i.object,label:i.objectLabel||i.object}),o=i.object}return n}async function Nk(e,t,n,s,o=null,r=null,i={},a=null){return Ok(Ik(await $B(e,t,n,s,o,r,i,a),n,t),ru.FACT_READBACK)}async function $B(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let c;try{({normFactTerm:c}=await Promise.resolve().then(()=>(We(),Ws)))}catch{return null}let l=String(t).trim();if(o){let I=l.match(jo);if(I){let D=await Fa(o,I[1]);if(D){let N=ee(c,gn(I[2])),F=Iu(o,D.id).find(U=>[...ee(c,U.label)].some(G=>N.has(G)));if(F)return{text:`yes \u2014 the code graph says ${D.label} inherits ${F.label}.`,replace:!0};let B=await Fa(o,gn(I[2]));if(B&&Iu(o,B.id).some(U=>U.id===D.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${B.label} inherits ${D.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=l.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await rt(e,a);if(!d.length){if(!jo.test(u)&&!Gh.test(u)){let D=u.match(lk);if(D){let N=D[1].trim(),F=Vs.test(N)?r||null:N;if(F&&!/^there\b/i.test(F)&&!n?.parsed&&!dk.test(N)&&!uk.test(N)&&!Hj.test(D[2].trim()))return fk(F,D[2].trim().toLowerCase())}}let I=u.match(jo)||Vh(l);if(!(I&&!/^there\b/i.test(I[1].trim())||ek.test(l)))return null}let p=d.filter(I=>Mn.has(I.predicate)),f=(I,D)=>D.trust-I.trust,m=I=>{let D=I.map(se),N=D.slice(0,_e),F=D.slice(_e),B=F.length?`
227
227
  \u2026and ${F.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
228
- `)+B,replace:!0,...F.length?{pending:{items:F,noun:"facts"}}:{}}};if(mB.test(l)){let I=lt(p.length?p:d,i);return I.length?m(I):null}let h=u.match(Wh);if(h){let I=h[1].trim(),D=Vs.test(I)?r||null:I,N=h[2].trim().toLowerCase(),F=h[3].trim();if(D&&!Vh.has(N)){let B=Oh(d),{findIsaChain:U}=await Promise.resolve().then(()=>(Ot(),un)),G=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),je=[];for(let Le of d){let ke=Mh(Le.predicate);if(!ke)continue;if(ke===pe){je.push({fact:Le,aliasFacts:[]});continue}let Xe=Ih(U,ke,new Set([pe]),B,{maxHops:2});if(!Xe)continue;let ce=Xe.map(le=>d.find(me=>me.predicate===br&&me.subject===le.subject&&me.object===le.object));ce.every(Boolean)&&je.push({fact:Le,aliasFacts:ce})}return je},{loadMemory:Q,findRuleByName:ie,resolveRelationChase:fe}=await Promise.resolve().then(()=>(We(),Ws)),{findActionPath:ae}=await Promise.resolve().then(()=>(Rs(),ec)),Z=await Q(e),te=await fe(Z,N,D,F,{relationFactsFor:G,renderFactLine:se,factPhrase:Ks,factTermVariants:ee,byTrust:f,rows:d,HAS_PROPERTY_PREDICATE:Nu,findActionPath:ae});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:G(N).length>0||!!ie(Z,N)?{text:`I know the '${N}' relation, but I can't confirm ${D} is the ${N} of ${F} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${N}' yet.`,replace:!0}}}let b=Fu(u).match(kk)||Rk(u,I=>{let D=ee(c,I);return d.some(N=>D.has(N.subject)||D.has(N.object))});if(b){let I=b[1].trim().toLowerCase(),D=b[2].trim(),N=Vs.test(D)?r||null:D;if(N&&!Vh.has(I)){let F=Oh(d),{findIsaChain:B}=await Promise.resolve().then(()=>(Ot(),un)),U=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),je=[];for(let Le of d){let ke=Mh(Le.predicate);if(!ke)continue;if(ke===pe){je.push({fact:Le,aliasFacts:[]});continue}let Xe=Ih(B,ke,new Set([pe]),F,{maxHops:2});if(!Xe)continue;let ce=Xe.map(le=>d.find(me=>me.predicate===br&&me.subject===le.subject&&me.object===le.object));ce.every(Boolean)&&je.push({fact:Le,aliasFacts:ce})}return je},{loadMemory:G,findRuleByName:Q,resolveRelationChaseReverse:ie}=await Promise.resolve().then(()=>(We(),Ws)),fe=await G(e),{findReachableSet:ae}=await Promise.resolve().then(()=>(Rs(),ec)),J=await ie(fe,I,N,{relationFactsFor:U,renderFactLine:se,factPhrase:Ks,factTermVariants:ee,byTrust:f,rows:d,HAS_PROPERTY_PREDICATE:Nu,findReachableSet:ae});return J.length?{text:J.map(pe=>`${pe.subject} \u2014 ${pe.citation.join("; ")}`).join(`
229
- `),replace:!0}:U(I).length>0||!!Q(fe,I)?{text:/^what\b/i.test(Fu(u))?`I don't know what the ${I} of ${N} is from what you've told me.`:`I don't know anyone who is the ${I} of ${N} 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(yB);if(I){let D=ee(c,I[1]),N=lt(d.filter(F=>D.has(F.subject)||D.has(F.object)),i);if(N.length){let F=N.map(se),B=F.slice(0,_e),U=F.slice(_e),G=U.length?`
228
+ `)+B,replace:!0,...F.length?{pending:{items:F,noun:"facts"}}:{}}};if(gB.test(l)){let I=lt(p.length?p:d,i);return I.length?m(I):null}let h=u.match(Gh);if(h){let I=h[1].trim(),D=Vs.test(I)?r||null:I,N=h[2].trim().toLowerCase(),F=h[3].trim();if(D&&!Kh.has(N)){let B=Ih(d),{findIsaChain:U}=await Promise.resolve().then(()=>(Ot(),un)),G=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),je=[];for(let Le of d){let ke=Fh(Le.predicate);if(!ke)continue;if(ke===pe){je.push({fact:Le,aliasFacts:[]});continue}let Xe=Nh(U,ke,new Set([pe]),B,{maxHops:2});if(!Xe)continue;let ce=Xe.map(le=>d.find(me=>me.predicate===wr&&me.subject===le.subject&&me.object===le.object));ce.every(Boolean)&&je.push({fact:Le,aliasFacts:ce})}return je},{loadMemory:Q,findRuleByName:ie,resolveRelationChase:fe}=await Promise.resolve().then(()=>(We(),Ws)),{findActionPath:ae}=await Promise.resolve().then(()=>(Rs(),tc)),Z=await Q(e),te=await fe(Z,N,D,F,{relationFactsFor:G,renderFactLine:se,factPhrase:Ks,factTermVariants:ee,byTrust:f,rows:d,HAS_PROPERTY_PREDICATE:Nu,findActionPath:ae});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:G(N).length>0||!!ie(Z,N)?{text:`I know the '${N}' relation, but I can't confirm ${D} is the ${N} of ${F} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${N}' yet.`,replace:!0}}}let b=Fu(u).match(kk)||Rk(u,I=>{let D=ee(c,I);return d.some(N=>D.has(N.subject)||D.has(N.object))});if(b){let I=b[1].trim().toLowerCase(),D=b[2].trim(),N=Vs.test(D)?r||null:D;if(N&&!Kh.has(I)){let F=Ih(d),{findIsaChain:B}=await Promise.resolve().then(()=>(Ot(),un)),U=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),je=[];for(let Le of d){let ke=Fh(Le.predicate);if(!ke)continue;if(ke===pe){je.push({fact:Le,aliasFacts:[]});continue}let Xe=Nh(B,ke,new Set([pe]),F,{maxHops:2});if(!Xe)continue;let ce=Xe.map(le=>d.find(me=>me.predicate===wr&&me.subject===le.subject&&me.object===le.object));ce.every(Boolean)&&je.push({fact:Le,aliasFacts:ce})}return je},{loadMemory:G,findRuleByName:Q,resolveRelationChaseReverse:ie}=await Promise.resolve().then(()=>(We(),Ws)),fe=await G(e),{findReachableSet:ae}=await Promise.resolve().then(()=>(Rs(),tc)),J=await ie(fe,I,N,{relationFactsFor:U,renderFactLine:se,factPhrase:Ks,factTermVariants:ee,byTrust:f,rows:d,HAS_PROPERTY_PREDICATE:Nu,findReachableSet:ae});return J.length?{text:J.map(pe=>`${pe.subject} \u2014 ${pe.citation.join("; ")}`).join(`
229
+ `),replace:!0}:U(I).length>0||!!Q(fe,I)?{text:/^what\b/i.test(Fu(u))?`I don't know what the ${I} of ${N} is from what you've told me.`:`I don't know anyone who is the ${I} of ${N} 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(vB);if(I){let D=ee(c,I[1]),N=lt(d.filter(F=>D.has(F.subject)||D.has(F.object)),i);if(N.length){let F=N.map(se),B=F.slice(0,_e),U=F.slice(_e),G=U.length?`
230
230
  \u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
231
- `)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}}let g=u.match(bz);if(g){let I=Xh(g[1].trim().toLowerCase()),D=g[2].trim(),N=Vs.test(D)?r||null:D;if(N){let{loadMemory:F,findRuleByName:B,RULE_KIND_PROP:U,RULE_KIND_RECURSIVE:G}=await Promise.resolve().then(()=>(We(),Ws)),Q=await F(e),ie=B(Q,I),fe=ie?.attributes?.find(ae=>ae.prop===U)?.value;if(ie&&fe===G){let ae=ie.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,Z=ie.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,J=c(N);if(ae&&Z&&J){let te=Oh(d),{findIsaChain:oe}=await Promise.resolve().then(()=>(Ot(),un)),Ae=Xe=>{let ce=String(Xe||"").trim().toLowerCase(),le=[];for(let me of d){let Je=Mh(me.predicate);if(!Je)continue;if(Je===ce){le.push({fact:me,aliasFacts:[]});continue}let It=Ih(oe,Je,new Set([ce]),te,{maxHops:2});if(!It)continue;let re=It.map(Pe=>d.find(it=>it.predicate===br&&it.subject===Pe.subject&&it.object===Pe.object));re.every(Boolean)&&le.push({fact:me,aliasFacts:re})}return le},{findReachableSet:pe}=await Promise.resolve().then(()=>(Rs(),ec)),ke=pe({entity:J,hop:0},Xe=>{let ce=Xe.hop===0?ae:Z;return Ae(ce).filter(le=>le.fact.subject===Xe.entity).map(le=>({action:le,nextState:{entity:le.fact.object,hop:Xe.hop+1}}))},{maxDepth:20,stateKey:Xe=>Xe.entity});if(ke.length)return{text:ke.map(({node:ce,path:le})=>{let me=new Set,Je=[];for(let It of le.actions){Je.push(se(It.fact));for(let re of It.aliasFacts){let Pe=re.id||`${re.subject}|${re.predicate}|${re.object}`;me.has(Pe)||(me.add(Pe),Je.push(ko(re)))}}return`${ce.entity} \u2014 ${Je.join("; ")}`}).join(`
232
- `),replace:!0}}}return null}}let $=l.match(ek),w=l.match(jo)||Gh(l)||$&&`is ${$[1].trim()} a ${$[2].trim()}`.match(jo);if(w){let I=ee(c,gn(w[2])),D=r&&Vs.test(w[1].trim())?r:w[1],N=new Set(ee(c,D));if([...N].some(q=>I.has(q))){let q=gn(w[2]).trim();return{text:`yes \u2014 ${wr(q)} ${q} is ${wr(q)} ${q}, trivially: every kind is a kind of itself.`,replace:!0}}let F=await hB(o,D);if(F)for(let q of ee(c,F))N.add(q);let{findIsaChain:B,buildSubClassSuccessors:U,deriveDisjointViolations:G,SUBCLASS_PREDICATE:Q,TYPE_PREDICATE:ie,DISJOINT_PREDICATE:fe}=await Promise.resolve().then(()=>(Ot(),un)),ae=gr,Z=p.filter(q=>q.predicate===Q&&ae(q)),J=p.filter(q=>q.predicate===ie&&ae(q)),te=Z.map(q=>[q.subject,q.object]),oe=J.map(q=>[q.subject,q.object]),Ae=p.filter(q=>q.predicate===Q),pe=p.filter(q=>q.predicate===ie),je=pe.map(q=>[q.subject,q.object]),Le=Ae.map(q=>[q.subject,q.object]),ke=U(te),Xe=U(Le),ce=d.filter(q=>q.predicate===fe&&ae(q)),le=ce.map(q=>[q.subject,q.object]),me=ce.length?G(je.concat(Le),Le,le,{budget:20,focus:new Set([...N,...I])}):[],Je=q=>{let xe=me.find(Ge=>Ge.subject===q&&I.has(Ge.object));if(!xe)return null;let we=p.filter(Ge=>I.has(Ge.object)&&(Ge.subject===xe.viaClass||Ge.subject===xe.subject)).sort(f)[0],Re=ce.find(Ge=>Ge.subject===xe.viaClass&&Ge.object===xe.object||Ge.subject===xe.object&&Ge.object===xe.viaClass);return!we||!Re?null:uz(we,Re)},It=p.filter(q=>N.has(q.subject)&&I.has(q.object)).sort(f)[0],re=d.filter(q=>q.predicate===Nc&&N.has(q.subject)&&I.has(q.object)).sort(f)[0],Pe=ce.find(q=>N.has(q.subject)&&I.has(q.object)||N.has(q.object)&&I.has(q.subject));if(It&&!re){let q=Je(It.subject);if(q)return q}let it=Sk(It,re||Pe);if(it)return it;if(ce.length){let q=Re=>{let Ge=new Set(Re),Nt=new Set(Re);for(let Me=0;Me<8&&Nt.size;Me+=1){let ye=new Set;for(let[He,Ro]of Le)Nt.has(He)&&!Ge.has(Ro)&&ye.add(Ro);if(!ye.size)break;for(let He of ye)Ge.add(He);Nt=ye}return Ge},xe=q(I),we=me.find(Re=>N.has(Re.subject)&&xe.has(Re.object)&&!q([Re.viaClass]).has(Re.object)&&!q([Re.object]).has(Re.viaClass));if(we){let Re=p.filter(ye=>N.has(ye.subject)&&ye.object===we.viaClass).sort(f)[0],Ge=ce.find(ye=>ye.subject===we.viaClass&&ye.object===we.object||ye.subject===we.object&&ye.object===we.viaClass),Nt=!I.has(we.object),Me=Nt?p.filter(ye=>I.has(ye.subject)&&ye.object===we.object).sort(f)[0]:null;if(Re&&Ge&&(!Nt||Me)){let ye=gn(w[2]).trim();return{text:`no \u2014 ${[Re,...Me?[Me]:[]].map(se).join("; ")}; and ${ko(Ge)} \u2014 so ${D} can never be ${wr(ye)} ${ye}.`,replace:!0}}}}let ze=await Ma(o,D);if(ze){let q=new Map;for(let we of Iu(o,ze.id))for(let Re of ee(c,we.label))!N.has(Re)&&!q.has(Re)&&q.set(Re,we.label);let xe=p.filter(we=>q.has(we.subject)&&I.has(we.object)).sort(f)[0];if(xe)return{text:`yes \u2014 the code graph says ${ze.label} inherits ${q.get(xe.subject)}, and ${se(xe)}`,replace:!0}}let qs=q=>(q.predicate===Q?Z:J).find(xe=>xe.subject===q.subject&&xe.object===q.object);for(let q of N){let xe=B(q,I,oe,ke,{maxHops:2});if(!xe)continue;let we=Je(q);if(we)return we;let Re=xe.map(qs);if(Re.every(Boolean))return{text:`yes \u2014 ${Au(Re)}`,replace:!0}}let A=q=>(q.predicate===Q?Ae:pe).find(xe=>xe.subject===q.subject&&xe.object===q.object);for(let q of N){let xe=B(q,I,je,Xe,{maxHops:2});if(!xe)continue;let we=Je(q);if(we)return we;let Re=xe.map(A);if(Re.every(Boolean)&&Re.some(ae))return{text:`yes \u2014 ${Au(Re)}`,replace:!0}}let ge=D.match(/^(.*\S)\s+not$/i),Ie=ge&&[ge[0],r&&Vs.test(ge[1].trim())?r:ge[1]];if(Ie){let q=ee(c,Ie[1]),xe=I,we=p.filter(Me=>q.has(Me.subject)&&xe.has(Me.object)).sort(f)[0];if(we)return{text:`no \u2014 ${se(we)}`,replace:!0};let Re=ce.find(Me=>q.has(Me.subject)&&xe.has(Me.object)||q.has(Me.object)&&xe.has(Me.subject));if(Re)return{text:`yes \u2014 ${se(Re)}`,replace:!0};let Ge=Ie[1].trim(),Nt=gn(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ge} and ${Nt}. If no ${Ge} is a ${Nt}, teach me: "no ${Ge} is a ${Nt}".`,replace:!0,miss:!0}}if(ce.length){let q=G(oe.concat(te),te,le,{budget:10});for(let xe of N){let we=q.find(Me=>Me.subject===xe&&I.has(Me.object));if(!we)continue;let Re=J.concat(Z).find(Me=>Me.subject===we.subject&&Me.object===we.viaType),Ge=ce.find(Me=>Me.subject===we.viaClass&&Me.object===we.object||Me.subject===we.object&&Me.object===we.viaClass),Nt=[Re,Ge].filter(Boolean).map(se);return{text:`no \u2014 ${Nt.length?Nt.join("; "):`${we.viaClass} and ${we.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:Es,ON_PROPERTY_PREDICATE:xs,SOME_VALUES_FROM_PREDICATE:Fa,deriveSomeValuesFromSubsumption:eR,ENTAILED_SCM_SVF_PROVENANCE:tR,SCM_SVF_RULE_CONFIDENCE:nR,entailedTrustFrom:eg}=await Promise.resolve().then(()=>(Ot(),un)),tg=d.filter(q=>q.predicate===xs&&ae(q)),ng=d.filter(q=>q.predicate===Fa&&ae(q));if(tg.length&&ng.length){let q=new Map(ng.map(ye=>[ye.subject,ye.object])),xe=tg.map(ye=>({restriction:ye.subject,property:ye.object,target:q.get(ye.subject)})).filter(ye=>ye.target),we=new Set([Q,ie,fe,xs,Fa,"owl:intersectionOf"]),Re=d.filter(ye=>ae(ye)&&!we.has(ye.predicate)),Ge=Re.map(ye=>[ye.subject,ye.predicate,ye.object]),Nt=Es(Ge,oe,te,xe,{budget:10});for(let ye of N){let He=Nt.find(Mn=>Mn.subject===ye&&I.has(Mn.object));if(!He)continue;let Ro=Re.find(Mn=>Mn.subject===He.subject&&Mn.predicate===He.viaProperty&&Mn.object===He.viaValue),_o=J.find(Mn=>Mn.subject===He.viaValue&&Mn.object===He.viaType),hi=[Ro,_o].filter(Boolean).map(se);return{text:`yes \u2014 ${hi.length?hi.join("; "):`${He.subject} ${He.viaProperty} ${He.viaValue}, and ${He.viaValue} is a ${He.viaType}.`}`,replace:!0}}let Me=xe.length>1?eR(xe,te,{budget:10}):[];if(Me.length){let ye=U(te.concat(Me.map(Ce=>[Ce.subject,Ce.object]))),He=new Map(xe.map(Ce=>[Ce.restriction,Ce])),Ro=new Map;for(let Ce of d)Ro.set(`${Ce.subject}\0${Ce.predicate}\0${Ce.object}`,Ce.trust);let _o=(Ce,Hn,on)=>Ro.get(`${Ce}\0${Hn}\0${on}`),hi=new Map;for(let Ce of Me){let Hn=He.get(Ce.subject),on=He.get(Ce.object),mn=[Hn&&_o(Ce.subject,xs,Hn.property),_o(Ce.subject,Fa,Ce.viaY1),on&&_o(Ce.object,xs,on.property),_o(Ce.object,Fa,Ce.viaY2),_o(Ce.viaY1,Q,Ce.viaY2)].filter(rR=>typeof rR=="number"),Da=eg(mn,nR);Da!==null&&hi.set(`${Ce.subject}\0${Ce.object}`,Da)}let Mn=Ce=>{if(Ce.predicate!==Q)return J.find(mn=>mn.subject===Ce.subject&&mn.object===Ce.object);let Hn=Z.find(mn=>mn.subject===Ce.subject&&mn.object===Ce.object);if(Hn)return Hn;let on=Me.find(mn=>mn.subject===Ce.subject&&mn.object===Ce.object);return on?{subject:on.subject,predicate:Q,object:on.object,provenance:tR,trust:hi.get(`${on.subject}\0${on.object}`)}:void 0};for(let Ce of N){let Hn=B(Ce,I,oe,ye,{maxHops:3});if(!Hn)continue;let on=Hn.map(Mn);if(on.every(Boolean)){let mn=eg(on.map(Da=>Da.trust),1);return{text:`yes \u2014 ${Au(on)}`,replace:!0,...mn!==null?{trust:mn}:{}}}}}}let sR=ee(c,D),Wu=p.filter(q=>sR.has(q.subject)).sort(f),xn=D.trim(),Ys=gn(w[2]).trim(),oR=[...N].some(q=>B(q,I,oe,ke,{maxHops:wz})),Gu=await nB(e,a,d,xn,N,I,Ys);if(Gu?.text)return Gu;let Vu=!!Gu?.budgetExhausted;if(Wu.length){let q=Wu.slice(0,3).map(se).join("; "),{ON_PROPERTY_PREDICATE:xe,SOME_VALUES_FROM_PREDICATE:we}=await Promise.resolve().then(()=>(Ot(),un)),Re=new Set,Ge=new Set;for(let He of d)He.predicate===xe?Re.add(He.subject):He.predicate===we&&Ge.add(He.subject);let Nt=new Set([...Re].filter(He=>Ge.has(He))),ye=Wu.some(He=>Nt.has(He.object))?`The facts to settle it are here, but reaching it means composing a restriction /syllogise doesn't follow. Run "/classify ${xn}", then ask me again.`:oR?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${xn}", then ask me again.`:`If it's true, teach me: "${xn} is a kind of ${Ys}". If it isn't, teach me: "no ${xn} is a ${Ys}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${xn} is a ${Ys}. I do know: ${q}. ${ye}`,replace:!0,miss:!0,...Vu?{budgetExhausted:!0}:{}}}let sg=p.filter(q=>N.has(q.object)&&I.has(q.subject)).sort(f)[0];return sg?{text:`I can't confirm that \u2014 what I know runs the other way: ${se(sg)}. A kind doesn't reverse. If it's true, teach me: "every ${xn} is a ${Ys}". If it isn't, teach me: "no ${xn} is a ${Ys}".`,replace:!0,miss:!0,...Vu?{budgetExhausted:!0}:{}}:!ze&&!F&&!FD(xn)&&!d.some(q=>N.has(q.subject)||N.has(q.object))?{text:`I can't confirm that \u2014 I don't know "${xn}" at all yet. If it's true, teach me: "${xn} is a kind of ${Ys}". If it isn't, teach me: "no ${xn} is a ${Ys}".`,replace:!0,miss:!0,...Vu?{budgetExhausted:!0}:{}}:null}let x=l.match(iB);if(x){let[,I,D,N]=x,{SUBCLASS_PREDICATE:F,ON_PROPERTY_PREDICATE:B,buildCardinalityRestrictions:U,proveCardinalityAtLeast:G,CARDINALITY_RULE_CONFIDENCE:Q,entailedTrustFrom:ie}=await Promise.resolve().then(()=>(Ot(),un)),fe=gr,ae=p.filter(te=>te.predicate===F&&fe(te)).map(te=>[te.subject,te.object]),Z=d.filter(te=>(te.predicate===B||ck.has(te.predicate))&&fe(te)),J=U(Z);if(J.length){let te=ee(c,I.trim()),oe=ee(c,N.trim()),Ae=Number(D),pe=Zj(te,oe,(je,Le)=>G(ae,J,je,Le,Ae,{}));if(pe){let je=d.find(me=>me.predicate===F&&me.subject===pe.viaClass&&me.object===pe.viaRestriction),Le=je?.provenance?` (source: ${Uh(je.provenance)})`:"",ke=pe.kind==="exactly"?"exactly":"at least",Xe=(me,Je)=>`${me}${Je===1?"":"s"}`,ce=[je?.trust,...Z.filter(me=>me.subject===pe.viaRestriction).map(me=>me.trust),...pe.viaClass!==pe.subject?[p.find(me=>me.predicate===F&&me.subject===pe.subject&&me.object===pe.viaClass)?.trust]:[]].filter(me=>typeof me=="number"),le=ie(ce,Q);return{text:`yes \u2014 every ${pe.viaClass} has ${ke} ${pe.n} ${Xe(pe.object,pe.n)}${Le}, so at least ${Ae} follows.`,replace:!0,...le!==null?{trust:le}:{}}}}}let R=l.match(aB);if(R){let[,I,D]=R,{SUBCLASS_PREDICATE:N,ON_PROPERTY_PREDICATE:F,buildCardinalityRestrictions:B,proveMaxCardinalityZeroDenial:U,CAX_MAXC0_RULE_CONFIDENCE:G,entailedTrustFrom:Q}=await Promise.resolve().then(()=>(Ot(),un)),ie=gr,fe=p.filter(J=>J.predicate===N&&ie(J)).map(J=>[J.subject,J.object]),ae=d.filter(J=>(J.predicate===F||ck.has(J.predicate))&&ie(J)),Z=B(ae);if(Z.length){let J=ee(c,I.trim()),te=ee(c,D.trim()),oe=Zj(J,te,(Ae,pe)=>U(fe,Z,Ae,pe,{}));if(oe){let Ae=d.find(ke=>ke.predicate===N&&ke.subject===oe.viaClass&&ke.object===oe.viaRestriction),pe=Ae?.provenance?` (source: ${Uh(Ae.provenance)})`:"",je=[Ae?.trust,...ae.filter(ke=>ke.subject===oe.viaRestriction).map(ke=>ke.trust),...oe.viaClass!==oe.subject?[p.find(ke=>ke.predicate===N&&ke.subject===oe.subject&&ke.object===oe.viaClass)?.trust]:[]].filter(ke=>typeof ke=="number"),Le=Q(je,G);return{text:`no \u2014 every ${oe.viaClass} has at most 0 ${oe.object}${pe}.`,replace:!0,...Le!==null?{trust:Le}:{}}}}}let E=l.match(cB);if(E){let I=ee(c,E[1]),D=d.filter(N=>N.predicate===Ch&&I.has(N.subject)).sort(f);return D.length?m(D):null}let k=u.match(lB);if(k){let[,I,D]=k,N=ee(c,I.trim()),F=ee(c,D.replace(/^an?\s+/i,"").trim()),B=d.filter(U=>U.predicate===Ch&&F.has(U.subject)&&N.has(U.object)).sort(f)[0];return B?{text:`yes \u2014 ${se(B)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${D.trim()}.`,replace:!0}}let O=u.match(uB);if(O){let[,I,D]=O,N=ee(c,I.replace(/^an?\s+/i,"").trim()),F=ee(c,D.trim()),B=d.filter(U=>U.predicate===Ch&&N.has(U.subject)&&F.has(U.object)).sort(f)[0];return B?{text:`yes \u2014 ${se(B)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${D.trim()}.`,replace:!0}}let S=u.match(dB);if(S){let[,I,D]=S,N=ee(c,I.trim()),F=ee(c,`${D.trim()} method`),B=d.filter(U=>U.predicate===si&&N.has(U.subject)&&F.has(U.object)).sort(f)[0];return B?{text:`yes \u2014 ${se(B)}`,replace:!0}:null}let _=u.match(fB);if(_){let I=ee(c,_[1].trim()),D=d.filter(N=>N.predicate===si&&I.has(N.subject)&&/ method$/.test(N.object)).sort(f);return D.length?m(D):null}let y=u.match(lk);if(y){let I=y[1].trim(),D=dk.test(I)||uk.test(I)?null:Vs.test(I)?r||null:I,N=y[2].trim().toLowerCase();if(D){let F=ee(c,D),B=new Map,U=null;if(o){let J=await Ma(o,D);if(U=J,J)for(let te of Iu(o,J.id))for(let oe of ee(c,te.label))!F.has(oe)&&!B.has(oe)&&B.set(oe,te.label),F.add(oe)}let G=J=>J.predicate===Nu&&c(J.object)===N||J.predicate===`tmct:${N}`&&J.object==="true",Q=c(D).split(/\s+/).filter(J=>J.length>=4&&!jk.has(J)),ie=J=>Q.some(te=>new Set(String(J.subject||"").split(/\s+/)).has(te)),fe=J=>F.has(J.subject)||Q.length&&ie(J),ae=d.filter(J=>fe(J)&&G(J)).sort(f)[0];if(ae){let J=B.get(ae.subject);return{text:J?`yes \u2014 the code graph says ${U.label} inherits ${J}, and ${se(ae)}`:`yes \u2014 ${se(ae)}`,replace:!0}}let Z=Tk(d,F,N,c);if(Z)return{text:`yes \u2014 ${Z.map(se).join("; ")}`,replace:!0};{let{findIsaChain:J,SUBCLASS_PREDICATE:te,TYPE_PREDICATE:oe}=await Promise.resolve().then(()=>(Ot(),un)),Ae=gr,pe=d.filter(le=>le.predicate===te&&Ae(le)),je=d.filter(le=>le.predicate===oe&&Ae(le)),Le=pe.map(le=>[le.subject,le.object]),ke=je.map(le=>[le.subject,le.object]),Xe=le=>(le.predicate===te?pe:je).find(me=>me.subject===le.subject&&me.object===le.object),ce=ee(c,N);for(let le of F){let me=J(le,ce,ke,Le,{maxHops:2});if(!me)continue;let Je=me.map(Xe);if(Je.every(Boolean))return{text:`yes \u2014 ${Au(Je)}`,replace:!0}}}if(d.some(fe)&&!n?.parsed)return/^there\b/i.test(D)||pB.test(N)?null:{text:`I don't have a fact saying ${fz(D)} is ${N}.`,replace:!0};if(!n?.parsed&&!Hj.test(N))return fk(D,N)}}let T=Pu(l).match(JD);if(T&&!Lh.test(l)){let[,I,D,N]=T,F=D.toLowerCase();if(!Nh.test(F)&&!Ph.test(F)){let B=I.trim(),U=ez(await Lu(F),N),G=U.object.replace(/^an?\s+/i,"").trim();if(B&&G){let Q=U.predicate,ie=ee(c,B),fe=ee(c,G),ae=[Q,Kr(Q)],Z=d.filter(te=>ae.includes(te.predicate)&&ie.has(te.subject)&&fe.has(te.object)).sort(f)[0];if(Z)return{text:`${Hy(Z.predicate)?"no":"yes"} \u2014 ${se(Z)}`,replace:!0,generalVerbQuery:!0};let J=d.filter(te=>ae.includes(te.predicate)&&ie.has(te.subject));if(J.length){let te=J.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Ks({subject:B,predicate:Q,object:G})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let C=l.match(QD);if(C&&!Lh.test(l)){let[,I,D]=C,[N,F]=D.toLowerCase().split(/\s+/);if(!Nh.test(N)&&!Ph.test(N)){let B=I.trim();if(B){let U=await Lu(N);F&&/^mgx:[a-z]+$/.test(U)&&(U=`${U}-${F}`);let G=ee(c,B),Q=[U,Kr(U)],ie=lt(d.filter(fe=>Q.includes(fe.predicate)&&G.has(fe.subject)),i);if(ie.length)return{...m(ie),generalVerbQuery:!0}}}}let v=l.match(/^(?:what|who)\s+([a-z]+)\s+(on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside)\s+(.+?)[?.!\s]*$/i);if(v&&!Lh.test(l)){let[,I,D,N]=v,F=I.toLowerCase();if(!Nh.test(F)&&!Ph.test(F)&&!XD.test(F)){let B=await Lu(F);/^mgx:[a-z]+$/.test(B)&&(B=`${B}-${D.toLowerCase()}`);let U=ee(c,N.replace(/^(?:an?|the)\s+/i,"").trim()),G=lt(d.filter(Q=>Q.predicate===B&&U.has(Q.object)),i);if(G.length)return{...m(G),generalVerbQuery:!0}}}let j=l.match(oB);if(j){let I=ee(c,j[1]),D=lt(d.filter(Q=>I.has(Q.subject)||I.has(Q.object)),i);if(!D.length)return null;let N=I.has(D[0].subject)?D[0].subject:D[0].object,F=D.map(Q=>` ${se(Q)}`),B=F.slice(0,_e),U=F.slice(_e),G=U.length?`
231
+ `)+G,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}}let g=u.match(yz);if(g){let I=Jh(g[1].trim().toLowerCase()),D=g[2].trim(),N=Vs.test(D)?r||null:D;if(N){let{loadMemory:F,findRuleByName:B,RULE_KIND_PROP:U,RULE_KIND_RECURSIVE:G}=await Promise.resolve().then(()=>(We(),Ws)),Q=await F(e),ie=B(Q,I),fe=ie?.attributes?.find(ae=>ae.prop===U)?.value;if(ie&&fe===G){let ae=ie.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,Z=ie.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,J=c(N);if(ae&&Z&&J){let te=Ih(d),{findIsaChain:oe}=await Promise.resolve().then(()=>(Ot(),un)),Ae=Xe=>{let ce=String(Xe||"").trim().toLowerCase(),le=[];for(let me of d){let Je=Fh(me.predicate);if(!Je)continue;if(Je===ce){le.push({fact:me,aliasFacts:[]});continue}let It=Nh(oe,Je,new Set([ce]),te,{maxHops:2});if(!It)continue;let re=It.map(Pe=>d.find(it=>it.predicate===wr&&it.subject===Pe.subject&&it.object===Pe.object));re.every(Boolean)&&le.push({fact:me,aliasFacts:re})}return le},{findReachableSet:pe}=await Promise.resolve().then(()=>(Rs(),tc)),ke=pe({entity:J,hop:0},Xe=>{let ce=Xe.hop===0?ae:Z;return Ae(ce).filter(le=>le.fact.subject===Xe.entity).map(le=>({action:le,nextState:{entity:le.fact.object,hop:Xe.hop+1}}))},{maxDepth:20,stateKey:Xe=>Xe.entity});if(ke.length)return{text:ke.map(({node:ce,path:le})=>{let me=new Set,Je=[];for(let It of le.actions){Je.push(se(It.fact));for(let re of It.aliasFacts){let Pe=re.id||`${re.subject}|${re.predicate}|${re.object}`;me.has(Pe)||(me.add(Pe),Je.push(ko(re)))}}return`${ce.entity} \u2014 ${Je.join("; ")}`}).join(`
232
+ `),replace:!0}}}return null}}let $=l.match(ek),w=l.match(jo)||Vh(l)||$&&`is ${$[1].trim()} a ${$[2].trim()}`.match(jo);if(w){let I=ee(c,gn(w[2])),D=r&&Vs.test(w[1].trim())?r:w[1],N=new Set(ee(c,D));if([...N].some(q=>I.has(q))){let q=gn(w[2]).trim();return{text:`yes \u2014 ${yr(q)} ${q} is ${yr(q)} ${q}, trivially: every kind is a kind of itself.`,replace:!0}}let F=await bB(o,D);if(F)for(let q of ee(c,F))N.add(q);let{findIsaChain:B,buildSubClassSuccessors:U,deriveDisjointViolations:G,SUBCLASS_PREDICATE:Q,TYPE_PREDICATE:ie,DISJOINT_PREDICATE:fe}=await Promise.resolve().then(()=>(Ot(),un)),ae=br,Z=p.filter(q=>q.predicate===Q&&ae(q)),J=p.filter(q=>q.predicate===ie&&ae(q)),te=Z.map(q=>[q.subject,q.object]),oe=J.map(q=>[q.subject,q.object]),Ae=p.filter(q=>q.predicate===Q),pe=p.filter(q=>q.predicate===ie),je=pe.map(q=>[q.subject,q.object]),Le=Ae.map(q=>[q.subject,q.object]),ke=U(te),Xe=U(Le),ce=d.filter(q=>q.predicate===fe&&ae(q)),le=ce.map(q=>[q.subject,q.object]),me=ce.length?G(je.concat(Le),Le,le,{budget:20,focus:new Set([...N,...I])}):[],Je=q=>{let xe=me.find(Ge=>Ge.subject===q&&I.has(Ge.object));if(!xe)return null;let we=p.filter(Ge=>I.has(Ge.object)&&(Ge.subject===xe.viaClass||Ge.subject===xe.subject)).sort(f)[0],Re=ce.find(Ge=>Ge.subject===xe.viaClass&&Ge.object===xe.object||Ge.subject===xe.object&&Ge.object===xe.viaClass);return!we||!Re?null:fz(we,Re)},It=p.filter(q=>N.has(q.subject)&&I.has(q.object)).sort(f)[0],re=d.filter(q=>q.predicate===Lc&&N.has(q.subject)&&I.has(q.object)).sort(f)[0],Pe=ce.find(q=>N.has(q.subject)&&I.has(q.object)||N.has(q.object)&&I.has(q.subject));if(It&&!re){let q=Je(It.subject);if(q)return q}let it=Sk(It,re||Pe);if(it)return it;if(ce.length){let q=Re=>{let Ge=new Set(Re),Nt=new Set(Re);for(let Me=0;Me<8&&Nt.size;Me+=1){let ye=new Set;for(let[He,Ro]of Le)Nt.has(He)&&!Ge.has(Ro)&&ye.add(Ro);if(!ye.size)break;for(let He of ye)Ge.add(He);Nt=ye}return Ge},xe=q(I),we=me.find(Re=>N.has(Re.subject)&&xe.has(Re.object)&&!q([Re.viaClass]).has(Re.object)&&!q([Re.object]).has(Re.viaClass));if(we){let Re=p.filter(ye=>N.has(ye.subject)&&ye.object===we.viaClass).sort(f)[0],Ge=ce.find(ye=>ye.subject===we.viaClass&&ye.object===we.object||ye.subject===we.object&&ye.object===we.viaClass),Nt=!I.has(we.object),Me=Nt?p.filter(ye=>I.has(ye.subject)&&ye.object===we.object).sort(f)[0]:null;if(Re&&Ge&&(!Nt||Me)){let ye=gn(w[2]).trim();return{text:`no \u2014 ${[Re,...Me?[Me]:[]].map(se).join("; ")}; and ${ko(Ge)} \u2014 so ${D} can never be ${yr(ye)} ${ye}.`,replace:!0}}}}let ze=await Fa(o,D);if(ze){let q=new Map;for(let we of Iu(o,ze.id))for(let Re of ee(c,we.label))!N.has(Re)&&!q.has(Re)&&q.set(Re,we.label);let xe=p.filter(we=>q.has(we.subject)&&I.has(we.object)).sort(f)[0];if(xe)return{text:`yes \u2014 the code graph says ${ze.label} inherits ${q.get(xe.subject)}, and ${se(xe)}`,replace:!0}}let qs=q=>(q.predicate===Q?Z:J).find(xe=>xe.subject===q.subject&&xe.object===q.object);for(let q of N){let xe=B(q,I,oe,ke,{maxHops:2});if(!xe)continue;let we=Je(q);if(we)return we;let Re=xe.map(qs);if(Re.every(Boolean))return{text:`yes \u2014 ${Au(Re)}`,replace:!0}}let A=q=>(q.predicate===Q?Ae:pe).find(xe=>xe.subject===q.subject&&xe.object===q.object);for(let q of N){let xe=B(q,I,je,Xe,{maxHops:2});if(!xe)continue;let we=Je(q);if(we)return we;let Re=xe.map(A);if(Re.every(Boolean)&&Re.some(ae))return{text:`yes \u2014 ${Au(Re)}`,replace:!0}}let ge=D.match(/^(.*\S)\s+not$/i),Ie=ge&&[ge[0],r&&Vs.test(ge[1].trim())?r:ge[1]];if(Ie){let q=ee(c,Ie[1]),xe=I,we=p.filter(Me=>q.has(Me.subject)&&xe.has(Me.object)).sort(f)[0];if(we)return{text:`no \u2014 ${se(we)}`,replace:!0};let Re=ce.find(Me=>q.has(Me.subject)&&xe.has(Me.object)||q.has(Me.object)&&xe.has(Me.subject));if(Re)return{text:`yes \u2014 ${se(Re)}`,replace:!0};let Ge=Ie[1].trim(),Nt=gn(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ge} and ${Nt}. If no ${Ge} is a ${Nt}, teach me: "no ${Ge} is a ${Nt}".`,replace:!0,miss:!0}}if(ce.length){let q=G(oe.concat(te),te,le,{budget:10});for(let xe of N){let we=q.find(Me=>Me.subject===xe&&I.has(Me.object));if(!we)continue;let Re=J.concat(Z).find(Me=>Me.subject===we.subject&&Me.object===we.viaType),Ge=ce.find(Me=>Me.subject===we.viaClass&&Me.object===we.object||Me.subject===we.object&&Me.object===we.viaClass),Nt=[Re,Ge].filter(Boolean).map(se);return{text:`no \u2014 ${Nt.length?Nt.join("; "):`${we.viaClass} and ${we.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:Es,ON_PROPERTY_PREDICATE:xs,SOME_VALUES_FROM_PREDICATE:Da,deriveSomeValuesFromSubsumption:eR,ENTAILED_SCM_SVF_PROVENANCE:tR,SCM_SVF_RULE_CONFIDENCE:nR,entailedTrustFrom:tg}=await Promise.resolve().then(()=>(Ot(),un)),ng=d.filter(q=>q.predicate===xs&&ae(q)),sg=d.filter(q=>q.predicate===Da&&ae(q));if(ng.length&&sg.length){let q=new Map(sg.map(ye=>[ye.subject,ye.object])),xe=ng.map(ye=>({restriction:ye.subject,property:ye.object,target:q.get(ye.subject)})).filter(ye=>ye.target),we=new Set([Q,ie,fe,xs,Da,"owl:intersectionOf"]),Re=d.filter(ye=>ae(ye)&&!we.has(ye.predicate)),Ge=Re.map(ye=>[ye.subject,ye.predicate,ye.object]),Nt=Es(Ge,oe,te,xe,{budget:10});for(let ye of N){let He=Nt.find(Fn=>Fn.subject===ye&&I.has(Fn.object));if(!He)continue;let Ro=Re.find(Fn=>Fn.subject===He.subject&&Fn.predicate===He.viaProperty&&Fn.object===He.viaValue),_o=J.find(Fn=>Fn.subject===He.viaValue&&Fn.object===He.viaType),gi=[Ro,_o].filter(Boolean).map(se);return{text:`yes \u2014 ${gi.length?gi.join("; "):`${He.subject} ${He.viaProperty} ${He.viaValue}, and ${He.viaValue} is a ${He.viaType}.`}`,replace:!0}}let Me=xe.length>1?eR(xe,te,{budget:10}):[];if(Me.length){let ye=U(te.concat(Me.map(Ce=>[Ce.subject,Ce.object]))),He=new Map(xe.map(Ce=>[Ce.restriction,Ce])),Ro=new Map;for(let Ce of d)Ro.set(`${Ce.subject}\0${Ce.predicate}\0${Ce.object}`,Ce.trust);let _o=(Ce,Yn,on)=>Ro.get(`${Ce}\0${Yn}\0${on}`),gi=new Map;for(let Ce of Me){let Yn=He.get(Ce.subject),on=He.get(Ce.object),mn=[Yn&&_o(Ce.subject,xs,Yn.property),_o(Ce.subject,Da,Ce.viaY1),on&&_o(Ce.object,xs,on.property),_o(Ce.object,Da,Ce.viaY2),_o(Ce.viaY1,Q,Ce.viaY2)].filter(rR=>typeof rR=="number"),za=tg(mn,nR);za!==null&&gi.set(`${Ce.subject}\0${Ce.object}`,za)}let Fn=Ce=>{if(Ce.predicate!==Q)return J.find(mn=>mn.subject===Ce.subject&&mn.object===Ce.object);let Yn=Z.find(mn=>mn.subject===Ce.subject&&mn.object===Ce.object);if(Yn)return Yn;let on=Me.find(mn=>mn.subject===Ce.subject&&mn.object===Ce.object);return on?{subject:on.subject,predicate:Q,object:on.object,provenance:tR,trust:gi.get(`${on.subject}\0${on.object}`)}:void 0};for(let Ce of N){let Yn=B(Ce,I,oe,ye,{maxHops:3});if(!Yn)continue;let on=Yn.map(Fn);if(on.every(Boolean)){let mn=tg(on.map(za=>za.trust),1);return{text:`yes \u2014 ${Au(on)}`,replace:!0,...mn!==null?{trust:mn}:{}}}}}}let sR=ee(c,D),Wu=p.filter(q=>sR.has(q.subject)).sort(f),xn=D.trim(),Ys=gn(w[2]).trim(),oR=[...N].some(q=>B(q,I,oe,ke,{maxHops:$z})),Gu=await oB(e,a,d,xn,N,I,Ys);if(Gu?.text)return Gu;let Vu=!!Gu?.budgetExhausted;if(Wu.length){let q=Wu.slice(0,3).map(se).join("; "),{ON_PROPERTY_PREDICATE:xe,SOME_VALUES_FROM_PREDICATE:we}=await Promise.resolve().then(()=>(Ot(),un)),Re=new Set,Ge=new Set;for(let He of d)He.predicate===xe?Re.add(He.subject):He.predicate===we&&Ge.add(He.subject);let Nt=new Set([...Re].filter(He=>Ge.has(He))),ye=Wu.some(He=>Nt.has(He.object))?`The facts to settle it are here, but reaching it means composing a restriction /syllogise doesn't follow. Run "/classify ${xn}", then ask me again.`:oR?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${xn}", then ask me again.`:`If it's true, teach me: "${xn} is a kind of ${Ys}". If it isn't, teach me: "no ${xn} is a ${Ys}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${xn} is a ${Ys}. I do know: ${q}. ${ye}`,replace:!0,miss:!0,...Vu?{budgetExhausted:!0}:{}}}let og=p.filter(q=>N.has(q.object)&&I.has(q.subject)).sort(f)[0];return og?{text:`I can't confirm that \u2014 what I know runs the other way: ${se(og)}. A kind doesn't reverse. If it's true, teach me: "every ${xn} is a ${Ys}". If it isn't, teach me: "no ${xn} is a ${Ys}".`,replace:!0,miss:!0,...Vu?{budgetExhausted:!0}:{}}:!ze&&!F&&!zD(xn)&&!d.some(q=>N.has(q.subject)||N.has(q.object))?{text:`I can't confirm that \u2014 I don't know "${xn}" at all yet. If it's true, teach me: "${xn} is a kind of ${Ys}". If it isn't, teach me: "no ${xn} is a ${Ys}".`,replace:!0,miss:!0,...Vu?{budgetExhausted:!0}:{}}:null}let x=l.match(cB);if(x){let[,I,D,N]=x,{SUBCLASS_PREDICATE:F,ON_PROPERTY_PREDICATE:B,buildCardinalityRestrictions:U,proveCardinalityAtLeast:G,CARDINALITY_RULE_CONFIDENCE:Q,entailedTrustFrom:ie}=await Promise.resolve().then(()=>(Ot(),un)),fe=br,ae=p.filter(te=>te.predicate===F&&fe(te)).map(te=>[te.subject,te.object]),Z=d.filter(te=>(te.predicate===B||ck.has(te.predicate))&&fe(te)),J=U(Z);if(J.length){let te=ee(c,I.trim()),oe=ee(c,N.trim()),Ae=Number(D),pe=Zj(te,oe,(je,Le)=>G(ae,J,je,Le,Ae,{}));if(pe){let je=d.find(me=>me.predicate===F&&me.subject===pe.viaClass&&me.object===pe.viaRestriction),Le=je?.provenance?` (source: ${Wh(je.provenance)})`:"",ke=pe.kind==="exactly"?"exactly":"at least",Xe=(me,Je)=>`${me}${Je===1?"":"s"}`,ce=[je?.trust,...Z.filter(me=>me.subject===pe.viaRestriction).map(me=>me.trust),...pe.viaClass!==pe.subject?[p.find(me=>me.predicate===F&&me.subject===pe.subject&&me.object===pe.viaClass)?.trust]:[]].filter(me=>typeof me=="number"),le=ie(ce,Q);return{text:`yes \u2014 every ${pe.viaClass} has ${ke} ${pe.n} ${Xe(pe.object,pe.n)}${Le}, so at least ${Ae} follows.`,replace:!0,...le!==null?{trust:le}:{}}}}}let R=l.match(lB);if(R){let[,I,D]=R,{SUBCLASS_PREDICATE:N,ON_PROPERTY_PREDICATE:F,buildCardinalityRestrictions:B,proveMaxCardinalityZeroDenial:U,CAX_MAXC0_RULE_CONFIDENCE:G,entailedTrustFrom:Q}=await Promise.resolve().then(()=>(Ot(),un)),ie=br,fe=p.filter(J=>J.predicate===N&&ie(J)).map(J=>[J.subject,J.object]),ae=d.filter(J=>(J.predicate===F||ck.has(J.predicate))&&ie(J)),Z=B(ae);if(Z.length){let J=ee(c,I.trim()),te=ee(c,D.trim()),oe=Zj(J,te,(Ae,pe)=>U(fe,Z,Ae,pe,{}));if(oe){let Ae=d.find(ke=>ke.predicate===N&&ke.subject===oe.viaClass&&ke.object===oe.viaRestriction),pe=Ae?.provenance?` (source: ${Wh(Ae.provenance)})`:"",je=[Ae?.trust,...ae.filter(ke=>ke.subject===oe.viaRestriction).map(ke=>ke.trust),...oe.viaClass!==oe.subject?[p.find(ke=>ke.predicate===N&&ke.subject===oe.subject&&ke.object===oe.viaClass)?.trust]:[]].filter(ke=>typeof ke=="number"),Le=Q(je,G);return{text:`no \u2014 every ${oe.viaClass} has at most 0 ${oe.object}${pe}.`,replace:!0,...Le!==null?{trust:Le}:{}}}}}let E=l.match(uB);if(E){let I=ee(c,E[1]),D=d.filter(N=>N.predicate===Oh&&I.has(N.subject)).sort(f);return D.length?m(D):null}let k=u.match(dB);if(k){let[,I,D]=k,N=ee(c,I.trim()),F=ee(c,D.replace(/^an?\s+/i,"").trim()),B=d.filter(U=>U.predicate===Oh&&F.has(U.subject)&&N.has(U.object)).sort(f)[0];return B?{text:`yes \u2014 ${se(B)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${D.trim()}.`,replace:!0}}let O=u.match(fB);if(O){let[,I,D]=O,N=ee(c,I.replace(/^an?\s+/i,"").trim()),F=ee(c,D.trim()),B=d.filter(U=>U.predicate===Oh&&N.has(U.subject)&&F.has(U.object)).sort(f)[0];return B?{text:`yes \u2014 ${se(B)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${D.trim()}.`,replace:!0}}let S=u.match(pB);if(S){let[,I,D]=S,N=ee(c,I.trim()),F=ee(c,`${D.trim()} method`),B=d.filter(U=>U.predicate===oi&&N.has(U.subject)&&F.has(U.object)).sort(f)[0];return B?{text:`yes \u2014 ${se(B)}`,replace:!0}:null}let _=u.match(mB);if(_){let I=ee(c,_[1].trim()),D=d.filter(N=>N.predicate===oi&&I.has(N.subject)&&/ method$/.test(N.object)).sort(f);return D.length?m(D):null}let y=u.match(lk);if(y){let I=y[1].trim(),D=dk.test(I)||uk.test(I)?null:Vs.test(I)?r||null:I,N=y[2].trim().toLowerCase();if(D){let F=ee(c,D),B=new Map,U=null;if(o){let J=await Fa(o,D);if(U=J,J)for(let te of Iu(o,J.id))for(let oe of ee(c,te.label))!F.has(oe)&&!B.has(oe)&&B.set(oe,te.label),F.add(oe)}let G=J=>J.predicate===Nu&&c(J.object)===N||J.predicate===`tmct:${N}`&&J.object==="true",Q=c(D).split(/\s+/).filter(J=>J.length>=4&&!jk.has(J)),ie=J=>Q.some(te=>new Set(String(J.subject||"").split(/\s+/)).has(te)),fe=J=>F.has(J.subject)||Q.length&&ie(J),ae=d.filter(J=>fe(J)&&G(J)).sort(f)[0];if(ae){let J=B.get(ae.subject);return{text:J?`yes \u2014 the code graph says ${U.label} inherits ${J}, and ${se(ae)}`:`yes \u2014 ${se(ae)}`,replace:!0}}let Z=Tk(d,F,N,c);if(Z)return{text:`yes \u2014 ${Z.map(se).join("; ")}`,replace:!0};{let{findIsaChain:J,SUBCLASS_PREDICATE:te,TYPE_PREDICATE:oe}=await Promise.resolve().then(()=>(Ot(),un)),Ae=br,pe=d.filter(le=>le.predicate===te&&Ae(le)),je=d.filter(le=>le.predicate===oe&&Ae(le)),Le=pe.map(le=>[le.subject,le.object]),ke=je.map(le=>[le.subject,le.object]),Xe=le=>(le.predicate===te?pe:je).find(me=>me.subject===le.subject&&me.object===le.object),ce=ee(c,N);for(let le of F){let me=J(le,ce,ke,Le,{maxHops:2});if(!me)continue;let Je=me.map(Xe);if(Je.every(Boolean))return{text:`yes \u2014 ${Au(Je)}`,replace:!0}}}if(d.some(fe)&&!n?.parsed)return/^there\b/i.test(D)||hB.test(N)?null:{text:`I don't have a fact saying ${mz(D)} is ${N}.`,replace:!0};if(!n?.parsed&&!Hj.test(N))return fk(D,N)}}let T=Pu(l).match(ZD);if(T&&!Ph.test(l)){let[,I,D,N]=T,F=D.toLowerCase();if(!Lh.test(F)&&!Mh.test(F)){let B=I.trim(),U=nz(await Lu(F),N),G=U.object.replace(/^an?\s+/i,"").trim();if(B&&G){let Q=U.predicate,ie=ee(c,B),fe=ee(c,G),ae=[Q,Hr(Q)],Z=d.filter(te=>ae.includes(te.predicate)&&ie.has(te.subject)&&fe.has(te.object)).sort(f)[0];if(Z)return{text:`${qy(Z.predicate)?"no":"yes"} \u2014 ${se(Z)}`,replace:!0,generalVerbQuery:!0};let J=d.filter(te=>ae.includes(te.predicate)&&ie.has(te.subject));if(J.length){let te=J.slice(0,3).map(se).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Ks({subject:B,predicate:Q,object:G})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let C=l.match(ez);if(C&&!Ph.test(l)){let[,I,D]=C,[N,F]=D.toLowerCase().split(/\s+/);if(!Lh.test(N)&&!Mh.test(N)){let B=I.trim();if(B){let U=await Lu(N);F&&/^mgx:[a-z]+$/.test(U)&&(U=`${U}-${F}`);let G=ee(c,B),Q=[U,Hr(U)],ie=lt(d.filter(fe=>Q.includes(fe.predicate)&&G.has(fe.subject)),i);if(ie.length)return{...m(ie),generalVerbQuery:!0}}}}let v=l.match(/^(?:what|who)\s+([a-z]+)\s+(on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside)\s+(.+?)[?.!\s]*$/i);if(v&&!Ph.test(l)){let[,I,D,N]=v,F=I.toLowerCase();if(!Lh.test(F)&&!Mh.test(F)&&!QD.test(F)){let B=await Lu(F);/^mgx:[a-z]+$/.test(B)&&(B=`${B}-${D.toLowerCase()}`);let U=ee(c,N.replace(/^(?:an?|the)\s+/i,"").trim()),G=lt(d.filter(Q=>Q.predicate===B&&U.has(Q.object)),i);if(G.length)return{...m(G),generalVerbQuery:!0}}}let j=l.match(iB);if(j){let I=ee(c,j[1]),D=lt(d.filter(Q=>I.has(Q.subject)||I.has(Q.object)),i);if(!D.length)return null;let N=I.has(D[0].subject)?D[0].subject:D[0].object,F=D.map(Q=>` ${se(Q)}`),B=F.slice(0,_e),U=F.slice(_e),G=U.length?`
233
233
  \u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:`${D.length} remembered fact${D.length===1?"":"s"} about ${N}:
234
234
  ${B.join(`
235
- `)}${G}`,replace:!0,...U.length?{pending:{items:U.map(Q=>Q.trim()),noun:"facts"}}:{}}}let M=n?.parsed?.shape==="meta"?n.parsed.object:null,z=!1,K=null,Y=l.match(rB);if(Y)K=Y[1]?Y[1].trim():null,M=Y[2],z=!0;else if(!M&&!n?.parsed){let I=l.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(M=I[1])}if(!M)return null;let X=ee(c,M),L=lt(p.filter(I=>X.has(I.subject)),i),H=lt(p.filter(I=>X.has(I.object)),i),W=z?L.length?L:H:H.length?H:L;if(!W.length)return null;if(K&&W===L){let I=ee(c,K),D=F=>p.find(B=>B.subject===F.object&&I.has(B.object)),N=W.map(F=>({hit:F,bridge:D(F)})).find(({bridge:F})=>F);if(N)return{text:`${se(N.hit)} \u2014 ${se(N.bridge)}`,replace:!0}}return m(W)}function Dh(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}async function Pk(e){let{resolveReasoningConfig:t}=await Promise.resolve().then(()=>(Wj(),Uj));try{let{loadTomlConfig:n,normalizeConfig:s}=await Promise.resolve().then(()=>(ra(),wp)),o=await n(e),r=await s(o,{configDir:e});return t(r)}catch{return t(null)}}function pk(e,t,n){for(let s of t){if(e.has(s.subject))return s.subject;if(e.has(s.object))return s.object}return n}var Hh,FD,Ln,Tu,Gj,mk,ate,DD,cte,Vj,zD,lte,hk,gk,bk,BD,Kj,ute,dte,fte,pte,mte,Yh,hte,UD,Ye,Ch,Nu,br,WD,wk,GD,gr,gte,bte,wte,yte,$te,vte,Ete,xte,Ste,jte,kte,Rte,_te,Tte,Ate,Cte,Ote,Ite,Hj,HD,Du,qD,Nte,Lte,yk,Pte,Mte,Fte,Dte,YD,zte,Nh,Lh,XD,Bte,JD,QD,Ph,ZD,tz,Ute,$k,vk,nz,Wte,Gte,Ek,Vte,Kte,Hte,sz,qte,oz,mi,Yte,Xte,Jte,xk,Qte,Zte,rz,ene,tne,nne,sne,qj,Xj,Jh,Ks,iz,cz,Ou,pz,jk,one,Wh,kk,mz,hz,Fu,gz,bz,jo,Pn,wz,yz,$z,Vh,ek,vz,_e,xz,Sz,jz,tk,kz,Tz,Az,Cz,Oz,Iz,Nz,Lz,Pz,Mz,Fz,Dz,zz,Bz,sk,Ak,Wz,Gz,Kz,Hz,qz,Yz,Xz,ik,Jz,Zz,oB,rB,iB,aB,ck,cB,lB,uB,dB,fB,lk,Vs,pB,uk,dk,fk,mB,gB,bB,rne,Lk,yB,$B,ine,zh,Kh,vB,ane,cne,Mk,lne,une,dne,fne,pne,zu,mne,hne,gne,bne,EB,wne,yne,ja=P(()=>{Qe();XE();Xt();Fe();es();gm();Dl();zl();$i();Bl();ax();We();ta();Mc();Gl();Em();Jn();kn();Lr();mc();fm();pm();Or();Vn();_d();ar();Im();Tx();Ix();Lx();Nm();Px();Fm();Dm();Kx();Hx();Yx();ou();Sa();Il();Qx();Zl();ui();DS();US();WS();Eo();mj();hc(void 0);pc(Pl);Hh=new Set(["it","this","that","here"]),FD=e=>Hh.has(String(e||"").trim().toLowerCase()),Ln={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"},Tu=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Gj="look up a taught fact about a subject/verb/object";mk={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}},ate=new Set(["stats","memory","focus",...Object.keys(mk)]),DD=new Set(["have","has","holds","hold"]),cte=new RegExp(`\\b(?:${[...Object.keys(he),...Object.keys(Qs)].filter(e=>!DD.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),Vj=e=>`${e.subject} ${e.predicate} ${e.object} ${e.provenance||""}`,zD=(e,t)=>{let n=Vj(e),s=Vj(t);return n<s?-1:n>s?1:0},lte=new Set([...YE.map(e=>e.name),...Object.values(mk).map(e=>e.tool)]),hk=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"]),gk=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"]),bk=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"]),BD=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Kj=e=>e.replace(/(.)\1+/g,"$1");ute=qh(hk),dte=qh(gk),fte=qh(bk),pte=new RegExp(`^(?:${[...BD].map(at).join("|")})\\s+(.+)$`,"i"),mte=[...hk,...gk,...bk,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],Yh="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",hte=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${Yh})\\s+than\\s+(.+)$`,"i"),UD=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${Yh})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Ch="mgx:ownedBy",Nu="mgx:hasProperty",br="rdfs:subClassOf",WD="rdf:type",wk="rdfs:subPropertyOf",GD=new Set(["operator","teach","entailed"]),gr=e=>!!e.sourceTypes?.some(t=>GD.has(t));gte=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),bte=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),wte=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"),yte=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+(${Yh})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),$te=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"),vte=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");Ete=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),xte=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"),Ste=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),jte=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),kte=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),Rte=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),_te=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),Tte=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?what\\s+if\\s+([\\w-]+)\\s+(?:had\\s+)?(?:started|start|starts|begun|began|begins|was|were|is|had\\s+been|rested|rests|sat|sits|stood|stands|lay|lies|lain)(?:\\s+(?:out|off))?\\s+(?:${Ye})\\s+([\\w-]+)(?:\\s+(?:instead|initially|to\\s+start\\s+with|at\\s+the\\s+start|from\\s+the\\s+start|at\\s+the\\s+beginning))?[?.!\\s]*$`,"i"),Ate=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:did\\s+you\\s+|do\\s+you\\s+|would\\s+you\\s+)?(?:choose\\s+to\\s+|decide\\s+to\\s+)?([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Ye})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?|to\\s+begin(?:\\s+with)?))?\\s+(?:instead\\s+of|rather\\s+than|and\\s+not|not)\\s+([\\w-]+)[?.!\\s]*$`,"i"),Cte=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:not|didn'?t\\s+you|did\\s+you\\s+not|couldn'?t\\s+you)\\s+([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Ye})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?))?[?.!\\s]*$`,"i"),Ote=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),Ite=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),Hj=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,HD=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"]);Du="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",qD="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",Nte=new RegExp(`^(.+?)\\s+(${qD})\\s+(.+)$`,"i"),Lte=new RegExp(`^([\\w'-]+)\\s+${Du}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),yk="with|to|from|by|of|in|on|for|as|about|into",Pte=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${Du}(${Ml})\\s+(${yk})\\s+(.+)$`,"i"),Mte=new RegExp(`^(the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${Ml})\\s+(${yk})\\s+(.+)$`,"i"),Fte=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Dte=new RegExp(`^(every|each|all)\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),YD="(?:just\\s+)?(?:one|another)\\s+more|another",zte=new RegExp(`^(?:${YD})\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Nh=/^(?:is|are|am|owns|maintains)$/i,Lh=/\b(?:is|are|am|owns|maintains)\b/i,XD=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"),Bte=new RegExp(`^(?:${No.filter(e=>!/\s/.test(e)).join("|")})$`,"i");JD=new RegExp(`^(?:does|did)\\s+(?:(?:every|each|all|any)\\s+)?([\\w'-]+)\\s+${Du}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),QD=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${Du}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Ph=/^(?:be|own|maintain)$/i,ZD=new RegExp(`^(${Ye})\\s+(.+)$`,"i");tz=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],Ute=new RegExp(`^(?:${tz.join("|")})\\b\\s*,?\\s+`,"i"),$k=Object.freeze(["you","i","it","they","he","she","we"]),vk=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),nz=Object.freeze([...vk,...$k]),Wte=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${nz.join("|")})\\s+\\S+`,"i"),Gte=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${$k.join("|")})\\s+(?:is|are|am|was|were)|(${vk.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),Ek="forget|unlearn|delete|remove",Vte=new RegExp(`^(?:${Ek})\\s+(?:that\\s+)?(?:a\\s+|an\\s+)?([\\w-]+(?:\\s+[\\w-]+)?)\\s+(?:is|are)\\s+(?:an?\\s+)?(?:(?:kind|type)\\s+of\\s+)?([\\w-]+)$`,"i"),Kte=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),Hte=new RegExp(`^(?:${Ek})\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),sz="collection|set|group|family",qte=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+an?\\s+(?:${sz})\\s+of\\s+(?:the\\s+)?([\\w'-]+)[.!?]*$`,"i"),oz=Object.freeze(["mgx:memberOf","mgx:partOf"]),mi="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",Yte=new RegExp(`^what\\s+does\\s+(.+?)${mi}\\s+do${mi}\\??$`,"i"),Xte=new RegExp(`^what\\s+(.+?)${mi}\\s+does${mi}\\??$`,"i"),Jte=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${mi}\\s+do${mi}\\??$`,"i"),xk="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",Qte=new RegExp(`^who\\s+(?:is|was)\\s+${xk}$`,"i"),Zte=new RegExp(`^what\\s+(?:did|has)\\s+${xk}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),rz="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",ene=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${rz}\\b`,"i"),tne=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"),nne=Object.freeze({game:["higher","lower","warmer","colder","hotter","up","down","guess"],spiderFly:["watch","step","tick","move","board","web"],adventure:["help","xyzzy","wait","hint","plugh"]});sne=new Set([...Object.keys(he).flatMap(e=>e.split(/[\s-]+/)),...hn,...Fn,"owns","maintains"].filter(e=>e.length>=3)),qj=new Set(["mgx:hidden-in","mgx:is-objective","mgx:unlocks-with","mgx:is-npc","mgx:acts-on-turn","mgx:acts-toward","mgx:is-container","mgx:is-open"]);Xj=new Set(["owl:onProperty","owl:someValuesFrom","owl:allValuesFrom"]),Jh=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]),Ks=e=>`${e.subject} ${Fl(e.predicate)} ${e.object}`;iz=Object.entries(Gs).filter(([e])=>!Jh.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);cz=8;Ou=null;pz=/^(?:every|each|all|any)\s+/i;jk=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"]),one=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("|"))),Wh=/^(?: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,kk=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,mz=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,hz=/^(who|what)'?s\s+/i,Fu=e=>String(e).replace(hz,(t,n)=>`${n} is `),gz=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;bz=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,jo=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,Pn=new Set(["rdfs:subClassOf","rdf:type"]),wz=6,yz=/^why\s+(?=(?:is|are)\b)/i,$z=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Vh=new Set(["kind","sort","type","subclass","superclass"]),ek=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,vz=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,_e=32;xz=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,Sz=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,jz=/^how\s+many\s+(.+?)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have[?.!\s]*$/i,tk=new Set(["mgx:hasA","tmct:has"]),kz=/^(?:can|could)\s+(?:all\s+|every\s+)?(?:an?\s+|the\s+)?(.+?)\s+be\s+([a-z][\w-]*)[?.!\s]*$/i;Tz=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z]+)\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,Az=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,Cz=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Oz=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,Iz=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,Nz=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,Lz=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),Pz=/^what(?:'s|\s+is|\s+are)\s+(?:the\s+)?(parts|members|contents)\s+of\s+(?:the\s+|an?\s+)?(.+?)\s*[?.!]*$/i,Mz=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,Fz=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,Dz=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,zz=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,Bz=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;sk=e=>String(e||"").replace(/\s+/g," ").trim();Ak="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",Wz=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${Ak})[?.!\\s]*$`,"i"),Gz=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${Ak})\\s+([\\w'-]+)[?.!\\s]*$`,"i");Kz=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),Hz=Object.entries(Gs).filter(([e])=>!Kz.has(e)&&!Jh.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${at(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),qz=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),Yz=new Set(["mgx:partOf","mgx:memberOf"]),Xz=Object.entries(Gs).filter(([e])=>!qz.has(e)&&!Jh.has(e)).map(([e,t])=>{let n;if(t==="can be")n=new RegExp("^can\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+be\\s+(.+?)[?.!\\s]*$","i");else if(t.startsWith("is ")){let s=at(t.slice(3));n=new RegExp(`^(?:is|are)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${s}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}else{let[s,...o]=t.split(" "),r=[ma(s),...o].map(at).join("\\s+");n=new RegExp(`^(?:does|do)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${r}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}return{predicate:e,phrase:t,re:n}}).sort((e,t)=>t.re.source.length-e.re.source.length),ik=/^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,Jz=new Set(["changed","change","changes","updated","modified","happened","occurred"]);Zz=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"]);oB=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,rB=/^what\s+(?:kind|type)\s+of\s+(?:an?\s+)?([\w-]+(?:\s+[\w-]+)?)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,iB=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,aB=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,ck=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),cB=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,lB=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,uB=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,dB=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,fB=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,lk=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,Vs=/^(?:it|this|that)$/i,pB=/^(?:it|them|this|that|in|on|of|to|at)$/i,uk=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,dk=/^(?:you|i|they|he|she|we)\b/i,fk=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${Mu(e)} is ${t}".`,replace:!0}),mB=/^(?: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;gB=/inherit|supertype|subclass|extend|specializ/i,bB=8;rne=new RegExp(`\\b(?:${[...Hh].join("|")})\\b`,"i"),Lk=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,yB=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,$B=/^(?:please\s+|can\s+you\s+|could\s+you\s+)*(?:define|definition\s+of|give\s+me\s+the\s+definition\s+of)\s+(?:the\s+(?:term|word)\s+)?(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i;ine=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(nt).join("|")})$`,"i"),zh="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",Kh="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",vB=`(?:\\s+${Kh})?`,ane=[new RegExp(`^${zh}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${vB}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${zh}architecture\\s+(?:${Kh}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${zh}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${Kh}(?:\\s+here)?\\??$`,"i")],cne={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:Ln.contains,subclasses:Ln.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:Ln.calls,callees:Ln.calls,tests:Ln.tests,untested:Ln.tests,history:Ln.touches,exports:Ln.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",goals:"see the declared goals a trace is recognized against, and where each one came from",syllogise:"materialize the entailed facts that follow from what's remembered about one term",wiki:"toggle the live Wikipedia supplement for questions nothing local can answer",wikipedia:"choose which source the research lane fetches from",wikidata:"choose which source the research lane fetches from",export:"write the memory store to a file, in the standard JSONL shape",ingest:"read a local text file and store every fact the recognizer grounds from it",news:"surface or work the news feed built over this graph"},Mk="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",lne=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+${Mk}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),une=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${Mk}\\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"),dne=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"),fne=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"),pne=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"),zu="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",mne=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${zu}\\s*\\??$`,"i"),hne=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${zu}\\s*\\??$`,"i"),gne=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${zu}\\s*\\??$`,"i"),bne=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${zu}\\s*[.!]*$`,"i"),EB=Object.freeze([...Hh].filter(e=>e!=="here").concat("they")),wne=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${EB.join("|")})\\b(\\s+\\S.*)?$`,"i"),yne=ne(".tmct","memory","corpus-seed.json")});ja();We();Un();ou();var Bu={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 zk=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:memberOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),yr=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),Uu=e=>zk[e]||"other",SB=e=>Math.max(0,Math.min(1,e));function Fk(e){let t=(e.sourceTypes||[]).map(n=>ks[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:ks.entailed}function jB(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function Dk(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function Bk(e,t,n={},s={}){let o={...Bu,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(E=>E&&E.object&&E.object!==e),a=[],c=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,l=[];for(let E of i){if(Uu(E.predicate)==="isa"){let k=Dk(E.object,n);if(c&&k>o.uninformativeClassMaxShare){a.push({row:E,family:"isa",reason:"uninformative-class",share:k});continue}}l.push(E)}let u=l.filter(E=>Uu(E.predicate)==="isa").map(E=>E.object),d=su(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),p=new Map,f=new Map;for(let E of d.clusters){let k=0;for(let O of E.objects){f.set(O,E.label);let S=l.find(_=>_.object===O&&Uu(_.predicate)==="isa");k+=S?Fk(S):0}p.set(E.label,k)}let m=null,h=-1;for(let[E,k]of[...p].sort((O,S)=>O[0].localeCompare(S[0])))k>h&&(h=k,m=E);let b=[];for(let E of l){let k=Uu(E.predicate),O=Fk(E),S={provenance:O};if(jB(E)&&(O-=o.entailedDepthPenalty,S.entailed=!0),k==="isa"){let y=.6+.4*(1-Dk(E.object,n));O*=y,S.informativeness=y;let T=f.get(E.object);m&&T&&T!==m&&(O-=o.minoritySensePenalty,S.minoritySense=T)}O=SB(O),b.push({row:E,family:k,score:O,reasons:S})}let g=[];for(let E of b)E.score<o.minScore?a.push({row:E.row,family:E.family,reason:"below-floor",score:E.score}):g.push(E);let $=new Map;for(let E of g)$.has(E.family)||$.set(E.family,[]),$.get(E.family).push(E);for(let E of $.values())E.sort((k,O)=>O.score-k.score||k.row.object.localeCompare(O.row.object));let w=yr.filter(E=>$.has(E)).concat([...$.keys()].filter(E=>!yr.includes(E)).sort()),x=[],R=!1;for(;x.length<r&&!R;){R=!0;for(let E of w){let k=$.get(E);if(k&&k.length&&(x.push(k.shift()),R=!1,x.length>=r))break}}for(let E of w)for(let k of $.get(E)||[])a.push({row:k.row,family:k.family,reason:"over-budget",score:k.score});return x.sort((E,k)=>{let O=yr.indexOf(E.family),S=yr.indexOf(k.family);return O-S||k.score-E.score||E.row.object.localeCompare(k.row.object)}),{term:e,selected:x,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}Oi();Ze();var kB=new Set(["isa","location","partOf","capableOf","usedFor"]),RB=new Set(["single","several","chained","group","closer"]),Uk=(e,t)=>`${e}:${t}`;function Zh(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!kB.has(n.family)||typeof n.form!="string"||!RB.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=Uk(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 $r=e=>`${Is(e)} ${e}`;function _B(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=$r(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Ci(s.map($r))}`:n}function TB(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(c=>String(c||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Pr(o),A_TERM:$r(o),A_TERM_CAP:Pr($r(o)),TERMS:bc(o),TERMS_CAP:Pr(bc(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?$r(a):"",OBJECT:i,A_OBJECT:i?$r(i):"",OBJECTS_A:Ci(r.map($r)),OBJECTS_PLURAL:Ci(r.map(bc)),OBJECTS_RAW:Ci(r),CHAIN:_B(n&&n.length?n:r.slice(0,1))}}function AB(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(Uk(t,i)):null,c=a?a.templates:null;if(!c||!c.length)return null;let l=s.variantSeed??"",u=Cc(`${r}|${t}|${i}|${l}`)%c.length,d=s.objectsOverride||o.map(f=>f.object),p=AB(c[u],TB(r,d,s.chain,s.parent));return p?{text:p,rows:o,family:t,form:i}:null}Oi();var CB=yr.filter(e=>e!=="isa"&&e!=="other");function OB(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 Wk(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 IB(e,t){let n=c=>(t?.[c.object]||[])[1]||null,s=new Map;for(let c of e||[]){let l=n(c);l&&s.set(l,(s.get(l)||0)+1)}let o=new Map,r=[],i=[];for(let c of e||[]){let l=n(c);l&&s.get(l)>=2?(o.has(l)||(o.set(l,[]),r.push(l)),o.get(l).push(c)):i.push(c)}let a=r.map(c=>({parent:c,rows:o.get(c)}));return i.length&&a.push({parent:null,rows:i}),a}function NB(e,t,n){let s=new Map,o=new Map;for(let c of t||[]){let l=e?.[c.object];if(!Array.isArray(l)||l.length<2)continue;let u=l[l.length-1];!u||u===c.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(c))}let r=[...s.keys()].sort((c,l)=>s.get(l)-s.get(c)||c.localeCompare(l)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let c of r)for(let l of o.get(c)||[])a.has(l.id)||(a.add(l.id),i.push(l));return{roots:r,rows:i}}function LB(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let p=t[e[0].object],f=p&&p.length>1?"chained":"single",m=Hs(s,"isa",e,{term:n,form:f,chain:p});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let p=Hs(s,"isa",e,{term:n,form:"several"});return p&&r.push({...p,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),c=Hs(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});c&&r.push({...c,role:"names-term",paragraph:"definition"});let l=[];for(let p of IB(a,t))for(let f of Wk(p.rows,o.maxObjectsPerBodySentence))l.push({parent:p.parent,rows:f});if(l.length>o.maxBodySentences){let p=l.slice(0,o.maxBodySentences),f=p[p.length-1];for(let m of l.slice(o.maxBodySentences))f.rows=f.rows.concat(m.rows);f.parent=null,l=p}for(let p of l){let f=p.parent?Hs(s,"isa",p.rows,{term:n,form:"group",parent:p.parent,variantSeed:p.parent}):Hs(s,"isa",p.rows,{term:n,form:"several",variantSeed:n});f&&r.push({...f,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=NB(t,e,o.closerRootCount);if(u.length){let p=Hs(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});p&&r.push({...p,role:"closes-isa",paragraph:"definition"})}return r}function PB(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Pr(`${Is(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function MB(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 Gk(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...Bu,...n.config||{}},a=OB(e?.selected||[]),c=[];for(let u of LB(a.get("isa")||[],r,s,t,i))c.push(u);for(let u of CB){let d=a.get(u);if(!(!d||!d.length))for(let p of Wk(d,i.maxObjectsPerBodySentence)){let f=Hs(t,u,p,{term:s});f&&c.push({...f,role:"describes",paragraph:"description"})}}PB(c,s);let l=new Map;for(let u of c)for(let d of u.rows)l.has(d.id)||l.set(d.id,d);return{term:s,sentences:c,paragraphs:MB(c,o),provenanceRows:[...l.values()]}}var FB=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function DB(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 zB=Object.freeze({facts:"show the facts",chains:"show the chains"});function BB(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:zB,facts:n.map(FB),factCount:n.length,chains:s}}function Vk(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:DB(t?.provenanceRows||[]),detail:BB(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function Kk(e,t,n={},s=new Map,o={}){let r=Bk(e,t,n,o),i=Gk(r,s,o);return Vk(r,i,o)}ou();Sa();var Hk=new Set(["rdfs:subClassOf","rdf:type"]);function qk(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(Hk.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 Yk(e,t,n=6){let s=ka(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=nu(r,s,{cap:n,stopAt:eu});i.length>1&&(o[r]=i)}return o}function Xk(e){let t=[],n=new Set;for(let s of e||[])!s||!Hk.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}We();ja();function UB(e,t,n,s,o={}){let r=Zh(s||[]);if(!r||r.size===0)return null;let i=t||[],a=qk(n||i),c=Yk(a.subClassEdges,Xk(i));return Kk(e,i,a,r,{...o,chains:c})}function Jk(e,t,n,s={}){let o=wt(e||{individuals:[],objectProperties:[]}),r=ee(V,t),i=o.filter(c=>r.has(c.subject));if(!i.length)return null;let a=UB(t,i,o,n,s);return WB(a)}function WB(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 GB="no session is open on this page yet \u2014 await tmct.open() first",Qk=Symbol.for("tmct.surface.fallback");function Zk({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[Qk])return a;let c=null,l=()=>{if(!c)throw new Error(GB);return c},u={async open(...d){return c=await e(...d),c},get session(){return c},async turn(d,p){let f=l();return s?s(d,p,f):typeof f.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:f.turn(d,p)},async ask(d,p){return t?t(d,p,l()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,p){return n?n(d,p,l()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[Qk]=r,i.tmct=u,u}function VB({payload:e=null}={}){let t=ca();return e&&(t.payload=e),{memoryDir:t}}async function KB(e,t,n){let s=null;try{s=await Ck(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await Nk(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}}Zk({open:VB,ask:KB,page:{normFactTerm:V,digestTermFromPayloadBrowser:Jk},fallback:!0});})();
235
+ `)}${G}`,replace:!0,...U.length?{pending:{items:U.map(Q=>Q.trim()),noun:"facts"}}:{}}}let M=n?.parsed?.shape==="meta"?n.parsed.object:null,z=!1,K=null,Y=l.match(aB);if(Y)K=Y[1]?Y[1].trim():null,M=Y[2],z=!0;else if(!M&&!n?.parsed){let I=l.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(M=I[1])}if(!M)return null;let X=ee(c,M),L=lt(p.filter(I=>X.has(I.subject)),i),H=lt(p.filter(I=>X.has(I.object)),i),W=z?L.length?L:H:H.length?H:L;if(!W.length)return null;if(K&&W===L){let I=ee(c,K),D=F=>p.find(B=>B.subject===F.object&&I.has(B.object)),N=W.map(F=>({hit:F,bridge:D(F)})).find(({bridge:F})=>F);if(N)return{text:`${se(N.hit)} \u2014 ${se(N.bridge)}`,replace:!0}}return m(W)}function zh(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}async function Pk(e){let{resolveReasoningConfig:t}=await Promise.resolve().then(()=>(Wj(),Uj));try{let{loadTomlConfig:n,normalizeConfig:s}=await Promise.resolve().then(()=>(ia(),wp)),o=await n(e),r=await s(o,{configDir:e});return t(r)}catch{return t(null)}}function pk(e,t,n){for(let s of t){if(e.has(s.subject))return s.subject;if(e.has(s.object))return s.object}return n}var qh,zD,Pn,Tu,Gj,mk,lte,BD,ute,Vj,UD,dte,hk,gk,bk,WD,Kj,fte,pte,mte,hte,gte,Xh,bte,GD,Ye,Oh,Nu,wr,VD,wk,KD,br,wte,yte,$te,vte,Ete,xte,Ste,jte,kte,Rte,_te,Tte,Ate,Cte,Ote,Ite,Nte,Lte,Hj,YD,Du,XD,Pte,Mte,yk,Fte,Dte,zte,Bte,JD,Ute,Lh,Ph,QD,Wte,ZD,ez,Mh,tz,sz,Gte,$k,vk,oz,Vte,Kte,Ek,Hte,qte,Yte,rz,Xte,iz,hi,Jte,Qte,Zte,xk,ene,tne,az,nne,sne,one,rne,qj,Xj,Qh,Ks,cz,uz,Ou,hz,jk,ine,Gh,kk,gz,bz,Fu,wz,yz,jo,Mn,$z,vz,Ez,Kh,ek,xz,_e,jz,kz,Rz,tk,_z,Cz,Oz,Iz,Nz,Lz,Pz,Mz,Fz,Dz,zz,Bz,Uz,Wz,sk,Ak,Vz,Kz,qz,Yz,Xz,Jz,Qz,ik,Zz,tB,iB,aB,cB,lB,ck,uB,dB,fB,pB,mB,lk,Vs,hB,uk,dk,fk,gB,wB,yB,ane,Lk,vB,EB,cne,Bh,Hh,xB,lne,une,Mk,dne,fne,pne,mne,hne,zu,gne,bne,wne,yne,SB,$ne,vne,ka=P(()=>{Qe();XE();Xt();Fe();ns();bm();Dl();zl();vi();Bl();ax();We();na();Fc();Gl();xm();Zn();kn();Pr();hc();pm();mm();Ir();Hn();_d();cr();Nm();Tx();Ix();Lx();Lm();Px();Dm();zm();Kx();Hx();Yx();ou();ja();Il();Qx();Zl();di();DS();US();WS();Eo();mj();gc(void 0);mc(Pl);qh=new Set(["it","this","that","here"]),zD=e=>qh.has(String(e||"").trim().toLowerCase()),Pn={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"},Tu=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Gj="look up a taught fact about a subject/verb/object";mk={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}},lte=new Set(["stats","memory","focus",...Object.keys(mk)]),BD=new Set(["have","has","holds","hold"]),ute=new RegExp(`\\b(?:${[...Object.keys(he),...Object.keys(Qs)].filter(e=>!BD.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),Vj=e=>`${e.subject} ${e.predicate} ${e.object} ${e.provenance||""}`,UD=(e,t)=>{let n=Vj(e),s=Vj(t);return n<s?-1:n>s?1:0},dte=new Set([...YE.map(e=>e.name),...Object.values(mk).map(e=>e.tool)]),hk=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"]),gk=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"]),bk=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"]),WD=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Kj=e=>e.replace(/(.)\1+/g,"$1");fte=Yh(hk),pte=Yh(gk),mte=Yh(bk),hte=new RegExp(`^(?:${[...WD].map(at).join("|")})\\s+(.+)$`,"i"),gte=[...hk,...gk,...bk,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],Xh="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",bte=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${Xh})\\s+than\\s+(.+)$`,"i"),GD=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${Xh})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Oh="mgx:ownedBy",Nu="mgx:hasProperty",wr="rdfs:subClassOf",VD="rdf:type",wk="rdfs:subPropertyOf",KD=new Set(["operator","teach","entailed"]),br=e=>!!e.sourceTypes?.some(t=>KD.has(t));wte=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),yte=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),$te=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"),vte=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+(${Xh})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Ete=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"),xte=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");Ste=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),jte=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"),kte=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),Rte=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),_te=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),Tte=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),Ate=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),Cte=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?what\\s+if\\s+([\\w-]+)\\s+(?:had\\s+)?(?:started|start|starts|begun|began|begins|was|were|is|had\\s+been|rested|rests|sat|sits|stood|stands|lay|lies|lain)(?:\\s+(?:out|off))?\\s+(?:${Ye})\\s+([\\w-]+)(?:\\s+(?:instead|initially|to\\s+start\\s+with|at\\s+the\\s+start|from\\s+the\\s+start|at\\s+the\\s+beginning))?[?.!\\s]*$`,"i"),Ote=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:did\\s+you\\s+|do\\s+you\\s+|would\\s+you\\s+)?(?:choose\\s+to\\s+|decide\\s+to\\s+)?([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Ye})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?|to\\s+begin(?:\\s+with)?))?\\s+(?:instead\\s+of|rather\\s+than|and\\s+not|not)\\s+([\\w-]+)[?.!\\s]*$`,"i"),Ite=new RegExp(`^(?:and\\s+|so\\s+|but\\s+)?why\\s+(?:not|didn'?t\\s+you|did\\s+you\\s+not|couldn'?t\\s+you)\\s+([a-z]+)\\s+([\\w-]+)(?:\\s+(?:${Ye})\\s+([\\w-]+))?(?:\\s+(?:first|initially|at\\s+the\\s+start|to\\s+start(?:\\s+with)?))?[?.!\\s]*$`,"i"),Nte=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),Lte=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),Hj=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,YD=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"]);Du="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",XD="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",Pte=new RegExp(`^(.+?)\\s+(${XD})\\s+(.+)$`,"i"),Mte=new RegExp(`^([\\w'-]+)\\s+${Du}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),yk="with|to|from|by|of|in|on|for|as|about|into",Fte=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${Du}(${Ml})\\s+(${yk})\\s+(.+)$`,"i"),Dte=new RegExp(`^(the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${Ml})\\s+(${yk})\\s+(.+)$`,"i"),zte=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Bte=new RegExp(`^(every|each|all)\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),JD="(?:just\\s+)?(?:one|another)\\s+more|another",Ute=new RegExp(`^(?:${JD})\\s+([\\w'-]+)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Lh=/^(?:is|are|am|owns|maintains)$/i,Ph=/\b(?:is|are|am|owns|maintains)\b/i,QD=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"),Wte=new RegExp(`^(?:${No.filter(e=>!/\s/.test(e)).join("|")})$`,"i");ZD=new RegExp(`^(?:does|did)\\s+(?:(?:every|each|all|any)\\s+)?([\\w'-]+)\\s+${Du}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),ez=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${Du}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Mh=/^(?:be|own|maintain)$/i,tz=new RegExp(`^(${Ye})\\s+(.+)$`,"i");sz=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],Gte=new RegExp(`^(?:${sz.join("|")})\\b\\s*,?\\s+`,"i"),$k=Object.freeze(["you","i","it","they","he","she","we"]),vk=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),oz=Object.freeze([...vk,...$k]),Vte=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${oz.join("|")})\\s+\\S+`,"i"),Kte=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${$k.join("|")})\\s+(?:is|are|am|was|were)|(${vk.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),Ek="forget|unlearn|delete|remove",Hte=new RegExp(`^(?:${Ek})\\s+(?:that\\s+)?(?:a\\s+|an\\s+)?([\\w-]+(?:\\s+[\\w-]+)?)\\s+(?:is|are)\\s+(?:an?\\s+)?(?:(?:kind|type)\\s+of\\s+)?([\\w-]+)$`,"i"),qte=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),Yte=new RegExp(`^(?:${Ek})\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),rz="collection|set|group|family",Xte=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+an?\\s+(?:${rz})\\s+of\\s+(?:the\\s+)?([\\w'-]+)[.!?]*$`,"i"),iz=Object.freeze(["mgx:memberOf","mgx:partOf"]),hi="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",Jte=new RegExp(`^what\\s+does\\s+(.+?)${hi}\\s+do${hi}\\??$`,"i"),Qte=new RegExp(`^what\\s+(.+?)${hi}\\s+does${hi}\\??$`,"i"),Zte=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${hi}\\s+do${hi}\\??$`,"i"),xk="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",ene=new RegExp(`^who\\s+(?:is|was)\\s+${xk}$`,"i"),tne=new RegExp(`^what\\s+(?:did|has)\\s+${xk}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),az="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",nne=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${az}\\b`,"i"),sne=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"),one=Object.freeze({game:["higher","lower","warmer","colder","hotter","up","down","guess"],spiderFly:["watch","step","tick","move","board","web"],adventure:["help","xyzzy","wait","hint","plugh"]});rne=new Set([...Object.keys(he).flatMap(e=>e.split(/[\s-]+/)),...hn,...Dn,"owns","maintains"].filter(e=>e.length>=3)),qj=new Set(["mgx:hidden-in","mgx:is-objective","mgx:unlocks-with","mgx:is-npc","mgx:acts-on-turn","mgx:acts-toward","mgx:is-container","mgx:is-open"]);Xj=new Set(["owl:onProperty","owl:someValuesFrom","owl:allValuesFrom"]),Qh=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]),Ks=e=>`${e.subject} ${Fl(e.predicate)} ${e.object}`;cz=Object.entries(Gs).filter(([e])=>!Qh.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);uz=8;Ou=null;hz=/^(?:every|each|all|any)\s+/i;jk=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"]),ine=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("|"))),Gh=/^(?: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,kk=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,gz=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,bz=/^(who|what)'?s\s+/i,Fu=e=>String(e).replace(bz,(t,n)=>`${n} is `),wz=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;yz=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,jo=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,Mn=new Set(["rdfs:subClassOf","rdf:type"]),$z=6,vz=/^why\s+(?=(?:is|are)\b)/i,Ez=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Kh=new Set(["kind","sort","type","subclass","superclass"]),ek=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,xz=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,_e=32;jz=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,kz=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,Rz=/^how\s+many\s+(.+?)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have[?.!\s]*$/i,tk=new Set(["mgx:hasA","tmct:has"]),_z=/^(?:can|could)\s+(?:all\s+|every\s+)?(?:an?\s+|the\s+)?(.+?)\s+be\s+([a-z][\w-]*)[?.!\s]*$/i;Cz=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z]+)\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,Oz=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,Iz=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Nz=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,Lz=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,Pz=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,Mz=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),Fz=/^what(?:'s|\s+is|\s+are)\s+(?:the\s+)?(parts|members|contents)\s+of\s+(?:the\s+|an?\s+)?(.+?)\s*[?.!]*$/i,Dz=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,zz=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,Bz=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,Uz=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,Wz=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;sk=e=>String(e||"").replace(/\s+/g," ").trim();Ak="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",Vz=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${Ak})[?.!\\s]*$`,"i"),Kz=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${Ak})\\s+([\\w'-]+)[?.!\\s]*$`,"i");qz=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),Yz=Object.entries(Gs).filter(([e])=>!qz.has(e)&&!Qh.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${at(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),Xz=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),Jz=new Set(["mgx:partOf","mgx:memberOf"]),Qz=Object.entries(Gs).filter(([e])=>!Xz.has(e)&&!Qh.has(e)).map(([e,t])=>{let n;if(t==="can be")n=new RegExp("^can\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+be\\s+(.+?)[?.!\\s]*$","i");else if(t.startsWith("is ")){let s=at(t.slice(3));n=new RegExp(`^(?:is|are)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${s}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}else{let[s,...o]=t.split(" "),r=[ha(s),...o].map(at).join("\\s+");n=new RegExp(`^(?:does|do)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${r}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}return{predicate:e,phrase:t,re:n}}).sort((e,t)=>t.re.source.length-e.re.source.length),ik=/^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,Zz=new Set(["changed","change","changes","updated","modified","happened","occurred"]);tB=new Set(["owl:unionof","owl:complementof","owl:oneof","owl:allvaluesfrom","owl:mincardinality","owl:maxcardinality","owl:cardinality","rdfs:subpropertyof","owl:inverseof"]);iB=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,aB=/^what\s+(?:kind|type)\s+of\s+(?:an?\s+)?([\w-]+(?:\s+[\w-]+)?)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,cB=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,lB=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,ck=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),uB=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,dB=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,fB=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,pB=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,mB=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,lk=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,Vs=/^(?:it|this|that)$/i,hB=/^(?:it|them|this|that|in|on|of|to|at)$/i,uk=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,dk=/^(?:you|i|they|he|she|we)\b/i,fk=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${Mu(e)} is ${t}".`,replace:!0}),gB=/^(?: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;wB=/inherit|supertype|subclass|extend|specializ/i,yB=8;ane=new RegExp(`\\b(?:${[...qh].join("|")})\\b`,"i"),Lk=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,vB=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,EB=/^(?:please\s+|can\s+you\s+|could\s+you\s+)*(?:define|definition\s+of|give\s+me\s+the\s+definition\s+of)\s+(?:the\s+(?:term|word)\s+)?(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i;cne=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(nt).join("|")})$`,"i"),Bh="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",Hh="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",xB=`(?:\\s+${Hh})?`,lne=[new RegExp(`^${Bh}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${xB}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Bh}architecture\\s+(?:${Hh}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Bh}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${Hh}(?:\\s+here)?\\??$`,"i")],une={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:Pn.contains,subclasses:Pn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:Pn.calls,callees:Pn.calls,tests:Pn.tests,untested:Pn.tests,history:Pn.touches,exports:Pn.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",goals:"see the declared goals a trace is recognized against, and where each one came from",syllogise:"materialize the entailed facts that follow from what's remembered about one term",wiki:"toggle the live Wikipedia supplement for questions nothing local can answer",wikipedia:"choose which source the research lane fetches from",wikidata:"choose which source the research lane fetches from",export:"write the memory store to a file, in the standard JSONL shape",ingest:"read a local text file and store every fact the recognizer grounds from it",news:"surface or work the news feed built over this graph"},Mk="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",dne=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+${Mk}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),fne=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${Mk}\\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"),pne=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"),mne=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"),hne=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"),zu="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",gne=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${zu}\\s*\\??$`,"i"),bne=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${zu}\\s*\\??$`,"i"),wne=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${zu}\\s*\\??$`,"i"),yne=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${zu}\\s*[.!]*$`,"i"),SB=Object.freeze([...qh].filter(e=>e!=="here").concat("they")),$ne=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${SB.join("|")})\\b(\\s+\\S.*)?$`,"i"),vne=ne(".tmct","memory","corpus-seed.json")});ka();We();Wn();ou();var Bu={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 zk=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:memberOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),$r=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),Uu=e=>zk[e]||"other",kB=e=>Math.max(0,Math.min(1,e));function Fk(e){let t=(e.sourceTypes||[]).map(n=>ks[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:ks.entailed}function RB(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function Dk(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function Bk(e,t,n={},s={}){let o={...Bu,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(E=>E&&E.object&&E.object!==e),a=[],c=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,l=[];for(let E of i){if(Uu(E.predicate)==="isa"){let k=Dk(E.object,n);if(c&&k>o.uninformativeClassMaxShare){a.push({row:E,family:"isa",reason:"uninformative-class",share:k});continue}}l.push(E)}let u=l.filter(E=>Uu(E.predicate)==="isa").map(E=>E.object),d=su(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),p=new Map,f=new Map;for(let E of d.clusters){let k=0;for(let O of E.objects){f.set(O,E.label);let S=l.find(_=>_.object===O&&Uu(_.predicate)==="isa");k+=S?Fk(S):0}p.set(E.label,k)}let m=null,h=-1;for(let[E,k]of[...p].sort((O,S)=>O[0].localeCompare(S[0])))k>h&&(h=k,m=E);let b=[];for(let E of l){let k=Uu(E.predicate),O=Fk(E),S={provenance:O};if(RB(E)&&(O-=o.entailedDepthPenalty,S.entailed=!0),k==="isa"){let y=.6+.4*(1-Dk(E.object,n));O*=y,S.informativeness=y;let T=f.get(E.object);m&&T&&T!==m&&(O-=o.minoritySensePenalty,S.minoritySense=T)}O=kB(O),b.push({row:E,family:k,score:O,reasons:S})}let g=[];for(let E of b)E.score<o.minScore?a.push({row:E.row,family:E.family,reason:"below-floor",score:E.score}):g.push(E);let $=new Map;for(let E of g)$.has(E.family)||$.set(E.family,[]),$.get(E.family).push(E);for(let E of $.values())E.sort((k,O)=>O.score-k.score||k.row.object.localeCompare(O.row.object));let w=$r.filter(E=>$.has(E)).concat([...$.keys()].filter(E=>!$r.includes(E)).sort()),x=[],R=!1;for(;x.length<r&&!R;){R=!0;for(let E of w){let k=$.get(E);if(k&&k.length&&(x.push(k.shift()),R=!1,x.length>=r))break}}for(let E of w)for(let k of $.get(E)||[])a.push({row:k.row,family:k.family,reason:"over-budget",score:k.score});return x.sort((E,k)=>{let O=$r.indexOf(E.family),S=$r.indexOf(k.family);return O-S||k.score-E.score||E.row.object.localeCompare(k.row.object)}),{term:e,selected:x,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}Ii();Ze();var _B=new Set(["isa","location","partOf","capableOf","usedFor"]),TB=new Set(["single","several","chained","group","closer"]),Uk=(e,t)=>`${e}:${t}`;function eg(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!_B.has(n.family)||typeof n.form!="string"||!TB.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=Uk(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 vr=e=>`${Is(e)} ${e}`;function AB(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=vr(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Oi(s.map(vr))}`:n}function CB(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(c=>String(c||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Mr(o),A_TERM:vr(o),A_TERM_CAP:Mr(vr(o)),TERMS:wc(o),TERMS_CAP:Mr(wc(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?vr(a):"",OBJECT:i,A_OBJECT:i?vr(i):"",OBJECTS_A:Oi(r.map(vr)),OBJECTS_PLURAL:Oi(r.map(wc)),OBJECTS_RAW:Oi(r),CHAIN:AB(n&&n.length?n:r.slice(0,1))}}function OB(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(Uk(t,i)):null,c=a?a.templates:null;if(!c||!c.length)return null;let l=s.variantSeed??"",u=Oc(`${r}|${t}|${i}|${l}`)%c.length,d=s.objectsOverride||o.map(f=>f.object),p=OB(c[u],CB(r,d,s.chain,s.parent));return p?{text:p,rows:o,family:t,form:i}:null}Ii();var IB=$r.filter(e=>e!=="isa"&&e!=="other");function NB(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 Wk(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 LB(e,t){let n=c=>(t?.[c.object]||[])[1]||null,s=new Map;for(let c of e||[]){let l=n(c);l&&s.set(l,(s.get(l)||0)+1)}let o=new Map,r=[],i=[];for(let c of e||[]){let l=n(c);l&&s.get(l)>=2?(o.has(l)||(o.set(l,[]),r.push(l)),o.get(l).push(c)):i.push(c)}let a=r.map(c=>({parent:c,rows:o.get(c)}));return i.length&&a.push({parent:null,rows:i}),a}function PB(e,t,n){let s=new Map,o=new Map;for(let c of t||[]){let l=e?.[c.object];if(!Array.isArray(l)||l.length<2)continue;let u=l[l.length-1];!u||u===c.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(c))}let r=[...s.keys()].sort((c,l)=>s.get(l)-s.get(c)||c.localeCompare(l)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let c of r)for(let l of o.get(c)||[])a.has(l.id)||(a.add(l.id),i.push(l));return{roots:r,rows:i}}function MB(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let p=t[e[0].object],f=p&&p.length>1?"chained":"single",m=Hs(s,"isa",e,{term:n,form:f,chain:p});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let p=Hs(s,"isa",e,{term:n,form:"several"});return p&&r.push({...p,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),c=Hs(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});c&&r.push({...c,role:"names-term",paragraph:"definition"});let l=[];for(let p of LB(a,t))for(let f of Wk(p.rows,o.maxObjectsPerBodySentence))l.push({parent:p.parent,rows:f});if(l.length>o.maxBodySentences){let p=l.slice(0,o.maxBodySentences),f=p[p.length-1];for(let m of l.slice(o.maxBodySentences))f.rows=f.rows.concat(m.rows);f.parent=null,l=p}for(let p of l){let f=p.parent?Hs(s,"isa",p.rows,{term:n,form:"group",parent:p.parent,variantSeed:p.parent}):Hs(s,"isa",p.rows,{term:n,form:"several",variantSeed:n});f&&r.push({...f,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=PB(t,e,o.closerRootCount);if(u.length){let p=Hs(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});p&&r.push({...p,role:"closes-isa",paragraph:"definition"})}return r}function FB(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Mr(`${Is(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function DB(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 Gk(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...Bu,...n.config||{}},a=NB(e?.selected||[]),c=[];for(let u of MB(a.get("isa")||[],r,s,t,i))c.push(u);for(let u of IB){let d=a.get(u);if(!(!d||!d.length))for(let p of Wk(d,i.maxObjectsPerBodySentence)){let f=Hs(t,u,p,{term:s});f&&c.push({...f,role:"describes",paragraph:"description"})}}FB(c,s);let l=new Map;for(let u of c)for(let d of u.rows)l.has(d.id)||l.set(d.id,d);return{term:s,sentences:c,paragraphs:DB(c,o),provenanceRows:[...l.values()]}}var zB=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function BB(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 UB=Object.freeze({facts:"show the facts",chains:"show the chains"});function WB(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:UB,facts:n.map(zB),factCount:n.length,chains:s}}function Vk(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:BB(t?.provenanceRows||[]),detail:WB(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function Kk(e,t,n={},s=new Map,o={}){let r=Bk(e,t,n,o),i=Gk(r,s,o);return Vk(r,i,o)}ou();ja();var Hk=new Set(["rdfs:subClassOf","rdf:type"]);function qk(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(Hk.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 Yk(e,t,n=6){let s=Ra(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=nu(r,s,{cap:n,stopAt:eu});i.length>1&&(o[r]=i)}return o}function Xk(e){let t=[],n=new Set;for(let s of e||[])!s||!Hk.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}We();ka();function GB(e,t,n,s,o={}){let r=eg(s||[]);if(!r||r.size===0)return null;let i=t||[],a=qk(n||i),c=Yk(a.subClassEdges,Xk(i));return Kk(e,i,a,r,{...o,chains:c})}function Jk(e,t,n,s={}){let o=wt(e||{individuals:[],objectProperties:[]}),r=ee(V,t),i=o.filter(c=>r.has(c.subject));if(!i.length)return null;let a=GB(t,i,o,n,s);return VB(a)}function VB(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 KB="no session is open on this page yet \u2014 await tmct.open() first",Qk=Symbol.for("tmct.surface.fallback");function Zk({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[Qk])return a;let c=null,l=()=>{if(!c)throw new Error(KB);return c},u={async open(...d){return c=await e(...d),c},get session(){return c},async turn(d,p){let f=l();return s?s(d,p,f):typeof f.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:f.turn(d,p)},async ask(d,p){return t?t(d,p,l()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,p){return n?n(d,p,l()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[Qk]=r,i.tmct=u,u}function HB({payload:e=null}={}){let t=la();return e&&(t.payload=e),{memoryDir:t}}async function qB(e,t,n){let s=null;try{s=await Ck(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await Nk(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}}Zk({open:HB,ask:qB,page:{normFactTerm:V,digestTermFromPayloadBrowser:Jk},fallback:!0});})();