@polycode-projects/the-mechanical-code-talker 5.0.4 → 5.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/adapters/memory/core.mjs +53 -0
- package/src/domain/game-config.mjs +6 -0
- package/src/domain/memory/causal-stability.mjs +82 -0
- package/src/domain/town-square-world.mjs +36 -0
- package/src/services/mudiii-turn.mjs +250 -1
- package/src/services/mudiii-viz.mjs +60 -45
- package/src/services/predator-prey.mjs +68 -7
- package/src/surfaces/web/memory-ask-browser.bundle.js +91 -91
- package/src/surfaces/web/mudiii-browser-entry.mjs +86 -2
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
(()=>{var L$=Object.defineProperty;var O=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Un=(e,t)=>{for(var n in t)L$(e,n,{get:t[n],enumerable:!0})};var ct,oO,rO,iO,aO,cO,lO,uO,dO,pO,fO,mO,hO,gO,bO,wO,yO,Q,ve,Qt,cp,$O,vO,xO,Ue=O(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},oO=ct("createRequire"),rO=ct("readFileSync"),iO=ct("access"),aO=ct("readFile"),cO=ct("writeFile"),lO=ct("appendFile"),uO=ct("mkdir"),dO=ct("mkdtemp"),pO=ct("rename"),fO=ct("unlink"),mO=ct("rm"),hO=ct("stat"),gO=ct("copyFile"),bO=ct("readdir"),wO=ct("createReadStream"),yO=ct("createWriteStream"),Q=(...e)=>e.join("/"),ve=e=>String(e).replace(/\/[^/]*$/,""),Qt=(...e)=>e.join("/"),cp="/",$O=ct("randomBytes"),vO=ct("spawnSync"),xO=ct("createInterface")});var lt,SO,kO,lp,ze,$r,N$,kn,P$,vi,yc,M$,F$,jO,D$,_O,RO,TO,AO,IO,_t=O(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SO=lt("createRequire"),kO=lt("readFileSync"),lp=lt("access"),ze=lt("readFile"),$r=lt("writeFile"),N$=lt("appendFile"),kn=lt("mkdir"),P$=lt("mkdtemp"),vi=lt("rename"),yc=lt("unlink"),M$=lt("rm"),F$=lt("stat"),jO=lt("copyFile"),D$=lt("readdir"),_O=lt("createReadStream"),RO=lt("createWriteStream"),TO=lt("randomBytes"),AO=lt("spawnSync"),IO=lt("createInterface")});function ko(e){let t=U$.exec(String(e||""));return t?t[1].toLowerCase():null}function xi(e){return String(e||"").replace(B$,"$1")}function Ws(e){return e.replace(W$,"").trim()}function rn(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(q$,"").trim();if(s=s.replace(H$,"").trim(),s===t)break;t=s}return t}var up,vr,Bs,dp,pp,z$,U$,xr,Zt,$c,B$,bn,vc,W$,G$,q$,V$,H$,de,Er,K$,fp,Be,en,fs,mp,xc,Ec,Sc,hp,Sr,Gs,gp,bp,qs,Bn,Wn,jo,Xe,wp,Vs,Hs,ms,jn,yp,kr,_o,Ei,Ro,$p,Gn=O(()=>{up=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],vr={imports:{bare:"import",comment:"Module -> Module: subject's import graph references object (usesComplexType).",verbs:["couples to","couple to","depends on","imports","import","relies on","rely on","requires","require","references","reference","pulls in","pull in","built on","builds on","build on","uses code from","grabs","grab","pulls from","pull from","leans on","lean on","is wired to","are wired to","is hooked up to","are hooked up to","importing"]},uses:{bare:"use",comment:"query-side union: imports (Module->Module) + calls (Module->Module) + callsSymbol (fn->fn).",verbs:["uses","use","makes use of","make use of","talks to","talk to","using"]},calls:{bare:"call",comment:"Function/Method -> Function/Class (symbol-grain) or Module -> Module (coarse): subject invokes object.",verbs:["invokes","invoke","calls","call","runs","run","executes","execute","hits","hit","triggers","trigger","fires","fire","kicks off","kick off","calling"]},defines:{bare:"define",comment:"Module -> top-level Function/Class/Method/Attribute: subject declares object.",verbs:["defines","define","declares","declare","has","have","holds","hold","defining"]},contains:{bare:"contain",comment:"Class -> Method/Attribute: subject's membership includes object.",verbs:["contains","contain","lives in","live in","is defined in","are defined in","is part of","are part of","sits in","sit in","sits inside","sit inside","containing"]},tests:{bare:"test",comment:"Module -> Module: subject is a test module importing/covering object.",verbs:["tests","test","covers","cover","verifies","verify","exercises","exercise","checks","check","makes sure of","make sure of","testing"]},inherits:{bare:"inherit from",comment:"Class -> Class: subject's declared base resolves to object (subclassOf).",verbs:["inherits from","inherit from","inherits","inherit","extends","extend","subclasses","subclass","derives from","derive from","is a subclass of","are a subclass of","is a kind of","are a kind of","is built off","are built off","is built on top of","are built on top of","extending","inheriting from","inheriting","subclassing","extends from",...up]},touches:{bare:"touch",comment:"Commit -> Module (coarse) or Commit -> symbol (fine, touchesSymbol): a commit's changed-line-range intersects object.",verbs:["touched","touches","changed","change","modified","modifies","was changed in","were changed in","was edited in","were edited in","was modified by","were modified by","was tweaked in","were tweaked in","got changed in","got edited in","touch","changed in","landed in","land in","was in","were in","went into","included in","updated","edited","touching"]},cochange:{bare:"co-change with",comment:"Module -> Module: subject and object are frequently committed together (changeCoupledWith).",verbs:["changed with","co-changes with","co-change with","changes alongside","change alongside","shares commits with","share commits with","tends to change together with","tend to change together with","moves together with","move together with","changed together with","change together with","changes together with","changes with","change with","tends to change with","tend to change with","usually changes with"]},reexports:{bare:"re-export",comment:"Module -> exported symbol: subject's public API surface (__all__/export list).",verbs:["exports","export","re-exports","re-export","passes through","pass through","exposes","expose","exporting"]},serves:{bare:"serve",comment:"subject provides or backs the object \u2014 a handler serving a route, a module serving a surface (mgx:serves).",verbs:["serves","serve","serving"]},denotes:{bare:"denote",comment:"subject names the object \u2014 a glossary/lexicon term denoting a code entity (mgx:denotes).",verbs:["denotes","denote","denoting"]}},Bs=Object.freeze({placement:Object.freeze({predicate:"mgx:currently-in",comment:"individual -> place: where the subject is right now.",nouns:Object.freeze(["location","locations","position","positions","place","places","whereabouts","room","rooms"]),reads:"is in",matchesLocativePredicates:!0}),mood:Object.freeze({predicate:"mgx:feels",comment:"individual -> mood word: how the subject feels right now.",nouns:Object.freeze(["mood","moods","feeling","feelings","emotion","emotions"]),reads:"feels"}),mass:Object.freeze({predicate:"mgx:hasMass",comment:"individual -> number: the subject's current mass.",nouns:Object.freeze(["mass","masses","weight","weights"]),reads:"has mass"})}),dp=Object.freeze(Object.fromEntries(Object.entries(Bs).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),pp=Object.freeze(Object.values(Bs).map(e=>e.predicate)),z$=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),U$=new RegExp(`^mgx:[a-z]+-(${z$.join("|")})$`,"i");xr=Object.freeze([...up,"is the superclass of","are the superclass of","is the parent class of"]),Zt=Object.freeze(["defined","declared","located","implemented"]),$c=Object.freeze(["now","currently","right now","at the moment","these days","today"]),B$=new RegExp(`\\s+(?:${[...$c].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");bn=Object.freeze(["mentioned","referenced"]),vc=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),W$=new RegExp(`\\s+(?:${vc.join("|")})\\s*[?.!]*$`,"i");G$=Object.freeze(["then","though","too"]),q$=new RegExp(`\\s+(?:${G$.join("|")})\\s*[?.!]*$`,"i"),V$=Object.freeze(["please explain","explain"]),H$=new RegExp(`,\\s*(?:${V$.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(vr).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Er=Object.freeze(new Set(["has","have","holds","hold"])),K$=e=>!xr.includes(e),fp=Object.freeze([...new Set(Object.keys(de).filter(K$).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),Be=Object.freeze({function:"Function",functions:"Function",method:"Method",methods:"Method",class:"Class",classes:"Class",module:"Module",modules:"Module",mod:"Module",mods:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),en=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),fs=Object.freeze({imported:"imports",called:"calls",used:"uses",tested:"tests",covered:"tests",verified:"tests",exercised:"tests",checked:"tests",defined:"defines",declared:"defines",inherited:"inherits",extended:"inherits",subclassed:"inherits",contained:"contains",exported:"reexports","re-exported":"reexports",exposed:"reexports",touched:"touches",changed:"touches",modified:"touches",edited:"touches",updated:"touches"}),mp=Object.freeze({"inherited from":{kind:"inherits",role:"object"},"extended from":{kind:"inherits",role:"object"},"subclassed from":{kind:"inherits",role:"object"},"defined in":{kind:"defines",role:"agent"},"declared in":{kind:"defines",role:"agent"},"contained in":{kind:"contains",role:"agent"},"imported by":{kind:"imports",role:"agent"},"called by":{kind:"calls",role:"agent"},"used by":{kind:"uses",role:"agent"},"tested by":{kind:"tests",role:"agent"},"covered by":{kind:"tests",role:"agent"},"touched by":{kind:"touches",role:"agent"},"changed by":{kind:"touches",role:"agent"},"exported by":{kind:"reexports",role:"agent"}}),xc=Object.freeze({"ain't":"is not",aint:"is not","isn't":"is not",isnt:"is not","aren't":"are not",arent:"are not","doesn't":"does not",doesnt:"does not","don't":"do not",dont:"do not","didn't":"did not",didnt:"did not","there's":"there is",theres:"there is","what's":"what is",whats:"what is","who's":"who is",whos:"who is",gonna:"going to",wanna:"want to",gotta:"got to",yer:"your",ur:"your",gimme:"give me"}),Ec=Object.freeze({funtion:"function",funtions:"functions",fucntion:"function",fucntions:"functions",functoin:"function",functoins:"functions",calss:"class",calsses:"classes",classs:"class",clases:"classes",modul:"module",moduls:"modules",moduel:"module",moduels:"modules",moudle:"module",moudles:"modules",methdo:"method",methdos:"methods",mehtod:"method",mehtods:"methods",comit:"commit",comits:"commits",commmit:"commit",commmits:"commits",varaible:"variable",varaibles:"variables",varibale:"variable",varibales:"variables",atribute:"attribute",atributes:"attributes",improt:"import",improts:"imports",imoprt:"import",imoprts:"imports",inherts:"inherits",inheirts:"inherits",extands:"extends",extneds:"extends",depnds:"depends",touchs:"touches",tuoches:"touches",touhced:"touched",touchd:"touched",defned:"defined",chagned:"changed",chnaged:"changed",chagnes:"changes",chnages:"changes",calles:"calls",exprot:"export",exprots:"exports",tets:"tests",whcih:"which",wich:"which",whihc:"which",wehre:"where",whre:"where",waht:"what",wat:"what",dat:"that",dose:"does",doess:"does",teh:"the",manyn:"many",mnay:"many",amny:"many",mnany:"many",hwo:"how",coutn:"count",conut:"count",cuont:"count",ocunt:"count",numer:"number",nubmer:"number",numbr:"number",nmuber:"number",lst:"list",lsit:"list",ilst:"list",shwo:"show",hsow:"show",dispaly:"display",dsiplay:"display",funtcions:"functions",funciton:"function",funcitons:"functions"}),Sc=Object.freeze({folder:"module",folders:"modules",directory:"module",directories:"modules",func:"function",funcs:"functions",changeset:"commit",changesets:"commits",revision:"commit",revisions:"commits",property:"attribute",properties:"attributes"}),hp=/\b([a-z]{3,})in'/gi,Sr=Object.freeze(["um","uh","erm","so","like","yo","hey","bru","bro","fam","mate","please","could you","can you","would you","tell me","i wonder","just wondering","quickly","real quick","kinda","sorta","btw","by the way","you","quick q"]),Gs=Object.freeze(["this","it","that","here","this one","that one"]),gp=Object.freeze([{re:/\bthere\s+is\s+not\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bthere\s+is\s+no\s+\S+\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bis\s+not\s+there\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\b(?:nobody|nothing|no one)\s+(\S.*?)(?:,?\s+does\s+it\??|,?\s+do\s+they\??)?$/i,to:e=>`what ${e[1]}`}]),bp=Object.freeze([{re:/^what\s+(?:is|was|were|are)\s+in\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+(?:went|got)\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+made\s+it\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`}]),qs=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),Bn=Object.freeze(["that","which","who"]),Wn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),jo=Object.freeze({"but do not":"difference","but does not":"difference","and do not":"difference","and does not":"difference","but not":"difference","and not":"difference",except:"difference",without:"difference",and:"intersection",plus:"intersection",but:"intersection",or:"union"}),Xe=Object.freeze({public:{via:"visibility",value:"public"},private:{via:"visibility",value:"private"},protected:{via:"visibility",value:"protected"},static:{via:"attr",attr:"isStatic"},abstract:{via:"attr",attr:"isAbstract"},constant:{via:"attr",attr:"isConstant"},exported:{via:"exported"},"re-exported":{via:"exported"},tested:{via:"tested",value:!0},covered:{via:"tested",value:!0},untested:{via:"tested",value:!1},uncovered:{via:"tested",value:!1}}),wp=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Vs=Object.freeze(["how many","how much","how many of","number of","total number of","quantity of","tally of","sum of","total of","amount of","count","count up","count of","tot up"]),Hs=Object.freeze(["list","show","show me","show us","display","print","print out","dump","enumerate","name","give me","get me","spit out","rattle off","run down","run through","ls","what are","which are"]),ms=Object.freeze({most:"most",greatest:"most",highest:"most",biggest:"most",largest:"most","most-connected":"most","most connected":"most",fewest:"fewest",least:"fewest",smallest:"fewest",lowest:"fewest"}),jn=Object.freeze({imports:{kind:"imports",dir:"out"},dependencies:{kind:"imports",dir:"out"},importers:{kind:"imports",dir:"in"},dependents:{kind:"imports",dir:"in"},callers:{kind:"calls",dir:"in",sibling:"callsSymbol"},callees:{kind:"calls",dir:"out",sibling:"callsSymbol"},calls:{kind:"calls",dir:"out",sibling:"callsSymbol"},methods:{kind:"contains",dir:"out",filter:"Method"},members:{kind:"contains",dir:"out"},tests:{kind:"tests",dir:"in"},test:{kind:"tests",dir:"in"},subclasses:{kind:"inherits",dir:"in"},connections:{kind:"*",dir:"both"},edges:{kind:"*",dir:"both"},connected:{kind:"*",dir:"both"},imported:{kind:"imports",dir:"in"},"depended-on":{kind:"imports",dir:"in"},depended:{kind:"imports",dir:"in"},used:{kind:"imports",dir:"in",sibling:"callsSymbol"},called:{kind:"calls",dir:"in",sibling:"callsSymbol"}}),yp=Object.freeze({tests:"Module",test:"Module"}),kr=Object.freeze(["those","them","these"]),_o=Object.freeze(["contains","defines"]),Ei=Object.freeze(["the","a","an","some","other","about","please","pls","plz","kindly","just","simply","maybe","perhaps","thanks","thank","ta","cheers","too","also","well","either","sorry","oops","actually","mean","meant","rather","hi","hello","hey","yo","hiya","howdy","ok","okay","matey","mate","buddy","pal","dude","man","bro","bru","fam","friend","sir","maam","folks","guys","everyone","dear","tmct","show","tell","give","list","find","me","us","lemme"]),Ro=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),$p=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var We,To,kc=O(()=>{We="#000000",To=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${We}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${We}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var Y$,an,vp,xp,jc,Ep,MO,FO,Sp=O(()=>{Gn();kc();Y$=()=>Object.keys(To).sort(),an=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),vp=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),xp=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),jc=Object.freeze([{name:"tmct_context",tier:"hot",summary:"A sized edit bundle for one symbol \u2014 exemplar source, sibling signatures, registration anchor and the insertion region, in one call.",agentDescription:"START HERE to add/modify code: ONE call returns a sized edit bundle (exemplar source, sibling signatures, registration, insertion region) \u2014 then write directly, don't Read.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"Module path (e.g. path/to/module) or a sibling function/class name defined in it."},depth:{type:"string",enum:["min","auto","full"],default:"auto",description:"auto (sized to the task) | min (leanest) | full (every section)."}}},example:{symbol:"django/utils/text.py"}},{name:"tmct_snippet",tier:"hot",summary:"The exact source of one function, class or Class.method \u2014 its line span only, plus a one-line in-repo call hint.",agentDescription:"EXACT source of one function/class/Class.method by name (its line span only) + a one-line in-repo call hint. Prefer over Read for a single symbol.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"function/class name, Class.method, or fn:<path>#name."}}},example:{symbol:"Truncator.chars"}},{name:"tmct_ask",tier:"hot",summary:"A structural question in plain English, answered from the graph in one call \u2014 no model, and a clean miss instead of a guess.",agentDescription:'Ask a structural question in plain English: "which functions call X", "what uses X", "where is X defined", "when did X change". One call, no model. A clean miss beats a guess.',inputSchema:{type:"object",required:["query"],properties:{query:{type:"string",description:'A free-text question, e.g. "which functions explicitly couple to logging".'}}},example:{query:"which modules import src/core/model.mjs"},chat:{exampleRepo:"examples/mini-webapp",grammar:[{form:"which <things> <relation-verb> <entity>",example:"which modules import src/core/model.mjs",answers:"the imports edge, read forwards"},{form:"what is <relation-verb-passive> <entity>",example:"what is imported by src/core/store.mjs",answers:"the same edge, read backwards \u2014 a passive is the opposite direction, not a synonym"},{form:"what <relation-verb> <entity>",example:"what uses src/lib/http.mjs",answers:"the uses union: imports plus calls"},{form:"where is <entity> <where-marker>",example:"where is saveStore defined",answers:"the definition's file and line span"},{form:"when did <entity> change",example:"when did src/core/store.mjs change",answers:"the commits that touched it, newest first"}],whereMarkers:Zt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:an("A module path, symbol name, or Class.method."),example:{symbol:"django/utils/text.py"}},{name:"tmct_signature",tier:"cold",summary:"One symbol's API surface (params, returns, raises/catches, flags, decorators, doc) without the body.",inputSchema:an("A function, method, or Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_impact",tier:"cold",summary:"Transitive reverse closure over imports/calls \u2014 what breaks if a module or symbol changes, by depth, with tests.",inputSchema:vp("The module (or a symbol it defines) whose dependents you want."),example:{module:"django/utils/text.py"}},{name:"tmct_search",tier:"cold",summary:"Free-text/ranked lookup over the code-map to find the right module or symbol.",inputSchema:{type:"object",required:[],properties:{query:{type:"string",description:"Free text to rank against the code-map. Required unless kind narrows the search on its own."},kind:{type:"string",description:"Restrict to an entity class, e.g. function, class, module."},decorator:{type:"string",description:"Restrict to definitions carrying this decorator."},name:{type:"string",description:"Restrict to definitions whose name matches."}}},example:{query:"template filters",kind:"function"}},{name:"tmct_members",tier:"cold",summary:"A class's methods + attributes (file:line, decorators) in one slice.",inputSchema:xp("The class whose members you want."),example:{class:"Truncator"}},{name:"tmct_subclasses",tier:"cold",summary:"A class's base classes plus the transitive set of classes that extend it.",inputSchema:xp("The class to walk the inheritance edges of."),example:{class:"Field"}},{name:"tmct_related",tier:"cold",summary:"A term's synonyms (skos:altLabel) and related concepts (skos:related), from the memory graph's relation facts.",inputSchema:{type:"object",required:["term"],properties:{term:{type:"string",description:"The term whose synonyms / related concepts you want."}}},example:{term:"sofa"}},{name:"tmct_sprite",tier:"cold",summary:"The sprite markup for a class, resolved up the taught rdfs:subClassOf chain \u2014 with the expression and size asked for, and the ancestor chain the resolver walked to find it.",inputSchema:{type:"object",required:["class"],properties:{class:{type:"string",description:"The class to draw, e.g. spider. Resolved through the memory graph's own rdfs:subClassOf taxonomy."},expression:{type:"string",enum:Y$(),description:"The face the sprite wears, as an mgx:feels value. A class whose template takes no expression parameter misses rather than dropping it."},size:{type:"string",description:"A taught size property word (mgx:hasProperty), resolved to a numeric render SCALE \u2014 the size of the thing drawn, not a choice of template tier."}}},example:{class:"spider",expression:"happy",size:"large"}},{name:"tmct_architecture",tier:"cold",summary:"Package/module map + the most-imported hub modules (optionally scoped to a package).",inputSchema:{type:"object",required:[],properties:{package:{type:"string",description:"Scope the map to one package. Omit for the whole repository."}}},example:{package:"django/template"}},{name:"tmct_exports",tier:"cold",summary:"A module's public __all__ surface, each name resolved to the module that defines it.",inputSchema:vp("The module whose public API surface you want."),example:{module:"django/db/models/__init__.py"}},{name:"tmct_tests_for",tier:"cold",summary:"The test modules covering a symbol or module, from the typed test edges.",inputSchema:an("The symbol or module to find covering tests for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_untested",tier:"cold",summary:"Source modules with no covering test module \u2014 a coverage-gap view (no arguments).",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_history",tier:"cold",summary:"Recent commits that touched a symbol's module (newest first).",inputSchema:an("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_file_history",tier:"cold",summary:"Commits that touched a symbol's module, each with author / date / subject.",inputSchema:an("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_method_history",tier:"cold",summary:"Commits that touched a specific method symbol (fine-grained), with author / date / subject.",inputSchema:an("A Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_class_history",tier:"cold",summary:"Commits that touched a specific class symbol (fine-grained), with author / date / subject.",inputSchema:an("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:an("The symbol whose callers you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_callees",tier:"cold",summary:"Modules a symbol's module calls into (one hop).",inputSchema:an("The symbol whose callees you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_calls",tier:"cold",summary:"The in-repo symbols a function calls (fn\u2192fn), each with file:line.",inputSchema:an("The function whose in-repo call sites you want."),example:{symbol:"slugify"}},{name:"tmct_cochanges",tier:"cold",summary:"Modules that historically change in the same commit as a symbol's module (git co-change).",inputSchema:an("The symbol whose module's change-coupling you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_context_more",tier:"cold",summary:"The bundle sections a lean tmct_context omitted (siblings / tests / cochange / class members / re-exports).",inputSchema:an("The symbol a lean tmct_context bundle was built for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_export",tier:"cold",summary:"Every stored memory fact as JSONL (subject/predicate/object/provenance) \u2014 the shape `tmct extract` emits, for backup or audit.",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_ingest",tier:"cold",summary:"Ground plain text into memory facts with the same deterministic recognizer the chat teach lane uses \u2014 the strict tier, plus an optional lower-trust fuzzy tier \u2014 and report the canonical triples.",inputSchema:{type:"object",required:["text"],properties:{text:{type:"string",description:"The plain text to ground into facts."},optimistic:{type:"boolean",description:"Also run the lower-trust fuzzy tier over sentences the strict recognizer skips."}}},example:{text:"A kettle is a container. An otter is a mammal.",optimistic:!0}}]),Ep=jc.filter(e=>e.tier==="hot"),MO=jc.filter(e=>e.tier==="cold"),FO=Object.freeze(jc.map(e=>e.name))});var kp,Re,zt=O(()=>{Ue();kp=Q(".tmct","graph.json"),Re=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function X$(e){let t=new Set;for(let n of Array.isArray(e?.individuals)?e.individuals:[])n&&n.id&&t.add(n.id);return t}function jp(e){let t=(Array.isArray(e)?e:[]).map((l,c)=>({file:l?.file,payload:l?.payload||{},name:l?.name!=null&&String(l.name).length?String(l.name):String(c)})),n=t.map(({payload:l})=>X$(l)),s=new Map;for(let l of n)for(let c of l)s.set(c,(s.get(c)||0)+1);let o=new Set([...s.entries()].filter(([,l])=>l>1).map(([l])=>l)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:l,name:c}of t){a=a&&!!l.bootstrap,typeof l.generated_at=="string"&&l.generated_at>i&&(i=l.generated_at);let u=f=>o.has(f)?`${c}/${f}`:f;Array.isArray(l.classes)&&r.classes.push(...l.classes),Array.isArray(l.vocabulary)&&r.vocabulary.push(...l.vocabulary);for(let f of Array.isArray(l.individuals)?l.individuals:[]){if(!f)continue;let p={...f};p.id&&(p.id=u(p.id)),Array.isArray(p.derived_from)&&(p.derived_from=p.derived_from.map(m=>u(m))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),r.individuals.push(p)}for(let f of Array.isArray(l.objectProperties)?l.objectProperties:[]){if(!f)continue;let p={...f};Array.isArray(p.examples)&&(p.examples=p.examples.map(m=>{if(!m)return m;let h={...m};return h.subject&&(h.subject=u(h.subject)),h.object&&(h.object=u(h.object)),h})),r.objectProperties.push(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let m=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let h of Array.isArray(p)?p:[]){let g=u(h);m.includes(g)||m.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var _p=O(()=>{});var Io={};Un(Io,{clearCache:()=>J$,emptyEntities:()=>_c,fetchEntities:()=>tv,registerProvider:()=>Q$});function J$(){Ao=null,jr=null}function Q$(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Si;return Si=e??null,Ao=null,t}function _c(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function Z$(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return _c();throw new Re(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Re(`graph artifact ${e} is not valid JSON`)}}async function ev(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(jr&&jr.key===n)return jr.payload;let s=[];for(let r=0;r<t.length;r++){let i=await Z$(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=jp(s);return jr={key:n,payload:o},o}async function tv(e){if(Si){let s;try{s=await Si(e)}catch(o){throw o instanceof Re?o:new Re(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Re("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return ev(e);if(Ao&&Ao.file===e.graphFile)return Ao.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return _c();throw new Re(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Re(`graph artifact ${e.graphFile} is not valid JSON`)}return Ao={file:e.graphFile,payload:n},n}var Ao,jr,Si,_r=O(()=>{_t();zt();_p();Ao=null,jr=null,Si=null});function _n(e){if(!e)return[];let t=String(e).replace(/\.[A-Za-z0-9]+$/,"");return t=t.replace(/[/\\]/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/([A-Za-z])([0-9])/g,"$1 $2").replace(/([0-9])([A-Za-z])/g,"$1 $2").replace(/[_\-.]+/g," "),t.split(/\s+/).map(n=>n.toLowerCase()).filter(n=>n.length>1&&n.length<=Rp)}function Rc(e){if(!e)return[];let t=[],n=new Set;for(let s of String(e).toLowerCase().split(/[^a-z0-9]+/))if(!(s.length<2||s.length>Rp||nv.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=sv))break;return t}function ki({name:e,doc:t}={}){return[...new Set([..._n(e),...Rc(t)])].sort()}function Tp(e){let t=Object.create(null);for(let n of e){let s=(n.attributes||[]).find(o=>o.key==="prose_tokens");if(s?.value)for(let o of s.value.split(" "))t[o]||(t[o]=[]),t[o].push(n.id)}for(let n of Object.keys(t))t[n].sort();return t}function Ks(e,t,{limit:n=10}={}){let s=[...new Set([..._n(t),...Rc(t)])];if(!s.length)return[];let o=new Map;for(let r of s)for(let i of e?.[r]||[])o.set(i,(o.get(i)||0)+1);return[...o.entries()].sort((r,i)=>i[1]-r[1]||String(r[0]).localeCompare(i[0])).slice(0,n).map(([r,i])=>({id:r,score:i}))}function Ap(e,t){let n=e&&(e["tmct:layers"]?e:e.proseIndex),s=n&&n["tmct:layers"],o=String(t||"").toLowerCase(),r={ids:[],via:null};if(!o||!s||typeof s!="object")return r;let i=new Set,a=new Set;for(let l of Object.keys(s)){let c=s[l];if(!c||typeof c!="object")continue;let u=c[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let f of d)i.add(f);a.add(l)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var nv,Rp,sv,hs=O(()=>{nv=new Set("a an and or but the of to in on at for with from by as is are was were be been being it its this that these those i you he she they we me my your our do does did not no yes if then else than so such can will would should could may might about into over under out up down off again more most some any all what which who whom whose when where why how".split(/\s+/)),Rp=40,sv=120});function Ip(e){let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(":"),r=o>=0?n.slice(o+1):"";return{createdAt:s,...r?{sessionId:r}:{}}}function ov(e){if(!e.startsWith(Op))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Cp);if(o<0)return null;let r=n.slice(o+Cp.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Op.length,o),createdAt:s}:null}function bs(e){let t=String(e||"").trim();if(!t)return null;if(t.startsWith("reference:")){let s=t.slice(10),o=s.indexOf(":");if(o<0)return{kind:"reference",pack:s||"unknown",article:""};let r=s.slice(0,o)||"unknown";return{kind:iv(r),pack:r,article:s.slice(o+1)}}if(t.startsWith("research:")){let s=t.slice(9),o=s.lastIndexOf("@");return{kind:"referenceLive",pack:"research",article:(o>=0?s.slice(0,o):s).trim()||"unknown"}}let n=t.split(/\s+/)[0];if(n.startsWith("corpus-weak:"))return{kind:"corpusWeak",name:n.slice(12)||"unknown"};if(n.startsWith("corpus:"))return{kind:"corpus",name:n.slice(7)||"unknown"};if(n.startsWith("child:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("world:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("mud:"))return{kind:"corpus",name:`mud:${n.slice(4).split(":")[0]||"unknown"}`};if(n.startsWith("ace:"))return{kind:"operator",...Ip(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=ov(s);return o||{kind:"teach",...Ip(s)}}return n.startsWith("web:")?{kind:"web",url:n.slice(4)}:n.startsWith("url:")?{kind:"web",url:n.slice(4)}:n.startsWith("optimistic-extract:")?{kind:"optimisticExtract",name:n.slice(19)||"unknown"}:n.startsWith("extracted:")?{kind:"extracted",name:n.slice(10)||"unknown"}:n.startsWith("entailed:")?{kind:"entailed",rule:n.slice(9)}:n.startsWith("chat:")||n.startsWith("session:")||n.startsWith("operator")?{kind:"operator"}:null}function Fp(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Np;let n=Number(t);return Number.isFinite(n)?Math.max(Tc,Math.min(Mp,n)):Np}function Dp(e,t=Date.now(),n=av){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Lp+(1-Lp)*Math.pow(.5,o/n)}function zp(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let p of o){if(r.has(p))continue;r.add(p);let m=t[p],h=cv(m);if(!h)continue;i.push(h);let g=(Ys[h]??0)*Fp(m);a.push(Math.max(0,Math.min(1,g)))}let l=0,c=1;for(let p of a)c*=1-p;if(a.length&&(l=Math.min(1,1-c)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let p=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;l=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*p))}let u=Dp(e?.createdAt,s,n.halfLifeMs),d=Co(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Co(u)};return{score:d,inputs:f}}function _i(e,t){let n=(Ys[e]??0)*Fp(t);return Co(Math.max(0,Math.min(1,n)))}function lv(e){if(e==="operator")return 1;let t=Ys[e];return t===void 0?1:(t+1)/2}function Ri(e,t={}){let n=typeof t.now=="number"?t.now:Date.now(),s=Array.isArray(e)?e:[],o=new Map,r=[];for(let a of s){let l=Dp(a?.assertedAt,n,t.halfLifeMs),c=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,c*l)),f=o.get(u)||{complement:1,strongest:0};f.complement*=1-d,f.strongest=Math.max(f.strongest,d),o.set(u,f),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:c,recency:Co(l)})}let i=1;for(let[a,l]of o){let c=Math.max(lv(a),l.strongest);i*=1-Math.min(1-l.complement,c)}return{score:s.length?Co(Math.min(1,1-i)):0,inputs:r}}function Up(e){return Ri(e,{halfLifeMs:uv})}function Bp({factsAsserted:e=0,factsContradicted:t=0}={}){let n=Math.max(0,Number(e)||0),s=Math.max(0,Number(t)||0),o=Math.max(-1,Math.min(1,(n-2*s)/Math.max(1,n))),r=n/(n+dv),i=(o*r+1)/2;return Co(Tc+(Mp-Tc)*i)}var Oo,ji,Je,gs,Cp,Op,rv,iv,Ys,Ac,Pp,av,Lp,Tc,Mp,Np,Co,cv,uv,dv,ws=O(()=>{Oo="mgx:trustScore",ji="mgx:trustInputs",Je="mgx:createdAt",gs="mgx:updatedAt";Cp="#node:",Op="peer:";rv="wikipedia-live",iv=e=>e===rv?"referenceLive":"reference";Ys=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Ac=Object.freeze({operator:{subClass:"tmct:AgentSource",prov:"prov:Agent"},teach:{subClass:"tmct:AgentSource",prov:"prov:Agent"},provider:{subClass:"tmct:AgentSource",prov:"prov:Agent"},corpus:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},corpusWeak:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},reference:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},referenceLive:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},web:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},extracted:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},optimisticExtract:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},entailed:{subClass:"tmct:ActivitySource",prov:"prov:Activity"}}),Pp=new Set(Object.entries(Ac).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),av=720*60*60*1e3,Lp=.9,Tc=.5,Mp=1.5,Np=1,Co=(e,t=6)=>Number(e.toFixed(t)),cv=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";uv=1/0;dv=19});var Xs,Ic=O(()=>{Xs=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Cc(e,t){return Math.log(1+e/(1+t))}var Rr=O(()=>{});var Ai={};Un(Ai,{bfsLevels:()=>Ti,findActionPath:()=>Oc,findReachableSet:()=>Lc});function Wp(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function Gp(e,t){let n=[];for(let{action:s,nextState:o}of t(e)||[])n.push({state:o,actions:[s],states:[e,o]});return n}function Oc(e,t,n,{maxDepth:s=50,stateKey:o=Wp}={}){if(t(e))return{actions:[],states:[e]};let r=Gp(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let c of r)if(t(c.state))return{actions:c.actions,states:c.states};if(a===s)break;let l=[];for(let c of r){let u=o(c.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:f}of n(c.state)||[]){let p=o(f);i.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}}r=l}return null}function Lc(e,t,{maxDepth:n=50,stateKey:s=Wp}={}){let o=Gp(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let l=[];for(let c of o){let u=s(c.state);if(!r.has(u)&&(r.add(u),i.push({node:c.state,path:{actions:c.actions,states:c.states}}),a!==n))for(let{action:d,nextState:f}of t(c.state)||[]){let p=s(f);r.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}o=l}return i}function*Ti(e,t,{maxDepth:n=8,keyOf:s=o=>o}={}){let o=new Set([e]),r=[e];for(let i=1;i<=n&&r.length;i+=1){let a=[],l=[];for(let c of r)for(let u of t(c)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),l.push(d))}r=l,yield a}}var Js=O(()=>{});function Ci(e){let t=Array.isArray(e?.individuals)?e.individuals:[],n=new Map;for(let r of t)r&&r.id&&n.set(r.id,r);let s=(Array.isArray(e?.objectProperties)?e.objectProperties:[]).filter(r=>r&&(r.predicate||r.prop)).map(r=>{let i=(Array.isArray(r.examples)?r.examples:[]).filter(a=>a&&a.subject&&a.object);return{predicate:String(r.predicate||""),prop:r.prop||null,count:Number(r.count)||i.length,edges:i}}),o=s.filter(r=>r.count>r.edges.length).map(r=>({predicate:r.predicate,count:r.count,shown:r.edges.length}));return{individuals:t,byId:n,relations:s,truncated:o,generatedAt:e?.generated_at||null,proseIndex:e?.proseIndex||{}}}function zc(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Kn(e){let t=String(e?.prop||"").toLowerCase();if(qp[t])return qp[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":null}function Vn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Nc(e){let t=Vn(e).split("/");return t[t.length-1]}function pv(e){return(e?.derived_from||[]).filter(of).length}function Vp(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+pv(e)}function tn(e,t){let n=Vn(t);if(!n)return{match:null,candidates:[]};let s=Nc(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Vn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(Nc(a)===s||Nc(a).replace(/\.[a-z]+$/,"")===s)?c=80:a.includes(n)&&(c=Math.max(10,50-(a.length-n.length))),c>0&&r.push({ind:i,score:c})}return r.sort((i,a)=>a.score-i.score||Vp(a.ind)-Vp(i.ind)||String(i.ind.label).length-String(a.ind.label).length),{match:r[0]?.ind||null,candidates:r.slice(1,5).map(i=>i.ind)}}function Rt(e){let t=(e?.attributes||[]).find(s=>s.key==="site");if(!t)return null;let n=String(t.value).match(/^(.*):(\d+)(?:-(\d+))?$/);return n?{path:n[1],start:Number(n[2]),end:n[3]?Number(n[3]):Number(n[2])}:null}function fv(e,t){let n=[],s=[];for(let o of e.relations){let r=o.edges.filter(a=>a.subject===t),i=o.edges.filter(a=>a.object===t);r.length&&n.push({group:o,edges:r}),i.length&&s.push({group:o,edges:i})}return{out:n,incoming:s}}function Hp(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Hn(e){let t=e||"Entity",n=_n(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function ut(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Uc(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Hn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(of);o.length&&s.push(`attestation: touched by ${o.length} commit(s)`);for(let l of t.attributes||[])s.push(`attribute: ${l.key} = ${l.value}${l.prop?` [${l.prop}]`:""}`);let{out:r,incoming:i}=fv(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:l,edges:c}of r)s.push(` ${Hp(l)} (${c.length}) \u2192 ${ut(c.map(u=>u.objectLabel||u.object),Kp)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${Hp(l)} (${c.length}) by ${ut(c.map(u=>u.subjectLabel||u.subject),Kp)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${ut(a,mv)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${Hn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(hv(e)),s.join(`
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function af(e){let t=new Map;for(let n of e.relations)if(Kn(n)==="defines")for(let s of n.edges)t.has(s.subject)||t.set(s.subject,[]),t.get(s.subject).push(s.objectLabel||s.object);return t}function Xp(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function pf(e,t,n=null){let s=n||(i=>qn(e,i)),o=new Map,r=(i,a)=>{!i||!a||i===a||(o.has(i)||o.set(i,new Set),o.has(a)||o.set(a,new Set),o.get(i).add(a),o.get(a).add(i))};for(let i of t)for(let a of ke(e,i))r(s(a.subject),s(a.object));return o}function Zv(e,t,n){if(t.length<2)return;let s=new Map(t.map(c=>[c.ind.id,c])),o=new Map(t.map(c=>[c.ind.id,c.score])),r=c=>{if(!c.size)return[[],[]];let u=0;for(let m of c.values())u=Math.max(u,m);let d=[...c.entries()].sort((m,h)=>h[1]-m[1]),f=[],p=[];for(let[m,h]of d)h>=u*Wv&&f.length<n?f.push([m,h]):p.length<Yp&&p.push([m,h]);return[f,p]},[i,a]=r(new Map(t.map(c=>[c.ind.id,c.score]))),l=new Set(i.map(([c])=>c));for(let c=0;c<Vv&&i.length;c++){let u=new Map,d=[];for(let f of Hv){let p=pf(e,f),m=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,y));let[h,g]=r(m);for(let[b,y]of h)u.set(b,Math.max(u.get(b)||0,y));d.push(...g)}a.push(...d);for(let[f,p]of u){if(l.has(f))continue;let m=s.get(f);m&&(m.score+=Math.min(p*Gv,m.score*qv),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,Yp).filter(([f])=>!l.has(f)))}}function ex(e,t=[],{depth:n=lf,q:s=df,nodeLimit:o=uf,kinds:r=Kv,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(E=>[E.ind.id,E])),d=0;for(let E of t)d=Math.max(d,E.score);let f=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let m=pf(e,r,a),h=E=>m.get(E)?.size||0,g=[],b=(E,R)=>E.hop!==R.hop?E.hop<R.hop:E.deg!==R.deg?E.deg<R.deg:E.id<R.id,y=(E,R)=>{let j=g[E];g[E]=g[R],g[R]=j},w=E=>{g.push(E);let R=g.length-1;for(;R>0;){let j=R-1>>1;if(b(g[R],g[j]))y(R,j),R=j;else break}},v=()=>{let E=g[0],R=g.pop();if(g.length){g[0]=R;let j=0;for(;;){let A=2*j+1,F=2*j+2,T=j;if(A<g.length&&b(g[A],g[T])&&(T=A),F<g.length&&b(g[F],g[T])&&(T=F),T===j)break;y(j,T),j=T}}return E},_=new Set(p);for(let E of p)w({id:E,hop:0,deg:h(E)});let $=null,x=0,S=[];for(;g.length&&x<o;){let E=v();if(S.push({id:E.id,hop:E.hop}),!p.has(E.id)){if(f){let A=d*Yv*Math.pow(Xv,E.hop-1),F=u.get(E.id);if(F)F.score+=Math.min(A*Jv,F.score*Qv);else{let T=e.byId?.get?.(E.id);if(T&&i(T)){$||($=af(e));let M=$.get(T.id)||[],z={ind:T,score:A,defineCount:M.length,matching:[],density:0};t.push(z),u.set(E.id,z)}}}x++}if(E.hop>=n||E.hop>0&&h(E.id)>c)continue;let R=[];for(let A of m.get(E.id)||[]){if(_.has(A))continue;let F=e.byId?.get?.(A);!F||!i(F)||R.push({id:A,deg:h(A)})}if(!R.length)continue;R.sort((A,F)=>A.deg-F.deg||(A.id<F.id?-1:A.id>F.id?1:0));let j=Math.max(1,Math.floor(s*R.length));for(let A=0;A<j;A++){let F=R[A];_.add(F.id),w({id:F.id,hop:E.hop+1,deg:F.deg})}}return S}function ff(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:l=!1,proseLayers:c=!1,literalMention:u=!1,rawQuery:d=""}=n,f=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,p=af(e),m=[];for(let v of e.individuals){if((v.class||"")!=="Module")continue;let _=String(v.label),$=_.toLowerCase(),x=p.get(v.id)||[],S=new Set(x.map(j=>j.toLowerCase())),E=new Set;for(let j of x)for(let A of Xp(j))E.add(A);let R=u?String((v.attributes||[]).find(j=>j.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:v,label:_,labelLc:$,defines:x,symSet:S,symComps:E,dotted:R})}let h=m.length||1,g=new Map,b=v=>{let _=0;for(let $ of m)($.labelLc.includes(v)||$.symComps.has(v)||$.symSet.has(v))&&_++;return _},y=v=>(g.has(v)||g.set(v,Cc(h,b(v))),g.get(v));for(let v of t)y(v);let w=[];for(let v of m){let _=0,$=0,x=0,S=[];for(let F of t){let T=g.get(F)||0;T&&(v.symSet.has(F)?(_+=T*cf,x++):v.symComps.has(F)&&(S.push(T),x++),v.labelLc.includes(F)&&($+=T*yv))}S.sort((F,T)=>T-F);let E=0;for(let F=0;F<Math.min(S.length,vv);F++)E+=S[F]*$v;let R=_+$+E;if(!R)continue;s&&(Xs(v.labelLc)||kv(v.labelLc))?R*=Sv:Xs(v.labelLc)&&(R*=.4);let j=v.defines.filter(F=>{let T=F.toLowerCase(),M=Xp(F);return t.some(z=>T===z||M.has(z))}),A=v.defines.length?x/v.defines.length:0;w.push({ind:v.ind,score:R,defineCount:v.defines.length,matching:j,density:A})}if(u&&d&&w.length){let v=String(d).toLowerCase(),_=E=>E!=null&&/[a-z0-9_./]/.test(E),$=E=>{for(let R=v.indexOf(E);R!==-1;R=v.indexOf(E,R+1))if(!_(v[R-1])&&!_(v[R+E.length]))return!0;return!1},x=new Map(m.map(E=>[E.ind.id,E])),S=0;for(let E of w)S=Math.max(S,E.score);for(let E of w){let R=x.get(E.ind.id);if(!R)continue;let j=0;for(let A of new Set([R.dotted,R.labelLc])){if(!A||A.split(/[./]+/).filter(Boolean).length<Dv||!$(A))continue;let F=[...new Set(A.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((M,z)=>z-M),T=0;for(let M=0;M<Math.min(F.length,zv);M++)T+=F[M]*Fv;j=Math.max(j,T)}j&&(E.score+=Math.min(j*Uv,S*Bv))}}if(w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of ke(e,"imports"))!v.has($.subject)&&!v.has($.object)||(_.has($.subject)||_.set($.subject,new Set),_.has($.object)||_.set($.object,new Set),_.get($.subject).add($.object),_.get($.object).add($.subject));for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*xv,$.score*Ev)}}if(o&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of["calls","callsSymbol"])for(let x of ke(e,$)){let S=qn(e,x.subject),E=qn(e,x.object);!S||!E||S===E||!v.has(S)&&!v.has(E)||(_.has(S)||_.set(S,new Set),_.has(E)||_.set(E,new Set),_.get(S).add(E),_.get(E).add(S))}for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*jv,$.score*_v)}}if(r&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of e.individuals)($.class||"")==="Class"&&$.label&&_.set(String($.label),$);for(let $ of w){if(!Av($.ind.label))continue;let x=0;for(let S of ke(e,"inherits")){if(qn(e,S.subject)!==$.ind.id||!Iv(S.objectLabel))continue;let R=qn(e,S.object);if(!R){let j=_.get(String(S.objectLabel||""));j&&(R=Rn(e,j))}R&&(x=Math.max(x,v.get(R)||0))}$.score+=Math.min(x*Rv,$.score*Tv)}}if(l&&w.length&&e.proseIndex){let v=Ks(e.proseIndex,t.join(" "),{limit:Lv});if(v.length){let _=new Map;for(let{id:$,score:x}of v){let S=qn(e,$);S&&_.set(S,(_.get(S)||0)+x)}for(let $ of w){let x=_.get($.ind.id)||0;x&&($.score+=Math.min(x*Cv,$.score*Ov))}}}if(c&&w.length&&e.proseIndex){let v=new Map(w.map(x=>[x.ind.id,x])),_=new Map(m.map(x=>[x.ind.id,x])),$=new Map;for(let x of new Set(t)){let S=g.get(x)||0;if(!S)continue;let{ids:E}=Ap(e.proseIndex,x);if(!E.length)continue;let R=new Set;for(let j of E){let A=qn(e,j);if(!A||R.has(A)||(R.add(A),!v.has(A)))continue;let F=_.get(A);F&&(F.symSet.has(x)||F.symComps.has(x)||F.labelLc.includes(x))||$.set(A,($.get(A)||0)+S*Mv)}}for(let x of w){let S=$.get(x.ind.id)||0;S&&(x.score+=Math.min(S*Nv,x.score*Pv))}}return i&&w.length>1&&Zv(e,w,f),a&&w.length&&ex(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:lf,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:df,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:uf}),w.sort((v,_)=>_.score-v.score||_.density-v.density||v.defineCount-_.defineCount||String(v.ind.label).length-String(_.ind.label).length),w}function mf(e,t,n={}){let s=String(t||""),o=s.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);if(!o.length)return[];let r=n.literalMention?{...n,rawQuery:s}:n;return ff(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function nx(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let l=0;l<e.length;l++){let c=e[l];if(c==="\\"){let u=e[l+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),l+=1,r="",i=!1;continue}if(o){c==="]"&&(o=!1,r="]",i=!1);continue}if(c==="["){o=!0,r="[",i=!1;continue}if(c==="?"&&(r==="("||i)){r="?",i=!1;continue}if(c==="*"||c==="+"||c==="?"){a(),r=c;continue}if(c==="{"){let u=e.indexOf("}",l),d=u===-1?"":e.slice(l+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),l=u,r="}";continue}r="{",i=!1;continue}r=c,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function Bc(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Jp)return{error:`name pattern is ${n.length} characters; the limit is ${Jp}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=nx(n);if(o)return{error:`name pattern "${n}" quantifies a group, which can backtrack for minutes on one label. Quantify a character or a class instead.`};if(r)return{error:`name pattern "${n}" uses a back-reference, which can backtrack for minutes on one label.`};if(s>Qp)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${Qp}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(l){if(a===null)a=t()+Zp;else if(t()>a)throw new Ii(`name pattern "${n}" exceeded its ${Zp}ms matching budget.`);return i.test(String(l).slice(0,tx))}}}function hf(e,t,{limit:n=Oi,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),l=String(s||"").trim().toLowerCase(),c=String(o||"").trim().toLowerCase(),u=null;if(r){let m=Bc(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return ax(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof Ii)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=ff(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let f=d.slice(0,n),p=[`${d.length} module(s) match "${t}" (top ${f.length}):`];for(let{ind:m,defineCount:h,matching:g}of f){let b=g.length?` \u2014 matching: ${ut([...new Set(g)],wv)}`:"";p.push(`- ${m.label} (defines ${h} symbol(s))${b}`)}return p.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),p.join(`
|
|
4
|
-
`)}function ke(e,t){let n=
|
|
5
|
-
`);let r=[],i=[];for(let a of o){let l=e.byId.get(a.object),c=
|
|
6
|
-
`)}function
|
|
7
|
-
`)}function
|
|
8
|
-
`)}function
|
|
9
|
-
`)}function
|
|
10
|
-
${ut(o
|
|
1
|
+
(()=>{var q$=Object.defineProperty;var O=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Bn=(e,t)=>{for(var n in t)q$(e,n,{get:t[n],enumerable:!0})};var ct,SO,kO,jO,_O,RO,TO,AO,IO,CO,OO,LO,NO,PO,MO,FO,DO,Q,ve,Qt,fp,zO,UO,BO,Ue=O(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SO=ct("createRequire"),kO=ct("readFileSync"),jO=ct("access"),_O=ct("readFile"),RO=ct("writeFile"),TO=ct("appendFile"),AO=ct("mkdir"),IO=ct("mkdtemp"),CO=ct("rename"),OO=ct("unlink"),LO=ct("rm"),NO=ct("stat"),PO=ct("copyFile"),MO=ct("readdir"),FO=ct("createReadStream"),DO=ct("createWriteStream"),Q=(...e)=>e.join("/"),ve=e=>String(e).replace(/\/[^/]*$/,""),Qt=(...e)=>e.join("/"),fp="/",zO=ct("randomBytes"),UO=ct("spawnSync"),BO=ct("createInterface")});var lt,GO,qO,mp,ze,$r,V$,jn,H$,xi,vc,K$,Y$,VO,X$,HO,KO,YO,XO,JO,_t=O(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},GO=lt("createRequire"),qO=lt("readFileSync"),mp=lt("access"),ze=lt("readFile"),$r=lt("writeFile"),V$=lt("appendFile"),jn=lt("mkdir"),H$=lt("mkdtemp"),xi=lt("rename"),vc=lt("unlink"),K$=lt("rm"),Y$=lt("stat"),VO=lt("copyFile"),X$=lt("readdir"),HO=lt("createReadStream"),KO=lt("createWriteStream"),YO=lt("randomBytes"),XO=lt("spawnSync"),JO=lt("createInterface")});function ko(e){let t=Q$.exec(String(e||""));return t?t[1].toLowerCase():null}function Ei(e){return String(e||"").replace(Z$,"$1")}function Ws(e){return e.replace(ev,"").trim()}function an(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(nv,"").trim();if(s=s.replace(ov,"").trim(),s===t)break;t=s}return t}var hp,vr,Bs,gp,bp,J$,Q$,xr,Zt,xc,Z$,wn,Ec,ev,tv,nv,sv,ov,de,Er,rv,wp,Be,en,gs,yp,Sc,kc,jc,$p,Sr,Gs,vp,xp,qs,Wn,Gn,jo,Xe,Ep,Vs,Hs,bs,_n,Sp,kr,_o,Si,Ro,kp,qn=O(()=>{hp=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],vr={imports:{bare:"import",comment:"Module -> Module: subject's import graph references object (usesComplexType).",verbs:["couples to","couple to","depends on","imports","import","relies on","rely on","requires","require","references","reference","pulls in","pull in","built on","builds on","build on","uses code from","grabs","grab","pulls from","pull from","leans on","lean on","is wired to","are wired to","is hooked up to","are hooked up to","importing"]},uses:{bare:"use",comment:"query-side union: imports (Module->Module) + calls (Module->Module) + callsSymbol (fn->fn).",verbs:["uses","use","makes use of","make use of","talks to","talk to","using"]},calls:{bare:"call",comment:"Function/Method -> Function/Class (symbol-grain) or Module -> Module (coarse): subject invokes object.",verbs:["invokes","invoke","calls","call","runs","run","executes","execute","hits","hit","triggers","trigger","fires","fire","kicks off","kick off","calling"]},defines:{bare:"define",comment:"Module -> top-level Function/Class/Method/Attribute: subject declares object.",verbs:["defines","define","declares","declare","has","have","holds","hold","defining"]},contains:{bare:"contain",comment:"Class -> Method/Attribute: subject's membership includes object.",verbs:["contains","contain","lives in","live in","is defined in","are defined in","is part of","are part of","sits in","sit in","sits inside","sit inside","containing"]},tests:{bare:"test",comment:"Module -> Module: subject is a test module importing/covering object.",verbs:["tests","test","covers","cover","verifies","verify","exercises","exercise","checks","check","makes sure of","make sure of","testing"]},inherits:{bare:"inherit from",comment:"Class -> Class: subject's declared base resolves to object (subclassOf).",verbs:["inherits from","inherit from","inherits","inherit","extends","extend","subclasses","subclass","derives from","derive from","is a subclass of","are a subclass of","is a kind of","are a kind of","is built off","are built off","is built on top of","are built on top of","extending","inheriting from","inheriting","subclassing","extends from",...hp]},touches:{bare:"touch",comment:"Commit -> Module (coarse) or Commit -> symbol (fine, touchesSymbol): a commit's changed-line-range intersects object.",verbs:["touched","touches","changed","change","modified","modifies","was changed in","were changed in","was edited in","were edited in","was modified by","were modified by","was tweaked in","were tweaked in","got changed in","got edited in","touch","changed in","landed in","land in","was in","were in","went into","included in","updated","edited","touching"]},cochange:{bare:"co-change with",comment:"Module -> Module: subject and object are frequently committed together (changeCoupledWith).",verbs:["changed with","co-changes with","co-change with","changes alongside","change alongside","shares commits with","share commits with","tends to change together with","tend to change together with","moves together with","move together with","changed together with","change together with","changes together with","changes with","change with","tends to change with","tend to change with","usually changes with"]},reexports:{bare:"re-export",comment:"Module -> exported symbol: subject's public API surface (__all__/export list).",verbs:["exports","export","re-exports","re-export","passes through","pass through","exposes","expose","exporting"]},serves:{bare:"serve",comment:"subject provides or backs the object \u2014 a handler serving a route, a module serving a surface (mgx:serves).",verbs:["serves","serve","serving"]},denotes:{bare:"denote",comment:"subject names the object \u2014 a glossary/lexicon term denoting a code entity (mgx:denotes).",verbs:["denotes","denote","denoting"]}},Bs=Object.freeze({placement:Object.freeze({predicate:"mgx:currently-in",comment:"individual -> place: where the subject is right now.",nouns:Object.freeze(["location","locations","position","positions","place","places","whereabouts","room","rooms"]),reads:"is in",matchesLocativePredicates:!0}),mood:Object.freeze({predicate:"mgx:feels",comment:"individual -> mood word: how the subject feels right now.",nouns:Object.freeze(["mood","moods","feeling","feelings","emotion","emotions"]),reads:"feels"}),mass:Object.freeze({predicate:"mgx:hasMass",comment:"individual -> number: the subject's current mass.",nouns:Object.freeze(["mass","masses","weight","weights"]),reads:"has mass"})}),gp=Object.freeze(Object.fromEntries(Object.entries(Bs).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),bp=Object.freeze(Object.values(Bs).map(e=>e.predicate)),J$=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),Q$=new RegExp(`^mgx:[a-z]+-(${J$.join("|")})$`,"i");xr=Object.freeze([...hp,"is the superclass of","are the superclass of","is the parent class of"]),Zt=Object.freeze(["defined","declared","located","implemented"]),xc=Object.freeze(["now","currently","right now","at the moment","these days","today"]),Z$=new RegExp(`\\s+(?:${[...xc].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");wn=Object.freeze(["mentioned","referenced"]),Ec=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),ev=new RegExp(`\\s+(?:${Ec.join("|")})\\s*[?.!]*$`,"i");tv=Object.freeze(["then","though","too"]),nv=new RegExp(`\\s+(?:${tv.join("|")})\\s*[?.!]*$`,"i"),sv=Object.freeze(["please explain","explain"]),ov=new RegExp(`,\\s*(?:${sv.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(vr).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Er=Object.freeze(new Set(["has","have","holds","hold"])),rv=e=>!xr.includes(e),wp=Object.freeze([...new Set(Object.keys(de).filter(rv).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),Be=Object.freeze({function:"Function",functions:"Function",method:"Method",methods:"Method",class:"Class",classes:"Class",module:"Module",modules:"Module",mod:"Module",mods:"Module",file:"Module",files:"Module",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),en=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),gs=Object.freeze({imported:"imports",called:"calls",used:"uses",tested:"tests",covered:"tests",verified:"tests",exercised:"tests",checked:"tests",defined:"defines",declared:"defines",inherited:"inherits",extended:"inherits",subclassed:"inherits",contained:"contains",exported:"reexports","re-exported":"reexports",exposed:"reexports",touched:"touches",changed:"touches",modified:"touches",edited:"touches",updated:"touches"}),yp=Object.freeze({"inherited from":{kind:"inherits",role:"object"},"extended from":{kind:"inherits",role:"object"},"subclassed from":{kind:"inherits",role:"object"},"defined in":{kind:"defines",role:"agent"},"declared in":{kind:"defines",role:"agent"},"contained in":{kind:"contains",role:"agent"},"imported by":{kind:"imports",role:"agent"},"called by":{kind:"calls",role:"agent"},"used by":{kind:"uses",role:"agent"},"tested by":{kind:"tests",role:"agent"},"covered by":{kind:"tests",role:"agent"},"touched by":{kind:"touches",role:"agent"},"changed by":{kind:"touches",role:"agent"},"exported by":{kind:"reexports",role:"agent"}}),Sc=Object.freeze({"ain't":"is not",aint:"is not","isn't":"is not",isnt:"is not","aren't":"are not",arent:"are not","doesn't":"does not",doesnt:"does not","don't":"do not",dont:"do not","didn't":"did not",didnt:"did not","there's":"there is",theres:"there is","what's":"what is",whats:"what is","who's":"who is",whos:"who is",gonna:"going to",wanna:"want to",gotta:"got to",yer:"your",ur:"your",gimme:"give me"}),kc=Object.freeze({funtion:"function",funtions:"functions",fucntion:"function",fucntions:"functions",functoin:"function",functoins:"functions",calss:"class",calsses:"classes",classs:"class",clases:"classes",modul:"module",moduls:"modules",moduel:"module",moduels:"modules",moudle:"module",moudles:"modules",methdo:"method",methdos:"methods",mehtod:"method",mehtods:"methods",comit:"commit",comits:"commits",commmit:"commit",commmits:"commits",varaible:"variable",varaibles:"variables",varibale:"variable",varibales:"variables",atribute:"attribute",atributes:"attributes",improt:"import",improts:"imports",imoprt:"import",imoprts:"imports",inherts:"inherits",inheirts:"inherits",extands:"extends",extneds:"extends",depnds:"depends",touchs:"touches",tuoches:"touches",touhced:"touched",touchd:"touched",defned:"defined",chagned:"changed",chnaged:"changed",chagnes:"changes",chnages:"changes",calles:"calls",exprot:"export",exprots:"exports",tets:"tests",whcih:"which",wich:"which",whihc:"which",wehre:"where",whre:"where",waht:"what",wat:"what",dat:"that",dose:"does",doess:"does",teh:"the",manyn:"many",mnay:"many",amny:"many",mnany:"many",hwo:"how",coutn:"count",conut:"count",cuont:"count",ocunt:"count",numer:"number",nubmer:"number",numbr:"number",nmuber:"number",lst:"list",lsit:"list",ilst:"list",shwo:"show",hsow:"show",dispaly:"display",dsiplay:"display",funtcions:"functions",funciton:"function",funcitons:"functions"}),jc=Object.freeze({folder:"module",folders:"modules",directory:"module",directories:"modules",func:"function",funcs:"functions",changeset:"commit",changesets:"commits",revision:"commit",revisions:"commits",property:"attribute",properties:"attributes"}),$p=/\b([a-z]{3,})in'/gi,Sr=Object.freeze(["um","uh","erm","so","like","yo","hey","bru","bro","fam","mate","please","could you","can you","would you","tell me","i wonder","just wondering","quickly","real quick","kinda","sorta","btw","by the way","you","quick q"]),Gs=Object.freeze(["this","it","that","here","this one","that one"]),vp=Object.freeze([{re:/\bthere\s+is\s+not\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bthere\s+is\s+no\s+\S+\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\bis\s+not\s+there\s+(?:anything|nothing)\s+(?:that\s+)?(\S.*)$/i,to:e=>`what ${e[1]}`},{re:/\b(?:nobody|nothing|no one)\s+(\S.*?)(?:,?\s+does\s+it\??|,?\s+do\s+they\??)?$/i,to:e=>`what ${e[1]}`}]),xp=Object.freeze([{re:/^what\s+(?:is|was|were|are)\s+in\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+(?:went|got)\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`},{re:/^what\s+made\s+it\s+into\s+((?:commit\s+)?[0-9a-f]{7,40})\??$/i,to:e=>`what did ${e[1]} touch`}]),qs=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),Wn=Object.freeze(["that","which","who"]),Gn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),jo=Object.freeze({"but do not":"difference","but does not":"difference","and do not":"difference","and does not":"difference","but not":"difference","and not":"difference",except:"difference",without:"difference",and:"intersection",plus:"intersection",but:"intersection",or:"union"}),Xe=Object.freeze({public:{via:"visibility",value:"public"},private:{via:"visibility",value:"private"},protected:{via:"visibility",value:"protected"},static:{via:"attr",attr:"isStatic"},abstract:{via:"attr",attr:"isAbstract"},constant:{via:"attr",attr:"isConstant"},exported:{via:"exported"},"re-exported":{via:"exported"},tested:{via:"tested",value:!0},covered:{via:"tested",value:!0},untested:{via:"tested",value:!1},uncovered:{via:"tested",value:!1}}),Ep=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Vs=Object.freeze(["how many","how much","how many of","number of","total number of","quantity of","tally of","sum of","total of","amount of","count","count up","count of","tot up"]),Hs=Object.freeze(["list","show","show me","show us","display","print","print out","dump","enumerate","name","give me","get me","spit out","rattle off","run down","run through","ls","what are","which are"]),bs=Object.freeze({most:"most",greatest:"most",highest:"most",biggest:"most",largest:"most","most-connected":"most","most connected":"most",fewest:"fewest",least:"fewest",smallest:"fewest",lowest:"fewest"}),_n=Object.freeze({imports:{kind:"imports",dir:"out"},dependencies:{kind:"imports",dir:"out"},importers:{kind:"imports",dir:"in"},dependents:{kind:"imports",dir:"in"},callers:{kind:"calls",dir:"in",sibling:"callsSymbol"},callees:{kind:"calls",dir:"out",sibling:"callsSymbol"},calls:{kind:"calls",dir:"out",sibling:"callsSymbol"},methods:{kind:"contains",dir:"out",filter:"Method"},members:{kind:"contains",dir:"out"},tests:{kind:"tests",dir:"in"},test:{kind:"tests",dir:"in"},subclasses:{kind:"inherits",dir:"in"},connections:{kind:"*",dir:"both"},edges:{kind:"*",dir:"both"},connected:{kind:"*",dir:"both"},imported:{kind:"imports",dir:"in"},"depended-on":{kind:"imports",dir:"in"},depended:{kind:"imports",dir:"in"},used:{kind:"imports",dir:"in",sibling:"callsSymbol"},called:{kind:"calls",dir:"in",sibling:"callsSymbol"}}),Sp=Object.freeze({tests:"Module",test:"Module"}),kr=Object.freeze(["those","them","these"]),_o=Object.freeze(["contains","defines"]),Si=Object.freeze(["the","a","an","some","other","about","please","pls","plz","kindly","just","simply","maybe","perhaps","thanks","thank","ta","cheers","too","also","well","either","sorry","oops","actually","mean","meant","rather","hi","hello","hey","yo","hiya","howdy","ok","okay","matey","mate","buddy","pal","dude","man","bro","bru","fam","friend","sir","maam","folks","guys","everyone","dear","tmct","show","tell","give","list","find","me","us","lemme"]),Ro=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),kp=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var We,To,_c=O(()=>{We="#000000",To=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${We}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${We}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var iv,cn,jp,_p,Rc,Rp,sL,oL,Tp=O(()=>{qn();_c();iv=()=>Object.keys(To).sort(),cn=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),jp=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),_p=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),Rc=Object.freeze([{name:"tmct_context",tier:"hot",summary:"A sized edit bundle for one symbol \u2014 exemplar source, sibling signatures, registration anchor and the insertion region, in one call.",agentDescription:"START HERE to add/modify code: ONE call returns a sized edit bundle (exemplar source, sibling signatures, registration, insertion region) \u2014 then write directly, don't Read.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"Module path (e.g. path/to/module) or a sibling function/class name defined in it."},depth:{type:"string",enum:["min","auto","full"],default:"auto",description:"auto (sized to the task) | min (leanest) | full (every section)."}}},example:{symbol:"django/utils/text.py"}},{name:"tmct_snippet",tier:"hot",summary:"The exact source of one function, class or Class.method \u2014 its line span only, plus a one-line in-repo call hint.",agentDescription:"EXACT source of one function/class/Class.method by name (its line span only) + a one-line in-repo call hint. Prefer over Read for a single symbol.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"function/class name, Class.method, or fn:<path>#name."}}},example:{symbol:"Truncator.chars"}},{name:"tmct_ask",tier:"hot",summary:"A structural question in plain English, answered from the graph in one call \u2014 no model, and a clean miss instead of a guess.",agentDescription:'Ask a structural question in plain English: "which functions call X", "what uses X", "where is X defined", "when did X change". One call, no model. A clean miss beats a guess.',inputSchema:{type:"object",required:["query"],properties:{query:{type:"string",description:'A free-text question, e.g. "which functions explicitly couple to logging".'}}},example:{query:"which modules import src/core/model.mjs"},chat:{exampleRepo:"examples/mini-webapp",grammar:[{form:"which <things> <relation-verb> <entity>",example:"which modules import src/core/model.mjs",answers:"the imports edge, read forwards"},{form:"what is <relation-verb-passive> <entity>",example:"what is imported by src/core/store.mjs",answers:"the same edge, read backwards \u2014 a passive is the opposite direction, not a synonym"},{form:"what <relation-verb> <entity>",example:"what uses src/lib/http.mjs",answers:"the uses union: imports plus calls"},{form:"where is <entity> <where-marker>",example:"where is saveStore defined",answers:"the definition's file and line span"},{form:"when did <entity> change",example:"when did src/core/store.mjs change",answers:"the commits that touched it, newest first"}],whereMarkers:Zt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:cn("A module path, symbol name, or Class.method."),example:{symbol:"django/utils/text.py"}},{name:"tmct_signature",tier:"cold",summary:"One symbol's API surface (params, returns, raises/catches, flags, decorators, doc) without the body.",inputSchema:cn("A function, method, or Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_impact",tier:"cold",summary:"Transitive reverse closure over imports/calls \u2014 what breaks if a module or symbol changes, by depth, with tests.",inputSchema:jp("The module (or a symbol it defines) whose dependents you want."),example:{module:"django/utils/text.py"}},{name:"tmct_search",tier:"cold",summary:"Free-text/ranked lookup over the code-map to find the right module or symbol.",inputSchema:{type:"object",required:[],properties:{query:{type:"string",description:"Free text to rank against the code-map. Required unless kind narrows the search on its own."},kind:{type:"string",description:"Restrict to an entity class, e.g. function, class, module."},decorator:{type:"string",description:"Restrict to definitions carrying this decorator."},name:{type:"string",description:"Restrict to definitions whose name matches."}}},example:{query:"template filters",kind:"function"}},{name:"tmct_members",tier:"cold",summary:"A class's methods + attributes (file:line, decorators) in one slice.",inputSchema:_p("The class whose members you want."),example:{class:"Truncator"}},{name:"tmct_subclasses",tier:"cold",summary:"A class's base classes plus the transitive set of classes that extend it.",inputSchema:_p("The class to walk the inheritance edges of."),example:{class:"Field"}},{name:"tmct_related",tier:"cold",summary:"A term's synonyms (skos:altLabel) and related concepts (skos:related), from the memory graph's relation facts.",inputSchema:{type:"object",required:["term"],properties:{term:{type:"string",description:"The term whose synonyms / related concepts you want."}}},example:{term:"sofa"}},{name:"tmct_sprite",tier:"cold",summary:"The sprite markup for a class, resolved up the taught rdfs:subClassOf chain \u2014 with the expression and size asked for, and the ancestor chain the resolver walked to find it.",inputSchema:{type:"object",required:["class"],properties:{class:{type:"string",description:"The class to draw, e.g. spider. Resolved through the memory graph's own rdfs:subClassOf taxonomy."},expression:{type:"string",enum:iv(),description:"The face the sprite wears, as an mgx:feels value. A class whose template takes no expression parameter misses rather than dropping it."},size:{type:"string",description:"A taught size property word (mgx:hasProperty), resolved to a numeric render SCALE \u2014 the size of the thing drawn, not a choice of template tier."}}},example:{class:"spider",expression:"happy",size:"large"}},{name:"tmct_architecture",tier:"cold",summary:"Package/module map + the most-imported hub modules (optionally scoped to a package).",inputSchema:{type:"object",required:[],properties:{package:{type:"string",description:"Scope the map to one package. Omit for the whole repository."}}},example:{package:"django/template"}},{name:"tmct_exports",tier:"cold",summary:"A module's public __all__ surface, each name resolved to the module that defines it.",inputSchema:jp("The module whose public API surface you want."),example:{module:"django/db/models/__init__.py"}},{name:"tmct_tests_for",tier:"cold",summary:"The test modules covering a symbol or module, from the typed test edges.",inputSchema:cn("The symbol or module to find covering tests for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_untested",tier:"cold",summary:"Source modules with no covering test module \u2014 a coverage-gap view (no arguments).",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_history",tier:"cold",summary:"Recent commits that touched a symbol's module (newest first).",inputSchema:cn("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_file_history",tier:"cold",summary:"Commits that touched a symbol's module, each with author / date / subject.",inputSchema:cn("The symbol whose module's history you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_method_history",tier:"cold",summary:"Commits that touched a specific method symbol (fine-grained), with author / date / subject.",inputSchema:cn("A Class.method name."),example:{symbol:"Truncator.chars"}},{name:"tmct_class_history",tier:"cold",summary:"Commits that touched a specific class symbol (fine-grained), with author / date / subject.",inputSchema:cn("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:cn("The symbol whose callers you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_callees",tier:"cold",summary:"Modules a symbol's module calls into (one hop).",inputSchema:cn("The symbol whose callees you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_calls",tier:"cold",summary:"The in-repo symbols a function calls (fn\u2192fn), each with file:line.",inputSchema:cn("The function whose in-repo call sites you want."),example:{symbol:"slugify"}},{name:"tmct_cochanges",tier:"cold",summary:"Modules that historically change in the same commit as a symbol's module (git co-change).",inputSchema:cn("The symbol whose module's change-coupling you want."),example:{symbol:"django/utils/text.py"}},{name:"tmct_context_more",tier:"cold",summary:"The bundle sections a lean tmct_context omitted (siblings / tests / cochange / class members / re-exports).",inputSchema:cn("The symbol a lean tmct_context bundle was built for."),example:{symbol:"django/utils/text.py"}},{name:"tmct_export",tier:"cold",summary:"Every stored memory fact as JSONL (subject/predicate/object/provenance) \u2014 the shape `tmct extract` emits, for backup or audit.",inputSchema:{type:"object",required:[],properties:{}},example:{}},{name:"tmct_ingest",tier:"cold",summary:"Ground plain text into memory facts with the same deterministic recognizer the chat teach lane uses \u2014 the strict tier, plus an optional lower-trust fuzzy tier \u2014 and report the canonical triples.",inputSchema:{type:"object",required:["text"],properties:{text:{type:"string",description:"The plain text to ground into facts."},optimistic:{type:"boolean",description:"Also run the lower-trust fuzzy tier over sentences the strict recognizer skips."}}},example:{text:"A kettle is a container. An otter is a mammal.",optimistic:!0}}]),Rp=Rc.filter(e=>e.tier==="hot"),sL=Rc.filter(e=>e.tier==="cold"),oL=Object.freeze(Rc.map(e=>e.name))});var Ap,Re,Bt=O(()=>{Ue();Ap=Q(".tmct","graph.json"),Re=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function av(e){let t=new Set;for(let n of Array.isArray(e?.individuals)?e.individuals:[])n&&n.id&&t.add(n.id);return t}function Ip(e){let t=(Array.isArray(e)?e:[]).map((l,c)=>({file:l?.file,payload:l?.payload||{},name:l?.name!=null&&String(l.name).length?String(l.name):String(c)})),n=t.map(({payload:l})=>av(l)),s=new Map;for(let l of n)for(let c of l)s.set(c,(s.get(c)||0)+1);let o=new Set([...s.entries()].filter(([,l])=>l>1).map(([l])=>l)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:l,name:c}of t){a=a&&!!l.bootstrap,typeof l.generated_at=="string"&&l.generated_at>i&&(i=l.generated_at);let u=f=>o.has(f)?`${c}/${f}`:f;Array.isArray(l.classes)&&r.classes.push(...l.classes),Array.isArray(l.vocabulary)&&r.vocabulary.push(...l.vocabulary);for(let f of Array.isArray(l.individuals)?l.individuals:[]){if(!f)continue;let p={...f};p.id&&(p.id=u(p.id)),Array.isArray(p.derived_from)&&(p.derived_from=p.derived_from.map(m=>u(m))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),r.individuals.push(p)}for(let f of Array.isArray(l.objectProperties)?l.objectProperties:[]){if(!f)continue;let p={...f};Array.isArray(p.examples)&&(p.examples=p.examples.map(m=>{if(!m)return m;let h={...m};return h.subject&&(h.subject=u(h.subject)),h.object&&(h.object=u(h.object)),h})),r.objectProperties.push(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let m=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let h of Array.isArray(p)?p:[]){let g=u(h);m.includes(g)||m.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var Cp=O(()=>{});var Io={};Bn(Io,{clearCache:()=>cv,emptyEntities:()=>Tc,fetchEntities:()=>pv,registerProvider:()=>lv});function cv(){Ao=null,jr=null}function lv(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=ki;return ki=e??null,Ao=null,t}function Tc(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function uv(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return Tc();throw new Re(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Re(`graph artifact ${e} is not valid JSON`)}}async function dv(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(jr&&jr.key===n)return jr.payload;let s=[];for(let r=0;r<t.length;r++){let i=await uv(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Ip(s);return jr={key:n,payload:o},o}async function pv(e){if(ki){let s;try{s=await ki(e)}catch(o){throw o instanceof Re?o:new Re(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Re("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return dv(e);if(Ao&&Ao.file===e.graphFile)return Ao.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return Tc();throw new Re(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Re(`graph artifact ${e.graphFile} is not valid JSON`)}return Ao={file:e.graphFile,payload:n},n}var Ao,jr,ki,_r=O(()=>{_t();Bt();Cp();Ao=null,jr=null,ki=null});function Rn(e){if(!e)return[];let t=String(e).replace(/\.[A-Za-z0-9]+$/,"");return t=t.replace(/[/\\]/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/([A-Za-z])([0-9])/g,"$1 $2").replace(/([0-9])([A-Za-z])/g,"$1 $2").replace(/[_\-.]+/g," "),t.split(/\s+/).map(n=>n.toLowerCase()).filter(n=>n.length>1&&n.length<=Op)}function Ac(e){if(!e)return[];let t=[],n=new Set;for(let s of String(e).toLowerCase().split(/[^a-z0-9]+/))if(!(s.length<2||s.length>Op||fv.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=mv))break;return t}function ji({name:e,doc:t}={}){return[...new Set([...Rn(e),...Ac(t)])].sort()}function Lp(e){let t=Object.create(null);for(let n of e){let s=(n.attributes||[]).find(o=>o.key==="prose_tokens");if(s?.value)for(let o of s.value.split(" "))t[o]||(t[o]=[]),t[o].push(n.id)}for(let n of Object.keys(t))t[n].sort();return t}function Ks(e,t,{limit:n=10}={}){let s=[...new Set([...Rn(t),...Ac(t)])];if(!s.length)return[];let o=new Map;for(let r of s)for(let i of e?.[r]||[])o.set(i,(o.get(i)||0)+1);return[...o.entries()].sort((r,i)=>i[1]-r[1]||String(r[0]).localeCompare(i[0])).slice(0,n).map(([r,i])=>({id:r,score:i}))}function Np(e,t){let n=e&&(e["tmct:layers"]?e:e.proseIndex),s=n&&n["tmct:layers"],o=String(t||"").toLowerCase(),r={ids:[],via:null};if(!o||!s||typeof s!="object")return r;let i=new Set,a=new Set;for(let l of Object.keys(s)){let c=s[l];if(!c||typeof c!="object")continue;let u=c[o],d=Array.isArray(u)?u:Array.isArray(u?.ids)?u.ids:null;if(d?.length){for(let f of d)i.add(f);a.add(l)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var fv,Op,mv,ws=O(()=>{fv=new Set("a an and or but the of to in on at for with from by as is are was were be been being it its this that these those i you he she they we me my your our do does did not no yes if then else than so such can will would should could may might about into over under out up down off again more most some any all what which who whom whose when where why how".split(/\s+/)),Op=40,mv=120});function Pp(e){let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(":"),r=o>=0?n.slice(o+1):"";return{createdAt:s,...r?{sessionId:r}:{}}}function hv(e){if(!e.startsWith(Fp))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Mp);if(o<0)return null;let r=n.slice(o+Mp.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Fp.length,o),createdAt:s}:null}function Vn(e){let t=String(e||"").trim();if(!t)return null;if(t.startsWith("reference:")){let s=t.slice(10),o=s.indexOf(":");if(o<0)return{kind:"reference",pack:s||"unknown",article:""};let r=s.slice(0,o)||"unknown";return{kind:bv(r),pack:r,article:s.slice(o+1)}}if(t.startsWith("research:")){let s=t.slice(9),o=s.lastIndexOf("@");return{kind:"referenceLive",pack:"research",article:(o>=0?s.slice(0,o):s).trim()||"unknown"}}let n=t.split(/\s+/)[0];if(n.startsWith("corpus-weak:"))return{kind:"corpusWeak",name:n.slice(12)||"unknown"};if(n.startsWith("corpus:"))return{kind:"corpus",name:n.slice(7)||"unknown"};if(n.startsWith("child:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("world:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("mud:"))return{kind:"corpus",name:`mud:${n.slice(4).split(":")[0]||"unknown"}`};if(n.startsWith("ace:"))return{kind:"operator",...Pp(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=hv(s);return o||{kind:"teach",...Pp(s)}}return n.startsWith("web:")?{kind:"web",url:n.slice(4)}:n.startsWith("url:")?{kind:"web",url:n.slice(4)}:n.startsWith("optimistic-extract:")?{kind:"optimisticExtract",name:n.slice(19)||"unknown"}:n.startsWith("extracted:")?{kind:"extracted",name:n.slice(10)||"unknown"}:n.startsWith("entailed:")?{kind:"entailed",rule:n.slice(9)}:n.startsWith("chat:")||n.startsWith("session:")||n.startsWith("operator")?{kind:"operator"}:null}function Wp(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return zp;let n=Number(t);return Number.isFinite(n)?Math.max(Ic,Math.min(Bp,n)):zp}function Gp(e,t=Date.now(),n=wv){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Dp+(1-Dp)*Math.pow(.5,o/n)}function qp(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let p of o){if(r.has(p))continue;r.add(p);let m=t[p],h=yv(m);if(!h)continue;i.push(h);let g=(Ys[h]??0)*Wp(m);a.push(Math.max(0,Math.min(1,g)))}let l=0,c=1;for(let p of a)c*=1-p;if(a.length&&(l=Math.min(1,1-c)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let p=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;l=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*p))}let u=Gp(e?.createdAt,s,n.halfLifeMs),d=Co(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Co(u)};return{score:d,inputs:f}}function Ri(e,t){let n=(Ys[e]??0)*Wp(t);return Co(Math.max(0,Math.min(1,n)))}function $v(e){if(e==="operator")return 1;let t=Ys[e];return t===void 0?1:(t+1)/2}function Ti(e,t={}){let n=typeof t.now=="number"?t.now:Date.now(),s=Array.isArray(e)?e:[],o=new Map,r=[];for(let a of s){let l=Gp(a?.assertedAt,n,t.halfLifeMs),c=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,c*l)),f=o.get(u)||{complement:1,strongest:0};f.complement*=1-d,f.strongest=Math.max(f.strongest,d),o.set(u,f),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:c,recency:Co(l)})}let i=1;for(let[a,l]of o){let c=Math.max($v(a),l.strongest);i*=1-Math.min(1-l.complement,c)}return{score:s.length?Co(Math.min(1,1-i)):0,inputs:r}}function Vp(e){return Ti(e,{halfLifeMs:vv})}function Hp({factsAsserted:e=0,factsContradicted:t=0}={}){let n=Math.max(0,Number(e)||0),s=Math.max(0,Number(t)||0),o=Math.max(-1,Math.min(1,(n-2*s)/Math.max(1,n))),r=n/(n+xv),i=(o*r+1)/2;return Co(Ic+(Bp-Ic)*i)}var Oo,_i,Je,ys,Mp,Fp,gv,bv,Ys,Cc,Up,wv,Dp,Ic,Bp,zp,Co,yv,vv,xv,Hn=O(()=>{Oo="mgx:trustScore",_i="mgx:trustInputs",Je="mgx:createdAt",ys="mgx:updatedAt";Mp="#node:",Fp="peer:";gv="wikipedia-live",bv=e=>e===gv?"referenceLive":"reference";Ys=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Cc=Object.freeze({operator:{subClass:"tmct:AgentSource",prov:"prov:Agent"},teach:{subClass:"tmct:AgentSource",prov:"prov:Agent"},provider:{subClass:"tmct:AgentSource",prov:"prov:Agent"},corpus:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},corpusWeak:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},reference:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},referenceLive:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},web:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},extracted:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},optimisticExtract:{subClass:"tmct:DocumentSource",prov:"prov:Entity"},entailed:{subClass:"tmct:ActivitySource",prov:"prov:Activity"}}),Up=new Set(Object.entries(Cc).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),wv=720*60*60*1e3,Dp=.9,Ic=.5,Bp=1.5,zp=1,Co=(e,t=6)=>Number(e.toFixed(t)),yv=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";vv=1/0;xv=19});var Xs,Oc=O(()=>{Xs=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Lc(e,t){return Math.log(1+e/(1+t))}var Rr=O(()=>{});var Ii={};Bn(Ii,{bfsLevels:()=>Ai,findActionPath:()=>Nc,findReachableSet:()=>Pc});function Kp(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function Yp(e,t){let n=[];for(let{action:s,nextState:o}of t(e)||[])n.push({state:o,actions:[s],states:[e,o]});return n}function Nc(e,t,n,{maxDepth:s=50,stateKey:o=Kp}={}){if(t(e))return{actions:[],states:[e]};let r=Yp(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let c of r)if(t(c.state))return{actions:c.actions,states:c.states};if(a===s)break;let l=[];for(let c of r){let u=o(c.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:f}of n(c.state)||[]){let p=o(f);i.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}}r=l}return null}function Pc(e,t,{maxDepth:n=50,stateKey:s=Kp}={}){let o=Yp(e,t),r=new Set([s(e)]),i=[];for(let a=1;a<=n&&o.length;a+=1){let l=[];for(let c of o){let u=s(c.state);if(!r.has(u)&&(r.add(u),i.push({node:c.state,path:{actions:c.actions,states:c.states}}),a!==n))for(let{action:d,nextState:f}of t(c.state)||[]){let p=s(f);r.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}o=l}return i}function*Ai(e,t,{maxDepth:n=8,keyOf:s=o=>o}={}){let o=new Set([e]),r=[e];for(let i=1;i<=n&&r.length;i+=1){let a=[],l=[];for(let c of r)for(let u of t(c)||[]){let d=s(u);o.has(d)||(o.add(d),a.push(u),l.push(d))}r=l,yield a}}var Js=O(()=>{});function Oi(e){let t=Array.isArray(e?.individuals)?e.individuals:[],n=new Map;for(let r of t)r&&r.id&&n.set(r.id,r);let s=(Array.isArray(e?.objectProperties)?e.objectProperties:[]).filter(r=>r&&(r.predicate||r.prop)).map(r=>{let i=(Array.isArray(r.examples)?r.examples:[]).filter(a=>a&&a.subject&&a.object);return{predicate:String(r.predicate||""),prop:r.prop||null,count:Number(r.count)||i.length,edges:i}}),o=s.filter(r=>r.count>r.edges.length).map(r=>({predicate:r.predicate,count:r.count,shown:r.edges.length}));return{individuals:t,byId:n,relations:s,truncated:o,generatedAt:e?.generated_at||null,proseIndex:e?.proseIndex||{}}}function Bc(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Jn(e){let t=String(e?.prop||"").toLowerCase();if(Xp[t])return Xp[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":null}function Yn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Mc(e){let t=Yn(e).split("/");return t[t.length-1]}function Ev(e){return(e?.derived_from||[]).filter(uf).length}function Jp(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+Ev(e)}function tn(e,t){let n=Yn(t);if(!n)return{match:null,candidates:[]};let s=Mc(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Yn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(Mc(a)===s||Mc(a).replace(/\.[a-z]+$/,"")===s)?c=80:a.includes(n)&&(c=Math.max(10,50-(a.length-n.length))),c>0&&r.push({ind:i,score:c})}return r.sort((i,a)=>a.score-i.score||Jp(a.ind)-Jp(i.ind)||String(i.ind.label).length-String(a.ind.label).length),{match:r[0]?.ind||null,candidates:r.slice(1,5).map(i=>i.ind)}}function Rt(e){let t=(e?.attributes||[]).find(s=>s.key==="site");if(!t)return null;let n=String(t.value).match(/^(.*):(\d+)(?:-(\d+))?$/);return n?{path:n[1],start:Number(n[2]),end:n[3]?Number(n[3]):Number(n[2])}:null}function Sv(e,t){let n=[],s=[];for(let o of e.relations){let r=o.edges.filter(a=>a.subject===t),i=o.edges.filter(a=>a.object===t);r.length&&n.push({group:o,edges:r}),i.length&&s.push({group:o,edges:i})}return{out:n,incoming:s}}function Qp(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Xn(e){let t=e||"Entity",n=Rn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function ut(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Wc(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Xn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(uf);o.length&&s.push(`attestation: touched by ${o.length} commit(s)`);for(let l of t.attributes||[])s.push(`attribute: ${l.key} = ${l.value}${l.prop?` [${l.prop}]`:""}`);let{out:r,incoming:i}=Sv(e,t.id);if(!r.length&&!i.length)s.push("edges: none in the current artifact");else{s.push("edges:");for(let{group:l,edges:c}of r)s.push(` ${Qp(l)} (${c.length}) \u2192 ${ut(c.map(u=>u.objectLabel||u.object),Zp)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${Qp(l)} (${c.length}) by ${ut(c.map(u=>u.subjectLabel||u.subject),Zp)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${ut(a,kv)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${Xn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(jv(e)),s.join(`
|
|
2
|
+
`)}function jv(e){return`note: partial edge lists for: ${e.truncated.map(n=>`${n.predicate} (${n.shown}/${n.count})`).join(", ")}. Counts are complete; the lists are not.`}function No(e,t,{maxDepth:n=8}={}){let s=new Map,o=new Map,r=(a,l,c,u)=>{!a||!l||a===l||(s.has(a)||s.set(a,[]),s.get(a).push({id:l,label:c,via:u}))};for(let a of e.relations){let l=Jn(a);if(l==="imports"||l==="calls")for(let c of a.edges)r(c.object,c.subject,c.subjectLabel||c.subject,a.predicate);else if(l==="callsSymbol")for(let c of a.edges){let u=Kn(e,c.subject),d=Kn(e,c.object);if(!u||!d)continue;let f=e.byId.get(u)?.label||u;r(d,u,f,a.predicate),u!==d&&r(c.object,u,f,a.predicate)}else if(l==="tests")for(let c of a.edges)o.has(c.object)||o.set(c.object,[]),o.get(c.object).push(c.subjectLabel||c.subject)}let i=[];for(let a of Ai(t.id,l=>s.get(l)||[],{maxDepth:n,keyOf:l=>l.id})){if(!a.length)continue;let l=a.map(c=>({...c,tests:o.get(c.id)||[]})).sort((c,u)=>String(c.label).localeCompare(String(u.label)));i.push(l)}return i}function df(e,t,{maxDepth:n=8}={}){let s=No(e,t,{maxDepth:n}),o=[`Impact of changing ${t.label} (reverse closure over imports/calls edges, module- and function-level):`];s.length||o.push("no dependents found in the current artifact \u2014 nothing imports or calls it (or its edges are not in the extracted graph yet).");let r=s.reduce((a,l)=>a+l.length,0);s.length&&o.push(`total: ${r} dependent(s) across ${s.length} depth level(s) (lists capped for brevity).`),s.forEach((a,l)=>{if(l>=_v){o.push(`depth ${l+1}: ${a.length} more dependent(s) (not listed)`);return}o.push(l===0?`depth 1 (${a.length} direct dependents):`:`depth ${l+1} (${a.length}):`);for(let c of a.slice(0,Fc)){let u=c.tests.length?`tests: ${ut(c.tests,Rv)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Fc&&o.push(` \u2026+${a.length-Fc} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=Jn({predicate:a.predicate});return l==="imports"||l==="calls"||l==="callsSymbol"||l==="tests"});return i.length&&o.push("warning: partial edge lists ("+i.map(a=>`${a.predicate}: ${a.shown}/${a.count}`).join(", ")+") \u2014 this closure may be missing edges. Cross-check critical results with a lexical search (/find <term>)."),o.join(`
|
|
3
|
+
`)}function pf(e){let t=new Map;for(let n of e.relations)if(Jn(n)==="defines")for(let s of n.edges)t.has(s.subject)||t.set(s.subject,[]),t.get(s.subject).push(s.objectLabel||s.object);return t}function tf(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function bf(e,t,n=null){let s=n||(i=>Kn(e,i)),o=new Map,r=(i,a)=>{!i||!a||i===a||(o.has(i)||o.set(i,new Set),o.has(a)||o.set(a,new Set),o.get(i).add(a),o.get(a).add(i))};for(let i of t)for(let a of ke(e,i))r(s(a.subject),s(a.object));return o}function ux(e,t,n){if(t.length<2)return;let s=new Map(t.map(c=>[c.ind.id,c])),o=new Map(t.map(c=>[c.ind.id,c.score])),r=c=>{if(!c.size)return[[],[]];let u=0;for(let m of c.values())u=Math.max(u,m);let d=[...c.entries()].sort((m,h)=>h[1]-m[1]),f=[],p=[];for(let[m,h]of d)h>=u*ex&&f.length<n?f.push([m,h]):p.length<ef&&p.push([m,h]);return[f,p]},[i,a]=r(new Map(t.map(c=>[c.ind.id,c.score]))),l=new Set(i.map(([c])=>c));for(let c=0;c<sx&&i.length;c++){let u=new Map,d=[];for(let f of ox){let p=bf(e,f),m=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,y));let[h,g]=r(m);for(let[b,y]of h)u.set(b,Math.max(u.get(b)||0,y));d.push(...g)}a.push(...d);for(let[f,p]of u){if(l.has(f))continue;let m=s.get(f);m&&(m.score+=Math.min(p*tx,m.score*nx),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,ef).filter(([f])=>!l.has(f)))}}function dx(e,t=[],{depth:n=mf,q:s=gf,nodeLimit:o=hf,kinds:r=rx,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(E=>[E.ind.id,E])),d=0;for(let E of t)d=Math.max(d,E.score);let f=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let m=bf(e,r,a),h=E=>m.get(E)?.size||0,g=[],b=(E,R)=>E.hop!==R.hop?E.hop<R.hop:E.deg!==R.deg?E.deg<R.deg:E.id<R.id,y=(E,R)=>{let j=g[E];g[E]=g[R],g[R]=j},w=E=>{g.push(E);let R=g.length-1;for(;R>0;){let j=R-1>>1;if(b(g[R],g[j]))y(R,j),R=j;else break}},v=()=>{let E=g[0],R=g.pop();if(g.length){g[0]=R;let j=0;for(;;){let A=2*j+1,F=2*j+2,T=j;if(A<g.length&&b(g[A],g[T])&&(T=A),F<g.length&&b(g[F],g[T])&&(T=F),T===j)break;y(j,T),j=T}}return E},_=new Set(p);for(let E of p)w({id:E,hop:0,deg:h(E)});let $=null,x=0,S=[];for(;g.length&&x<o;){let E=v();if(S.push({id:E.id,hop:E.hop}),!p.has(E.id)){if(f){let A=d*ix*Math.pow(ax,E.hop-1),F=u.get(E.id);if(F)F.score+=Math.min(A*cx,F.score*lx);else{let T=e.byId?.get?.(E.id);if(T&&i(T)){$||($=pf(e));let M=$.get(T.id)||[],z={ind:T,score:A,defineCount:M.length,matching:[],density:0};t.push(z),u.set(E.id,z)}}}x++}if(E.hop>=n||E.hop>0&&h(E.id)>c)continue;let R=[];for(let A of m.get(E.id)||[]){if(_.has(A))continue;let F=e.byId?.get?.(A);!F||!i(F)||R.push({id:A,deg:h(A)})}if(!R.length)continue;R.sort((A,F)=>A.deg-F.deg||(A.id<F.id?-1:A.id>F.id?1:0));let j=Math.max(1,Math.floor(s*R.length));for(let A=0;A<j;A++){let F=R[A];_.add(F.id),w({id:F.id,hop:E.hop+1,deg:F.deg})}}return S}function wf(e,t,n={}){let{demoteNonProd:s=!1,callAdjacency:o=!1,implOfInterface:r=!1,beamSearch:i=!1,spiral:a=!1,proseBoost:l=!1,proseLayers:c=!1,literalMention:u=!1,rawQuery:d=""}=n,f=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,p=pf(e),m=[];for(let v of e.individuals){if((v.class||"")!=="Module")continue;let _=String(v.label),$=_.toLowerCase(),x=p.get(v.id)||[],S=new Set(x.map(j=>j.toLowerCase())),E=new Set;for(let j of x)for(let A of tf(j))E.add(A);let R=u?String((v.attributes||[]).find(j=>j.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:v,label:_,labelLc:$,defines:x,symSet:S,symComps:E,dotted:R})}let h=m.length||1,g=new Map,b=v=>{let _=0;for(let $ of m)($.labelLc.includes(v)||$.symComps.has(v)||$.symSet.has(v))&&_++;return _},y=v=>(g.has(v)||g.set(v,Lc(h,b(v))),g.get(v));for(let v of t)y(v);let w=[];for(let v of m){let _=0,$=0,x=0,S=[];for(let F of t){let T=g.get(F)||0;T&&(v.symSet.has(F)?(_+=T*ff,x++):v.symComps.has(F)&&(S.push(T),x++),v.labelLc.includes(F)&&($+=T*Av))}S.sort((F,T)=>T-F);let E=0;for(let F=0;F<Math.min(S.length,Cv);F++)E+=S[F]*Iv;let R=_+$+E;if(!R)continue;s&&(Xs(v.labelLc)||Pv(v.labelLc))?R*=Nv:Xs(v.labelLc)&&(R*=.4);let j=v.defines.filter(F=>{let T=F.toLowerCase(),M=tf(F);return t.some(z=>T===z||M.has(z))}),A=v.defines.length?x/v.defines.length:0;w.push({ind:v.ind,score:R,defineCount:v.defines.length,matching:j,density:A})}if(u&&d&&w.length){let v=String(d).toLowerCase(),_=E=>E!=null&&/[a-z0-9_./]/.test(E),$=E=>{for(let R=v.indexOf(E);R!==-1;R=v.indexOf(E,R+1))if(!_(v[R-1])&&!_(v[R+E.length]))return!0;return!1},x=new Map(m.map(E=>[E.ind.id,E])),S=0;for(let E of w)S=Math.max(S,E.score);for(let E of w){let R=x.get(E.ind.id);if(!R)continue;let j=0;for(let A of new Set([R.dotted,R.labelLc])){if(!A||A.split(/[./]+/).filter(Boolean).length<Xv||!$(A))continue;let F=[...new Set(A.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((M,z)=>z-M),T=0;for(let M=0;M<Math.min(F.length,Jv);M++)T+=F[M]*Yv;j=Math.max(j,T)}j&&(E.score+=Math.min(j*Qv,S*Zv))}}if(w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of ke(e,"imports"))!v.has($.subject)&&!v.has($.object)||(_.has($.subject)||_.set($.subject,new Set),_.has($.object)||_.set($.object,new Set),_.get($.subject).add($.object),_.get($.object).add($.subject));for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*Ov,$.score*Lv)}}if(o&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of["calls","callsSymbol"])for(let x of ke(e,$)){let S=Kn(e,x.subject),E=Kn(e,x.object);!S||!E||S===E||!v.has(S)&&!v.has(E)||(_.has(S)||_.set(S,new Set),_.has(E)||_.set(E,new Set),_.get(S).add(E),_.get(E).add(S))}for(let $ of w){let x=0;for(let S of _.get($.ind.id)||[])x=Math.max(x,v.get(S)||0);$.score+=Math.min(x*Mv,$.score*Fv)}}if(r&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),_=new Map;for(let $ of e.individuals)($.class||"")==="Class"&&$.label&&_.set(String($.label),$);for(let $ of w){if(!Uv($.ind.label))continue;let x=0;for(let S of ke(e,"inherits")){if(Kn(e,S.subject)!==$.ind.id||!Bv(S.objectLabel))continue;let R=Kn(e,S.object);if(!R){let j=_.get(String(S.objectLabel||""));j&&(R=Tn(e,j))}R&&(x=Math.max(x,v.get(R)||0))}$.score+=Math.min(x*Dv,$.score*zv)}}if(l&&w.length&&e.proseIndex){let v=Ks(e.proseIndex,t.join(" "),{limit:qv});if(v.length){let _=new Map;for(let{id:$,score:x}of v){let S=Kn(e,$);S&&_.set(S,(_.get(S)||0)+x)}for(let $ of w){let x=_.get($.ind.id)||0;x&&($.score+=Math.min(x*Wv,$.score*Gv))}}}if(c&&w.length&&e.proseIndex){let v=new Map(w.map(x=>[x.ind.id,x])),_=new Map(m.map(x=>[x.ind.id,x])),$=new Map;for(let x of new Set(t)){let S=g.get(x)||0;if(!S)continue;let{ids:E}=Np(e.proseIndex,x);if(!E.length)continue;let R=new Set;for(let j of E){let A=Kn(e,j);if(!A||R.has(A)||(R.add(A),!v.has(A)))continue;let F=_.get(A);F&&(F.symSet.has(x)||F.symComps.has(x)||F.labelLc.includes(x))||$.set(A,($.get(A)||0)+S*Kv)}}for(let x of w){let S=$.get(x.ind.id)||0;S&&(x.score+=Math.min(S*Vv,x.score*Hv))}}return i&&w.length>1&&ux(e,w,f),a&&w.length&&dx(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:mf,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:gf,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:hf}),w.sort((v,_)=>_.score-v.score||_.density-v.density||v.defineCount-_.defineCount||String(v.ind.label).length-String(_.ind.label).length),w}function yf(e,t,n={}){let s=String(t||""),o=s.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);if(!o.length)return[];let r=n.literalMention?{...n,rawQuery:s}:n;return wf(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function fx(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let l=0;l<e.length;l++){let c=e[l];if(c==="\\"){let u=e[l+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),l+=1,r="",i=!1;continue}if(o){c==="]"&&(o=!1,r="]",i=!1);continue}if(c==="["){o=!0,r="[",i=!1;continue}if(c==="?"&&(r==="("||i)){r="?",i=!1;continue}if(c==="*"||c==="+"||c==="?"){a(),r=c;continue}if(c==="{"){let u=e.indexOf("}",l),d=u===-1?"":e.slice(l+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),l=u,r="}";continue}r="{",i=!1;continue}r=c,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function Gc(e,{now:t=Date.now}={}){let n=String(e);if(n.length>nf)return{error:`name pattern is ${n.length} characters; the limit is ${nf}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=fx(n);if(o)return{error:`name pattern "${n}" quantifies a group, which can backtrack for minutes on one label. Quantify a character or a class instead.`};if(r)return{error:`name pattern "${n}" uses a back-reference, which can backtrack for minutes on one label.`};if(s>sf)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${sf}.`};let i;try{i=new RegExp(n,"i")}catch{return{error:`invalid name pattern: ${n}`}}let a=null;return{test(l){if(a===null)a=t()+of;else if(t()>a)throw new Ci(`name pattern "${n}" exceeded its ${of}ms matching budget.`);return i.test(String(l).slice(0,px))}}}function $f(e,t,{limit:n=Li,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),l=String(s||"").trim().toLowerCase(),c=String(o||"").trim().toLowerCase(),u=null;if(r){let m=Gc(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return wx(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof Ci)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=wf(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let f=d.slice(0,n),p=[`${d.length} module(s) match "${t}" (top ${f.length}):`];for(let{ind:m,defineCount:h,matching:g}of f){let b=g.length?` \u2014 matching: ${ut([...new Set(g)],Tv)}`:"";p.push(`- ${m.label} (defines ${h} symbol(s))${b}`)}return p.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),p.join(`
|
|
4
|
+
`)}function ke(e,t){let n=rf.get(e);n||(n=new Map,rf.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Jn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Kn(e,t){let n=e.byId?.get?.(t);if(n)return Tn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Tn(e,t){if((t?.class||"")==="Module")return t.id;let n=Rt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function qc(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function Lo(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function vf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Xn(t.class)} (id: ${t.id})`],o=ke(e,"contains").filter(a=>a.subject===t.id);if(!o.length)return s.push(`members: none recorded (empty class, or members not in the extracted graph). Use ${n}describe for its edges.`),s.join(`
|
|
5
|
+
`);let r=[],i=[];for(let a of o){let l=e.byId.get(a.object),c=qc(l?Rt(l):null),u=l?Lo(l):"",d=`${a.objectLabel||a.object}${c}${u?` @${u}`:""}`;((l?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${ut(r,af)}`),i.length&&s.push(`attributes (${i.length}): ${ut(i,af)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
|
|
6
|
+
`)}function xf(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Rt(t),o=[`${t.label} \u2014 ${Xn(t.class)}${qc(s)}`],r=Pe(t,"params"),i=Pe(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Pe(t,"isStatic")&&a.push("static"),Pe(t,"isAbstract")&&a.push("abstract"),Pe(t,"isConstant")&&a.push("constant");let l=Pe(t,"visibility");l&&a.push(l),a.length&&o.push(`flags: ${a.join(", ")}`);let c=Lo(t);c&&o.push(`decorators: @${c.split(", ").join(", @")}`);let u=Pe(t,"raises");u&&o.push(`raises: ${u}`);let d=Pe(t,"catches");d&&o.push(`catches: ${d}`);let f=Pe(t,"self_fields");f&&o.push(`self fields: ${f}`);let p=Pe(t,"value");p&&o.push(`value: ${p}`);let m=Pe(t,"doc");return m&&o.push(`doc: ${m}`),o.length===1&&o.push(`(no signature detail recorded for this symbol \u2014 likely a module or attribute; use ${n}snippet for its source.)`),o.push(`Use ${n}snippet for the exact body.`),o.join(`
|
|
7
|
+
`)}function Ef(e,t){let n=ke(e,"inherits"),s=n.filter(l=>l.subject===t.id).map(l=>l.objectLabel||l.object),o=new Map;for(let l of n)o.has(l.object)||o.set(l.object,[]),o.get(l.object).push({id:l.subject,label:l.subjectLabel||l.subject});let r=[`${t.label} \u2014 ${Xn(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${ut(s,cf)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Ai(t.id,c=>o.get(c)||[],{maxDepth:8,keyOf:c=>c.id}))l.length&&i.push(l.map(c=>c.label).sort((c,u)=>String(c).localeCompare(String(u))));let a=i.reduce((l,c)=>l+c.length,0);return a?(r.push(`subclasses: ${a} total across ${i.length} level(s).`),i.forEach((l,c)=>r.push(` depth ${c+1} (${l.length}): ${ut(l,cf)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
|
|
8
|
+
`)}function Ni(e){let t=new Map;for(let n of e){let s=n.label.includes("/")?n.label.slice(0,n.label.lastIndexOf("/")):"(root)";t.set(s,(t.get(s)||0)+1)}return t}function Pi(e,t=""){let n=Yn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Yn(s.label).startsWith(n)))}function Sf(e,{pkg:t=""}={}){let n=Yn(t),s=Pi(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=Ni(s),r=new Map;for(let u of ke(e,"imports"))r.set(u.object,(r.get(u.object)||0)+1);let i=new Set(s.map(u=>u.id)),a=[...r.entries()].filter(([u])=>i.has(u)).sort((u,d)=>d[1]-u[1]).slice(0,hx).map(([u,d])=>`${e.byId.get(u)?.label||u} (${d} importers)`),l=[...o.entries()].sort((u,d)=>d[1]-u[1]),c=[`Architecture${n?` of ${t}`:""}: ${s.length} module(s) in ${l.length} package(s).`];return c.push(`packages (by module count): ${ut(l.map(([u,d])=>`${u} (${d})`),mx)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
|
|
9
|
+
`)}function jf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||Rt(t)?.path||n,o=[...new Set(ke(e,"tests").filter(a=>a.object===n).map(a=>a.subjectLabel||a.subject))],r=o.length>0,i=r?`covered by ${o.length} test module(s):
|
|
10
|
+
${ut(o,kf,`
|
|
11
11
|
`)}`:"no covering tests recorded (no test module imports it).";return n===t.id?`${s}: ${i}`:`${t.label} is defined in ${s}, which ${r?"is":"has"} ${i}
|
|
12
|
-
${
|
|
13
|
-
${ut(s
|
|
14
|
-
`)}`:"every source module has at least one covering test module."}function
|
|
12
|
+
${gx}`}function _f(e){let t=new Set,n=new Set;for(let o of ke(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!Xs(String(o.label).toLowerCase())&&!t.has(o.id)).map(o=>o.label).sort();return s.length?`${s.length} source module(s) with no covering test module:
|
|
13
|
+
${ut(s,kf,`
|
|
14
|
+
`)}`:"every source module has at least one covering test module."}function Rf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${ut(o,Wt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Af(e,t,{toolNamePrefix:n="tmct_"}={}){if(Tf.has(t.class)){let i=[...new Set(ke(e,"callsSymbol").filter(a=>a.object===t.id).map(a=>a.subjectLabel||a.subject))];return i.length?`${t.label} \u2014 called by ${i.length} symbol(s):
|
|
15
15
|
${ut(i,Tr,`
|
|
16
|
-
`)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}let s=
|
|
16
|
+
`)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}let s=Tn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(ke(e,"calls").filter(i=>i.object===s).map(i=>i.subjectLabel||i.subject))];return r.length?`${o} \u2014 called by ${r.length} module(s):
|
|
17
17
|
${ut(r,Tr,`
|
|
18
|
-
`)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function
|
|
18
|
+
`)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function If(e,t){if(Tf.has(t.class)){let r=[...new Set(ke(e,"callsSymbol").filter(i=>i.subject===t.id).map(i=>i.objectLabel||i.object))];return r.length?`${t.label} \u2014 calls into ${r.length} symbol(s):
|
|
19
19
|
${ut(r,Tr,`
|
|
20
|
-
`)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=
|
|
20
|
+
`)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(ke(e,"calls").filter(r=>r.subject===n).map(r=>r.objectLabel||r.object))];return o.length?`${s} \u2014 calls into ${o.length} module(s):
|
|
21
21
|
${ut(o,Tr,`
|
|
22
|
-
`)}`:`${s}: no recorded callees.`}function
|
|
22
|
+
`)}`:`${s}: no recorded callees.`}function Cf(e,t){let n=e.byId.get(t.object),s=n?Rt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function Vc(e,t){if(!t?.id)return"";let n=ke(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${ut(n.map(s=>Cf(e,s)),bx)}`:""}function Of(e,t){let n=ke(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Xn(t.class)}: no in-repo calls recorded (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`;let s=n.map(o=>Cf(e,o));return`${t.label} \u2014 ${Xn(t.class)} calls ${n.length} in-repo symbol(s):
|
|
23
23
|
${ut(s,Tr,`
|
|
24
|
-
`)}`}function
|
|
25
|
-
\u2026+${o.length-
|
|
24
|
+
`)}`}function Lf(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Pe(s,"commitDate")||Pe(s,"date"),i=Pe(s,"commitAuthor")||Pe(s,"author"),a=Pe(s,"commitMessage")||Pe(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Nf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(e,"touches").filter(a=>a.object===n);if(!o.length)return`${s}: no commit history recorded (outside the git-log window or unmodified).`;let r=o.slice(0,Wt).map(a=>` ${Lf(e,a.subject,a.subjectLabel)}`),i=o.length>Wt?`
|
|
25
|
+
\u2026+${o.length-Wt} more`:"";return`${s}: touched by ${o.length} recent commit(s):
|
|
26
26
|
${r.join(`
|
|
27
|
-
`)}${i}`}function
|
|
28
|
-
\u2026+${n.length-
|
|
27
|
+
`)}${i}`}function Pf(e,t){let n=ke(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Xn(t.class)}: no symbol-level commit history recorded (outside the git-log window, or fine-grained history is not in the extracted graph).`;let s=n.slice(0,Wt).map(r=>` ${Lf(e,r.subject,r.subjectLabel)}`),o=n.length>Wt?`
|
|
28
|
+
\u2026+${n.length-Wt} more`:"";return`${t.label} \u2014 ${Xn(t.class)}: touched by ${n.length} commit(s):
|
|
29
29
|
${s.join(`
|
|
30
|
-
`)}${o}`}function
|
|
31
|
-
`)}function
|
|
30
|
+
`)}${o}`}function Mf(e,t){return Pf(e,t)}function Ff(e,t){return Pf(e,t)}function Hc(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Df[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!Lo(a).toLowerCase().includes(s))continue;let l=String(a.label).toLowerCase(),c=t.length?0:1;for(let u of t)l.includes(u)&&(c+=5);t.length&&!c||i.push({ind:a,score:c})}return i.sort((a,l)=>l.score-a.score||String(a.ind.label).length-String(l.ind.label).length),i}function wx(e,t,{limit:n=Li,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Df[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=Hc(e,t,{kind:s,decFilter:o,nameRe:r});if(!l.length)return`no ${s} matches the given filters.`;let c=l.slice(0,n),u=[`${l.length} ${s}(s) match (top ${c.length}):`];for(let{ind:d}of c)u.push(`- ${d.label}${qc(Rt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
|
|
31
|
+
`)}function Rx(e){return{paramCount:Mi(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function Tx(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Mi(i.params)),n=e.filter(i=>!!i.returns).length,s=e.filter(i=>!!i.raises).length,o=new Map;for(let i of e)for(let a of i.callees||[])o.set(a,(o.get(a)||0)+1);let r=new Set([...o.entries()].filter(([,i])=>i>=2).map(([i])=>i));return{paramCount:_x(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function Ax(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Mi(e.params)-t.paramCount));!!e.returns===t.hasReturns&&(n+=2),!!e.raises===t.hasRaises&&(n+=2);let s=[...e.callees||[]].filter(o=>t.callees.has(o)).length;return n+Math.min(s,4)*2}function Ix(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Dc(f.decorators))r.set(p,(r.get(p)||0)+1);let i="",a=1;for(let[f,p]of r)p>a&&(a=p,i=f);let l=new Set(Dc(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(lf(n)),d=s?.start??null;for(let f of e){let p=Dc(f.decorators).some(b=>c.has(b))?1:0,m=lf(f.label).filter(b=>u.has(b)).length,h=Ax(f,o),g=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+m*50+h+g}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function Po(e,t){let n=Tn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=ke(e,"defines").filter(j=>j.subject===n),r=new Map;for(let j of ke(e,"callsSymbol"))r.has(j.subject)||r.set(j.subject,new Set),r.get(j.subject).add(j.object);let i=[],a=[],l=0;for(let j of o){let A=e.byId.get(j.object);if(!A)continue;let F=A.class||"",T=Rt(A);F==="GlobalVariable"?(a.push({label:A.label,value:(A.attributes||[]).find(M=>M.key==="value")?.value||"",site:T}),T&&(l=Math.max(l,T.end))):(F==="Function"||F==="Class")&&(i.push({id:A.id,label:A.label,class:F,site:T,decorators:Lo(A),raises:Pe(A,"raises"),doc:Pe(A,"doc"),params:Pe(A,"params"),returns:Pe(A,"returns"),callees:r.get(A.id)||new Set}),T&&(l=Math.max(l,T.end)))}let c=Rt(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:Lo(t),raises:Pe(t,"raises"),params:Pe(t,"params"),returns:Pe(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?Rx(u):Tx(i);i=Ix(i,u||{label:t.label},f);let p=u?null:i.find(j=>j.site&&j.label!==t.label)||null,m=[...new Set(ke(e,"tests").filter(j=>j.object===n).map(j=>j.subjectLabel||j.subject))].slice(0,xx),h=Wf(e,n).slice(0,vx),g=ke(e,"reexports").filter(j=>j.subject===n).map(j=>j.objectLabel||j.object).slice(0,20),b=Pe(e.byId.get(n),"all"),y=ke(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(j=>j.object===t.id)?.subject||null);let v=null;if(w){let j=e.byId.get(w),A=y.filter(F=>F.subject===w).map(F=>{let T=e.byId.get(F.object);return{label:F.objectLabel||T?.label||F.object,class:T?.class||"",site:T?Rt(T):null,decorators:T?Lo(T):"",params:T?Pe(T,"params"):"",returns:T?Pe(T,"returns"):"",raises:T?Pe(T,"raises"):""}}).slice(0,$x);v={className:j?.label||String(w).replace(/^fn:.*#/,""),members:A,total:y.filter(F=>F.subject===w).length}}let _=null;for(let j of[...i,...a])j.site&&(!_||j.site.start>_.start)&&(_=j.site);let $=_?{start:_.start,end:_.end}:null,x=u||p,S=x?.id?e.byId.get(x.id):null,E=S?Vc(e,S):"",R=[];if(x?.callees)for(let j of x.callees){let A=e.byId.get(j),F=A?Rt(A):null;if(F&&R.push({label:A.label,site:F}),R.length>=jx)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:m,cochange:h,exports:g,allExports:b,classMembers:v,insertion:l,insertionRegion:$,calleeBodies:R,callHint:E,siblingCap:yx}}function Qs(e){let t={anchor:!0,exemplar:!0,registration:!0,insertionRegion:!0,allExports:!0,classMembers:!0,siblings:!0,reexports:!0,tests:!0,cochange:!0,inlinedCallees:!1};return e==="TINY"?{...t,classMembers:!1,siblings:!1,reexports:!1,tests:!1,cochange:!1}:e==="LARGE"||e==="FULL"?{...t,inlinedCallees:!0}:t}function zf(e){return{...e,anchor:!1,exemplar:!1,inlinedCallees:!1,classMembers:!1,reexports:!1,tests:!1,cochange:!1,registration:!0,siblings:!0,insertionRegion:!0,allExports:!0}}function Fi(e,t,{untuned:n=!1}={}){let s=e.anchor||e.exemplar,o="TINY";if(e.anchor&&e.anchor.site||e.exemplar&&e.exemplar.site||(o="MID"),e.classMembers&&e.classMembers.members&&e.classMembers.members.length&&(o="MID"),s){let i=s.site?s.site.end-s.site.start+1:1/0,a=Mi(s.params);(i>Ex||a>Sx||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?Rt(d):null;if(f&&f.path!==e.moduleLabel){l=!0;break}}let c=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=kx;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:Qs(o),topup:o!=="TINY"}}function Uf(e){let t=[`Additional context for ${e.moduleLabel} (sections omitted from the lean bundle):`];if(e.classMembers&&e.classMembers.members.length){t.push(`
|
|
32
32
|
## members of ${e.classMembers.className}:`);for(let n of e.classMembers.members){let s=String(n.label).split(".").pop(),o=n.params!=null&&n.params!==""?`(${n.params})${n.returns?` -> ${n.returns}`:""}`:"",r=n.decorators?`@${n.decorators} `:"",i=n.raises?` raises=${n.raises}`:"";t.push(` ${n.class} ${s}${n.site?` :${n.site.start}`:""} ${r}${s}${o}${i}`)}}if(e.siblings.length){t.push(`
|
|
33
33
|
## sibling symbols (most relevant first; ${e.siblings.length} total):`);for(let n of e.siblings.slice(0,e.siblingCap)){let s=n.decorators?`@${n.decorators} `:"",o=n.raises?` raises=${n.raises}`:"";t.push(` ${n.class} ${n.label}${n.site?` :${n.site.start}`:""} ${s}${o}`)}e.siblings.length>e.siblingCap&&t.push(` \u2026+${e.siblings.length-e.siblingCap} more`)}return e.allExports&&t.push(`
|
|
34
34
|
## module __all__: ${e.allExports}`),e.exports&&e.exports.length&&t.push(`
|
|
35
35
|
## re-exported symbols: ${e.exports.join(", ")}`),e.tests.length&&t.push(`
|
|
36
36
|
## covering tests: ${e.tests.join(", ")}`),e.cochange&&e.cochange.length&&t.push(`
|
|
37
37
|
## usually changed together: ${e.cochange.map(n=>`${n.label} (\xD7${n.weight})`).join(", ")}`),t.length===1&&t.push("(no omitted sections \u2014 the lean bundle already contained everything for this symbol.)"),t.join(`
|
|
38
|
-
`)}function
|
|
38
|
+
`)}function Bf(e,t){let n=[`Edit context for ${e.moduleLabel} (graph-only bundle \u2014 siblings/registration/tests are real graph truth; no source body without a source-capable provider).`];if(t.registration&&e.globals.length){n.push(`
|
|
39
39
|
## registration / module globals (replicate this pattern):`);for(let s of e.globals)n.push(` ${s.label} = ${s.value}${s.site?` [:${s.site.start}]`:""}`)}if(t.classMembers&&e.classMembers&&e.classMembers.members.length){n.push(`
|
|
40
40
|
## members of ${e.classMembers.className}:`);for(let s of e.classMembers.members){let o=String(s.label).split(".").pop(),r=s.params!=null&&s.params!==""?`(${s.params})${s.returns?` -> ${s.returns}`:""}`:"",i=s.decorators?`@${s.decorators} `:"",a=s.raises?` raises=${s.raises}`:"";n.push(` ${s.class} ${o}${s.site?` :${s.site.start}`:""} ${i}${o}${r}${a}`)}}if(t.siblings&&e.siblings.length){n.push(`
|
|
41
41
|
## sibling symbols to copy the style of (most relevant first; ${e.siblings.length} total):`);for(let s of e.siblings.slice(0,e.siblingCap)){let o=s.decorators?`@${s.decorators} `:"",r=s.raises?` raises=${s.raises}`:"";n.push(` ${s.class} ${s.label}${s.site?` :${s.site.start}`:""} ${o}${r}`)}e.siblings.length>e.siblingCap&&n.push(` \u2026+${e.siblings.length-e.siblingCap} more`)}return t.allExports&&e.allExports&&n.push(`
|
|
@@ -45,31 +45,31 @@ ${s.join(`
|
|
|
45
45
|
## insert the new sibling after line ~${e.insertion} (end of the last top-level definition).`)),t.tests&&e.tests.length&&n.push(`
|
|
46
46
|
## covering tests: ${e.tests.join(", ")}`),t.cochange&&e.cochange&&e.cochange.length&&n.push(`
|
|
47
47
|
## usually changed together (consider editing these too): ${e.cochange.map(s=>`${s.label} (\xD7${s.weight})`).join(", ")}`),n.join(`
|
|
48
|
-
`)}function
|
|
48
|
+
`)}function Wf(e,t){let n=[];for(let s of ke(e,"cochange"))s.subject===t?n.push({label:s.objectLabel||s.object,weight:s.weight||0}):s.object===t&&n.push({label:s.subjectLabel||s.subject,weight:s.weight||0});return n.sort((s,o)=>o.weight-s.weight)}function Gf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Wf(e,n);if(!o.length)return`${s}: no change-coupling recorded (rarely co-committed, or outside the git-log window).`;let r=o.slice(0,zc).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
|
|
49
49
|
${r.join(`
|
|
50
|
-
`)}`+(o.length>
|
|
51
|
-
\u2026+${o.length-
|
|
50
|
+
`)}`+(o.length>zc?`
|
|
51
|
+
\u2026+${o.length-zc} more`:"")}function qf(e,t){let n=Tn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(e,"reexports").filter(i=>i.subject===n);if(!o.length)return`${s}: no public exports recorded (no export list / __all__ found, or none resolved).`;let r=o.slice(0,Uc).map(i=>{let a=e.byId.get(i.object),l=a?Rt(a):null,c=l?` \u2190 ${l.path}`:"";return`${i.objectLabel||i.object}${c}`});return`${s} \u2014 public API (${o.length} export(s)):
|
|
52
52
|
${r.join(`
|
|
53
|
-
`)}`+(o.length>
|
|
54
|
-
\u2026+${o.length-Dc} more`:"")}var qp,of,Kp,mv,gv,Pc,bv,Oi,wv,yv,$v,cf,vv,xv,Ev,Sv,kv,jv,_v,Rv,Tv,Av,Iv,Cv,Ov,Lv,Nv,Pv,Mv,Fv,Dv,zv,Uv,Bv,Wv,Gv,qv,Yp,Vv,Hv,lf,uf,df,Kv,Yv,Xv,Jv,Qv,Jp,Qp,tx,Zp,Ii,ef,tf,nf,Tr,Pe,sx,ox,$f,rx,Ut,Sf,ix,Lf,cx,lx,ux,dx,px,fx,mx,hx,Mc,sf,Pi,gx,Fc,Dc,Oe=O(()=>{hs();ws();Ic();Rr();Js();qp={"mgx:importsnamespace":"imports","mgx:callscoarse":"calls","seon:declaresmethod":"defines","mgx:testscoverage":"tests","mgx:touchedbycommit":"touches","seon:containscodeentity":"contains","seon:hassupertype":"inherits","mgx:changecoupledwith":"cochange","mgx:reexports":"reexports","mgx:serves":"serves","mgx:denotes":"denotes","mgx:touchessymbol":"touchesSymbol","mgx:callssymbol":"callsSymbol","seon:usescomplextype":"imports","seon:invokesmethod":"calls","seon:history":"touches","mgx:subclassof":"inherits","mg:imports":"imports","mg:calls":"calls","mg:defines":"defines","mg:tests":"tests","mg:touches":"touches","mgx:saidinsession":"saidInSession","mgx:inreplyto":"inReplyTo","mgx:statedby":"statedBy","mgx:canonicalisedfrom":"canonicalisedFrom"};of=e=>/^(git|turn):/.test(String(e||""));Kp=30,mv=8;gv=2,Pc=25,bv=3;Oi=10,wv=8,yv=3,$v=2,cf=5,vv=4,xv=.2,Ev=.35,Sv=.15,kv=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),jv=.2,_v=.35,Rv=.2,Tv=.35,Av=e=>/\.cs$/i.test(e),Iv=e=>/^I[A-Z]/.test(String(e||"")),Cv=.2,Ov=.35,Lv=50,Nv=.2,Pv=.35,Mv=.5,Fv=cf,Dv=3,zv=4,Uv=1,Bv=.9,Wv=.5,Gv=.2,qv=.35,Yp=4,Vv=2,Hv=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],lf=3,uf=12,df=.9,Kv=["imports","calls","callsSymbol","inherits"],Yv=.5,Xv=.6,Jv=.2,Qv=.35;Jp=128,Qp=4,tx=64,Zp=250,Ii=class extends Error{};ef=new WeakMap;tf=40,nf=40,Tr=30;Pe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";sx=25,ox=15;$f=40,rx="tests edges are recorded module to module, so this is module-grain coverage.";Ut=15;Sf=new Set(["Function","Method"]);ix=8;Lf={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};cx=8,lx=16,ux=4,dx=6,px=12,fx=2,mx=8,hx=3,Mc=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),sf=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Pi=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},gx=e=>{let t=new Map,n=e[0]??0,s=0;for(let o of e){let r=(t.get(o)||0)+1;t.set(o,r),r>s&&(s=r,n=o)}return n};Fc=20;Dc=40});function Qe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Hf(e){let t=String(e||"");return Uf&&(t=t.replace(Uf," ")),t.replace(/\s+/g," ").trim()}function Kf(e){let t=String(e||"");t=t.replace(Mx," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(Lx);if(o&&(t=o[1].trim()),o=t.match(Nx),o&&(t=o[1].trim()),o=t.match(Bf),o&&(t=o[1].trim()),o=t.match(Wf),o&&(t=o[1].trim()),o=t.match(Gf),o&&(t=o[1].trim()),o=t.match(Px),o&&(t=o[1].trim()),o=t.match(qf),o&&(t=o[1].trim()),o=t.match(Fx),o&&(t=o[1].trim()),o=t.match(Dx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(zx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Ux),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Bx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Wx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Gx),o&&ys.test(o[1].trim())&&(t=o[1].trim()),o=t.match(qx),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(Vx),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(Hx),o){let r=o[1].trim();Ox(r)||(t=!Kx.test(r)&&(Ax.test(r)||ys.test(r))?r:`describe ${r}`)}if(o=t.match(Yx),o){let r=o[1].trim();(ys.test(r)||Xx.test(r)||qf.test(r)||Bf.test(r)||Gf.test(r)||Wf.test(r)||Jx.test(r))&&(t=r)}if(t===s)break}return t}function eE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(Qx);if(o&&(t=o[1].trim()),o=t.match(Zx),o&&(t=o[1].trim()),t===s)break}return t}function nE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(tE);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function rE(e){let t=String(e||""),n=t.match(oE);if(n){let o=Xf[n[1].toLowerCase()],r=Yf[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(Jf);return s?`which modules transitively import ${s[1].trim()}`:t}function Fi(e){return String(e||"").replace(xx,t=>xc[t.toLowerCase()])}function Zs(e){let t=Fi(e);return t=t.replace(Ex,n=>Ec[n.toLowerCase()]),t=t.replace(Sx,n=>Sc[n.toLowerCase()]),t=t.replace(kx,"with"),t=t.replace(jx,(n,s)=>`${s} for`),t=t.replace(_x,(n,s)=>`for ${s}`),t=t.replace(Rx,(n,s)=>s),t=t.replace(iE,"$1$2"),t=t.replace(hp,"$1ing"),t=Kf(t),t=nE(t),t=eE(t),t=rE(t),t=Hf(t),t=rn(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ar(e){for(let t of[...bp,...gp]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Vc(e){for(let t of aE){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Qf(e){let t=String(e||"").match(cE);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var vx,xx,Vf,Ex,Sx,kx,jx,_x,Rx,Tx,Uf,Ax,ys,Ix,Cx,Ox,Lx,Nx,Bf,Wf,Gf,Px,Mx,Fx,Dx,zx,Ux,Bx,Wx,Gx,qx,Vx,Hx,Kx,Yx,Xx,Jx,qf,Qx,Zx,tE,Yf,Xf,sE,oE,Jf,iE,aE,cE,tt,Bt,me,Tn=O(()=>{Gn();vx=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b","gi"),xx=vx(xc),Vf=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Ex=Vf(Ec),Sx=Vf(Sc),kx=/(?<=^|\s)w\/(?=\s|$)/gi,jx=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,_x=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,Rx=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,Tx=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),Uf=Sr.length?new RegExp("\\b("+[...Sr].sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b\\s*,?","gi"):null;Ax=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b","i"),ys=/^(?:which|what|who|whose|where|when|why|how)\b/i,Ix=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),Cx=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,Ox=e=>{if(Cx.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return Ix.has((t[t.length-1]||"").toLowerCase())},Lx=/^(?:hi|hiya|hello|hey|yo|howdy|g'?day|yeah\s+nah|good\s+(?:morning|afternoon|evening|day)|greetings|salutations)(?:\s+(?:there|pardner|folks|friend|mate))?\s*[,.—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,Nx=/^(?:thanks|thank\s+you|many\s+thanks|thx|ty|cheers)(?:\s+(?:so\s+much|a\s+lot|very\s+much|a\s+bunch))?\s*[,—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,Bf=/^(?:(?:ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|(?:just\s+)?(?:one|another)\s+more|another\s+one)[\s,]+)+(.+)$/i,Wf=/^(?:just\s+(?:poking\s+around|looking\s+around|browsing|exploring|checking\s+(?:this|it)\s+out)|first\s+time\s+(?:trying\s+this\s+out|using\s+this|here)|i'?m\s+new\s+(?:here|around\s+here|to\s+(?:this|all\s+this)(?:\s+(?:repo|codebase|project|app|tool|thing))?))\s*[,.—–-]\s*(.+)$/i,Gf=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,Px=/^(?:please[\s,]+)+(.+)$/i,Mx=/,?\s*if\s+(?:it'?s|it\s+is|that'?s|that\s+is)\s+not\s+too\s+much\s+(?:trouble|bother|hassle)\s*,?\s*/i,Fx=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,Dx=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,zx=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,Ux=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,Bx=/^do\s+you\s+know\s+(.+?)\??$/i,Wx=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,Gx=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,qx=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,Vx=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,Hx=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,Kx=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,Yx=/^(?:and|also|so|then|now|but)\s+(.+)$/i,Xx=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,Jx=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,qf=/^(?:(?:actually|no\s+wait|wait|hold\s+on|never\s+mind|scratch\s+that|on\s+second\s+thought|i\s+mean(?:t)?)[\s,.]+)+(.+)$/i;Qx=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,Zx=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;tE=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;Yf=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),Xf=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),sE="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",oE=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(Xf).join("|")+")\\s+("+Object.keys(Yf).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+sE+")\\??$","i"),Jf=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;iE=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${$c.map(Qe).join("|")})(\\s*[?.!]*)$`,"i");aE=Object.freeze([{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:are|is)\s+(?:in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:does|do)\s+(.+?)\s+have\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+are\s+(?:the\s+)?(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:of|in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^(?:the\s+)?(?:members?|methods?|attributes?|contents)\s+of\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+else\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:defined|declared)\s+(?:the\s+)?(?:function\s+|method\s+|class\s+|module\s+|variable\s+|constant\s+)?(.+?)\??$/i,to:e=>`where is ${e[1]} defined`},{re:/^where'?s\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^were\s+is\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^what\s+is\s+the\s+purpose\s+of\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\??$/i,to:e=>`what is a ${e[1]}`},{re:new RegExp(`^what\\s+does\\s+(?:the\\s+)?(?!(?:an?|it|this|that|these|those)\\s)(.+?)\\s+do\\s+(?:${vc.map(Qe).join("|")})\\??$`,"i"),to:e=>`what is a ${e[1]}`},{re:/^(?:which|what)\s+(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:are|is)\s+(public|private|protected|static|abstract|constant|exported|re-?exported|tested|covered|untested|uncovered)\??$/i,to:e=>`${e[2].toLowerCase()} ${e[1].toLowerCase()}`},{re:/^what\s+(?:is|are)\s+(not\s+)?(tested|untested|covered|uncovered)\??$/i,to:e=>{let t=e[2].toLowerCase();return`${e[1]?t==="tested"?"untested":t==="covered"?"uncovered":t:t} modules`}},{re:/^what\s+does\s+(.+?)\s+changes?\s+together\s+with\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^what\s+changes?\s+together\s+with\s+(.+?)\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^how\s+many\s+commits\s+(?:are|were)\s+(?:recorded|logged)\s+(?:for|against)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`how many commits touched ${e[1]}`},{re:/^who\s+(?:wrote|authored)\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^who\s+is\s+the\s+authors?\s+of\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^(?:does|do)\s+(?!.*\bnot\b)(.+?)\s+have\s+(?:any\s+)?(?:tests?|test\s+coverage|coverage)\??$/i,to:e=>`what tests ${e[1]}`},{re:/^(?:is|are)\s+(?!.*\bnot\b)(.+?)\s+tested\??$/i,to:e=>`what tests ${e[1]}`},{re:/^what\s+needs\s+(?:to\s+be\s+)?(?:a\s+)?(?:tested|tests?|testing|coverage|covering)\??$/i,to:()=>"untested modules"},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:(?:that|which)\s+)?(?:have|has|having|with)\s+no\s+tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+without\s+(?:any\s+)?tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:new RegExp(`^(?:do|does)\\s+(.+?)\\s+(${Tx})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);cE=new RegExp("^(?:which|what|who|list|show(?:\\s+me)?|find|give\\s+me)?\\s*(?:the\\s+|all\\s+)?([a-z][a-z-]*)\\s+(?:(?:that|which|who)\\s+)?(?:(?:do|does|did|are|is|was|were|have|has|can|could|will|would|should)\\s+not|cannot|can't|won't|couldn't|shouldn't|wouldn't|not)\\s+(.+)$","i");tt=new Set(["what","who","which","where","when","why","how","does","do","did","is","are","was","were","the","a","an","of","to","from","at","in","on","there","something","anything","nothing","one","any","anywhere","last","usually","typically","generally","normally","often","commonly","mostly","should","would","could","can","will","shall","might","must"]),Bt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),me=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var em,Zf=O(()=>{em={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chapped","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seifing","seiing","seined","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Yn(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let l=1;l<=t.length;l+=1){let c=e[r-1]===t[l-1]?0:1,u=Math.min(o[l]+1,i[l-1]+1,o[l-1]+c);r>1&&l>1&&e[r-1]===t[l-2]&&e[r-2]===t[l-1]&&(u=Math.min(u,s[l-2]+c)),i[l]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function Kc(e){return/^[a-z]+$/.test(e)&&!tt.has(e)&&!Hc.has(e)}function sm(e){return pE(e)?null:Di(e,nm,Xn(e))}function Di(e,t,n=Xn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Yn(e,i,Math.min(s,n));a<s?(s=a,o=i,r=!1):a===s&&a<=n&&i!==o&&(r=!0)}return s<=n&&!r?o:null}var uE,Xn,Hc,tm,nm,dE,pE,Mo=O(()=>{Gn();Zf();Tn();uE=["used"];Xn=e=>e.length<=5?1:2,Hc=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(en),...uE].flatMap(e=>e.split(" "))),tm=4,nm=[...new Set([...Object.keys(de),...Object.keys(en)].flatMap(e=>e.split(" ")).filter(e=>e.length>=tm))],dE=new Set(em.words),pE=e=>dE.has(e)});function Fo(e){for(let t of gE){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var zi,fE,mE,hE,Yc,gE,om,Ui=O(()=>{Gn();Tn();zi=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),fE=Object.keys(Be).sort((e,t)=>t.length-e.length).map(Qe).join("|"),mE=Object.keys(en).sort((e,t)=>t.length-e.length).map(Qe).join("|"),hE=qs.slice().sort((e,t)=>t.length-e.length).map(Qe).join("|"),Yc=(e,t)=>e==="defines"&&Er.has(t),gE=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${zi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Yc(n,t))return null;let s=e[1].trim(),o=e[3].trim();return xr.includes(t)&&([s,o]=[o,s]),{shape:"ask",entityType:null,modifier:"direct",kind:n,subject:s,object:o}}},{name:"reverse",re:new RegExp(`^which\\s+(${fE})\\s+(?:(${mE})\\s+)?(${zi})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Yc(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?en[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${zi})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Yc(n,t)?null:{shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()}}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${hE})\\??$`,"i"),build:e=>({shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:e[1].trim()})},{name:"meta-whatis",re:new RegExp("^what\\s+(?:is|are)\\s+(?:(an?|the)\\s+)?(.+?)\\??$","i"),build:e=>{let t=e[1]?e[1].toLowerCase():null,n=rn(e[2].trim()),s=!/\s/.test(n);if(t==="the"&&!s||!t&&!Be[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&fp.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:Ws(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${bn.map(Qe).join("|")})\\??$`,"i"),build:e=>({shape:"mentions",entityType:null,modifier:"direct",kind:"mentions",object:e[1].trim()})},{name:"where",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)(?:\\s+(?:${Zt.map(Qe).join("|")}))?\\??$`,"i"),build:e=>({shape:"where",entityType:null,modifier:"direct",kind:"where",object:e[1].trim()})},{name:"when",re:new RegExp(`^when\\s+(?:did|does|do|was|were|is)\\s+(.+?)\\s+(?:last\\s+)?(${zi})\\??$`,"i"),build:e=>de[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];om={id:"grammar",class:"graph-query",run(e){let t=Fo(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function Tt(e,t,n=null){let s=Object.keys(t).sort((o,r)=>r.split(" ").length-o.split(" ").length);for(let o of s){let r=o.split(" ");for(let i=0;i<=e.length-r.length;i+=1)if(!(n&&r.some((a,l)=>n.has(i+l)))&&r.every((a,l)=>e[i+l]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Cr(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(S=>S.toLowerCase());if(s.includes("where")&&!Tt(s,de)){let S=s.some(j=>bn.includes(j)),E=new Set([...Zt,...bn]),R=n.filter((j,A)=>!tt.has(s[A])&&!E.has(s[A])).join(" ").trim();if(R){let j=S?"mentions":"where";return{shape:j,entityType:null,modifier:"direct",kind:j,object:R}}}if(new Set(["has","have","had"]).has(s[0])){let S=s.length;for(;S>1&&(s[S-1]==="ever"||s[S-1]==="been");)S-=1;if((S>1?de[s[S-1]]:null)==="touches"){let R=n.slice(1,S-1).filter((j,A)=>!tt.has(s[1+A])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=Tt(s,de);if(!i&&t){let S=s.map(E=>{if(!Kc(E))return E;let R=t.lemma(E);return Hc.has(R)?R:E});i=Tt(S,de),i&&(r=S)}let a=null;if(!i){let S=s.map(E=>E.length>=4&&Kc(E)&&sm(E)||E);if(i=Tt(S,de),i){r=S;let E=s.slice(i.start,i.end).findIndex((j,A)=>j!==S[i.start+A]),R=i.start+Math.max(E,0);a={from:s[R],to:S[R]}}}let l=!1;if(!i)for(let S=0;S<s.length;S+=1){let E=fs[s[S]];if(!(E&&s[S]==="used"&&s[S+1]==="for")&&E&&s.slice(0,S).some(R=>Ir.has(R))){i={kind:E,start:S,end:S+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&fs[s[i.start]]&&s.slice(0,i.start).some(S=>Ir.has(S))&&(l=!0);let c=S=>a?{...S,fuzzyVerb:a}:S;if(t&&i.end-i.start===1){let S=i.start,E=s[S-1];if((E==="the"||E==="these"||E==="those")&&s[S+1]==="of"&&t.posTags(n)[S]==="NOUN"){let j=n.slice(S+2).filter((A,F)=>!tt.has(s[S+2+F])).join(" ").trim();if(j)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:j})}}let u=new Set,d=S=>{if(S)for(let E=S.start;E<S.end;E+=1)u.add(E)};d(i);for(let[S,E]of Object.entries(de)){if(E!==i.kind)continue;let R=S.split(" "),j=i.end;if(R.every((A,F)=>r[j+F]===A)){d({start:j,end:j+R.length});break}}let f=Tt(r,Be,u);d(f);let p=Tt(r,en,u);d(p);let m=(S,E)=>n.slice(S,E).filter((R,j)=>!u.has(S+j)&&!tt.has(s[S+j])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&yE.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?en[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let S=h||g;if(S)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:S})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let S=h||g;if(S)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:S})}let v=s.indexOf("by"),_=s.slice(0,i.start).findIndex(S=>Ir.has(S)),$=_>=0,x=$&&_>v;if(v>=0&&!u.has(v)&&$){let S=(j,A)=>n.slice(j,A).filter((F,T)=>{let M=j+T,z=s[M];return!u.has(M)&&!tt.has(z)&&z!=="by"&&!Ir.has(z)&&!bE.has(z)&&!wE.has(z)}).join(" ").trim(),[E,R]=x?[S(_+1,n.length),S(v+1,_)]:[S(0,v),S(v+1,n.length)];if(E&&R)return b==="defines"&&Er.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:E});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(E)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:E})}if(l&&v<0&&g&&s[i.start]==="called")return null;if(h&&g){let S=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Er.has(S))return null;let E=h,R=g;return xr.includes(S)&&([E,R]=[R,E]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:E,object:R})}if(g){let S=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:S,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&f&&f.start===i.end){let S=r.slice(f.start,f.end).join(" ");if(S)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:S})}if(h&&!g&&$&&i.end-i.start===1&&fs[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:h});let S=Ir.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...S?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var Ir,bE,wE,yE,rm,Bi=O(()=>{Gn();Tn();Mo();Ir=new Set(["is","are","was","were","be","been","being","get","gets","got"]),bE=new Set(["which","what","who","whom","whose"]),wE=new Set(Wn.map(e=>e.toLowerCase())),yE=new Set(["recently","lately","yet","already","ever","again"]);rm={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Cr(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function vE(e,t,n){if(!n||typeof n.posTags!="function"||!t.length)return[];let s=new Set(t.map(i=>i.toLowerCase())),o;try{o=n.posTags(e)}catch{return[]}let r=[];for(let i=0;i<e.length;i+=1){let a=e[i],l=a.toLowerCase();!/^[a-z]+$/.test(a)||im.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function xE(e,t=null){let n=Bt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!im.has(a)&&($E.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=vE(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var im,$E,am,cm=O(()=>{Gn();Tn();Ui();Bi();im=new Set([...tt,...me(Gs),...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(en)),...me(Object.keys(Xe)),...me(Vs),...me(Hs),...me(Object.keys(ms)),...me(Object.keys(jn)),...me(Object.keys(jo)),...me(Wn),...me(kr),...me(qs),...me(Zt),...me(bn),...me(Bn),...me(Object.keys(Ro))]),$E=new Set([...me(Sr),...me(Ei)]);am={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Fo(e))return null;let{text:n,dropped:s,maybeNoise:o}=xE(e,t.nlp||null);if(!s.length||!n)return null;let r=Fo(n)||Cr(n,t.nlp||null);if(!r)return null;if(o.length&&(r.shape==="where"||r.shape==="mentions")&&r.object){let i=r.object.split(/\s+/).filter(a=>!o.includes(a.toLowerCase())).join(" ").trim();i&&i!==r.object&&(r.altObject=i)}return{strategyId:"noise-strip",class:"noise-stripped",candidates:[{parsed:r,confidence:.75,note:`noise-stripped to "${n}"`}]}}}});var lm=O(()=>{});var Wi,Gi=O(()=>{Wi=()=>{}});function dm(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Do(e.subject)===Do(t.subject)&&Do(e.object)===Do(t.object):Do(e.object)===Do(t.object)}function Xc(e){let t=(e||[]).filter(c=>c&&Array.isArray(c.candidates)&&c.candidates.length);if(!t.length)return null;let n=[];for(let c of t)for(let u of c.candidates)!u||!u.parsed||n.push({parsed:u.parsed,confidence:typeof u.confidence=="number"?u.confidence:.5,note:u.note||null,via:u.via||null,strategyId:c.strategyId,class:c.class});if(n.some(c=>!pm(c))&&(n=n.filter(c=>!pm(c))),!n.length)return null;let s=new Map;for(let c of n)s.has(c.class)||s.set(c.class,[]),s.get(c.class).push(c);let o=[];for(let[c,u]of s){let d=[];for(let f of u){let p=d.find(m=>dm(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),um(f.parsed)<um(p.parsed)&&(p.parsed=f.parsed);continue}d.push({...f,agreed:1})}d.length&&o.push({class:c,candidates:d})}if(!o.length)return null;let r=c=>Math.max(...c.candidates.map(u=>u.confidence)),i=o[0];for(let c of o)r(c)>r(i)&&(i=c);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(c=>c.parsed)},l=o.filter(c=>c!==i).map(c=>c.candidates[0]).filter(c=>!i.candidates.some(u=>dm(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function kE(e){if(!e)return"something else";if(e.ambiguousParse)return"one of several readings";let t=e.object??e.subject??"?";return`${e.kind} "${t}"`}function fm(e,{describe:t=kE,answerFor:n=null}={}){return(e||[]).map(s=>{let o=s.note||t(s.parsed),r=n&&n(s)||"ask it that way";return`if you mean ${o} then ${r}`})}var Do,EE,um,SE,pm,Jc=O(()=>{Do=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),EE=/^\s*(?:the|a|an)\s+/i,um=e=>[e?.subject,e?.object].filter(t=>EE.test(String(t||""))).length;SE=new Set(["fuzzy","lemma","spell"]),pm=e=>SE.has(e.via)});function qi(e){Qc=e}function Vi(){return typeof Qc=="function"?Qc():null}var Qc,zo=O(()=>{Qc=null});function gm(e,t={},n=_E){let s=[];for(let o of n)try{let r=o.run(e,t);r&&typeof r.then!="function"&&s.push(r)}catch{}return s}var jE,_E,bm=O(()=>{Tn();Ui();Bi();cm();lm();Gi();Jc();zo();jE=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],_E=[om,rm,am,...jE]});function Uo(e){return RE.test(String(e||"").trim())?"an":"a"}function Hi(e){let t=String(e||"").trim();return t&&(/(?:s|x|z|ch|sh)$/.test(t)?`${t}es`:/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:`${t}s`)}function Bo(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Or(e){let t=(e||[]).map(n=>String(n||"").trim()).filter(Boolean);return t.length===0?"":t.length===1?t[0]:t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t[t.length-1]}`}var RE,Ki=O(()=>{RE=/^[aeiou]/i});var Lr,Zc=O(()=>{Lr=(e,t,n)=>n});var ih={};Un(ih,{DYNAMIC_TAIL_OK_RE:()=>_l,applyNegationFrames:()=>Ar,ask:()=>Es,classDisplayName:()=>Jn,degreeMetric:()=>Jm,metaFallbackEntityAnswer:()=>Gm,normalizeQuery:()=>Zs,parseQuery:()=>Dr,parseQueryFull:()=>ml,render:()=>yn,rephraseHint:()=>vl,resolveObject:()=>$n,traverse:()=>Wt,worldRelationGraphPayload:()=>xk});function Ke(e,t){let n=wm.get(e);n||(n=new Map,wm.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Kn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Me(e,t){let[n,s]=rl[e]||["result","results"];return t===1?n:s}function Ur(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Me(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function Jn(e){let t=String(e||"");if(typeof _n=="function"){let n=_n(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function eo(e){return AE[e]||e}function NE(e){if(!e?.ambiguousParse||!Array.isArray(e.candidates)||e.candidates.length!==2)return e;let t=e.candidates.find(r=>r?.shape==="meta"),n=e.candidates.find(r=>r!==t);if(!t||!n)return e;let s=String(t.object||"").trim().toLowerCase();if(!s||LE.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return me(qs).includes(o)?t:e}function FE(e,t){if(!e||e.shape!=="where"||e.altObject||!PE.test(t))return e;let n=xi(t),s=xi(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=Bt(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||tt.has(i)||de[i]||i.endsWith("ing"))return o;let a=Bt(n).map(c=>c.toLowerCase());for(;a.length&&ME.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let l=r.slice(0,-1).join(" ");return{...e,object:l,altObject:s,verb:i}}function Dr(e,{nlp:t=void 0}={}){return ml(e,{nlp:t}).parsed}function ml(e,{nlp:t=void 0}={}){let n=t===void 0?Vi():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Vc(Ar(Zs(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=zE(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=Xc(gm(o,{nlp:n,raw:s}));return i?{parsed:FE(NE(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function al(e,t){return t.length&&Lm.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function qo(e,t){return Fo(e)||Cr(e,t)}function zE(e,t){let n=Bt(e),s=n.map(o=>o.toLowerCase());return iS(n,s)||cS(n,s)||GE(n,s,t)||Pm(e,t,0)||lS(n,s,t)||VE(n,s,t)||ZE(n,s,t,0)||tS(n,s)||oS(n,s,t)||uS(n,s,t)||fS(n,s,t)||hS(n,s,t,0)||pS(n,s,t,0)||gl(n,s,t,0)||KE(n,s,t)||BE(n,s)||Bm(n,s,t,0)}function BE(e,t){let n=0;UE.has(t[n])&&(n+=1);let s=At(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?mp[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){l=m,c=h;break}}if(l<0)return null;let u=e.slice(a,l).join(" ").trim(),d=e.slice(l+2).join(" ").trim();if(!u||!d)return null;let f=(m,h)=>m.role==="object"?{shape:"reverse",kind:m.kind,entityType:o,modifier:"direct",object:h}:{shape:"forward",kind:m.kind,modifier:"direct",object:h},p=f(i,u);return p.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:p}},{op:"intersection",kind:"set",ast:{node:"clause",clause:f(c,d)}}]}}function Xi(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function GE(e,t,n){if(!["do","does","did"].includes(t[0])||!WE.has(t[1]))return null;let s=At(t[2]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;if(o==="Change")return{node:"miss",reason:`"${t[2]}" isn't an enumerable kind \u2014 a universal check needs a concrete kind (functions, classes, modules, \u2026)`};let r=t[2],i=e.slice(3),a=t.slice(3);if(!i.length)return null;let l=Tt(a,de);if(!l)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((f,p)=>(p<l.start||p>=l.end)&&!tt.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=Vo(`which ${r} ${i.join(" ")}`,n,1);return!d||d.node==="miss"?{node:"miss",reason:d&&d.reason||"the universal clause didn't parse"}:{node:"universal",entityType:o,kind:l.kind,object:u,complement:Xi(o,{op:"difference",kind:"set",ast:d})}}function Pm(e,t,n=0){let s=Qf(e);if(!s)return null;let o=At(s.entWord);if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;if(r==="Change")return{node:"miss",reason:`"${s.entWord}" isn't an enumerable kind \u2014 a set complement needs a concrete kind (functions, classes, modules, \u2026)`};let i=Bt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Xe[d]))return Xi(r,{op:"difference",kind:"qual",filters:a});let l=Tt(a,de);if(!l)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,f)=>(f<l.start||f>=l.end)&&!tt.has(a[f])&&a[f]!=="from").length)return Xi(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=Vo(`which ${s.entWord} ${s.predicate}`,t,n+1);return!u||u.node==="miss"?{node:"miss",reason:u&&u.reason||"the negated clause didn't parse"}:Xi(r,{op:"difference",kind:"set",ast:u})}function VE(e,t,n){let s=0;for(;s<t.length&&qE.has(t[s]);)s+=1;if(!["do","does","did"].includes(t[s]))return null;s+=1;let o=e.slice(s),r=t.slice(s),i=r.indexOf("not");if(i<0)return null;let a=Tt(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!tt.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function Mm(e,t){let n=new Set;for(let s of t)for(let o of Ke(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Fm(e,t){let n=Ot(t),s=n.filter(r=>!Cm.has(r)),o=Mm(e,s.length?s:n);return o.size===1?[...o][0]:null}function Vo(e,t,n){if(n>Om)return{node:"miss",reason:"too deep to resolve"};let s=Pm(e,t,n);if(s)return s;let o=Bt(e),r=o.map(c=>c.toLowerCase()),i=gl(o,r,t,n);if(i)return i;let a=Bm(o,r,t,n);if(a)return a;let l=qo(e,t);return l?{node:"clause",clause:l}:null}function gl(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Bn.includes(t[o]),i=!r&&Nm(t[o]);if(!r&&!i||r&&o+1>=t.length||!At(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Xe[f.toLowerCase()]))continue;let c=qo([...l,il].join(" "),n);if(!c||c.shape!=="reverse"&&c.shape!=="forward"||c.modifier&&c.modifier!=="direct")continue;let u=`which ${t[o-1]} ${e.slice(r?o+1:o).join(" ")}`,d=Vo(u,n,s+1);return!d||d.node==="miss"?d?{node:"miss",reason:d.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"}:{node:c.shape==="reverse"?"reverseSet":"forwardSet",kind:c.kind,entityType:c.entityType,inner:d}}return null}function KE(e,t,n){for(let s=0;s<t.length;s+=1){if(!HE.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!de[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),il,...e.slice(s+1)],a=qo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===il&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function ZE(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!YE.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(XE.has(t[d])){r=d;break}if(r<0)return null;let i=e.slice(o,r),a=t.slice(o,r);for(;a.length&&JE.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&QE.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Bn.includes(d)))return null;let l=hl.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=Vo(l,n,s+1);if(!c||c.node==="miss")return c?{node:"miss",reason:c.reason||"the inner set of the temporal query didn't parse"}:{node:"miss",reason:"the inner set of the temporal query didn't parse"};let u=At(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function tS(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!eS.has(t[n]))return null;let s=t[n],o=e.slice(n+1).join(" ").trim();return o?{node:"commitFilter",op:s,pivotRaw:o}:{node:"miss",reason:`"what changed ${s}" needs a date or commit afterward`}}function sS(e){let t=new Set,n=[];for(let s of e){if(!s||!nS.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function oS(e,t,n){if(t.length===2&&t[0]==="which"&&(t[1]==="ones"||t[1]==="one"))return{node:"anaphora",mode:"list",filter:{type:"all"}};let s=-1,o=!1;for(let d=1;d<t.length;d+=1){if(!kr.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let f=t.slice(0,d).join(" ");if(d===t.length-1&&(Vs.includes(f)||Hs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Vs.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=rS(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let l=o?s-1:s,c=sS(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function rS(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&DE.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Xe[a]))return{type:"qual",filters:r};if(o.length===1){let a=At(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=qo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function iS(e,t){let n;if(t[0]==="is"&&t[1]==="there")n=2;else if(t[0]==="are"&&t[1]==="there")n=2;else return null;let s=t[n];if(s==="a"||s==="an"||s==="any")n+=1;else return null;let o=n<t.length?At(t[n]):null;if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;n+=1;let i=t.slice(n),a=e.slice(n);if(i.length&&i[i.length-1]==="anywhere"?(i=i.slice(0,-1),a=a.slice(0,-1)):i.length>=2&&i[i.length-2]==="at"&&i[i.length-1]==="all"&&(i=i.slice(0,-2),a=a.slice(0,-2)),!i.length)return{node:"exists",entityType:r,term:null,scopeModule:null};if(i[0]==="called"||i[0]==="named"){if(i.length<2)return{node:"miss",reason:`"${i[0]}" needs a name afterward`};let l=i.indexOf("in",1);if(l>0){let u=a.slice(1,l).join(" ").trim(),d=a.slice(l+1).join(" ").trim();return!u||!d?{node:"miss",reason:'a named existence check needs both a name and a module after "in"'}:{node:"exists",entityType:r,term:u,scopeModule:d}}let c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:c,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:null,scopeModule:l}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function aS(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=Ws(n).slice(e.length).trim(),o=Bt(s),r=o.findIndex(a=>a.toLowerCase()==="in");if(r<0)return null;let i=o.slice(r+1).join(" ").trim();return i?{scope:i}:{node:"miss",reason:'"in" needs a scope afterward'}}function cS(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let c=1;c<t.length;c+=1)if(Xe[t[c]]){n=c,s=t[c-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&fs[t[n]]){let c=o+1;for(;c<t.length&&(t[c]==="the"||t[c]==="a"||t[c]==="an");)c+=1;let u=t[c];if(u&&!wp.has(u))return null}let r=aS(t[n],e.slice(n+1));if(r?.node==="miss")return r;let i=1;t[i]==="the"&&(i+=1);let a=s?n-1:n;a>i&&(t[a-1]==="a"||t[a-1]==="an")&&(a-=1);let l=a>i?e.slice(i,a).join(" ").trim():"";return l?{node:"qualCheck",term:l,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function lS(e,t,n){if(!["do","does","did","is","are","was","were"].includes(t[0]))return null;let s=t.indexOf("not",1);if(s<0)return null;let o=qo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function uS(e,t,n){let s=Vs.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&Xe[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?At(t[o]):null;if(!i)return{node:"miss",reason:"count needs a known entity kind (functions, classes, modules, \u2026)"};let a=t[o];o+=1;let l=e.slice(o),c=t.slice(o).some(d=>!tt.has(d)&&!Dm.has(d)),u;if(c){let d=Vo(`which ${a} ${l.join(" ")}`,n,1);if(!d||d.node==="miss")return{node:"miss",reason:"the count restrictor didn't parse"};u=d}else u={node:"allOfClass",entityType:i.entityType};return r.length&&(u={node:"qualifier",filters:r,inner:u}),{node:"count",entityType:i.entityType,base:u}}function pS(e,t,n,s){let o=0,r=!1,i=null;for(let y of zm){let w=y.split(" ");if(t.slice(0,w.length).join(" ")===y){i=y,o=w.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&bl.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Xe[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?At(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Wn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Um}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!tt.has(y)&&!Dm.has(y)),p=t.slice(o),m=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),m=m.slice(1));let h=r&&dS.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=Vo(`which ${[...a,u,...y].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};g=w,b=!0}else g={node:"allOfClass",entityType:c},a.length&&(g={node:"qualifier",filters:a,inner:g});return{node:"list",entityType:c,base:g,scoped:b}}function fS(e,t,n){let s=null,o=-1;for(let m=0;m<t.length;m+=1){let h=t.slice(m,m+2).join(" ");if(ms[h]){s=ms[h],o=m;break}if(ms[t[m]]){s=ms[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(jn[t[m]]){r=jn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(jn[t[m]]){r=jn[t[m]],i=t[m];break}}let a=t.includes("connected")||t.slice(o,o+2).join(" ")==="most connected"||["largest","biggest","smallest"].includes(t[o]),l=["important","significant","central","key","core","essential","critical","principal"],c=t.some(m=>l.includes(m));!r&&(a||c)&&(r=jn.connections,i="connections");let u,d=null;for(let m of t){let h=At(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?yp[i]:void 0,!u))return{node:"miss",reason:"a superlative needs an entity kind (module, class, function, \u2026)"};if(!r)return{node:"miss",reason:"name what to rank by (imports, callers, methods, tests, or connections)"};let f=["needs","need","needing","lacks","lack","lacking","misses","missing"],p=t.some(m=>f.includes(m))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:p}}function hS(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&bl.has(t[o]);)o+=1;if(o>=t.length)return null;let r=At(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&mS.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=At(t[t.length-1]);if(i&&!i.placeholder&&i.entityType!=="Change"){let a=e.slice(o,t.length-1).join(" ").trim();if(a)return{node:"find",entityType:i.entityType,term:a}}return t.some(a=>Bn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Wn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Um}`}:null}function gS(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&bl.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Bn.includes(t[i])){s=i;break}if(s<0)return null;let o=At(t[s-1]);if(!o||o.placeholder||o.entityType==="Change")return null;let r=e.slice(n,s-1).join(" ").trim();return r?{entityType:o.entityType,term:r,relIdx:s}:null}function bS(e,t,n,s,o,r){let{branches:i,ops:a}=Ji(n,s),l=null,c=[];for(let u=0;u<i.length;u+=1){let d=i[u],f=d.map(y=>y.toLowerCase()),p=u===0?"intersection":a[u-1],m=al(d,f);if(m.blc.length&&m.blc.every(y=>Xe[y])){c.push({op:p,kind:"qual",filters:m.blc});continue}if(f[0]==="of"||f[0]==="in"){c.push({op:p,kind:"set",ast:{node:"membership",entityType:e,term:d.slice(1).join(" ")}});continue}let h=d,g=Tt(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=Wm(`${t} ${h.join(" ")}`,o,r);if(!b||b.node==="miss")return{miss:b&&b.reason||"a clause in the combination didn't parse"};c.push({op:p,kind:"set",ast:b})}return{atoms:c}}function Bm(e,t,n,s){let o=gS(e,t);if(o){let{entityType:R,term:j,relIdx:A}=o,F=t.slice(A+1),T=e.slice(A+1);if(!F.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[A]}"`};let M=bS(R,`which ${t[A-1]}`,F,T,n,s+1);if(M.miss)return{node:"miss",reason:M.miss};let z=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:j}},...M.atoms];return z.length===1?z[0].ast:{node:"boolean",entityType:R,atoms:z}}let r=0;for(;r<t.length&&hl.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Xe[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?At(t[r]):null;if(!l){let R=r+1<t.length?At(t[r+1]):null;if(ym.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Lm.has(t[r])){let j=r+1;j<t.length&&(t[j]==="the"||t[j]==="a"||t[j]==="an")&&(j+=1);let A=j+1<t.length?At(t[j+1]):null;if(ym.has(t[j])&&A&&A.entityType==="Commit"&&j+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!tt.has(t[r])&&!kl.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let c=l.entityType,u=t[r];r+=1;let d=t.slice(r),f=e.slice(r),p=!1;d.length&&Bn.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&Nm(d[0]),g=f.length>0&&Ji(d,f).branches.some(R=>{let{blc:j}=al(R,R.map(A=>A.toLowerCase()));return j.length&&j.every(A=>Xe[A])}),b=f.length>0?Ji(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(y=b.slice(1).every(A=>{let F=A.map(M=>M.toLowerCase()),T=Tt(F,de);return T&&T.start===0?T.kind===j.kind:!T}))}let w=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(w=b.slice(1).every(A=>{let F=A.map(M=>M.toLowerCase()),T=Tt(F,de);return!!T&&T.start===0&&T.end-T.start===1}))}if(!(a.length||p||m||h||g||y||w))return null;if(!f.length){let R={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:R,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let v=l.placeholder?"what":`which ${u}`,{branches:_,ops:$}=Ji(d,f),x=null,S=[];for(let R=0;R<_.length;R+=1){let j=_[R],A=j.map(ae=>ae.toLowerCase()),F=R===0?"seed":$[R-1],T=al(j,A);if(T.blc.length&&T.blc.every(ae=>Xe[ae])){S.push({op:F,kind:"qual",filters:T.blc});continue}if(A[0]==="of"||A[0]==="in"){S.push({op:F,kind:"set",ast:{node:"membership",entityType:c,term:j.slice(1).join(" ")}});continue}let M=j,z=Tt(A,de);z?x=j.slice(z.start,z.end):x&&(M=[...x,...j]);let Y=Wm(`${v} ${M.join(" ")}`,n,s+1);if(!Y||Y.node==="miss")return{node:"miss",reason:Y&&Y.reason||"a clause in the combination didn't parse"};S.push({op:F,kind:"set",ast:Y})}if(S[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let E;return S.length===1?E=S[0].ast:E={node:"boolean",entityType:c,atoms:S},a.length&&(E={node:"qualifier",filters:a,inner:E,entityType:c}),E}function Wm(e,t,n){if(n>Om)return{node:"miss",reason:"too deep to resolve"};let s=Bt(e),o=s.map(a=>a.toLowerCase()),r=gl(s,o,t,n);if(r)return r;let i=qo(e,t);return i?{node:"clause",clause:i}:null}function Ji(e,t){let n=Object.keys(jo).sort((a,l)=>l.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let l of n){let c=l.split(" ");if(e.slice(i,i+c.length).join(" ")===l){a={c:l,len:c.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(jo[a.c]),i+=a.len,r=i):a?(i+=a.len,r=i):i+=1}return s.push(t.slice(r)),{branches:s,ops:o}}function wl(e,t,n,s){let o=Wo[t];if(o&&xs.has(n)){let u=Ke(e,o).filter(d=>s.has(d.object));return Zn(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>xs.has(e.byId.get(u)?.class))?[...Ot(t),o]:Ot(t)).flatMap(u=>Ke(e,u)).filter(u=>s.has(u.object)),l=Zn(a.map(u=>e.byId.get(u.subject)).filter(Boolean));if(!n||n==="Change")return l;let c=l.filter(u=>u.class===n);return c.length?c:n!=="Module"&&l.some(u=>u.class==="Module")?xl(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function yS(e,t){let n=new Set(wl(e,"touches","Commit",t).map(s=>String(s.label||"").toLowerCase()));for(let s of t)for(let o of e.byId.get(s)?.derived_from||[]){let r=wS.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function Mr(e,t,n){let s=Ot(t).flatMap(o=>Ke(e,o)).filter(o=>n.has(o.subject));return Zn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Zn(e){let t=new Set,n=[];for(let s of e)s&&!t.has(s.id)&&(t.add(s.id),n.push(s));return n}function $S(e,t){let n=Vn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Vn(o.label).startsWith(s))}function cl(e){let t=$m.get(e);if(t)return t;let n=new Set;for(let i of Ke(e,"reexports")){n.add(String(i.object).toLowerCase());let a=e.byId.get(i.object);a&&n.add(String(a.label).toLowerCase())}let s=new Set,o=new Set;for(let i of Ke(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of Ke(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},$m.set(e,t),t}function Go(e,t){return t?t.class==="Module"?t.id:cl(e).moduleOfSymbol.get(t.id)||null:null}function Gm(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>vS.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Go(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Me(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Lr("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${l} ${a} in this codebase${c} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function ll(e,t,n){let s=Zn(_o.flatMap(o=>Mr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function yl(e,t,n=null){let s=Qn(e,t,n);if(!(s.match&&s.tier===1)){let o=$S(e,t);if(o.length)return{kind:"dir",mods:o}}return s.match?{kind:"single",id:s.match.id,entityClass:s.match.class,label:s.match.label}:{kind:"miss"}}function qm(e,t,n,s,o){let r=o||(()=>!0),i=ll(e,t,s).filter(r);if(i.length||!Hm(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Vm(e,t)){let l=e.byId.get(a);if(!l)continue;let c=ll(e,a,s).filter(r);if(c.length)return{own:i,inherited:c,viaId:a,viaLabel:l.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function to(e,t,n){if(!n)return!1;switch(n.via){case"visibility":return String((t.attributes||[]).find(o=>o.key==="visibility")?.value||"public").toLowerCase()===n.value;case"attr":return!!(t.attributes||[]).find(s=>s.key===n.attr)?.value;case"exported":{let s=cl(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=Go(e,t),o=cl(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Xs(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function $l(e){return Ke(e,"inherits")}function ul(e,t){return $l(e).filter(n=>n.object===t).map(n=>n.subject)}function vm(e,t){return $l(e).filter(n=>n.subject===t).map(n=>n.object)}function xS(e,t){let n=new Set,s=[...ul(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of ul(e,o))n.has(r)||s.push(r)}}return n}function Vm(e,t){let n=new Set,s=[...vm(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of vm(e,o))n.has(r)||s.push(r)}}return n}function Hm(e,t){let n=xm.get(e);if(n||(n=new Map,xm.set(e,n)),n.has(t))return n.get(t);let s=$l(e).some(o=>{let r=e.byId.get(o.subject),i=e.byId.get(o.object);return!!r&&!!i&&r.class===t&&i.class===t});return n.set(t,s),s}function Em(e,t){let n=String(e.label||"").toLowerCase();if(t.every(o=>n.includes(o)))return"label";let s=(e.attributes||[]).map(o=>String(o.value??"").toLowerCase());return t.every(o=>s.some(r=>r.includes(o)))?"attr":null}function km(e){return e.slice().sort((t,n)=>Sm[n.via]-Sm[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function jm(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Xn(n);if(Yn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of no(e.label))if(Yn(o,n,s)<=s)return!0;return!1}function Km(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...no(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Hm(e,t),i=[];for(let l of s){let c=Em(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...xS(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Em(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:km(i),broad:[]};let a=new Map;for(let l of s)for(let c of Vm(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&jm(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of ul(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&jm(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:km([...a.values()])}}function ES(e){return[...Li(Ni(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function cn(e,t,n){switch(t.node){case"clause":return Wt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?ES(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=Km(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Ot(t.kind).flatMap(o=>Ke(e,o)).map(o=>o.subject));return e.individuals.filter(o=>s.has(o.id)&&(!t.entityType||o.class===t.entityType))}case"forwardComplement":{let s=Qn(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Fm(e,t.kind);if(!o)return[];let r=new Set(Mr(e,t.kind,new Set([s.match.id])).map(i=>i.id));return e.individuals.filter(i=>i.class===o&&!r.has(i.id))}case"reverseSet":{let s=new Set(cn(e,t.inner,n).map(o=>o.id));return wl(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(cn(e,t.inner,n).map(o=>o.id));return Mr(e,t.kind,s)}case"prevSet":{let s=n&&n.prev;return Array.isArray(s)?s.map(o=>e.byId.get(o)).filter(Boolean):[]}case"membership":{let s=yl(e,t.term,n&&n.contextId);if(s.kind==="dir"){if(!t.entityType||t.entityType==="Module")return s.mods;let i=new Set(s.mods.map(l=>l.id));return Zn(_o.flatMap(l=>Mr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=qm(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?Qm(e,t,n).matches:cn(e,t.inner,n).filter(o=>t.filters.every(r=>to(e,o,Xe[r])));case"boolean":return Ym(e,t,n);case"anaphora":return Xm(e,t,n).matches;default:return[]}}function Ym(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=cn(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>to(e,l,Xe[c])),a=l=>o.filters.every(c=>{let u=SS(Xe[c]);return u?to(e,l,u):!to(e,l,Xe[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(cn(e,o.ast,n).map(i=>i.id));if(o.op==="intersection")s=s.filter(i=>r.has(i.id));else if(o.op==="difference")s=s.filter(i=>!r.has(i.id));else if(o.op==="union"){let i=new Set(s.map(a=>a.id));for(let a of cn(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function kS(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=$n(e,o);r&&r.match&&!n.has(r.match.id)&&(n.add(r.match.id),s.push(r.match))}return s.length>=2?s:null}function Xm(e,t,n){let o=kS(e,t.candidateTerms);if(!o){let d=n&&n.prev;if(!Array.isArray(d)||!d.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=d.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(d=>i.filters.every(f=>to(e,d,Xe[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=$n(e,i.clause.object);if(!d.match)r=[];else{let f=Wo[i.clause.kind],p=[...Ot(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>Ke(e,h)).filter(h=>h.object===d.match.id).map(h=>h.subject));r=r.filter(h=>m.has(h.id))}}let a=d=>d.length&&d.every(f=>f.class===d[0].class)?d[0].class:null,l=i&&i.type==="entity"?i.entityType:a(o),c=r.length?a(r):l;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:c,matches:[]};let u=Ur(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function Jm(e,t,n){let s=n.kind==="*"?jS:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of Ke(e,r)){let a=i.subject===t.id,l=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let c=e.byId.get(i.object);if(!c||c.class!==n.filter)continue}o+=1}else(n.dir==="in"&&l||n.dir==="both"&&(a||l))&&(o+=1)}return o}function _S(e){let t=e.individuals.filter(s=>s.class==="Commit"),n=s=>String((s.attributes||[]).find(o=>o.key==="date")?.value||"");return t.sort((s,o)=>n(o).localeCompare(n(s))),{compositeKind:"recentCommits",matches:t}}function TS(e,t){let{op:n,pivotRaw:s}=t,o=u=>String((u.attributes||[]).find(d=>d.key==="date")?.value||"").slice(0,10),r=null,i=null,a=null;if(RS.test(s))r=s;else{let{match:u,ambiguous:d}=$n(e,s,{expectedClass:"Commit"});u&&!d&&u.class==="Commit"&&o(u)&&(i=u.id,a=u.label,r=o(u))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let l=e.individuals.filter(u=>u.class==="Commit"&&u.id!==i&&o(u)).filter(u=>{let d=o(u);return n==="since"?d>=r:n==="before"?d<r:n==="after"?d>r:d===r}).sort((u,d)=>o(d).localeCompare(o(u))),c=[];return l.length&&c.push({kind:"set",class:"Commit",label:`${l.length} commit${l.length===1?"":"s"} ${n} ${s}`,ids:l.map(u=>u.id),attrs:{count:l.length,op:n,...i?{pivot:i}:{}},lane:"commitFilter"}),i&&c.push({kind:"event",class:"Commit",label:a,ids:[i],attrs:{date:r},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:l,referents:c}}function AS(e,t,n){let s=cn(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size)return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0};let r=wl(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(l=>l.key==="date")?.value||"");return r.sort((a,l)=>i(l).localeCompare(i(a))),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function IS(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(Ke(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!Xs(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:Jm(e,a,t.metric)})).sort((a,l)=>t.extreme==="most"?l.score-a.score:a.score-l.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?Ur(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function Qm(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(h=>to(e,m,Xe[h])):null,a=m=>Ur(r,m,"membership"),l=yl(e,o.term,n&&n.contextId);if(l.kind==="dir"){let m;if(!r||r==="Module")m=l.mods;else{let h=new Set(l.mods.map(g=>g.id));m=Zn(_o.flatMap(g=>Mr(e,g,h))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=qm(e,l.id,l.entityClass,r,i),f=!c.length&&u.length>0,p=f?u:c;return{compositeKind:"membership",entityType:r,matches:p,inheritedNotOwn:f,viaLabel:d,ownerLabel:l.label,referents:a(p)}}function CS(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=$n(e,o,{expectedClass:"Module"});if(!a.match)return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMiss:!0,matches:[]};r=a.match}if(s){let a=$n(e,s,{expectedClass:n}),l=!r||a.match&&Go(e,a.match)===r.id,c=a.match&&l;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:c?[a.match]:[]}}let i=r?xl(e,new Set([r.id]),n):e.individuals.filter(a=>a.class===n);return{compositeKind:"exists",entityType:n,term:null,scopeModule:o,scopeMatch:r,matches:i}}function OS(e,t,n){let s=Go(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||ll(e,n.id).some(o=>o.id===t.id)}function LS(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Qn(e,s,n.contextId);if(a.unresolvedPronoun)return{compositeKind:"qualCheck",qualCheckMiss:"pronoun",term:s,matches:[]};if(!a.match)return{compositeKind:"qualCheck",qualCheckMiss:"unresolved",term:s,matches:[]};if(i){let d=yl(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!OS(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let l=to(e,a.match,Xe[o]),c=r?!l:l,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:c,matches:[a.match],referents:u}}function NS(e,t,n){let s=$n(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=cn(e,{node:"allOfClass",entityType:t.entityType},n),r=Ym(e,t.complement,n),i=r.length===0;return{compositeKind:"universal",entityType:t.entityType,kind:t.kind,object:s.match.label,holds:i,total:o.length,counter:r,matches:i?o:r}}function PS(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(cn(e,t.inner,n).map(s=>s.id));if(t.node==="clause"&&t.clause?.shape==="reverse"&&t.clause.kind==="touches"&&t.clause.entityType==="Commit"){let{objMatch:s,ambiguous:o}=Wt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function MS(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return CS(e,t);if(t.node==="qualCheck")return LS(e,t,n);if(t.node==="universal")return NS(e,t,n);if(t.node==="count"){let i=PS(e,t.base,n);return i?{compositeKind:"count",count:yS(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:cn(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:cn(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return yk(e,t);if(t.node==="superlative")return IS(e,t);if(t.node==="temporal")return AS(e,t,n);if(t.node==="recentCommits")return _S(e);if(t.node==="commitFilter")return TS(e,t);if(t.node==="anaphora")return Xm(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return Qm(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=Km(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:i.length?i:a,broad:!i.length&&a.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let s=cn(e,t,n),o=t.entityType||null,r=Ur(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function Zm(){return'compositional queries also work: "which functions call X and call Y", "what calls something that imports X", "public methods of X", "list functions" / "show me the classes", "how many classes", "which module has the most imports", "find me the payment class", or (after a listing) "which of those are tested"'}function FS(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=zr(e);return n?`${t} in ${n}`:t}function dl(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(dl):Array.isArray(e.filters)&&e.filters.some(t=>Xe[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(dl)}function DS(e,t){return!["Function","Method"].includes(t)||!dl(e)?null:"This index records tests edges module to module, so it holds no function-grain coverage to filter on \u2014 ask whether the module a function lives in is tested instead."}function zS(e,t,n){if(t.compositeMiss)return t.reason==="no-prev"?{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1}:{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${Zm()}.`,miss:!0,ambiguous:!1};if(t.compositeKind==="exists"){if(t.scopeMiss)return{content:`no module matching "${t.scopeModule}" found in the index.`,miss:!0,ambiguous:!1};let s=Me(t.entityType,1),o=Me(t.entityType,2),r=t.scopeMatch?` in ${t.scopeMatch.label}`:"";if(t.term){if(!t.matches.length)return{content:`No \u2014 no ${s} named "${t.term}" found${r}.`,miss:!0,ambiguous:!1};let i=t.matches[0],a=zr(i),l=i.class==="Module"?"":a?`, ${Lr("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${$s(t.matches)}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 no ${o} found${r}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="qualCheck"){if(t.qualCheckMiss==="pronoun")return{content:`"${t.term}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="unresolved")return{content:`couldn't find "${t.term}" in the index to check.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="scope")return{content:`couldn't find "${t.scope}" in the index to check inside.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="outsideScope")return{content:`No \u2014 ${t.subjectLabel} isn't in ${t.scopeLabel}.`,miss:!0,ambiguous:!1};let s=t.subject.label,o=t.negated?`not ${t.qualifier}`:t.qualifier,r=t.negated?t.qualifier:`not ${t.qualifier}`;return{content:`${t.holds?"Yes":"No"} \u2014 ${s} is ${t.holds?o:r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="universal"){if(t.universalMiss==="unresolved")return{content:`couldn't find "${t.object}" in the index to check.`,miss:!0,ambiguous:!1,matches:[]};let s=Me(t.entityType,t.total),o=CE(t.kind);return t.holds?{content:`Yes \u2014 all ${t.total} ${s} ${o} ${t.object}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 ${t.counter.length} of ${t.total} ${s} do not ${o} ${t.object}: ${$s(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Me(t.entityType,t.count):t.count===1?"result":"results";return{content:`${t.count} ${s}.`,miss:!1,ambiguous:!1,matches:[]}}if(t.compositeKind==="list"){if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>He?` \u2014 narrow with "${Me(t.entityType,2)} in <module>"`:"";return{content:`${$s(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=wn(t.asked),o=Bs[t.relation].nouns[1];return t.pairs.length?{content:`${t.pairs.map(i=>`${i.subject.label||i.subject.id} ${i.reads} ${i.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]}}if(t.compositeKind==="membership"){if(!t.matches.length)return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${vs(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Me(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${$s(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${$s(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Me(t.entityType,1);if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?FS(t.matches[0]):$s(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Me(t.entityType,2)}: ${o}.`,miss:!1,ambiguous:!1,matches:t.matches,relatedNotExact:!0}:{content:`${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="recentCommits"){if(!t.matches.length)return{content:"no commits recorded in this index.",miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,Ut).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Ut?` \u2026+${t.matches.length-Ut} more`:"";return{content:`${t.matches.length} recent commit(s): ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="commitFilter"){if(!t.pivotResolved)return{content:`"${t.pivotRaw}" isn't a recognized date (yyyy-mm-dd) or a known commit \u2014 try "what changed since 2026-06-01" or "what changed before <commit>".`,miss:!0,ambiguous:!1,matches:[]};if(!t.matches.length)return{content:`no commits recorded ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,Ut).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Ut?` \u2026+${t.matches.length-Ut} more`:"";return{content:`${t.matches.length} commit(s) changed ${t.op} ${t.pivotRaw}: ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="superlative"){if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} to rank in this index.`,miss:!0,ambiguous:!1};let s=t.extreme==="most"?"the most":"the fewest",o=t.matches.length>1?` (${t.matches.length}-way tie)`:"";return{content:`${$s(t.matches)} \u2014 ${s} ${t.metricNoun} (${t.score})${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="temporal"){let s=t.innerCount||0,o=t.entityType?Me(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:`nothing in the index matches the inner set, so there is no change history to date. ${vs(n)}`,miss:!0,ambiguous:!1,matches:[]};if(!t.matches.length)return{content:`no recorded commit touched the ${s} ${o} in that set in this index. ${vs(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let l=(i.attributes||[]).find(d=>d.key==="message")?.value||"",c=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${c}${l?` ("${l}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=DS(e,t.entityType)||vs(n);return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${$s(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function vl(){return`"which <functions|classes|modules> <imports|calls|uses|inherits from|tests> <name>" or "what does <name> <import|call|export>" or "what uses <name>" or "where is <name> defined" / "where is <name> mentioned" or "when did <name> change" or "which commits touched <name>" or "which changes touch commit <sha>"/"what did commit <sha> touch" (a commit's own changes) or plainly "what calls this" (about a selected node) or "what does <term> mean"/"what is a <ClassName>" (about the graph's own vocabulary). `+Zm()}function vs(e=null){return e&&zc(e)===0?"This store holds no code index, so it records no modules or commits to look through.":`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function no(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Zi(e){if(e.length<5)return e;let t=e.replace(/(ing|ers|ors|er|or)$/,"");return t===e?e:t.length>=3&&t[t.length-1]===t[t.length-2]?t.slice(0,-1):t}function eh(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function US(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Nr(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(g=>g.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let g=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${g}`)||String(y.label).toLowerCase().startsWith(g)));if(b.length===1)return{match:b[0],candidates:[],tier:1,ambiguous:!1};if(b.length>1)return{match:b[0],candidates:b.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(g=>String(g.label).toLowerCase()===o||String(g.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let g of e.relations)for(let b of g.edges)if(String(b.object).toLowerCase()===l){c=b.object;break e}if(c&&!n)return{match:{id:c,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(g=>g.trim()).filter(Boolean);if(u.length>1){let g=new Set;for(let b of u){let y=Nr(e,b,{expectedClass:n});y.match&&!y.ambiguous&&g.add(y.match.id)}if(g.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],f=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(f){let g=o.split(".").pop();for(let b of r){let y=String(b.label||"").toLowerCase();b.class==="Module"?y.split("/").pop()===o&&d.push({ind:b,score:1e3-Math.abs(y.length-o.length)}):y.includes(o)?d.push({ind:b,score:2e3-Math.abs(y.length-o.length)}):y.endsWith(`.${g}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let g=[...no(s)],b=o.split(/\s+/).find($=>$.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,v=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,_=v?US(s):null;for(let $ of r){let x=String($.label||"").toLowerCase(),S=x.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(S===o){d.push({ind:$,score:5e3});continue}if(o.length>=4&&(S.startsWith(o)||S.endsWith(o))){d.push({ind:$,score:4e3-Math.abs(S.length-o.length)});continue}if(v){let j=eh($.label);if(j&&j===_){d.push({ind:$,score:5e3});continue}let A=/[/_-]/.test($.label)||/\.[a-z0-9]+$/i.test(String($.label||""));if(j&&A&&_.length>=4&&j.includes(_)){d.push({ind:$,score:2e3-Math.abs(j.length-_.length)});continue}}if($.class==="Module"){let j=Zi(o);if(j!==o&&j===Zi(S)){let A=Xn(o);if(Yn(S,o,A)>A){d.push({ind:$,score:3e3-Math.abs(S.length-o.length)});continue}}}if(o.length>=4&&x.includes(o)){d.push({ind:$,score:1e3-Math.abs(x.length-o.length)});continue}let E=no($.label),R=g.filter(j=>E.has(j)).length;R>0&&(!y||E.has(y))&&d.push({ind:$,score:R/g.length*tl})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter(v=>v.score===g.score),w=g.score>=tl?b.filter(v=>v.score>=tl):b;return{match:g.ind,candidates:w.slice(0,4).map(v=>v.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),m=null,h=!p&&typeof Ks=="function"?Ks(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(h.length){let[g,...b]=h,y=e.byId.get(g.id);if(y){let w=b.filter(v=>v.score===g.score);if(m={match:y,candidates:b.slice(0,4).map(v=>e.byId.get(v.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&g.via!=="spell")return m}}if(!i&&o.length>=4){let g=Xn(o),b=g+1,y=[];for(let w of r){let v=Yn(String(w.label||"").toLowerCase(),o,g);if(v>0)for(let _ of no(w.label)){if(v<=0)break;v=Math.min(v,Yn(_,o,g))}v<b?(b=v,y=[w]):v===b&&v<=g&&y.push(w)}if(b<=g&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=g&&y.length>1&&!m){let[w,...v]=y;return{match:w,candidates:v.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function nl(e,t){let n=eh(t),s=[...no(t)],o=[];for(let r of no(e))n.includes(r)||s.some(i=>Zi(i)===Zi(r))||Qi.has(r)||sh.has(r)||o.push(r);return o}function Yi(e,t){if(!e?.match||e.tier!==3||e.matchedVia)return e;if(e.ambiguous){let s=[e.match,...e.candidates||[]],o=s.map(r=>new Set(nl(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),nl(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:wn(s.slice(0,4).map(r=>r.label))}:e}let n=nl(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function $n(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(BS,"").trim(),i=r.match(WS);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=Yi(Nr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Yi(Nr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Yi(Nr(e,t,n),t)}return Yi(Nr(e,t,n),t)}function Qn(e,t,n){if(Gs.includes(String(t||"").trim().toLowerCase())){if(!n)return{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0};let s=e.byId.get(n);return s?{match:s,candidates:[],tier:1,ambiguous:!1}:{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0}}return $n(e,t)}function xl(e,t,n){let s=[];for(let o of Ke(e,"defines")){if(!t.has(o.subject))continue;let r=e.byId.get(o.object);r&&r.class===n&&s.push(r)}return s}function GS(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||xs.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>Ke(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&xs.has(n)&&(l=l.filter(c=>c.class===n)),{matches:l,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function KS(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&El.has(_m(s.label))).map(s=>({ind:s,named:n.has(_m(s.label))?1:0,depth:String(s.label).split("/").length,fixture:HS(s.label)?1:0})).sort((s,o)=>o.named-s.named||s.depth-o.depth||s.fixture-o.fixture||String(s.ind.label).localeCompare(String(o.ind.label))).map(s=>s.ind)}function YS(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function Sl(e){return(e?.attributes||[]).find(t=>t.prop===XS)?.value||null}function JS(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Uo(e)} ${e} in this graph's vocabulary`}function Wt(e,t,{contextId:n=null,prev:s=null,pinnedObjMatch:o=null}={}){if(!t)return{matches:[],objMatch:null,candidates:[],traversal:null,ambiguous:!1};if(t.node)return MS(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(M=>{let z=Wt(e,M,{contextId:n,prev:s});return{parsed:M,result:z,rendered:yn(M,z,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:T}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let T=String(t.object||"").trim(),M=T.toLowerCase(),z=(e.individuals||[]).find(Y=>{if(!Sl(Y))return!1;if(String(Y.label).toLowerCase()===M)return!0;let ae=(Y.attributes||[]).find(Z=>Z.key==="token")?.value;return ae&&String(ae).toLowerCase()===M});if(!z){let Y=Gm(e,T);return Y?{matches:[Y.hit],objMatch:Y.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:Y.text,traversal:`schema lookup for "${T}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}return{matches:[z],objMatch:z,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}if(r==="mentions"){let T=String(t.object||"").trim();return{matches:(typeof Ks=="function"?Ks(e.proseIndex,T):[]).map(Y=>e.byId.get(Y.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${T}"`}}if(r==="where"&&qS.test(String(t.object||"").trim())){let T=KS(e,t.object);return{matches:T,objMatch:T[0]||null,candidates:T.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...El].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!YS(r,i,a))return{matches:[],objMatch:null,candidates:[],ambiguous:!1,unsupportedModifier:!0,traversal:`modifier "${t.modifier}" requested for a "${i}" query \u2014 no closure traversal exists for this combination yet`};if(r==="ask"){let T=Qn(e,t.subject,n),M=Qn(e,t.object,n);if(!T.match||!M.match||T.ambiguous||M.ambiguous)return{matches:[],objMatch:M.match,candidates:M.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(T.unresolvedPronoun||M.unresolvedPronoun)};let[z,Y]=[T.match,M.match];i==="touches"&&Y.class==="Commit"&&z.class!=="Commit"&&([z,Y]=[Y,z]);let ae=Wo[i],Z=[...new Set(ae?[...Ot(i),ae]:Ot(i))],D=Z.flatMap(U=>Ke(e,U)).filter(U=>U.subject===z.id&&U.object===Y.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:M.match,subjMatch:T.match,candidates:[],traversal:`${Z.join("+")} edge from ${z.label} to ${Y.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=Qn(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=Qn(e,t.altObject,n),M=!!l.match&&!l.ambiguous,z=!!T.match&&!T.ambiguous;!M&&z?l=T:M&&z&&l.match.id!==T.match.id&&(l={...l,ambiguous:!0,candidates:[T.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let T=Y=>Y.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),M=T(String(t.object||"").trim().toLowerCase()),z=(e.individuals||[]).find(Y=>{if(Y.class!=="Module"||Y.id===l.match.id)return!1;let ae=String(Y.label||"").toLowerCase().split("/").pop();return ae!==T(ae)&&T(ae)===M});z&&(l={...l,ambiguous:!0,candidates:[z,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:m,nearestLabel:h}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:m,nearestLabel:h};if(d){let M=Zn([c,...u||[]]).slice(0,He).map(z=>{let Y=Wt(e,t,{contextId:n,prev:s,pinnedObjMatch:z});return{candidate:z,result:Y,rendered:yn(t,Y,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:M}}if(r==="where"){let T=(c.attributes||[]).find(M=>M.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:T,traversal:T?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let T=Y=>String((Y.attributes||[]).find(ae=>ae.key==="date")?.value||""),M;if(c.class==="Commit")M=[c];else{let Y=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),ae=new Set;M=[];for(let Z of Y){if(ae.has(Z.subject))continue;ae.add(Z.subject);let D=e.byId.get(Z.subject);D&&D.class==="Commit"&&M.push(D)}M.sort((Z,D)=>T(D).localeCompare(T(Z)))}let z=M.length&&T(M[0])?[{kind:"event",class:"Commit",label:M[0].label,ids:[M[0].id],attrs:{date:T(M[0]).slice(0,10)},lane:"when"}]:[];return{matches:M,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:z,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let T=Z=>String((Z.attributes||[]).find(D=>D.key==="date")?.value||""),M=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),z=new Set,Y=[];for(let Z of M){if(z.has(Z.subject))continue;z.add(Z.subject);let D=e.byId.get(Z.subject);D&&D.class==="Commit"&&Y.push(D)}Y.sort((Z,D)=>T(D).localeCompare(T(Z)));let ae=Y.length&&T(Y[0])?[{kind:"event",class:"Commit",label:Y[0].label,ids:[Y[0].id],attrs:{date:T(Y[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:Y,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:ae,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return GS(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=Wo[i],z=!!(T&&c.class&&xs.has(c.class))?[...new Set([...Ot(i),T])]:Ot(i);if(a&&a!=="Change"){let G=Mm(e,z),I=el[a];if(G.size&&!G.has(a)&&!(I&&G.has(I)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...G],traversal:`${z.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${Jn(a)})`}}let ae=z.flatMap(G=>Ke(e,G)).filter(G=>G.subject===c.id).map(G=>e.byId.get(G.object)).filter(Boolean),Z=Zn(ae),D=Z,U="";if(a&&a!=="Change"){D=Z.filter(I=>I.class===a);let G=el[a];if(!D.length&&G){let I=Z.filter(L=>L.class===G);I.length&&(D=I,U=`, widened to ${G} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${z.join("+")} edges where subject = ${c.label}${U}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:No(e,c,{maxDepth:Rm}).flat().map(z=>e.byId.get(z.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Rm})`};let g=Wo[i]||Ot(i).find(T=>Cm.has(T))||null,b=!!(c.class&&xs.has(c.class));if(g&&(xs.has(a)||b)){let T=Ke(e,g).filter(U=>U.object===c.id),M=Zn(T.map(U=>e.byId.get(U.subject)).filter(Boolean)),z=!a||a==="Change"?M:M.filter(U=>U.class===a),Y="",ae=el[a];if(!z.length&&ae){let U=M.filter(G=>G.class===ae);U.length&&(z=U,Y=`, widened to ${ae} subjects (no ${a} recorded)`)}let Z=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!Ke(e,"contains").some(U=>U.subject===c.id),D=Z?e.byId.get(Go(e,c)||""):null;if(z.length||!(Z&&D))return{matches:z,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${Y}`,ambiguous:d,matchedVia:p}}let y=c,w=u,v=d,_=p,$="",x=Fm(e,i);if(x&&y.class&&y.class!==x){let T=$n(e,t.object,{expectedClass:x});if(T.match&&!T.ambiguous)y=T.match,w=T.candidates,v=T.ambiguous,_=T.matchedVia;else if(x==="Module"){let M=Go(e,y),z=M&&e.byId.get(M);if(z)$=`, refined from ${y.label} to its containing module`,y=z;else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${Jn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Jn(x)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${Jn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Jn(x)})`}}let S=Ot(i).flatMap(T=>Ke(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(S=S.concat(Ot(i).flatMap(T=>Ke(e,T)).filter(T=>T.subject===y.id).map(T=>({...T,subject:T.object,object:T.subject}))));let E="";if(!S.length&&y.class){let T=`ext:${String(y.label).toLowerCase()}`;S=Ot(i).flatMap(M=>Ke(e,M)).filter(M=>String(M.object).toLowerCase()===T),S.length&&(E=` (by name, via unresolved ${T} references)`)}let R=[],j=new Set;for(let T of S){let M=e.byId.get(T.subject);M&&!j.has(M.id)&&(j.add(M.id),R.push(M))}let A,F="";if(!a||a==="Change")A=R;else{let T=R.filter(M=>M.class===a);if(T.length)A=T;else if(a!=="Module"&&R.some(M=>M.class==="Module")){let M=new Set(R.filter(z=>z.class==="Module").map(z=>z.id));A=xl(e,M,a),F=`, then ${Jn(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Ot(i).join("+")} edges where object = ${y.label}${E}${F}${$}`,ambiguous:v,matchedVia:_}}function zr(e){if(e.class==="Module")return e.label;let t=(e.attributes||[]).find(s=>s.key==="site")?.value;if(t)return String(t).split(":")[0];let n=String(e.id||"").match(/^fn:(.+)#/);return n?n[1]:null}function sl(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function QS(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function wn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Pr(e){let t=e.object??e.subject??"?";return`${e.entityType?Me(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function pl(e){return vr[e]?.bare||e}function ZS(e){let t=pl(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function ek(e){if(!Array.isArray(e.atoms)||e.atoms.length!==2)return null;let[t,n]=e.atoms;if(t.op!=="seed"||t.ast?.node!=="allOfClass"||n.op!=="difference")return null;let s=Me(e.entityType,2);if(n.kind==="qual")return`${s} that are not ${n.filters.join(" and not ")}`;if(n.kind!=="set"||!n.ast)return null;if(n.ast.node==="existsEdge")return`${s} that do not ${pl(n.ast.kind)} anything`;let o=n.ast.node==="clause"?n.ast.clause:n.ast;if(!o||o.node||!o.kind)return null;let r=o.object??o.subject;return r==null?null:`${s} that do not ${pl(o.kind)} ${JSON.stringify(String(r))}`}function th(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Pr).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>th(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?ek(e):null)||`a compositional query (${e.node})`,machine:`composite(${e.node})`};let t=r=>JSON.stringify(String(r??"")),n=[];e.kind&&n.push(e.kind),e.negated&&n.push("negated"),e.entityType&&n.push(`entityType=${e.entityType}`),e.modifier&&e.modifier!=="direct"&&n.push(`modifier=${e.modifier}`),e.subject!=null&&n.push(`subject=${t(e.subject)}`),e.object!=null&&n.push(t(e.object));let s=`${e.shape}(${n.join(", ")})`,o;if(e.shape==="ask")o=`does "${e.subject}" ${e.negated?"not ":""}${eo(e.kind)} "${e.object}"?`;else if(e.shape==="meta")o=`what does "${e.object}" mean, in this graph's own vocabulary?`;else if(e.shape==="mentions")o=`where is "${e.object}" mentioned?`;else if(e.shape==="where")o=`where is "${e.object}" defined?`;else{let r=e.entityType?Me(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${eo(e.kind)}`:`${r}${eo(e.kind)} "${e.object}"`}return{english:o,machine:s}}function yn(e,t,n=null){let s=nh(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function nh(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${vl()}`,miss:!0,ambiguous:!1};if(e.node)return zS(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
|
|
53
|
+
`)}`+(o.length>Uc?`
|
|
54
|
+
\u2026+${o.length-Uc} more`:"")}var Xp,uf,Zp,kv,_v,Fc,Rv,Li,Tv,Av,Iv,ff,Cv,Ov,Lv,Nv,Pv,Mv,Fv,Dv,zv,Uv,Bv,Wv,Gv,qv,Vv,Hv,Kv,Yv,Xv,Jv,Qv,Zv,ex,tx,nx,ef,sx,ox,mf,hf,gf,rx,ix,ax,cx,lx,nf,sf,px,of,Ci,rf,af,cf,Tr,Pe,mx,hx,kf,gx,Wt,Tf,bx,Df,yx,$x,vx,xx,Ex,Sx,kx,jx,Dc,lf,Mi,_x,zc,Uc,Oe=O(()=>{ws();Hn();Oc();Rr();Js();Xp={"mgx:importsnamespace":"imports","mgx:callscoarse":"calls","seon:declaresmethod":"defines","mgx:testscoverage":"tests","mgx:touchedbycommit":"touches","seon:containscodeentity":"contains","seon:hassupertype":"inherits","mgx:changecoupledwith":"cochange","mgx:reexports":"reexports","mgx:serves":"serves","mgx:denotes":"denotes","mgx:touchessymbol":"touchesSymbol","mgx:callssymbol":"callsSymbol","seon:usescomplextype":"imports","seon:invokesmethod":"calls","seon:history":"touches","mgx:subclassof":"inherits","mg:imports":"imports","mg:calls":"calls","mg:defines":"defines","mg:tests":"tests","mg:touches":"touches","mgx:saidinsession":"saidInSession","mgx:inreplyto":"inReplyTo","mgx:statedby":"statedBy","mgx:canonicalisedfrom":"canonicalisedFrom"};uf=e=>/^(git|turn):/.test(String(e||""));Zp=30,kv=8;_v=2,Fc=25,Rv=3;Li=10,Tv=8,Av=3,Iv=2,ff=5,Cv=4,Ov=.2,Lv=.35,Nv=.15,Pv=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),Mv=.2,Fv=.35,Dv=.2,zv=.35,Uv=e=>/\.cs$/i.test(e),Bv=e=>/^I[A-Z]/.test(String(e||"")),Wv=.2,Gv=.35,qv=50,Vv=.2,Hv=.35,Kv=.5,Yv=ff,Xv=3,Jv=4,Qv=1,Zv=.9,ex=.5,tx=.2,nx=.35,ef=4,sx=2,ox=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],mf=3,hf=12,gf=.9,rx=["imports","calls","callsSymbol","inherits"],ix=.5,ax=.6,cx=.2,lx=.35;nf=128,sf=4,px=64,of=250,Ci=class extends Error{};rf=new WeakMap;af=40,cf=40,Tr=30;Pe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";mx=25,hx=15;kf=40,gx="tests edges are recorded module to module, so this is module-grain coverage.";Wt=15;Tf=new Set(["Function","Method"]);bx=8;Df={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};yx=8,$x=16,vx=4,xx=6,Ex=12,Sx=2,kx=8,jx=3,Dc=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),lf=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Mi=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},_x=e=>{let t=new Map,n=e[0]??0,s=0;for(let o of e){let r=(t.get(o)||0)+1;t.set(o,r),r>s&&(s=r,n=o)}return n};zc=20;Uc=40});function Qe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Qf(e){let t=String(e||"");return Vf&&(t=t.replace(Vf," ")),t.replace(/\s+/g," ").trim()}function Zf(e){let t=String(e||"");t=t.replace(Kx," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(qx);if(o&&(t=o[1].trim()),o=t.match(Vx),o&&(t=o[1].trim()),o=t.match(Hf),o&&(t=o[1].trim()),o=t.match(Kf),o&&(t=o[1].trim()),o=t.match(Yf),o&&(t=o[1].trim()),o=t.match(Hx),o&&(t=o[1].trim()),o=t.match(Xf),o&&(t=o[1].trim()),o=t.match(Yx),o&&(t=o[1].trim()),o=t.match(Xx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Jx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Qx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Zx),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(eE),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(tE),o&&$s.test(o[1].trim())&&(t=o[1].trim()),o=t.match(nE),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(sE),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(oE),o){let r=o[1].trim();Gx(r)||(t=!rE.test(r)&&(Ux.test(r)||$s.test(r))?r:`describe ${r}`)}if(o=t.match(iE),o){let r=o[1].trim();($s.test(r)||aE.test(r)||Xf.test(r)||Hf.test(r)||Yf.test(r)||Kf.test(r)||cE.test(r))&&(t=r)}if(t===s)break}return t}function dE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(lE);if(o&&(t=o[1].trim()),o=t.match(uE),o&&(t=o[1].trim()),t===s)break}return t}function fE(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(pE);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function gE(e){let t=String(e||""),n=t.match(hE);if(n){let o=tm[n[1].toLowerCase()],r=em[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(nm);return s?`which modules transitively import ${s[1].trim()}`:t}function Di(e){return String(e||"").replace(Ox,t=>Sc[t.toLowerCase()])}function Zs(e){let t=Di(e);return t=t.replace(Lx,n=>kc[n.toLowerCase()]),t=t.replace(Nx,n=>jc[n.toLowerCase()]),t=t.replace(Px,"with"),t=t.replace(Mx,(n,s)=>`${s} for`),t=t.replace(Fx,(n,s)=>`for ${s}`),t=t.replace(Dx,(n,s)=>s),t=t.replace(bE,"$1$2"),t=t.replace($p,"$1ing"),t=Zf(t),t=fE(t),t=dE(t),t=gE(t),t=Qf(t),t=an(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ar(e){for(let t of[...xp,...vp]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Kc(e){for(let t of wE){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function sm(e){let t=String(e||"").match(yE);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var Cx,Ox,Jf,Lx,Nx,Px,Mx,Fx,Dx,zx,Vf,Ux,$s,Bx,Wx,Gx,qx,Vx,Hf,Kf,Yf,Hx,Kx,Yx,Xx,Jx,Qx,Zx,eE,tE,nE,sE,oE,rE,iE,aE,cE,Xf,lE,uE,pE,em,tm,mE,hE,nm,bE,wE,yE,tt,Gt,me,yn=O(()=>{qn();Cx=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b","gi"),Ox=Cx(Sc),Jf=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Qe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Lx=Jf(kc),Nx=Jf(jc),Px=/(?<=^|\s)w\/(?=\s|$)/gi,Mx=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,Fx=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,Dx=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,zx=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),Vf=Sr.length?new RegExp("\\b("+[...Sr].sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b\\s*,?","gi"):null;Ux=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|")+")\\b","i"),$s=/^(?:which|what|who|whose|where|when|why|how)\b/i,Bx=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),Wx=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,Gx=e=>{if(Wx.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return Bx.has((t[t.length-1]||"").toLowerCase())},qx=/^(?:hi|hiya|hello|hey|yo|howdy|g'?day|yeah\s+nah|good\s+(?:morning|afternoon|evening|day)|greetings|salutations)(?:\s+(?:there|pardner|folks|friend|mate))?\s*[,.—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,Vx=/^(?:thanks|thank\s+you|many\s+thanks|thx|ty|cheers)(?:\s+(?:so\s+much|a\s+lot|very\s+much|a\s+bunch))?\s*[,—–-]\s*(?:(?:just\s+a\s+)?quick\s+question\s*[,:—–-]?\s*)?(.+)$/i,Hf=/^(?:(?:ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem|(?:just\s+)?(?:one|another)\s+more|another\s+one)[\s,]+)+(.+)$/i,Kf=/^(?:just\s+(?:poking\s+around|looking\s+around|browsing|exploring|checking\s+(?:this|it)\s+out)|first\s+time\s+(?:trying\s+this\s+out|using\s+this|here)|i'?m\s+new\s+(?:here|around\s+here|to\s+(?:this|all\s+this)(?:\s+(?:repo|codebase|project|app|tool|thing))?))\s*[,.—–-]\s*(.+)$/i,Yf=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,Hx=/^(?:please[\s,]+)+(.+)$/i,Kx=/,?\s*if\s+(?:it'?s|it\s+is|that'?s|that\s+is)\s+not\s+too\s+much\s+(?:trouble|bother|hassle)\s*,?\s*/i,Yx=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,Xx=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,Jx=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,Qx=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,Zx=/^do\s+you\s+know\s+(.+?)\??$/i,eE=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,tE=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,nE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,sE=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,oE=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,rE=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,iE=/^(?:and|also|so|then|now|but)\s+(.+)$/i,aE=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,cE=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,Xf=/^(?:(?:actually|no\s+wait|wait|hold\s+on|never\s+mind|scratch\s+that|on\s+second\s+thought|i\s+mean(?:t)?)[\s,.]+)+(.+)$/i;lE=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,uE=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;pE=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;em=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),tm=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),mE="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",hE=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(tm).join("|")+")\\s+("+Object.keys(em).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+mE+")\\??$","i"),nm=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;bE=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${xc.map(Qe).join("|")})(\\s*[?.!]*)$`,"i");wE=Object.freeze([{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:are|is)\s+(?:in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:does|do)\s+(.+?)\s+have\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+are\s+(?:the\s+)?(?:functions?|methods?|members?|attributes?|fields?|properties)\s+(?:of|in|inside|within)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^(?:the\s+)?(?:members?|methods?|attributes?|contents)\s+of\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+else\s+is\s+(?:in|inside)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`what does ${e[1]} contain`},{re:/^what\s+(?:defined|declared)\s+(?:the\s+)?(?:function\s+|method\s+|class\s+|module\s+|variable\s+|constant\s+)?(.+?)\??$/i,to:e=>`where is ${e[1]} defined`},{re:/^where'?s\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^were\s+is\s+(?:the\s+)?(.+?)\s+(defined|declared|located|implemented)\??$/i,to:e=>`where is ${e[1]} ${e[2]}`},{re:/^what\s+is\s+the\s+purpose\s+of\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\??$/i,to:e=>`what is a ${e[1]}`},{re:new RegExp(`^what\\s+does\\s+(?:the\\s+)?(?!(?:an?|it|this|that|these|those)\\s)(.+?)\\s+do\\s+(?:${Ec.map(Qe).join("|")})\\??$`,"i"),to:e=>`what is a ${e[1]}`},{re:/^(?:which|what)\s+(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:are|is)\s+(public|private|protected|static|abstract|constant|exported|re-?exported|tested|covered|untested|uncovered)\??$/i,to:e=>`${e[2].toLowerCase()} ${e[1].toLowerCase()}`},{re:/^what\s+(?:is|are)\s+(not\s+)?(tested|untested|covered|uncovered)\??$/i,to:e=>{let t=e[2].toLowerCase();return`${e[1]?t==="tested"?"untested":t==="covered"?"uncovered":t:t} modules`}},{re:/^what\s+does\s+(.+?)\s+changes?\s+together\s+with\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^what\s+changes?\s+together\s+with\s+(.+?)\??$/i,to:e=>`what co-changes with ${e[1]}`},{re:/^how\s+many\s+commits\s+(?:are|were)\s+(?:recorded|logged)\s+(?:for|against)\s+(?:the\s+)?(.+?)\??$/i,to:e=>`how many commits touched ${e[1]}`},{re:/^who\s+(?:wrote|authored)\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^who\s+is\s+the\s+authors?\s+of\s+(?:the\s+)?(?!(?:commit\s+)?[0-9a-f]{7,40}\??$)(.+?)\??$/i,to:e=>`who touched ${e[1]}`},{re:/^(?:does|do)\s+(?!.*\bnot\b)(.+?)\s+have\s+(?:any\s+)?(?:tests?|test\s+coverage|coverage)\??$/i,to:e=>`what tests ${e[1]}`},{re:/^(?:is|are)\s+(?!.*\bnot\b)(.+?)\s+tested\??$/i,to:e=>`what tests ${e[1]}`},{re:/^what\s+needs\s+(?:to\s+be\s+)?(?:a\s+)?(?:tested|tests?|testing|coverage|covering)\??$/i,to:()=>"untested modules"},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+(?:(?:that|which)\s+)?(?:have|has|having|with)\s+no\s+tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:/^(?:which|what|list|show(?:\s+me)?|find)?\s*(?:the\s+|all\s+)?([a-z][a-z-]*?)\s+without\s+(?:any\s+)?tests?\??$/i,to:e=>`untested ${e[1].toLowerCase()}`},{re:new RegExp(`^(?:do|does)\\s+(.+?)\\s+(${zx})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);yE=new RegExp("^(?:which|what|who|list|show(?:\\s+me)?|find|give\\s+me)?\\s*(?:the\\s+|all\\s+)?([a-z][a-z-]*)\\s+(?:(?:that|which|who)\\s+)?(?:(?:do|does|did|are|is|was|were|have|has|can|could|will|would|should)\\s+not|cannot|can't|won't|couldn't|shouldn't|wouldn't|not)\\s+(.+)$","i");tt=new Set(["what","who","which","where","when","why","how","does","do","did","is","are","was","were","the","a","an","of","to","from","at","in","on","there","something","anything","nothing","one","any","anywhere","last","usually","typically","generally","normally","often","commonly","mostly","should","would","could","can","will","shall","might","must"]),Gt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),me=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var rm,om=O(()=>{rm={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chapped","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seifing","seiing","seined","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Qn(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let l=1;l<=t.length;l+=1){let c=e[r-1]===t[l-1]?0:1,u=Math.min(o[l]+1,i[l-1]+1,o[l-1]+c);r>1&&l>1&&e[r-1]===t[l-2]&&e[r-2]===t[l-1]&&(u=Math.min(u,s[l-2]+c)),i[l]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function Xc(e){return/^[a-z]+$/.test(e)&&!tt.has(e)&&!Yc.has(e)}function cm(e){return EE(e)?null:zi(e,am,Zn(e))}function zi(e,t,n=Zn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Qn(e,i,Math.min(s,n));a<s?(s=a,o=i,r=!1):a===s&&a<=n&&i!==o&&(r=!0)}return s<=n&&!r?o:null}var vE,Zn,Yc,im,am,xE,EE,Mo=O(()=>{qn();om();yn();vE=["used"];Zn=e=>e.length<=5?1:2,Yc=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(en),...vE].flatMap(e=>e.split(" "))),im=4,am=[...new Set([...Object.keys(de),...Object.keys(en)].flatMap(e=>e.split(" ")).filter(e=>e.length>=im))],xE=new Set(rm.words),EE=e=>xE.has(e)});function Fo(e){for(let t of _E){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Ui,SE,kE,jE,Jc,_E,lm,Bi=O(()=>{qn();yn();Ui=Object.keys(de).sort((e,t)=>t.length-e.length).map(Qe).join("|"),SE=Object.keys(Be).sort((e,t)=>t.length-e.length).map(Qe).join("|"),kE=Object.keys(en).sort((e,t)=>t.length-e.length).map(Qe).join("|"),jE=qs.slice().sort((e,t)=>t.length-e.length).map(Qe).join("|"),Jc=(e,t)=>e==="defines"&&Er.has(t),_E=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Ui})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Jc(n,t))return null;let s=e[1].trim(),o=e[3].trim();return xr.includes(t)&&([s,o]=[o,s]),{shape:"ask",entityType:null,modifier:"direct",kind:n,subject:s,object:o}}},{name:"reverse",re:new RegExp(`^which\\s+(${SE})\\s+(?:(${kE})\\s+)?(${Ui})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Jc(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?en[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Ui})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Jc(n,t)?null:{shape:"forward",entityType:null,modifier:"direct",kind:n,object:e[1].trim()}}},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${jE})\\??$`,"i"),build:e=>({shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:e[1].trim()})},{name:"meta-whatis",re:new RegExp("^what\\s+(?:is|are)\\s+(?:(an?|the)\\s+)?(.+?)\\??$","i"),build:e=>{let t=e[1]?e[1].toLowerCase():null,n=an(e[2].trim()),s=!/\s/.test(n);if(t==="the"&&!s||!t&&!Be[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&wp.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:Ws(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${wn.map(Qe).join("|")})\\??$`,"i"),build:e=>({shape:"mentions",entityType:null,modifier:"direct",kind:"mentions",object:e[1].trim()})},{name:"where",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)(?:\\s+(?:${Zt.map(Qe).join("|")}))?\\??$`,"i"),build:e=>({shape:"where",entityType:null,modifier:"direct",kind:"where",object:e[1].trim()})},{name:"when",re:new RegExp(`^when\\s+(?:did|does|do|was|were|is)\\s+(.+?)\\s+(?:last\\s+)?(${Ui})\\??$`,"i"),build:e=>de[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];lm={id:"grammar",class:"graph-query",run(e){let t=Fo(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function Tt(e,t,n=null){let s=Object.keys(t).sort((o,r)=>r.split(" ").length-o.split(" ").length);for(let o of s){let r=o.split(" ");for(let i=0;i<=e.length-r.length;i+=1)if(!(n&&r.some((a,l)=>n.has(i+l)))&&r.every((a,l)=>e[i+l]===a))return{kind:t[o],start:i,end:i+r.length}}return null}function Cr(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(S=>S.toLowerCase());if(s.includes("where")&&!Tt(s,de)){let S=s.some(j=>wn.includes(j)),E=new Set([...Zt,...wn]),R=n.filter((j,A)=>!tt.has(s[A])&&!E.has(s[A])).join(" ").trim();if(R){let j=S?"mentions":"where";return{shape:j,entityType:null,modifier:"direct",kind:j,object:R}}}if(new Set(["has","have","had"]).has(s[0])){let S=s.length;for(;S>1&&(s[S-1]==="ever"||s[S-1]==="been");)S-=1;if((S>1?de[s[S-1]]:null)==="touches"){let R=n.slice(1,S-1).filter((j,A)=>!tt.has(s[1+A])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=Tt(s,de);if(!i&&t){let S=s.map(E=>{if(!Xc(E))return E;let R=t.lemma(E);return Yc.has(R)?R:E});i=Tt(S,de),i&&(r=S)}let a=null;if(!i){let S=s.map(E=>E.length>=4&&Xc(E)&&cm(E)||E);if(i=Tt(S,de),i){r=S;let E=s.slice(i.start,i.end).findIndex((j,A)=>j!==S[i.start+A]),R=i.start+Math.max(E,0);a={from:s[R],to:S[R]}}}let l=!1;if(!i)for(let S=0;S<s.length;S+=1){let E=gs[s[S]];if(!(E&&s[S]==="used"&&s[S+1]==="for")&&E&&s.slice(0,S).some(R=>Ir.has(R))){i={kind:E,start:S,end:S+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&gs[s[i.start]]&&s.slice(0,i.start).some(S=>Ir.has(S))&&(l=!0);let c=S=>a?{...S,fuzzyVerb:a}:S;if(t&&i.end-i.start===1){let S=i.start,E=s[S-1];if((E==="the"||E==="these"||E==="those")&&s[S+1]==="of"&&t.posTags(n)[S]==="NOUN"){let j=n.slice(S+2).filter((A,F)=>!tt.has(s[S+2+F])).join(" ").trim();if(j)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:j})}}let u=new Set,d=S=>{if(S)for(let E=S.start;E<S.end;E+=1)u.add(E)};d(i);for(let[S,E]of Object.entries(de)){if(E!==i.kind)continue;let R=S.split(" "),j=i.end;if(R.every((A,F)=>r[j+F]===A)){d({start:j,end:j+R.length});break}}let f=Tt(r,Be,u);d(f);let p=Tt(r,en,u);d(p);let m=(S,E)=>n.slice(S,E).filter((R,j)=>!u.has(S+j)&&!tt.has(s[S+j])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&AE.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?en[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let S=h||g;if(S)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:S})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let S=h||g;if(S)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:S})}let v=s.indexOf("by"),_=s.slice(0,i.start).findIndex(S=>Ir.has(S)),$=_>=0,x=$&&_>v;if(v>=0&&!u.has(v)&&$){let S=(j,A)=>n.slice(j,A).filter((F,T)=>{let M=j+T,z=s[M];return!u.has(M)&&!tt.has(z)&&z!=="by"&&!Ir.has(z)&&!RE.has(z)&&!TE.has(z)}).join(" ").trim(),[E,R]=x?[S(_+1,n.length),S(v+1,_)]:[S(0,v),S(v+1,n.length)];if(E&&R)return b==="defines"&&Er.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:E});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(E)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:E})}if(l&&v<0&&g&&s[i.start]==="called")return null;if(h&&g){let S=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Er.has(S))return null;let E=h,R=g;return xr.includes(S)&&([E,R]=[R,E]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:E,object:R})}if(g){let S=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:S,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&f&&f.start===i.end){let S=r.slice(f.start,f.end).join(" ");if(S)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:S})}if(h&&!g&&$&&i.end-i.start===1&&gs[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:h});let S=Ir.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...S?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var Ir,RE,TE,AE,um,Wi=O(()=>{qn();yn();Mo();Ir=new Set(["is","are","was","were","be","been","being","get","gets","got"]),RE=new Set(["which","what","who","whom","whose"]),TE=new Set(Gn.map(e=>e.toLowerCase())),AE=new Set(["recently","lately","yet","already","ever","again"]);um={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Cr(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function CE(e,t,n){if(!n||typeof n.posTags!="function"||!t.length)return[];let s=new Set(t.map(i=>i.toLowerCase())),o;try{o=n.posTags(e)}catch{return[]}let r=[];for(let i=0;i<e.length;i+=1){let a=e[i],l=a.toLowerCase();!/^[a-z]+$/.test(a)||dm.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function OE(e,t=null){let n=Gt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!dm.has(a)&&(IE.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=CE(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var dm,IE,pm,fm=O(()=>{qn();yn();Bi();Wi();dm=new Set([...tt,...me(Gs),...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(en)),...me(Object.keys(Xe)),...me(Vs),...me(Hs),...me(Object.keys(bs)),...me(Object.keys(_n)),...me(Object.keys(jo)),...me(Gn),...me(kr),...me(qs),...me(Zt),...me(wn),...me(Wn),...me(Object.keys(Ro))]),IE=new Set([...me(Sr),...me(Si)]);pm={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(Fo(e))return null;let{text:n,dropped:s,maybeNoise:o}=OE(e,t.nlp||null);if(!s.length||!n)return null;let r=Fo(n)||Cr(n,t.nlp||null);if(!r)return null;if(o.length&&(r.shape==="where"||r.shape==="mentions")&&r.object){let i=r.object.split(/\s+/).filter(a=>!o.includes(a.toLowerCase())).join(" ").trim();i&&i!==r.object&&(r.altObject=i)}return{strategyId:"noise-strip",class:"noise-stripped",candidates:[{parsed:r,confidence:.75,note:`noise-stripped to "${n}"`}]}}}});var mm=O(()=>{});var Gi,qi=O(()=>{Gi=()=>{}});function gm(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Do(e.subject)===Do(t.subject)&&Do(e.object)===Do(t.object):Do(e.object)===Do(t.object)}function Qc(e){let t=(e||[]).filter(c=>c&&Array.isArray(c.candidates)&&c.candidates.length);if(!t.length)return null;let n=[];for(let c of t)for(let u of c.candidates)!u||!u.parsed||n.push({parsed:u.parsed,confidence:typeof u.confidence=="number"?u.confidence:.5,note:u.note||null,via:u.via||null,strategyId:c.strategyId,class:c.class});if(n.some(c=>!bm(c))&&(n=n.filter(c=>!bm(c))),!n.length)return null;let s=new Map;for(let c of n)s.has(c.class)||s.set(c.class,[]),s.get(c.class).push(c);let o=[];for(let[c,u]of s){let d=[];for(let f of u){let p=d.find(m=>gm(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),hm(f.parsed)<hm(p.parsed)&&(p.parsed=f.parsed);continue}d.push({...f,agreed:1})}d.length&&o.push({class:c,candidates:d})}if(!o.length)return null;let r=c=>Math.max(...c.candidates.map(u=>u.confidence)),i=o[0];for(let c of o)r(c)>r(i)&&(i=c);let a=i.candidates.length===1?i.candidates[0].parsed:{ambiguousParse:!0,candidates:i.candidates.map(c=>c.parsed)},l=o.filter(c=>c!==i).map(c=>c.candidates[0]).filter(c=>!i.candidates.some(u=>gm(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function PE(e){if(!e)return"something else";if(e.ambiguousParse)return"one of several readings";let t=e.object??e.subject??"?";return`${e.kind} "${t}"`}function wm(e,{describe:t=PE,answerFor:n=null}={}){return(e||[]).map(s=>{let o=s.note||t(s.parsed),r=n&&n(s)||"ask it that way";return`if you mean ${o} then ${r}`})}var Do,LE,hm,NE,bm,Zc=O(()=>{Do=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),LE=/^\s*(?:the|a|an)\s+/i,hm=e=>[e?.subject,e?.object].filter(t=>LE.test(String(t||""))).length;NE=new Set(["fuzzy","lemma","spell"]),bm=e=>NE.has(e.via)});function Vi(e){el=e}function Hi(){return typeof el=="function"?el():null}var el,zo=O(()=>{el=null});function vm(e,t={},n=FE){let s=[];for(let o of n)try{let r=o.run(e,t);r&&typeof r.then!="function"&&s.push(r)}catch{}return s}var ME,FE,xm=O(()=>{yn();Bi();Wi();fm();mm();qi();Zc();zo();ME=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],FE=[lm,um,pm,...ME]});function Uo(e){return DE.test(String(e||"").trim())?"an":"a"}function Ki(e){let t=String(e||"").trim();return t&&(/(?:s|x|z|ch|sh)$/.test(t)?`${t}es`:/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:`${t}s`)}function Bo(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Or(e){let t=(e||[]).map(n=>String(n||"").trim()).filter(Boolean);return t.length===0?"":t.length===1?t[0]:t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t[t.length-1]}`}var DE,Yi=O(()=>{DE=/^[aeiou]/i});var Lr,tl=O(()=>{Lr=(e,t,n)=>n});var dh={};Bn(dh,{DYNAMIC_TAIL_OK_RE:()=>Tl,applyNegationFrames:()=>Ar,ask:()=>Ss,classDisplayName:()=>es,degreeMetric:()=>nh,metaFallbackEntityAnswer:()=>Ym,normalizeQuery:()=>Zs,parseQuery:()=>Dr,parseQueryFull:()=>gl,render:()=>vn,rephraseHint:()=>El,resolveObject:()=>xn,traverse:()=>qt,worldRelationGraphPayload:()=>Ok});function Ke(e,t){let n=Em.get(e);n||(n=new Map,Em.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Jn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Me(e,t){let[n,s]=al[e]||["result","results"];return t===1?n:s}function Ur(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Me(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function es(e){let t=String(e||"");if(typeof Rn=="function"){let n=Rn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function eo(e){return UE[e]||e}function VE(e){if(!e?.ambiguousParse||!Array.isArray(e.candidates)||e.candidates.length!==2)return e;let t=e.candidates.find(r=>r?.shape==="meta"),n=e.candidates.find(r=>r!==t);if(!t||!n)return e;let s=String(t.object||"").trim().toLowerCase();if(!s||qE.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return me(qs).includes(o)?t:e}function YE(e,t){if(!e||e.shape!=="where"||e.altObject||!HE.test(t))return e;let n=Ei(t),s=Ei(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=Gt(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||tt.has(i)||de[i]||i.endsWith("ing"))return o;let a=Gt(n).map(c=>c.toLowerCase());for(;a.length&&KE.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let l=r.slice(0,-1).join(" ");return{...e,object:l,altObject:s,verb:i}}function Dr(e,{nlp:t=void 0}={}){return gl(e,{nlp:t}).parsed}function gl(e,{nlp:t=void 0}={}){let n=t===void 0?Hi():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Kc(Ar(Zs(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=JE(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=Qc(vm(o,{nlp:n,raw:s}));return i?{parsed:YE(VE(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function ll(e,t){return t.length&&Dm.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function qo(e,t){return Fo(e)||Cr(e,t)}function JE(e,t){let n=Gt(e),s=n.map(o=>o.toLowerCase());return bS(n,s)||yS(n,s)||tS(n,s,t)||Um(e,t,0)||$S(n,s,t)||sS(n,s,t)||uS(n,s,t,0)||pS(n,s)||hS(n,s,t)||vS(n,s,t)||SS(n,s,t)||jS(n,s,t,0)||ES(n,s,t,0)||wl(n,s,t,0)||rS(n,s,t)||ZE(n,s)||Hm(n,s,t,0)}function ZE(e,t){let n=0;QE.has(t[n])&&(n+=1);let s=At(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?yp[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){l=m,c=h;break}}if(l<0)return null;let u=e.slice(a,l).join(" ").trim(),d=e.slice(l+2).join(" ").trim();if(!u||!d)return null;let f=(m,h)=>m.role==="object"?{shape:"reverse",kind:m.kind,entityType:o,modifier:"direct",object:h}:{shape:"forward",kind:m.kind,modifier:"direct",object:h},p=f(i,u);return p.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:p}},{op:"intersection",kind:"set",ast:{node:"clause",clause:f(c,d)}}]}}function Ji(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function tS(e,t,n){if(!["do","does","did"].includes(t[0])||!eS.has(t[1]))return null;let s=At(t[2]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;if(o==="Change")return{node:"miss",reason:`"${t[2]}" isn't an enumerable kind \u2014 a universal check needs a concrete kind (functions, classes, modules, \u2026)`};let r=t[2],i=e.slice(3),a=t.slice(3);if(!i.length)return null;let l=Tt(a,de);if(!l)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((f,p)=>(p<l.start||p>=l.end)&&!tt.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=Vo(`which ${r} ${i.join(" ")}`,n,1);return!d||d.node==="miss"?{node:"miss",reason:d&&d.reason||"the universal clause didn't parse"}:{node:"universal",entityType:o,kind:l.kind,object:u,complement:Ji(o,{op:"difference",kind:"set",ast:d})}}function Um(e,t,n=0){let s=sm(e);if(!s)return null;let o=At(s.entWord);if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;if(r==="Change")return{node:"miss",reason:`"${s.entWord}" isn't an enumerable kind \u2014 a set complement needs a concrete kind (functions, classes, modules, \u2026)`};let i=Gt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Xe[d]))return Ji(r,{op:"difference",kind:"qual",filters:a});let l=Tt(a,de);if(!l)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,f)=>(f<l.start||f>=l.end)&&!tt.has(a[f])&&a[f]!=="from").length)return Ji(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=Vo(`which ${s.entWord} ${s.predicate}`,t,n+1);return!u||u.node==="miss"?{node:"miss",reason:u&&u.reason||"the negated clause didn't parse"}:Ji(r,{op:"difference",kind:"set",ast:u})}function sS(e,t,n){let s=0;for(;s<t.length&&nS.has(t[s]);)s+=1;if(!["do","does","did"].includes(t[s]))return null;s+=1;let o=e.slice(s),r=t.slice(s),i=r.indexOf("not");if(i<0)return null;let a=Tt(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!tt.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function Bm(e,t){let n=new Set;for(let s of t)for(let o of Ke(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Wm(e,t){let n=Ot(t),s=n.filter(r=>!Mm.has(r)),o=Bm(e,s.length?s:n);return o.size===1?[...o][0]:null}function Vo(e,t,n){if(n>Fm)return{node:"miss",reason:"too deep to resolve"};let s=Um(e,t,n);if(s)return s;let o=Gt(e),r=o.map(c=>c.toLowerCase()),i=wl(o,r,t,n);if(i)return i;let a=Hm(o,r,t,n);if(a)return a;let l=qo(e,t);return l?{node:"clause",clause:l}:null}function wl(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Wn.includes(t[o]),i=!r&&zm(t[o]);if(!r&&!i||r&&o+1>=t.length||!At(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Xe[f.toLowerCase()]))continue;let c=qo([...l,cl].join(" "),n);if(!c||c.shape!=="reverse"&&c.shape!=="forward"||c.modifier&&c.modifier!=="direct")continue;let u=`which ${t[o-1]} ${e.slice(r?o+1:o).join(" ")}`,d=Vo(u,n,s+1);return!d||d.node==="miss"?d?{node:"miss",reason:d.reason||"inner clause didn't parse"}:{node:"miss",reason:"inner clause didn't parse"}:{node:c.shape==="reverse"?"reverseSet":"forwardSet",kind:c.kind,entityType:c.entityType,inner:d}}return null}function rS(e,t,n){for(let s=0;s<t.length;s+=1){if(!oS.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!de[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),cl,...e.slice(s+1)],a=qo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===cl&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function uS(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!iS.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(aS.has(t[d])){r=d;break}if(r<0)return null;let i=e.slice(o,r),a=t.slice(o,r);for(;a.length&&cS.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&lS.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Wn.includes(d)))return null;let l=bl.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=Vo(l,n,s+1);if(!c||c.node==="miss")return c?{node:"miss",reason:c.reason||"the inner set of the temporal query didn't parse"}:{node:"miss",reason:"the inner set of the temporal query didn't parse"};let u=At(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function pS(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!dS.has(t[n]))return null;let s=t[n],o=e.slice(n+1).join(" ").trim();return o?{node:"commitFilter",op:s,pivotRaw:o}:{node:"miss",reason:`"what changed ${s}" needs a date or commit afterward`}}function mS(e){let t=new Set,n=[];for(let s of e){if(!s||!fS.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function hS(e,t,n){if(t.length===2&&t[0]==="which"&&(t[1]==="ones"||t[1]==="one"))return{node:"anaphora",mode:"list",filter:{type:"all"}};let s=-1,o=!1;for(let d=1;d<t.length;d+=1){if(!kr.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let f=t.slice(0,d).join(" ");if(d===t.length-1&&(Vs.includes(f)||Hs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Vs.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=gS(e.slice(s+1),n);if(a===void 0)return{node:"miss",reason:"the follow-up filter didn't parse"};let l=o?s-1:s,c=mS(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function gS(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&XE.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Xe[a]))return{type:"qual",filters:r};if(o.length===1){let a=At(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=qo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function bS(e,t){let n;if(t[0]==="is"&&t[1]==="there")n=2;else if(t[0]==="are"&&t[1]==="there")n=2;else return null;let s=t[n];if(s==="a"||s==="an"||s==="any")n+=1;else return null;let o=n<t.length?At(t[n]):null;if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;n+=1;let i=t.slice(n),a=e.slice(n);if(i.length&&i[i.length-1]==="anywhere"?(i=i.slice(0,-1),a=a.slice(0,-1)):i.length>=2&&i[i.length-2]==="at"&&i[i.length-1]==="all"&&(i=i.slice(0,-2),a=a.slice(0,-2)),!i.length)return{node:"exists",entityType:r,term:null,scopeModule:null};if(i[0]==="called"||i[0]==="named"){if(i.length<2)return{node:"miss",reason:`"${i[0]}" needs a name afterward`};let l=i.indexOf("in",1);if(l>0){let u=a.slice(1,l).join(" ").trim(),d=a.slice(l+1).join(" ").trim();return!u||!d?{node:"miss",reason:'a named existence check needs both a name and a module after "in"'}:{node:"exists",entityType:r,term:u,scopeModule:d}}let c=a.slice(1).join(" ").trim();return c?{node:"exists",entityType:r,term:c,scopeModule:null}:{node:"miss",reason:`"${i[0]}" needs a name afterward`}}if(i[0]==="in"){let l=a.slice(1).join(" ").trim();return l?{node:"exists",entityType:r,term:null,scopeModule:l}:{node:"miss",reason:'"in" needs a module afterward'}}return null}function wS(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=Ws(n).slice(e.length).trim(),o=Gt(s),r=o.findIndex(a=>a.toLowerCase()==="in");if(r<0)return null;let i=o.slice(r+1).join(" ").trim();return i?{scope:i}:{node:"miss",reason:'"in" needs a scope afterward'}}function yS(e,t){if(t[0]!=="is"&&t[0]!=="are"||t[1]==="there")return null;let n=-1,s=!1;for(let c=1;c<t.length;c+=1)if(Xe[t[c]]){n=c,s=t[c-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&gs[t[n]]){let c=o+1;for(;c<t.length&&(t[c]==="the"||t[c]==="a"||t[c]==="an");)c+=1;let u=t[c];if(u&&!Ep.has(u))return null}let r=wS(t[n],e.slice(n+1));if(r?.node==="miss")return r;let i=1;t[i]==="the"&&(i+=1);let a=s?n-1:n;a>i&&(t[a-1]==="a"||t[a-1]==="an")&&(a-=1);let l=a>i?e.slice(i,a).join(" ").trim():"";return l?{node:"qualCheck",term:l,qualifier:t[n],negated:s,scope:r?.scope||null}:{node:"miss",reason:'"is/are <qualifier>" needs a named thing to check first'}}function $S(e,t,n){if(!["do","does","did","is","are","was","were"].includes(t[0]))return null;let s=t.indexOf("not",1);if(s<0)return null;let o=qo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function vS(e,t,n){let s=Vs.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&Xe[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?At(t[o]):null;if(!i)return{node:"miss",reason:"count needs a known entity kind (functions, classes, modules, \u2026)"};let a=t[o];o+=1;let l=e.slice(o),c=t.slice(o).some(d=>!tt.has(d)&&!Gm.has(d)),u;if(c){let d=Vo(`which ${a} ${l.join(" ")}`,n,1);if(!d||d.node==="miss")return{node:"miss",reason:"the count restrictor didn't parse"};u=d}else u={node:"allOfClass",entityType:i.entityType};return r.length&&(u={node:"qualifier",filters:r,inner:u}),{node:"count",entityType:i.entityType,base:u}}function ES(e,t,n,s){let o=0,r=!1,i=null;for(let y of qm){let w=y.split(" ");if(t.slice(0,w.length).join(" ")===y){i=y,o=w.length;break}}if(!i)if(t[0]==="what"||t[0]==="which")r=!0,o=1;else return null;for(;o<t.length&&yl.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Xe[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?At(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Gn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Vm}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!tt.has(y)&&!Gm.has(y)),p=t.slice(o),m=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),m=m.slice(1));let h=r&&xS.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=Vo(`which ${[...a,u,...y].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};g=w,b=!0}else g={node:"allOfClass",entityType:c},a.length&&(g={node:"qualifier",filters:a,inner:g});return{node:"list",entityType:c,base:g,scoped:b}}function SS(e,t,n){let s=null,o=-1;for(let m=0;m<t.length;m+=1){let h=t.slice(m,m+2).join(" ");if(bs[h]){s=bs[h],o=m;break}if(bs[t[m]]){s=bs[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(_n[t[m]]){r=_n[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(_n[t[m]]){r=_n[t[m]],i=t[m];break}}let a=t.includes("connected")||t.slice(o,o+2).join(" ")==="most connected"||["largest","biggest","smallest"].includes(t[o]),l=["important","significant","central","key","core","essential","critical","principal"],c=t.some(m=>l.includes(m));!r&&(a||c)&&(r=_n.connections,i="connections");let u,d=null;for(let m of t){let h=At(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?Sp[i]:void 0,!u))return{node:"miss",reason:"a superlative needs an entity kind (module, class, function, \u2026)"};if(!r)return{node:"miss",reason:"name what to rank by (imports, callers, methods, tests, or connections)"};let f=["needs","need","needing","lacks","lack","lacking","misses","missing"],p=t.some(m=>f.includes(m))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:p}}function jS(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&yl.has(t[o]);)o+=1;if(o>=t.length)return null;let r=At(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&kS.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=At(t[t.length-1]);if(i&&!i.placeholder&&i.entityType!=="Change"){let a=e.slice(o,t.length-1).join(" ").trim();if(a)return{node:"find",entityType:i.entityType,term:a}}return t.some(a=>Wn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Gn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Vm}`}:null}function _S(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&yl.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Wn.includes(t[i])){s=i;break}if(s<0)return null;let o=At(t[s-1]);if(!o||o.placeholder||o.entityType==="Change")return null;let r=e.slice(n,s-1).join(" ").trim();return r?{entityType:o.entityType,term:r,relIdx:s}:null}function RS(e,t,n,s,o,r){let{branches:i,ops:a}=Qi(n,s),l=null,c=[];for(let u=0;u<i.length;u+=1){let d=i[u],f=d.map(y=>y.toLowerCase()),p=u===0?"intersection":a[u-1],m=ll(d,f);if(m.blc.length&&m.blc.every(y=>Xe[y])){c.push({op:p,kind:"qual",filters:m.blc});continue}if(f[0]==="of"||f[0]==="in"){c.push({op:p,kind:"set",ast:{node:"membership",entityType:e,term:d.slice(1).join(" ")}});continue}let h=d,g=Tt(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=Km(`${t} ${h.join(" ")}`,o,r);if(!b||b.node==="miss")return{miss:b&&b.reason||"a clause in the combination didn't parse"};c.push({op:p,kind:"set",ast:b})}return{atoms:c}}function Hm(e,t,n,s){let o=_S(e,t);if(o){let{entityType:R,term:j,relIdx:A}=o,F=t.slice(A+1),T=e.slice(A+1);if(!F.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[A]}"`};let M=RS(R,`which ${t[A-1]}`,F,T,n,s+1);if(M.miss)return{node:"miss",reason:M.miss};let z=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:j}},...M.atoms];return z.length===1?z[0].ast:{node:"boolean",entityType:R,atoms:z}}let r=0;for(;r<t.length&&bl.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Xe[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?At(t[r]):null;if(!l){let R=r+1<t.length?At(t[r+1]):null;if(Sm.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Dm.has(t[r])){let j=r+1;j<t.length&&(t[j]==="the"||t[j]==="a"||t[j]==="an")&&(j+=1);let A=j+1<t.length?At(t[j+1]):null;if(Sm.has(t[j])&&A&&A.entityType==="Commit"&&j+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!tt.has(t[r])&&!_l.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let c=l.entityType,u=t[r];r+=1;let d=t.slice(r),f=e.slice(r),p=!1;d.length&&Wn.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&zm(d[0]),g=f.length>0&&Qi(d,f).branches.some(R=>{let{blc:j}=ll(R,R.map(A=>A.toLowerCase()));return j.length&&j.every(A=>Xe[A])}),b=f.length>0?Qi(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(y=b.slice(1).every(A=>{let F=A.map(M=>M.toLowerCase()),T=Tt(F,de);return T&&T.start===0?T.kind===j.kind:!T}))}let w=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),j=Tt(R,de);j&&j.start===0&&(w=b.slice(1).every(A=>{let F=A.map(M=>M.toLowerCase()),T=Tt(F,de);return!!T&&T.start===0&&T.end-T.start===1}))}if(!(a.length||p||m||h||g||y||w))return null;if(!f.length){let R={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:R,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let v=l.placeholder?"what":`which ${u}`,{branches:_,ops:$}=Qi(d,f),x=null,S=[];for(let R=0;R<_.length;R+=1){let j=_[R],A=j.map(ae=>ae.toLowerCase()),F=R===0?"seed":$[R-1],T=ll(j,A);if(T.blc.length&&T.blc.every(ae=>Xe[ae])){S.push({op:F,kind:"qual",filters:T.blc});continue}if(A[0]==="of"||A[0]==="in"){S.push({op:F,kind:"set",ast:{node:"membership",entityType:c,term:j.slice(1).join(" ")}});continue}let M=j,z=Tt(A,de);z?x=j.slice(z.start,z.end):x&&(M=[...x,...j]);let Y=Km(`${v} ${M.join(" ")}`,n,s+1);if(!Y||Y.node==="miss")return{node:"miss",reason:Y&&Y.reason||"a clause in the combination didn't parse"};S.push({op:F,kind:"set",ast:Y})}if(S[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let E;return S.length===1?E=S[0].ast:E={node:"boolean",entityType:c,atoms:S},a.length&&(E={node:"qualifier",filters:a,inner:E,entityType:c}),E}function Km(e,t,n){if(n>Fm)return{node:"miss",reason:"too deep to resolve"};let s=Gt(e),o=s.map(a=>a.toLowerCase()),r=wl(s,o,t,n);if(r)return r;let i=qo(e,t);return i?{node:"clause",clause:i}:null}function Qi(e,t){let n=Object.keys(jo).sort((a,l)=>l.split(" ").length-a.split(" ").length),s=[],o=[],r=0,i=0;for(;i<e.length;){let a=null;for(let l of n){let c=l.split(" ");if(e.slice(i,i+c.length).join(" ")===l){a={c:l,len:c.length};break}}a&&i>r?(s.push(t.slice(r,i)),o.push(jo[a.c]),i+=a.len,r=i):a?(i+=a.len,r=i):i+=1}return s.push(t.slice(r)),{branches:s,ops:o}}function $l(e,t,n,s){let o=Wo[t];if(o&&Es.has(n)){let u=Ke(e,o).filter(d=>s.has(d.object));return ns(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>Es.has(e.byId.get(u)?.class))?[...Ot(t),o]:Ot(t)).flatMap(u=>Ke(e,u)).filter(u=>s.has(u.object)),l=ns(a.map(u=>e.byId.get(u.subject)).filter(Boolean));if(!n||n==="Change")return l;let c=l.filter(u=>u.class===n);return c.length?c:n!=="Module"&&l.some(u=>u.class==="Module")?Sl(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function AS(e,t){let n=new Set($l(e,"touches","Commit",t).map(s=>String(s.label||"").toLowerCase()));for(let s of t)for(let o of e.byId.get(s)?.derived_from||[]){let r=TS.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function Mr(e,t,n){let s=Ot(t).flatMap(o=>Ke(e,o)).filter(o=>n.has(o.subject));return ns(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function ns(e){let t=new Set,n=[];for(let s of e)s&&!t.has(s.id)&&(t.add(s.id),n.push(s));return n}function IS(e,t){let n=Yn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Yn(o.label).startsWith(s))}function ul(e){let t=km.get(e);if(t)return t;let n=new Set;for(let i of Ke(e,"reexports")){n.add(String(i.object).toLowerCase());let a=e.byId.get(i.object);a&&n.add(String(a.label).toLowerCase())}let s=new Set,o=new Set;for(let i of Ke(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of Ke(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},km.set(e,t),t}function Go(e,t){return t?t.class==="Module"?t.id:ul(e).moduleOfSymbol.get(t.id)||null:null}function Ym(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>CS.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Go(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Me(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Lr("defined-in",o.id,"defined in")} ${i}`:"",u=o.class==="Class"?` or "which classes inherit from ${o.label}"`:"";return{text:`${o.label} is ${l} ${a} in this codebase${c} \u2014 try "describe ${o.label}"${u}.`,hit:o,modLabel:i}}function dl(e,t,n){let s=ns(_o.flatMap(o=>Mr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function vl(e,t,n=null){let s=ts(e,t,n);if(!(s.match&&s.tier===1)){let o=IS(e,t);if(o.length)return{kind:"dir",mods:o}}return s.match?{kind:"single",id:s.match.id,entityClass:s.match.class,label:s.match.label}:{kind:"miss"}}function Xm(e,t,n,s,o){let r=o||(()=>!0),i=dl(e,t,s).filter(r);if(i.length||!Qm(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Jm(e,t)){let l=e.byId.get(a);if(!l)continue;let c=dl(e,a,s).filter(r);if(c.length)return{own:i,inherited:c,viaId:a,viaLabel:l.label}}return{own:i,inherited:[],viaId:null,viaLabel:null}}function to(e,t,n){if(!n)return!1;switch(n.via){case"visibility":return String((t.attributes||[]).find(o=>o.key==="visibility")?.value||"public").toLowerCase()===n.value;case"attr":return!!(t.attributes||[]).find(s=>s.key===n.attr)?.value;case"exported":{let s=ul(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=Go(e,t),o=ul(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Xs(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function xl(e){return Ke(e,"inherits")}function pl(e,t){return xl(e).filter(n=>n.object===t).map(n=>n.subject)}function jm(e,t){return xl(e).filter(n=>n.subject===t).map(n=>n.object)}function OS(e,t){let n=new Set,s=[...pl(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of pl(e,o))n.has(r)||s.push(r)}}return n}function Jm(e,t){let n=new Set,s=[...jm(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of jm(e,o))n.has(r)||s.push(r)}}return n}function Qm(e,t){let n=_m.get(e);if(n||(n=new Map,_m.set(e,n)),n.has(t))return n.get(t);let s=xl(e).some(o=>{let r=e.byId.get(o.subject),i=e.byId.get(o.object);return!!r&&!!i&&r.class===t&&i.class===t});return n.set(t,s),s}function Rm(e,t){let n=String(e.label||"").toLowerCase();if(t.every(o=>n.includes(o)))return"label";let s=(e.attributes||[]).map(o=>String(o.value??"").toLowerCase());return t.every(o=>s.some(r=>r.includes(o)))?"attr":null}function Am(e){return e.slice().sort((t,n)=>Tm[n.via]-Tm[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Im(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Zn(n);if(Qn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of no(e.label))if(Qn(o,n,s)<=s)return!0;return!1}function Zm(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...no(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Qm(e,t),i=[];for(let l of s){let c=Rm(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...OS(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Rm(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:Am(i),broad:[]};let a=new Map;for(let l of s)for(let c of Jm(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&Im(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of pl(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Im(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Am([...a.values()])}}function LS(e){return[...Ni(Pi(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function ln(e,t,n){switch(t.node){case"clause":return qt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?LS(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=Zm(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Ot(t.kind).flatMap(o=>Ke(e,o)).map(o=>o.subject));return e.individuals.filter(o=>s.has(o.id)&&(!t.entityType||o.class===t.entityType))}case"forwardComplement":{let s=ts(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Wm(e,t.kind);if(!o)return[];let r=new Set(Mr(e,t.kind,new Set([s.match.id])).map(i=>i.id));return e.individuals.filter(i=>i.class===o&&!r.has(i.id))}case"reverseSet":{let s=new Set(ln(e,t.inner,n).map(o=>o.id));return $l(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(ln(e,t.inner,n).map(o=>o.id));return Mr(e,t.kind,s)}case"prevSet":{let s=n&&n.prev;return Array.isArray(s)?s.map(o=>e.byId.get(o)).filter(Boolean):[]}case"membership":{let s=vl(e,t.term,n&&n.contextId);if(s.kind==="dir"){if(!t.entityType||t.entityType==="Module")return s.mods;let i=new Set(s.mods.map(l=>l.id));return ns(_o.flatMap(l=>Mr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=Xm(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?sh(e,t,n).matches:ln(e,t.inner,n).filter(o=>t.filters.every(r=>to(e,o,Xe[r])));case"boolean":return eh(e,t,n);case"anaphora":return th(e,t,n).matches;default:return[]}}function eh(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=ln(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>to(e,l,Xe[c])),a=l=>o.filters.every(c=>{let u=NS(Xe[c]);return u?to(e,l,u):!to(e,l,Xe[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(ln(e,o.ast,n).map(i=>i.id));if(o.op==="intersection")s=s.filter(i=>r.has(i.id));else if(o.op==="difference")s=s.filter(i=>!r.has(i.id));else if(o.op==="union"){let i=new Set(s.map(a=>a.id));for(let a of ln(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function PS(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=xn(e,o);r&&r.match&&!n.has(r.match.id)&&(n.add(r.match.id),s.push(r.match))}return s.length>=2?s:null}function th(e,t,n){let o=PS(e,t.candidateTerms);if(!o){let d=n&&n.prev;if(!Array.isArray(d)||!d.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=d.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(d=>i.filters.every(f=>to(e,d,Xe[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=xn(e,i.clause.object);if(!d.match)r=[];else{let f=Wo[i.clause.kind],p=[...Ot(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>Ke(e,h)).filter(h=>h.object===d.match.id).map(h=>h.subject));r=r.filter(h=>m.has(h.id))}}let a=d=>d.length&&d.every(f=>f.class===d[0].class)?d[0].class:null,l=i&&i.type==="entity"?i.entityType:a(o),c=r.length?a(r):l;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:c,matches:[]};let u=Ur(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function nh(e,t,n){let s=n.kind==="*"?MS:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of Ke(e,r)){let a=i.subject===t.id,l=i.object===t.id;if(n.dir==="out"&&a){if(n.filter){let c=e.byId.get(i.object);if(!c||c.class!==n.filter)continue}o+=1}else(n.dir==="in"&&l||n.dir==="both"&&(a||l))&&(o+=1)}return o}function FS(e){let t=e.individuals.filter(s=>s.class==="Commit"),n=s=>String((s.attributes||[]).find(o=>o.key==="date")?.value||"");return t.sort((s,o)=>n(o).localeCompare(n(s))),{compositeKind:"recentCommits",matches:t}}function zS(e,t){let{op:n,pivotRaw:s}=t,o=u=>String((u.attributes||[]).find(d=>d.key==="date")?.value||"").slice(0,10),r=null,i=null,a=null;if(DS.test(s))r=s;else{let{match:u,ambiguous:d}=xn(e,s,{expectedClass:"Commit"});u&&!d&&u.class==="Commit"&&o(u)&&(i=u.id,a=u.label,r=o(u))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let l=e.individuals.filter(u=>u.class==="Commit"&&u.id!==i&&o(u)).filter(u=>{let d=o(u);return n==="since"?d>=r:n==="before"?d<r:n==="after"?d>r:d===r}).sort((u,d)=>o(d).localeCompare(o(u))),c=[];return l.length&&c.push({kind:"set",class:"Commit",label:`${l.length} commit${l.length===1?"":"s"} ${n} ${s}`,ids:l.map(u=>u.id),attrs:{count:l.length,op:n,...i?{pivot:i}:{}},lane:"commitFilter"}),i&&c.push({kind:"event",class:"Commit",label:a,ids:[i],attrs:{date:r},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:l,referents:c}}function US(e,t,n){let s=ln(e,t.inner,n),o=new Set(s.map(a=>a.id));if(!o.size)return{compositeKind:"temporal",matches:[],entityType:t.entityType,innerCount:0};let r=$l(e,"touches","Commit",o),i=a=>String((a.attributes||[]).find(l=>l.key==="date")?.value||"");return r.sort((a,l)=>i(l).localeCompare(i(a))),{compositeKind:"temporal",matches:r,entityType:t.entityType,innerCount:s.length}}function BS(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(Ke(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!Xs(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:nh(e,a,t.metric)})).sort((a,l)=>t.extreme==="most"?l.score-a.score:a.score-l.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?Ur(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function sh(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(h=>to(e,m,Xe[h])):null,a=m=>Ur(r,m,"membership"),l=vl(e,o.term,n&&n.contextId);if(l.kind==="dir"){let m;if(!r||r==="Module")m=l.mods;else{let h=new Set(l.mods.map(g=>g.id));m=ns(_o.flatMap(g=>Mr(e,g,h))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=Xm(e,l.id,l.entityClass,r,i),f=!c.length&&u.length>0,p=f?u:c;return{compositeKind:"membership",entityType:r,matches:p,inheritedNotOwn:f,viaLabel:d,ownerLabel:l.label,referents:a(p)}}function WS(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=xn(e,o,{expectedClass:"Module"});if(!a.match)return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMiss:!0,matches:[]};r=a.match}if(s){let a=xn(e,s,{expectedClass:n}),l=!r||a.match&&Go(e,a.match)===r.id,c=a.match&&l;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:c?[a.match]:[]}}let i=r?Sl(e,new Set([r.id]),n):e.individuals.filter(a=>a.class===n);return{compositeKind:"exists",entityType:n,term:null,scopeModule:o,scopeMatch:r,matches:i}}function GS(e,t,n){let s=Go(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||dl(e,n.id).some(o=>o.id===t.id)}function qS(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=ts(e,s,n.contextId);if(a.unresolvedPronoun)return{compositeKind:"qualCheck",qualCheckMiss:"pronoun",term:s,matches:[]};if(!a.match)return{compositeKind:"qualCheck",qualCheckMiss:"unresolved",term:s,matches:[]};if(i){let d=vl(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!GS(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let l=to(e,a.match,Xe[o]),c=r?!l:l,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:c,matches:[a.match],referents:u}}function VS(e,t,n){let s=xn(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=ln(e,{node:"allOfClass",entityType:t.entityType},n),r=eh(e,t.complement,n),i=r.length===0;return{compositeKind:"universal",entityType:t.entityType,kind:t.kind,object:s.match.label,holds:i,total:o.length,counter:r,matches:i?o:r}}function HS(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(ln(e,t.inner,n).map(s=>s.id));if(t.node==="clause"&&t.clause?.shape==="reverse"&&t.clause.kind==="touches"&&t.clause.entityType==="Commit"){let{objMatch:s,ambiguous:o}=qt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function KS(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return WS(e,t);if(t.node==="qualCheck")return qS(e,t,n);if(t.node==="universal")return VS(e,t,n);if(t.node==="count"){let i=HS(e,t.base,n);return i?{compositeKind:"count",count:AS(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:ln(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:ln(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return Ak(e,t);if(t.node==="superlative")return BS(e,t);if(t.node==="temporal")return US(e,t,n);if(t.node==="recentCommits")return FS(e);if(t.node==="commitFilter")return zS(e,t);if(t.node==="anaphora")return th(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return sh(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=Zm(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:i.length?i:a,broad:!i.length&&a.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let s=ln(e,t,n),o=t.entityType||null,r=Ur(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function oh(){return'compositional queries also work: "which functions call X and call Y", "what calls something that imports X", "public methods of X", "list functions" / "show me the classes", "how many classes", "which module has the most imports", "find me the payment class", or (after a listing) "which of those are tested"'}function YS(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=zr(e);return n?`${t} in ${n}`:t}function fl(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(fl):Array.isArray(e.filters)&&e.filters.some(t=>Xe[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(fl)}function XS(e,t){return!["Function","Method"].includes(t)||!fl(e)?null:"This index records tests edges module to module, so it holds no function-grain coverage to filter on \u2014 ask whether the module a function lives in is tested instead."}function JS(e,t,n){if(t.compositeMiss)return t.reason==="no-prev"?{content:'"those"/"them" needs a previous answer to refer to \u2014 ask a listing question first, then follow up.',miss:!0,ambiguous:!1}:{content:`couldn't compile this compositional question${t.reason?` (${t.reason})`:""}. ${oh()}.`,miss:!0,ambiguous:!1};if(t.compositeKind==="exists"){if(t.scopeMiss)return{content:`no module matching "${t.scopeModule}" found in the index.`,miss:!0,ambiguous:!1};let s=Me(t.entityType,1),o=Me(t.entityType,2),r=t.scopeMatch?` in ${t.scopeMatch.label}`:"";if(t.term){if(!t.matches.length)return{content:`No \u2014 no ${s} named "${t.term}" found${r}.`,miss:!0,ambiguous:!1};let i=t.matches[0],a=zr(i),l=i.class==="Module"?"":a?`, ${Lr("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${vs(t.matches)}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 no ${o} found${r}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="qualCheck"){if(t.qualCheckMiss==="pronoun")return{content:`"${t.term}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="unresolved")return{content:`couldn't find "${t.term}" in the index to check.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="scope")return{content:`couldn't find "${t.scope}" in the index to check inside.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="outsideScope")return{content:`No \u2014 ${t.subjectLabel} isn't in ${t.scopeLabel}.`,miss:!0,ambiguous:!1};let s=t.subject.label,o=t.negated?`not ${t.qualifier}`:t.qualifier,r=t.negated?t.qualifier:`not ${t.qualifier}`;return{content:`${t.holds?"Yes":"No"} \u2014 ${s} is ${t.holds?o:r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="universal"){if(t.universalMiss==="unresolved")return{content:`couldn't find "${t.object}" in the index to check.`,miss:!0,ambiguous:!1,matches:[]};let s=Me(t.entityType,t.total),o=WE(t.kind);return t.holds?{content:`Yes \u2014 all ${t.total} ${s} ${o} ${t.object}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 ${t.counter.length} of ${t.total} ${s} do not ${o} ${t.object}: ${vs(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Me(t.entityType,t.count):t.count===1?"result":"results";return{content:`${t.count} ${s}.`,miss:!1,ambiguous:!1,matches:[]}}if(t.compositeKind==="list"){if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>He?` \u2014 narrow with "${Me(t.entityType,2)} in <module>"`:"";return{content:`${vs(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=$n(t.asked),o=Bs[t.relation].nouns[1];return t.pairs.length?{content:`${t.pairs.map(i=>`${i.subject.label||i.subject.id} ${i.reads} ${i.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]}}if(t.compositeKind==="membership"){if(!t.matches.length)return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${xs(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Me(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${vs(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${vs(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Me(t.entityType,1);if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?YS(t.matches[0]):vs(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Me(t.entityType,2)}: ${o}.`,miss:!1,ambiguous:!1,matches:t.matches,relatedNotExact:!0}:{content:`${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="recentCommits"){if(!t.matches.length)return{content:"no commits recorded in this index.",miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,Wt).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Wt?` \u2026+${t.matches.length-Wt} more`:"";return{content:`${t.matches.length} recent commit(s): ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="commitFilter"){if(!t.pivotResolved)return{content:`"${t.pivotRaw}" isn't a recognized date (yyyy-mm-dd) or a known commit \u2014 try "what changed since 2026-06-01" or "what changed before <commit>".`,miss:!0,ambiguous:!1,matches:[]};if(!t.matches.length)return{content:`no commits recorded ${t.op} ${t.pivotRaw}.`,miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,Wt).map(i=>{let a=s(i).slice(0,10),l=(i.attributes||[]).find(c=>c.key==="message")?.value||"";return`${i.label}${a?` (${a})`:""}${l?` \u2014 ${l}`:""}`}),r=t.matches.length>Wt?` \u2026+${t.matches.length-Wt} more`:"";return{content:`${t.matches.length} commit(s) changed ${t.op} ${t.pivotRaw}: ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="superlative"){if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} to rank in this index.`,miss:!0,ambiguous:!1};let s=t.extreme==="most"?"the most":"the fewest",o=t.matches.length>1?` (${t.matches.length}-way tie)`:"";return{content:`${vs(t.matches)} \u2014 ${s} ${t.metricNoun} (${t.score})${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="temporal"){let s=t.innerCount||0,o=t.entityType?Me(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:`nothing in the index matches the inner set, so there is no change history to date. ${xs(n)}`,miss:!0,ambiguous:!1,matches:[]};if(!t.matches.length)return{content:`no recorded commit touched the ${s} ${o} in that set in this index. ${xs(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let l=(i.attributes||[]).find(d=>d.key==="message")?.value||"",c=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${c}${l?` ("${l}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=XS(e,t.entityType)||xs(n);return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${vs(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function El(){return`"which <functions|classes|modules> <imports|calls|uses|inherits from|tests> <name>" or "what does <name> <import|call|export>" or "what uses <name>" or "where is <name> defined" / "where is <name> mentioned" or "when did <name> change" or "which commits touched <name>" or "which changes touch commit <sha>"/"what did commit <sha> touch" (a commit's own changes) or plainly "what calls this" (about a selected node) or "what does <term> mean"/"what is a <ClassName>" (about the graph's own vocabulary). `+oh()}function xs(e=null){return e&&Bc(e)===0?"This store holds no code index, so it records no modules or commits to look through.":`Try "who touched <a module that actually has commits>" or "/describe <module>" to see what's in the index.`}function no(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function ea(e){if(e.length<5)return e;let t=e.replace(/(ing|ers|ors|er|or)$/,"");return t===e?e:t.length>=3&&t[t.length-1]===t[t.length-2]?t.slice(0,-1):t}function rh(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function QS(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Nr(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(g=>g.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let g=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${g}`)||String(y.label).toLowerCase().startsWith(g)));if(b.length===1)return{match:b[0],candidates:[],tier:1,ambiguous:!1};if(b.length>1)return{match:b[0],candidates:b.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(g=>String(g.label).toLowerCase()===o||String(g.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let g of e.relations)for(let b of g.edges)if(String(b.object).toLowerCase()===l){c=b.object;break e}if(c&&!n)return{match:{id:c,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(g=>g.trim()).filter(Boolean);if(u.length>1){let g=new Set;for(let b of u){let y=Nr(e,b,{expectedClass:n});y.match&&!y.ambiguous&&g.add(y.match.id)}if(g.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],f=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(f){let g=o.split(".").pop();for(let b of r){let y=String(b.label||"").toLowerCase();b.class==="Module"?y.split("/").pop()===o&&d.push({ind:b,score:1e3-Math.abs(y.length-o.length)}):y.includes(o)?d.push({ind:b,score:2e3-Math.abs(y.length-o.length)}):y.endsWith(`.${g}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let g=[...no(s)],b=o.split(/\s+/).find($=>$.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,v=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,_=v?QS(s):null;for(let $ of r){let x=String($.label||"").toLowerCase(),S=x.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(S===o){d.push({ind:$,score:5e3});continue}if(o.length>=4&&(S.startsWith(o)||S.endsWith(o))){d.push({ind:$,score:4e3-Math.abs(S.length-o.length)});continue}if(v){let j=rh($.label);if(j&&j===_){d.push({ind:$,score:5e3});continue}let A=/[/_-]/.test($.label)||/\.[a-z0-9]+$/i.test(String($.label||""));if(j&&A&&_.length>=4&&j.includes(_)){d.push({ind:$,score:2e3-Math.abs(j.length-_.length)});continue}}if($.class==="Module"){let j=ea(o);if(j!==o&&j===ea(S)){let A=Zn(o);if(Qn(S,o,A)>A){d.push({ind:$,score:3e3-Math.abs(S.length-o.length)});continue}}}if(o.length>=4&&x.includes(o)){d.push({ind:$,score:1e3-Math.abs(x.length-o.length)});continue}let E=no($.label),R=g.filter(j=>E.has(j)).length;R>0&&(!y||E.has(y))&&d.push({ind:$,score:R/g.length*sl})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter(v=>v.score===g.score),w=g.score>=sl?b.filter(v=>v.score>=sl):b;return{match:g.ind,candidates:w.slice(0,4).map(v=>v.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),m=null,h=!p&&typeof Ks=="function"?Ks(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(h.length){let[g,...b]=h,y=e.byId.get(g.id);if(y){let w=b.filter(v=>v.score===g.score);if(m={match:y,candidates:b.slice(0,4).map(v=>e.byId.get(v.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&g.via!=="spell")return m}}if(!i&&o.length>=4){let g=Zn(o),b=g+1,y=[];for(let w of r){let v=Qn(String(w.label||"").toLowerCase(),o,g);if(v>0)for(let _ of no(w.label)){if(v<=0)break;v=Math.min(v,Qn(_,o,g))}v<b?(b=v,y=[w]):v===b&&v<=g&&y.push(w)}if(b<=g&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=g&&y.length>1&&!m){let[w,...v]=y;return{match:w,candidates:v.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function ol(e,t){let n=rh(t),s=[...no(t)],o=[];for(let r of no(e))n.includes(r)||s.some(i=>ea(i)===ea(r))||Zi.has(r)||ch.has(r)||o.push(r);return o}function Xi(e,t){if(!e?.match||e.tier!==3||e.matchedVia)return e;if(e.ambiguous){let s=[e.match,...e.candidates||[]],o=s.map(r=>new Set(ol(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),ol(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:$n(s.slice(0,4).map(r=>r.label))}:e}let n=ol(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function xn(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(ZS,"").trim(),i=r.match(ek);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=Xi(Nr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Xi(Nr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Xi(Nr(e,t,n),t)}return Xi(Nr(e,t,n),t)}function ts(e,t,n){if(Gs.includes(String(t||"").trim().toLowerCase())){if(!n)return{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0};let s=e.byId.get(n);return s?{match:s,candidates:[],tier:1,ambiguous:!1}:{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0}}return xn(e,t)}function Sl(e,t,n){let s=[];for(let o of Ke(e,"defines")){if(!t.has(o.subject))continue;let r=e.byId.get(o.object);r&&r.class===n&&s.push(r)}return s}function tk(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||Es.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>Ke(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&Es.has(n)&&(l=l.filter(c=>c.class===n)),{matches:l,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function rk(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&kl.has(Cm(s.label))).map(s=>({ind:s,named:n.has(Cm(s.label))?1:0,depth:String(s.label).split("/").length,fixture:ok(s.label)?1:0})).sort((s,o)=>o.named-s.named||s.depth-o.depth||s.fixture-o.fixture||String(s.ind.label).localeCompare(String(o.ind.label))).map(s=>s.ind)}function ik(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function jl(e){return(e?.attributes||[]).find(t=>t.prop===ak)?.value||null}function ck(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Uo(e)} ${e} in this graph's vocabulary`}function qt(e,t,{contextId:n=null,prev:s=null,pinnedObjMatch:o=null}={}){if(!t)return{matches:[],objMatch:null,candidates:[],traversal:null,ambiguous:!1};if(t.node)return KS(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(M=>{let z=qt(e,M,{contextId:n,prev:s});return{parsed:M,result:z,rendered:vn(M,z,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:T}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let T=String(t.object||"").trim(),M=T.toLowerCase(),z=(e.individuals||[]).find(Y=>{if(!jl(Y))return!1;if(String(Y.label).toLowerCase()===M)return!0;let ae=(Y.attributes||[]).find(Z=>Z.key==="token")?.value;return ae&&String(ae).toLowerCase()===M});if(!z){let Y=Ym(e,T);return Y?{matches:[Y.hit],objMatch:Y.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:Y.text,traversal:`schema lookup for "${T}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}return{matches:[z],objMatch:z,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}if(r==="mentions"){let T=String(t.object||"").trim();return{matches:(typeof Ks=="function"?Ks(e.proseIndex,T):[]).map(Y=>e.byId.get(Y.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${T}"`}}if(r==="where"&&nk.test(String(t.object||"").trim())){let T=rk(e,t.object);return{matches:T,objMatch:T[0]||null,candidates:T.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...kl].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!ik(r,i,a))return{matches:[],objMatch:null,candidates:[],ambiguous:!1,unsupportedModifier:!0,traversal:`modifier "${t.modifier}" requested for a "${i}" query \u2014 no closure traversal exists for this combination yet`};if(r==="ask"){let T=ts(e,t.subject,n),M=ts(e,t.object,n);if(!T.match||!M.match||T.ambiguous||M.ambiguous)return{matches:[],objMatch:M.match,candidates:M.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(T.unresolvedPronoun||M.unresolvedPronoun)};let[z,Y]=[T.match,M.match];i==="touches"&&Y.class==="Commit"&&z.class!=="Commit"&&([z,Y]=[Y,z]);let ae=Wo[i],Z=[...new Set(ae?[...Ot(i),ae]:Ot(i))],D=Z.flatMap(U=>Ke(e,U)).filter(U=>U.subject===z.id&&U.object===Y.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:M.match,subjMatch:T.match,candidates:[],traversal:`${Z.join("+")} edge from ${z.label} to ${Y.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=ts(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=ts(e,t.altObject,n),M=!!l.match&&!l.ambiguous,z=!!T.match&&!T.ambiguous;!M&&z?l=T:M&&z&&l.match.id!==T.match.id&&(l={...l,ambiguous:!0,candidates:[T.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let T=Y=>Y.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),M=T(String(t.object||"").trim().toLowerCase()),z=(e.individuals||[]).find(Y=>{if(Y.class!=="Module"||Y.id===l.match.id)return!1;let ae=String(Y.label||"").toLowerCase().split("/").pop();return ae!==T(ae)&&T(ae)===M});z&&(l={...l,ambiguous:!0,candidates:[z,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:m,nearestLabel:h}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:m,nearestLabel:h};if(d){let M=ns([c,...u||[]]).slice(0,He).map(z=>{let Y=qt(e,t,{contextId:n,prev:s,pinnedObjMatch:z});return{candidate:z,result:Y,rendered:vn(t,Y,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:M}}if(r==="where"){let T=(c.attributes||[]).find(M=>M.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:T,traversal:T?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let T=Y=>String((Y.attributes||[]).find(ae=>ae.key==="date")?.value||""),M;if(c.class==="Commit")M=[c];else{let Y=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),ae=new Set;M=[];for(let Z of Y){if(ae.has(Z.subject))continue;ae.add(Z.subject);let D=e.byId.get(Z.subject);D&&D.class==="Commit"&&M.push(D)}M.sort((Z,D)=>T(D).localeCompare(T(Z)))}let z=M.length&&T(M[0])?[{kind:"event",class:"Commit",label:M[0].label,ids:[M[0].id],attrs:{date:T(M[0]).slice(0,10)},lane:"when"}]:[];return{matches:M,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:z,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let T=Z=>String((Z.attributes||[]).find(D=>D.key==="date")?.value||""),M=["touches","touchesSymbol"].flatMap(Z=>Ke(e,Z)).filter(Z=>Z.object===c.id),z=new Set,Y=[];for(let Z of M){if(z.has(Z.subject))continue;z.add(Z.subject);let D=e.byId.get(Z.subject);D&&D.class==="Commit"&&Y.push(D)}Y.sort((Z,D)=>T(D).localeCompare(T(Z)));let ae=Y.length&&T(Y[0])?[{kind:"event",class:"Commit",label:Y[0].label,ids:[Y[0].id],attrs:{date:T(Y[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:Y,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:ae,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return tk(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=Wo[i],z=!!(T&&c.class&&Es.has(c.class))?[...new Set([...Ot(i),T])]:Ot(i);if(a&&a!=="Change"){let G=Bm(e,z),I=nl[a];if(G.size&&!G.has(a)&&!(I&&G.has(I)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...G],traversal:`${z.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${es(a)})`}}let ae=z.flatMap(G=>Ke(e,G)).filter(G=>G.subject===c.id).map(G=>e.byId.get(G.object)).filter(Boolean),Z=ns(ae),D=Z,U="";if(a&&a!=="Change"){D=Z.filter(I=>I.class===a);let G=nl[a];if(!D.length&&G){let I=Z.filter(L=>L.class===G);I.length&&(D=I,U=`, widened to ${G} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${z.join("+")} edges where subject = ${c.label}${U}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:No(e,c,{maxDepth:Om}).flat().map(z=>e.byId.get(z.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Om})`};let g=Wo[i]||Ot(i).find(T=>Mm.has(T))||null,b=!!(c.class&&Es.has(c.class));if(g&&(Es.has(a)||b)){let T=Ke(e,g).filter(U=>U.object===c.id),M=ns(T.map(U=>e.byId.get(U.subject)).filter(Boolean)),z=!a||a==="Change"?M:M.filter(U=>U.class===a),Y="",ae=nl[a];if(!z.length&&ae){let U=M.filter(G=>G.class===ae);U.length&&(z=U,Y=`, widened to ${ae} subjects (no ${a} recorded)`)}let Z=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!Ke(e,"contains").some(U=>U.subject===c.id),D=Z?e.byId.get(Go(e,c)||""):null;if(z.length||!(Z&&D))return{matches:z,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${Y}`,ambiguous:d,matchedVia:p}}let y=c,w=u,v=d,_=p,$="",x=Wm(e,i);if(x&&y.class&&y.class!==x){let T=xn(e,t.object,{expectedClass:x});if(T.match&&!T.ambiguous)y=T.match,w=T.candidates,v=T.ambiguous,_=T.matchedVia;else if(x==="Module"){let M=Go(e,y),z=M&&e.byId.get(M);if(z)$=`, refined from ${y.label} to its containing module`,y=z;else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${es(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${es(x)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${es(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${es(x)})`}}let S=Ot(i).flatMap(T=>Ke(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(S=S.concat(Ot(i).flatMap(T=>Ke(e,T)).filter(T=>T.subject===y.id).map(T=>({...T,subject:T.object,object:T.subject}))));let E="";if(!S.length&&y.class){let T=`ext:${String(y.label).toLowerCase()}`;S=Ot(i).flatMap(M=>Ke(e,M)).filter(M=>String(M.object).toLowerCase()===T),S.length&&(E=` (by name, via unresolved ${T} references)`)}let R=[],j=new Set;for(let T of S){let M=e.byId.get(T.subject);M&&!j.has(M.id)&&(j.add(M.id),R.push(M))}let A,F="";if(!a||a==="Change")A=R;else{let T=R.filter(M=>M.class===a);if(T.length)A=T;else if(a!=="Module"&&R.some(M=>M.class==="Module")){let M=new Set(R.filter(z=>z.class==="Module").map(z=>z.id));A=Sl(e,M,a),F=`, then ${es(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Ot(i).join("+")} edges where object = ${y.label}${E}${F}${$}`,ambiguous:v,matchedVia:_}}function zr(e){if(e.class==="Module")return e.label;let t=(e.attributes||[]).find(s=>s.key==="site")?.value;if(t)return String(t).split(":")[0];let n=String(e.id||"").match(/^fn:(.+)#/);return n?n[1]:null}function rl(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function lk(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function $n(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Pr(e){let t=e.object??e.subject??"?";return`${e.entityType?Me(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function ml(e){return vr[e]?.bare||e}function uk(e){let t=ml(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function dk(e){if(!Array.isArray(e.atoms)||e.atoms.length!==2)return null;let[t,n]=e.atoms;if(t.op!=="seed"||t.ast?.node!=="allOfClass"||n.op!=="difference")return null;let s=Me(e.entityType,2);if(n.kind==="qual")return`${s} that are not ${n.filters.join(" and not ")}`;if(n.kind!=="set"||!n.ast)return null;if(n.ast.node==="existsEdge")return`${s} that do not ${ml(n.ast.kind)} anything`;let o=n.ast.node==="clause"?n.ast.clause:n.ast;if(!o||o.node||!o.kind)return null;let r=o.object??o.subject;return r==null?null:`${s} that do not ${ml(o.kind)} ${JSON.stringify(String(r))}`}function ih(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Pr).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>ih(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?dk(e):null)||`a compositional query (${e.node})`,machine:`composite(${e.node})`};let t=r=>JSON.stringify(String(r??"")),n=[];e.kind&&n.push(e.kind),e.negated&&n.push("negated"),e.entityType&&n.push(`entityType=${e.entityType}`),e.modifier&&e.modifier!=="direct"&&n.push(`modifier=${e.modifier}`),e.subject!=null&&n.push(`subject=${t(e.subject)}`),e.object!=null&&n.push(t(e.object));let s=`${e.shape}(${n.join(", ")})`,o;if(e.shape==="ask")o=`does "${e.subject}" ${e.negated?"not ":""}${eo(e.kind)} "${e.object}"?`;else if(e.shape==="meta")o=`what does "${e.object}" mean, in this graph's own vocabulary?`;else if(e.shape==="mentions")o=`where is "${e.object}" mentioned?`;else if(e.shape==="where")o=`where is "${e.object}" defined?`;else{let r=e.entityType?Me(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${eo(e.kind)}`:`${r}${eo(e.kind)} "${e.object}"`}return{english:o,machine:s}}function vn(e,t,n=null){let s=ah(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function ah(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${El()}`,miss:!0,ambiguous:!1};if(e.node)return JS(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
|
|
55
55
|
${t.branches.map((l,c)=>`${c+1}) as ${Pr(l.parsed)}: ${l.rendered.content}`).join(`
|
|
56
56
|
`)}
|
|
57
|
-
(ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Pr),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${Pr(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Pr),candidateParses:e.candidates};if(t.unresolvedPronoun)return{content:`"${e.object??e.subject}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.unsupportedModifier)return{content:`the "${e.modifier}" modifier isn't supported for "${e.kind}" queries yet \u2014 only imports/calls (module-level) have a transitive closure today.`,miss:!0,ambiguous:!1};if(t.wrongGrainMiss){let i=t.objMatch.class?Me(t.objMatch.class,1):"term",a=Me(t.wantClass,1);return{content:`"${e.object}" resolved to the ${i} ${t.objMatch.label}, but this question needs a ${a} \u2014 no ${a} named "${e.object}" was found in the index.`,miss:!0,ambiguous:!1}}if(t.forwardGrainMiss){let i=t.wantClasses.map(a=>Me(a,2));return{content:`${t.objMatch.label}'s "${eo(e.kind)}" relation in this index never produces ${Me(e.entityType,2)} \u2014 only ${
|
|
57
|
+
(ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Pr),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${Pr(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Pr),candidateParses:e.candidates};if(t.unresolvedPronoun)return{content:`"${e.object??e.subject}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.unsupportedModifier)return{content:`the "${e.modifier}" modifier isn't supported for "${e.kind}" queries yet \u2014 only imports/calls (module-level) have a transitive closure today.`,miss:!0,ambiguous:!1};if(t.wrongGrainMiss){let i=t.objMatch.class?Me(t.objMatch.class,1):"term",a=Me(t.wantClass,1);return{content:`"${e.object}" resolved to the ${i} ${t.objMatch.label}, but this question needs a ${a} \u2014 no ${a} named "${e.object}" was found in the index.`,miss:!0,ambiguous:!1}}if(t.forwardGrainMiss){let i=t.wantClasses.map(a=>Me(a,2));return{content:`${t.objMatch.label}'s "${eo(e.kind)}" relation in this index never produces ${Me(e.entityType,2)} \u2014 only ${$n(i)}.`,miss:!0,ambiguous:!1}}if(e.shape==="meta"){if(!t.objMatch)return{content:`"${e.object}" isn't a term in this graph's own vocabulary (no matching class or predicate).`,miss:!0,ambiguous:!1};if(t.metaCodeClass)return{content:t.metaFallbackText,miss:!1,ambiguous:!1,matches:t.matches};let i=jl(t.objMatch)||"";return{content:`${t.objMatch.label} is ${ck(t.objMatch.class)}: ${i}`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.mentionsShape){if(!t.matches.length)return{content:`"${e.object}" is not mentioned in any indexed identifier or doc-comment prose.`,miss:!0,ambiguous:!1};let i=t.matches.slice(0,He).map(l=>`${l.label} (${Me(l.class,1)})`),a=t.matches.length>He?`, \u2026and ${t.matches.length-He} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${$n(i)}${a}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.entryPointShape){if(!t.matches.length)return{content:`no entry-point module found in the index \u2014 no module basename matches ${$n([...kl])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,He).map(d=>d.label),c=a.length>He?`, \u2026and ${a.length-He} more`:"",u=a.length?` \u2014 also matched: ${$n(l)}${c}`:"";return{content:`ranked ${t.matches.length} entry-point match${t.matches.length===1?"":"es"}; top: ${i.label}${u}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.objMatch&&(!t.candidates||t.candidates.length===0)&&e.shape!=="ask"){let i=String(e.object||"").trim(),a=e.entityType&&al[e.entityType]?Me(e.entityType,1):"module",l=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let c=$n(t.unplacedWords.map(f=>`"${f}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${l} matching "${e.object}" found in the index. ${c} ${u} nothing here, and reading past ${t.unplacedWords.length===1?"it":"them"} would answer a different question.${d}`,miss:!0,ambiguous:!1,candidates:[]}}return{content:`no ${l} matching "${e.object}" found in the index. ${xs(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(b=>b.class==="Commit")){let b=w=>!["Commit","Session","Source","Utterance"].includes(w?.class),y=i.filter(b);y.length&&(i=y,a?.length&&(a=a.filter(w=>b(w.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let b=String(e.object||"").toLowerCase(),y=new Set(Rn(String(e.object||"")).filter(x=>x.length>=3)),w=new Set(i.map(x=>x.id)),v=null,_=0,$=1/0;if(y.size)for(let x of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(x.class)||w.has(x.id))continue;let S=Rn(String(x.label)).filter(R=>y.has(R)).length;if(!S||S<_)continue;let E=Qn(String(x.label).toLowerCase(),b,8);(S>_||E<$)&&(v=x,_=S,$=E)}if(v&&(i=[...i,v],a)){let x=qt(n,e,{pinnedObjMatch:v});a=[...a,{candidate:v,result:x,rendered:vn(e,x,n)}]}}let l=i.length&&i.every(b=>b.class===i[0].class)?i[0].class:null,c=l?al[l]?Me(l,1):es(l):"module",u=i.slice(0,He).map(b=>b.label),d=i.length>He?`, \u2026and ${i.length-He} more`:"",f=`"${e.object}" matches more than one ${c} ambiguously \u2014 did you mean ${$n(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,p=String(e.object||""),m=p?new RegExp(`\\b${Qe(p)}\\b`,"gi"):null,h=b=>{let y=String(b.candidate.label||"");return!m||!y?b.rendered.content:b.rendered.content.split(y).map(w=>w.replace(m,y)).join(y)};return{content:a&&a.length?`${f}
|
|
58
58
|
${a.map((b,y)=>`${y+1}) ${b.candidate.label}: ${h(b)}`).join(`
|
|
59
|
-
`)}`:f,miss:!1,ambiguous:!0,candidates:i.map(b=>b.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=String(t.site||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(a){let c=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${sl(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=zr(i);return l?{content:`${sl(i)} is defined in ${l} (no line span recorded in this index).`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${vs(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(f=>f.key==="date")?.value||"";if(!l)return{content:`commit ${a.label} touched ${i}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1};let c=(a.attributes||[]).find(f=>f.key==="message")?.value||"",u=String(l).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Lr("is-dated",a.id,"is dated")} ${u}${c?` ("${c}")`:""}.`,miss:!1,ambiguous:!1,matches:t.matches};let d=t.matches.length-1;return{content:`${i} was last touched by commit ${a.label} on ${u}${c?` ("${c}")`:""}${d?`; ${d} earlier commit${d===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whoLastShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${vs(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!l)return{content:`commit ${a.label} last touched ${i}, but this index records no commit author \u2014 regenerate the graph to attach mgx:commitAuthor.`,miss:!0,ambiguous:!1};let c=t.matches.length-1;return{content:`${i} was last touched by ${l} (commit ${a.label})${c?`; ${c} earlier commit${c===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.commitSubject){let i=`commit ${t.objMatch.label}`;if(!t.matches.length)return{content:`${i} touched nothing recorded in the index.`,miss:!0,ambiguous:!1};let a=new Map;for(let u of t.matches.slice(0,He)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let l=[...a.entries()].map(([u,d])=>`${Me(u,d.length)} ${wn(d)}`),c=t.matches.length>He?`; \u2026and ${t.matches.length-He} more`:"";return{content:`${i} touched ${l.join("; ")}${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(e.shape==="ask"){if(!t.objMatch||!t.subjMatch)return{content:"couldn't resolve one of the terms in this question.",miss:!0,ambiguous:!1};let i=`${t.traversal}.`,a=`no ${e.kind} edge found from ${t.subjMatch.label} to ${t.objMatch.label}.`,l=e.negated?a:i,c=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?l:c}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(_o.includes(e.kind)&&n&&t.objMatch)for(let l of _o){if(l===e.kind)continue;let c={...e,kind:l},u=Wt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return nh(c,u,n)}return{content:`${t.objMatch.label} has no ${eo(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}if(e.kind==="tests"&&!e.entityType)return{content:`No tests cover ${String(e.object||"").replace(OE,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Me(e.entityType||"Module",2),a=t.objMatch&&Gs.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${eo(e.kind)} ${a}. ${vs(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${ZS(e.kind)} by ${t.matches[0].label}.`,miss:!1,ambiguous:!1,matches:t.matches};if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!xs.has(i.class))){let i=t.matches.slice(0,He).map(l=>l.class==="Commit"?QS(l):l.label),a=t.matches.length>He?`, \u2026and ${t.matches.length-He} more`:"";return{content:i.join(" and ")+a+".",miss:!1,ambiguous:!1,matches:t.matches}}let s=new Map;for(let i of t.matches.slice(0,He)){let a=zr(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(sl(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=wn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>He?` \u2026and ${t.matches.length-He} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function oh(e){if(e.length<4||sk.has(e))return null;let t=Xn(e),n=t+1,s=null,o=!1;for(let r of nk){let i=Yn(e,r,Math.min(n,t));i<n?(n=i,s=r,o=!1):i===n&&i<=t&&r!==s&&(o=!0)}return n<=t&&!o?s:null}function Tm(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!Sl(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=oh(n);return!!s&&s!==n&&!!Be[s]}function rh(e,t,n){if(!t)return!1;if(t.ambiguousParse)return"ambiguous";if(t.node)return t.node!=="miss";if(t.shape==="meta"||t.shape==="mentions")return!0;let s=Qn(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Tm(s,t.object))return!1;if(t.shape==="ask"){let o=Qn(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Tm(o,t.subject))}return!0}function ok(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return $p.includes(t)}function rk(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ar(Zs(String(t||""))),i=Bt(r);if(!i.length)return null;let a=[],l=[],c=j=>{let A=$n(e,j);return!!A.match&&A.tier!=null&&A.tier<=2},u=j=>{let A=$n(e,j);return!!A.match&&A.tier!=null&&A.tier<=3},d=j=>{let A=String(j||"").trim().toLowerCase();return Gs.includes(A)?!0:Bt(A).some(F=>{let T=F.toLowerCase();return!Qi.has(T)&&!fl.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=j=>{let A=j.join(" "),F=Dr(A,{nlp:n});return rh(e,F,s)!==!0||F&&!F.node&&f.has(F.shape)&&(F.object!=null&&!d(F.object)||F.shape==="ask"&&F.subject!=null&&!d(F.subject))||yn(F,Wt(e,F,{contextId:s,prev:o}),e).miss?null:{parsed:F,text:A}},m=j=>({parsed:j.parsed,from:r,to:j.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let j=-1;for(let T=0;T<i.length;T+=1){let M=i[T].toLowerCase();if(kl.has(M)&&!Qi.has(M)&&!c(i[T])){j=T;break}}if(j<0)break;let A=i[j];i=i.filter((T,M)=>M!==j),a.push(A),l.push(`strip noise "${A}" \u2192 "${i.join(" ")}"`);let F=p(i);if(F)return m(F)}let b=Dr(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let j of[b.object,b.subject])for(let A of Bt(String(j||"").toLowerCase()))y.add(A);let w=[],v=[],_=[];for(let j of i){let A=j.toLowerCase();if(!/^[a-z]+$/.test(A)||Qi.has(A)||fl.has(A)||u(j)){w.push(j);continue}let T=oh(A);if(T&&T!==A){w.push(T),_.push(`${j}\u2192${T}`);continue}if(y.has(A)){w.push(j);continue}v.push(j)}if((_.length||v.length)&&w.length){i=w,a.push(...v),_.length&&l.push(`fuzzy-correct ${JSON.stringify(_)} \u2192 "${i.join(" ")}"`),v.length&&l.push(`drop unmatched ${JSON.stringify(v)} \u2192 "${i.join(" ")}"`);let j=p(i);if(j)return m(j)}let $=!1,x=i.map(j=>{let A=j.toLowerCase();return Ro[A]&&!u(j)?($=!0,Ro[A]):j});if($){l.push(`normalise synonyms \u2192 "${x.join(" ")}"`);let j=p(x);if(j)return m(j)}let S=Bt(r).map(j=>j.toLowerCase()),E=[],R=[];for(let j of S){if(sh.has(j))continue;let A=Be[j];A&&A!=="Change"?E.push(j):R.push(j)}if(E.length===1&&R.length===0){let j=p(["count",E[0]]);if(j)return l.push(`bare kind "${E[0]}" \u2192 count`),m(j)}return null}function ak(e,t){let n=String(t||"");if(!e||!Am.test(n))return n;let s=e.individuals.filter(l=>l.class==="Commit");if(!s.length)return n;let o=l=>String((l.attributes||[]).find(c=>c.key==="date")?.value||""),r=[...s].sort((l,c)=>o(c).localeCompare(o(l)))[0];if(!r)return n;let i=n.replace(Am,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return ik.test(a)?`${a} touched`:i}function ck(e){let t=String(e||"").toLowerCase(),n=new Set([t]);return t.endsWith("ies")&&n.add(`${t.slice(0,-3)}y`),(t.endsWith("ses")||t.endsWith("es"))&&n.add(t.slice(0,-2)),t.endsWith("s")&&t.length>1&&n.add(t.slice(0,-1)),[...n]}function jl(e,t){let n=ck(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function dk(e,t){let n=String(t||"").trim(),s=n.match(lk),o=s?null:n.match(uk),r=s||o;if(!r||!_l.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=jl(e,r[1]);if(!i)return null;let a={node:"allOfClass",entityType:i};return s?{node:"list",entityType:i,base:a,scoped:!1}:{node:"count",entityType:i,base:a}}function pk(e,t){let n=String(t||"").split(/\s*,\s*|\s+and\s+/i).map(r=>r.trim()).filter(Boolean);if(!n.length)return null;let s=[],o=[];for(let r of n){let i=r.replace(/^(?:all\s+)?(?:the\s+)?/i,"").trim();if(!/^[a-z][a-z'-]*$/i.test(i))return null;let a=jl(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function gk(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=new Set;for(let o of e?.individuals||[])o?.id&&(String(o.id).toLowerCase()===n||String(o.label||"").toLowerCase()===n)&&s.add(o.id);return s.size===1?[...s][0]:null}function bk(e,t){let n=xi(String(t||"").trim()),s=n.match(fk),o=s?dp[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(mk)?.[1]||n.match(hk)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Bs[o].predicate},a=pk(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let l=gk(e,r);return l?{...i,subjects:[l],asked:[l]}:null}function wk(e,t){return Bs[e].matchesLocativePredicates?ko(Fr(t.prop))||ko(Fr(t.predicate)):null}function yk(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Bs[t.relation],r=Fr(o.predicate),i=new Map,a=new Map;for(let c of e?.relations||[]){let u=Fr(c.prop),d=Fr(c.predicate),f=u===r||d===r,p=f?null:wk(t.relation,c);if(!(!f&&!p))for(let m of c.edges||[]){let h=e.byId?.get(m.subject);if(!h||!(s?s.has(m.subject):n.has(h.class)))continue;let b={subject:h,object:m.object,reads:f?o.reads:`is ${p}`};f?i.set(m.subject,b):a.set(`${u||d}\0${m.subject}`,b)}}let l=[...i.values(),...[...a.values()].filter(c=>!i.has(c.subject.id))].sort((c,u)=>String(c.subject.id).localeCompare(String(u.subject.id))||String(c.object).localeCompare(String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:l,matches:l.map(c=>c.subject)}}function ol(e){let t=$k.exec(String(e??""));return t?{base:t[1],epoch:t[2]?Number(t[2]):0,stamp:Number(t[3])}:{base:String(e??""),epoch:0,stamp:0}}function xk(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(ol(a.subject).base,String(a.object));let s=new Set(pp),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:l,epoch:c,stamp:u}=ol(a.subject),d=n.get(l)||t(l);if(!d)continue;let f=`${a.predicate}\0${l}`;vk(r.get(f),c,u)&&(o.set(l,{id:l,label:l,class:d}),r.set(f,{epoch:c,stamp:u,predicate:a.predicate,subject:l,object:ol(a.object).base}))}let i=new Map;for(let a of r.values())i.has(a.predicate)||i.set(a.predicate,{prop:a.predicate,predicate:a.predicate,examples:[]}),i.get(a.predicate).examples.push({subject:a.subject,object:a.object});return{individuals:[...o.values()],objectProperties:[...i.values()]}}function kk(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=jl(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(l=>l.id));if(i.size<2)return!1;let a=new Map;for(let l of e?.individuals||[])l?.id&&(a.has(l.id)||a.set(l.id,new Set),a.get(l.id).add(l.class));return[...i].every(l=>l===o||a.get(l)?.has(o))}function Es(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(ok(t))return{content:vl(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=ak(e,t);let r=ml(t,{nlp:s}),i=r.parsed,a=i,l=null;if(rh(e,i,n)===!1){let f=rk(e,t,{nlp:s,contextId:n,prev:o});f&&(a=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let c=Wt(e,a,{contextId:n,prev:o}),u=yn(a,c,e);if(Im(e,a,c,u)){let f=dk(e,t);if(f){let p=Wt(e,f,{contextId:n,prev:o}),m=yn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(Im(e,a,c,u)){let f=bk(e,t);if(f){let p=Wt(e,f,{contextId:n,prev:o}),m=yn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Fi(String(t||"")).trim().match(Ek)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=Dr(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=Wt(e,m,{contextId:n,prev:o}),u=yn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=Zs(String(t||"")).match(Sk)?.[1]?.trim();if(p){let m=Dr(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=Wt(e,m,{contextId:n,prev:o}),g=yn(m,h,e);!g.miss&&!g.ambiguous&&(c=h,u=g)}}}let d=l&&!u.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${u.content}`:u.content;if(!l&&!u.miss&&!u.ambiguous&&r.alternates.length){let f=r.alternates.map(p=>{let m=Wt(e,p.parsed,{contextId:n,prev:o}),h=yn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=fm(f.map(m=>m.a),{answerFor:m=>f.find(h=>h.a===m)?.text||null});d=`${d}
|
|
59
|
+
`)}`:f,miss:!1,ambiguous:!0,candidates:i.map(b=>b.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=String(t.site||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(a){let c=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${rl(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=zr(i);return l?{content:`${rl(i)} is defined in ${l} (no line span recorded in this index).`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${xs(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(f=>f.key==="date")?.value||"";if(!l)return{content:`commit ${a.label} touched ${i}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1};let c=(a.attributes||[]).find(f=>f.key==="message")?.value||"",u=String(l).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Lr("is-dated",a.id,"is dated")} ${u}${c?` ("${c}")`:""}.`,miss:!1,ambiguous:!1,matches:t.matches};let d=t.matches.length-1;return{content:`${i} was last touched by commit ${a.label} on ${u}${c?` ("${c}")`:""}${d?`; ${d} earlier commit${d===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whoLastShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${xs(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!l)return{content:`commit ${a.label} last touched ${i}, but this index records no commit author \u2014 regenerate the graph to attach mgx:commitAuthor.`,miss:!0,ambiguous:!1};let c=t.matches.length-1;return{content:`${i} was last touched by ${l} (commit ${a.label})${c?`; ${c} earlier commit${c===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.commitSubject){let i=`commit ${t.objMatch.label}`;if(!t.matches.length)return{content:`${i} touched nothing recorded in the index.`,miss:!0,ambiguous:!1};let a=new Map;for(let u of t.matches.slice(0,He)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let l=[...a.entries()].map(([u,d])=>`${Me(u,d.length)} ${$n(d)}`),c=t.matches.length>He?`; \u2026and ${t.matches.length-He} more`:"";return{content:`${i} touched ${l.join("; ")}${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(e.shape==="ask"){if(!t.objMatch||!t.subjMatch)return{content:"couldn't resolve one of the terms in this question.",miss:!0,ambiguous:!1};let i=`${t.traversal}.`,a=`no ${e.kind} edge found from ${t.subjMatch.label} to ${t.objMatch.label}.`,l=e.negated?a:i,c=e.negated?i:a;return{content:`${t.answer?"Yes":"No"} \u2014 ${t.answer?l:c}`,miss:!t.matches.length,ambiguous:!1}}if(!t.matches.length){if(e.shape==="forward"){if(_o.includes(e.kind)&&n&&t.objMatch)for(let l of _o){if(l===e.kind)continue;let c={...e,kind:l},u=qt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return ah(c,u,n)}return{content:`${t.objMatch.label} has no ${eo(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}if(e.kind==="tests"&&!e.entityType)return{content:`No tests cover ${String(e.object||"").replace(GE,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Me(e.entityType||"Module",2),a=t.objMatch&&Gs.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${eo(e.kind)} ${a}. ${xs(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${uk(e.kind)} by ${t.matches[0].label}.`,miss:!1,ambiguous:!1,matches:t.matches};if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!Es.has(i.class))){let i=t.matches.slice(0,He).map(l=>l.class==="Commit"?lk(l):l.label),a=t.matches.length>He?`, \u2026and ${t.matches.length-He} more`:"";return{content:i.join(" and ")+a+".",miss:!1,ambiguous:!1,matches:t.matches}}let s=new Map;for(let i of t.matches.slice(0,He)){let a=zr(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(rl(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=$n(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>He?` \u2026and ${t.matches.length-He} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function lh(e){if(e.length<4||mk.has(e))return null;let t=Zn(e),n=t+1,s=null,o=!1;for(let r of fk){let i=Qn(e,r,Math.min(n,t));i<n?(n=i,s=r,o=!1):i===n&&i<=t&&r!==s&&(o=!0)}return n<=t&&!o?s:null}function Lm(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!jl(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=lh(n);return!!s&&s!==n&&!!Be[s]}function uh(e,t,n){if(!t)return!1;if(t.ambiguousParse)return"ambiguous";if(t.node)return t.node!=="miss";if(t.shape==="meta"||t.shape==="mentions")return!0;let s=ts(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Lm(s,t.object))return!1;if(t.shape==="ask"){let o=ts(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Lm(o,t.subject))}return!0}function hk(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return kp.includes(t)}function gk(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ar(Zs(String(t||""))),i=Gt(r);if(!i.length)return null;let a=[],l=[],c=j=>{let A=xn(e,j);return!!A.match&&A.tier!=null&&A.tier<=2},u=j=>{let A=xn(e,j);return!!A.match&&A.tier!=null&&A.tier<=3},d=j=>{let A=String(j||"").trim().toLowerCase();return Gs.includes(A)?!0:Gt(A).some(F=>{let T=F.toLowerCase();return!Zi.has(T)&&!hl.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=j=>{let A=j.join(" "),F=Dr(A,{nlp:n});return uh(e,F,s)!==!0||F&&!F.node&&f.has(F.shape)&&(F.object!=null&&!d(F.object)||F.shape==="ask"&&F.subject!=null&&!d(F.subject))||vn(F,qt(e,F,{contextId:s,prev:o}),e).miss?null:{parsed:F,text:A}},m=j=>({parsed:j.parsed,from:r,to:j.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let j=-1;for(let T=0;T<i.length;T+=1){let M=i[T].toLowerCase();if(_l.has(M)&&!Zi.has(M)&&!c(i[T])){j=T;break}}if(j<0)break;let A=i[j];i=i.filter((T,M)=>M!==j),a.push(A),l.push(`strip noise "${A}" \u2192 "${i.join(" ")}"`);let F=p(i);if(F)return m(F)}let b=Dr(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let j of[b.object,b.subject])for(let A of Gt(String(j||"").toLowerCase()))y.add(A);let w=[],v=[],_=[];for(let j of i){let A=j.toLowerCase();if(!/^[a-z]+$/.test(A)||Zi.has(A)||hl.has(A)||u(j)){w.push(j);continue}let T=lh(A);if(T&&T!==A){w.push(T),_.push(`${j}\u2192${T}`);continue}if(y.has(A)){w.push(j);continue}v.push(j)}if((_.length||v.length)&&w.length){i=w,a.push(...v),_.length&&l.push(`fuzzy-correct ${JSON.stringify(_)} \u2192 "${i.join(" ")}"`),v.length&&l.push(`drop unmatched ${JSON.stringify(v)} \u2192 "${i.join(" ")}"`);let j=p(i);if(j)return m(j)}let $=!1,x=i.map(j=>{let A=j.toLowerCase();return Ro[A]&&!u(j)?($=!0,Ro[A]):j});if($){l.push(`normalise synonyms \u2192 "${x.join(" ")}"`);let j=p(x);if(j)return m(j)}let S=Gt(r).map(j=>j.toLowerCase()),E=[],R=[];for(let j of S){if(ch.has(j))continue;let A=Be[j];A&&A!=="Change"?E.push(j):R.push(j)}if(E.length===1&&R.length===0){let j=p(["count",E[0]]);if(j)return l.push(`bare kind "${E[0]}" \u2192 count`),m(j)}return null}function wk(e,t){let n=String(t||"");if(!e||!Nm.test(n))return n;let s=e.individuals.filter(l=>l.class==="Commit");if(!s.length)return n;let o=l=>String((l.attributes||[]).find(c=>c.key==="date")?.value||""),r=[...s].sort((l,c)=>o(c).localeCompare(o(l)))[0];if(!r)return n;let i=n.replace(Nm,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return bk.test(a)?`${a} touched`:i}function yk(e){let t=String(e||"").toLowerCase(),n=new Set([t]);return t.endsWith("ies")&&n.add(`${t.slice(0,-3)}y`),(t.endsWith("ses")||t.endsWith("es"))&&n.add(t.slice(0,-2)),t.endsWith("s")&&t.length>1&&n.add(t.slice(0,-1)),[...n]}function Rl(e,t){let n=yk(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function xk(e,t){let n=String(t||"").trim(),s=n.match($k),o=s?null:n.match(vk),r=s||o;if(!r||!Tl.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=Rl(e,r[1]);if(!i)return null;let a={node:"allOfClass",entityType:i};return s?{node:"list",entityType:i,base:a,scoped:!1}:{node:"count",entityType:i,base:a}}function Ek(e,t){let n=String(t||"").split(/\s*,\s*|\s+and\s+/i).map(r=>r.trim()).filter(Boolean);if(!n.length)return null;let s=[],o=[];for(let r of n){let i=r.replace(/^(?:all\s+)?(?:the\s+)?/i,"").trim();if(!/^[a-z][a-z'-]*$/i.test(i))return null;let a=Rl(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function _k(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=new Set;for(let o of e?.individuals||[])o?.id&&(String(o.id).toLowerCase()===n||String(o.label||"").toLowerCase()===n)&&s.add(o.id);return s.size===1?[...s][0]:null}function Rk(e,t){let n=Ei(String(t||"").trim()),s=n.match(Sk),o=s?gp[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(kk)?.[1]||n.match(jk)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Bs[o].predicate},a=Ek(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let l=_k(e,r);return l?{...i,subjects:[l],asked:[l]}:null}function Tk(e,t){return Bs[e].matchesLocativePredicates?ko(Fr(t.prop))||ko(Fr(t.predicate)):null}function Ak(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Bs[t.relation],r=Fr(o.predicate),i=new Map,a=new Map;for(let c of e?.relations||[]){let u=Fr(c.prop),d=Fr(c.predicate),f=u===r||d===r,p=f?null:Tk(t.relation,c);if(!(!f&&!p))for(let m of c.edges||[]){let h=e.byId?.get(m.subject);if(!h||!(s?s.has(m.subject):n.has(h.class)))continue;let b={subject:h,object:m.object,reads:f?o.reads:`is ${p}`};f?i.set(m.subject,b):a.set(`${u||d}\0${m.subject}`,b)}}let l=[...i.values(),...[...a.values()].filter(c=>!i.has(c.subject.id))].sort((c,u)=>String(c.subject.id).localeCompare(String(u.subject.id))||String(c.object).localeCompare(String(u.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:l,matches:l.map(c=>c.subject)}}function il(e){let t=Ik.exec(String(e??""));return t?{base:t[1],epoch:t[2]?Number(t[2]):0,stamp:Number(t[3])}:{base:String(e??""),epoch:0,stamp:0}}function Ok(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(il(a.subject).base,String(a.object));let s=new Set(bp),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:l,epoch:c,stamp:u}=il(a.subject),d=n.get(l)||t(l);if(!d)continue;let f=`${a.predicate}\0${l}`;Ck(r.get(f),c,u)&&(o.set(l,{id:l,label:l,class:d}),r.set(f,{epoch:c,stamp:u,predicate:a.predicate,subject:l,object:il(a.object).base}))}let i=new Map;for(let a of r.values())i.has(a.predicate)||i.set(a.predicate,{prop:a.predicate,predicate:a.predicate,examples:[]}),i.get(a.predicate).examples.push({subject:a.subject,object:a.object});return{individuals:[...o.values()],objectProperties:[...i.values()]}}function Pk(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=Rl(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(l=>l.id));if(i.size<2)return!1;let a=new Map;for(let l of e?.individuals||[])l?.id&&(a.has(l.id)||a.set(l.id,new Set),a.get(l.id).add(l.class));return[...i].every(l=>l===o||a.get(l)?.has(o))}function Ss(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(hk(t))return{content:El(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=wk(e,t);let r=gl(t,{nlp:s}),i=r.parsed,a=i,l=null;if(uh(e,i,n)===!1){let f=gk(e,t,{nlp:s,contextId:n,prev:o});f&&(a=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let c=qt(e,a,{contextId:n,prev:o}),u=vn(a,c,e);if(Pm(e,a,c,u)){let f=xk(e,t);if(f){let p=qt(e,f,{contextId:n,prev:o}),m=vn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(Pm(e,a,c,u)){let f=Rk(e,t);if(f){let p=qt(e,f,{contextId:n,prev:o}),m=vn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Di(String(t||"")).trim().match(Lk)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=Dr(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=qt(e,m,{contextId:n,prev:o}),u=vn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=Zs(String(t||"")).match(Nk)?.[1]?.trim();if(p){let m=Dr(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=qt(e,m,{contextId:n,prev:o}),g=vn(m,h,e);!g.miss&&!g.ambiguous&&(c=h,u=g)}}}let d=l&&!u.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${u.content}`:u.content;if(!l&&!u.miss&&!u.ambiguous&&r.alternates.length){let f=r.alternates.map(p=>{let m=qt(e,p.parsed,{contextId:n,prev:o}),h=vn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=wm(f.map(m=>m.a),{answerFor:m=>f.find(h=>h.a===m)?.text||null});d=`${d}
|
|
60
60
|
${p.join(`
|
|
61
61
|
`)}`}}if(!u.ambiguous&&c.objMatch&&Array.isArray(c.candidates)&&c.candidates.length){let f=new Set((c.matches||[]).map(m=>m&&m.id)),p=c.candidates.filter(m=>m&&m.id&&m.id!==c.objMatch.id&&!f.has(m.id));if(p.length){let m=p.slice(0,3).map(b=>b.label).filter(Boolean),h=p.length-m.length,g=m.join(", ")+(h>0?`, +${h} more`:"");d=`${d}
|
|
62
|
-
(answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${g})`}}return!Array.isArray(c.referents)&&!u.miss&&!u.ambiguous&&(a?.shape==="reverse"||a?.shape==="forward")&&a.entityType&&Array.isArray(c.matches)&&c.matches.length&&c.matches.every(f=>f&&f.class===a.entityType)&&(c={...c,referents:Ur(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:
|
|
63
|
-
`);return{start:o,end:r,text:a,truncated:i}}async function
|
|
64
|
-
`);return s==null||o==null?{lines:c}:{lines:c,...
|
|
65
|
-
## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(
|
|
66
|
-
## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${l} @ ${e.moduleLabel}:${i}-${a}`),r.push(
|
|
62
|
+
(answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${g})`}}return!Array.isArray(c.referents)&&!u.miss&&!u.ambiguous&&(a?.shape==="reverse"||a?.shape==="forward")&&a.entityType&&Array.isArray(c.matches)&&c.matches.length&&c.matches.every(f=>f&&f.class===a.entityType)&&(c={...c,referents:Ur(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:ih(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?zr(f):void 0})),traversal:c.traversal||null,miss:!!u.miss,ambiguous:!!u.ambiguous,relaxed:l,matchedVia:c.matchedVia||null,...Array.isArray(c.referents)&&c.referents.length?{discourse:c.referents}:{},...u.ambiguous?{candidates:u.candidates,candidateParses:u.candidateParses}:{}}}}var Em,Wo,Es,nl,zE,Ot,Mm,He,al,UE,BE,WE,GE,qE,HE,KE,Fm,cl,XE,bl,Dm,At,zm,QE,eS,nS,oS,iS,aS,cS,lS,dS,fS,Gm,yl,qm,Vm,xS,kS,Sm,TS,km,CS,_m,Tm,NS,MS,DS,vs,sl,ZS,ek,nk,kl,sk,Cm,ok,Om,ak,Zi,hl,_l,ch,pk,fk,mk,Nm,bk,$k,vk,Tl,Sk,kk,jk,Fr,Ik,Ck,Lk,Nk,Pm,ks=O(()=>{Oe();Oc();qn();yn();Mo();Bi();Wi();xm();Zc();ws();Yi();tl();zo();Em=new WeakMap;Wo={calls:"callsSymbol",touches:"touchesSymbol"},Es=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),nl={Function:"Method",Method:"Function"},zE={uses:["imports","calls","callsSymbol"]},Ot=e=>zE[e]||[e],Mm=new Set(Object.values(Wo)),He=12,al={Function:["function","functions"],Method:["method","methods"],Class:["class","classes"],Module:["module","modules"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Change:["change","changes"],Package:["package","packages"],Fact:["fact","facts"],Utterance:["utterance","utterances"],Session:["session","sessions"],Source:["source","sources"],Rule:["rule","rules"]};UE={cochange:"cochanges",reexports:"export"};BE={imports:"import",calls:"call",callsSymbol:"call",inherits:"inherit from",contains:"contain",tests:"test",touches:"touch",cochange:"cochange",reexports:"export",uses:"use",serves:"serve",denotes:"denote"},WE=e=>BE[e]||eo(e),GE=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),qE=new Set(["imports"]);HE=/^where\s+(?:does|do|did)\s+/i,KE=new Set(me(Zt));Fm=4,cl="zzinnerset",XE=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),bl=new Set(["which","what","who","list","show","find","give","me","us","all"]),Dm=new Set(["are","is","was","were"]);At=e=>Be[e]?{entityType:Be[e],placeholder:!1}:Gn.includes(e)?{entityType:null,placeholder:!0}:null,zm=e=>!!de[e]&&e.endsWith("ing");QE=new Set(["which","the","all"]);eS=new Set(["all","every","each"]);nS=new Set(["what","which","thing","things","one","ones","stuff"]);oS=new Set(["those","them"]);iS=new Set(["did","was","were","do","does","has","have","had"]),aS=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),cS=new Set(["last","recently","ever","get","got","been","then","now","already"]),lS=new Set(["the","a","an","all","those","these","any"]);dS=new Set(["since","before","after","on"]);fS=/\b[\w-]+(?:[/.][\w-]+)+\b|\b[A-Z][A-Za-z0-9_]*\b|\b[a-z][a-z0-9]*[A-Z][A-Za-z0-9]*\b/;Gm=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);yl=new Set(["the","a","an","all","me","us"]),qm=[...Hs].sort((e,t)=>t.split(" ").length-e.split(" ").length),Vm="functions, classes, methods, modules, packages, attributes, variables, or commits",xS=new Set(["in","inside","under"]);kS=new Set(["called","named","about","like","containing","matching","with"]);Sm=new Set(["recent","latest","newest"]);TS=/^git:(.+)$/i;km=new WeakMap;CS=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);_m=new WeakMap;Tm={label:3,chain:2,attr:1};NS=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;MS=["imports","calls","callsSymbol","inherits","contains","tests"];DS=/^\d{4}-\d{2}-\d{2}$/;vs=e=>$n(e.slice(0,He).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>He?`, \u2026and ${e.length-He} more`:"");sl=10;ZS=/^(?:the|a|an)\s+/i,ek=new RegExp(`\\s+(${Object.keys(Be).join("|")})$`,"i");nk=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,kl=new Set(["index","main","app","server","cli","__main__"]),sk=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Cm=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),ok=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>sk.has(t));Om=8,ak="mgx:schemaDoc";Zi=new Set([...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(en)),...me(Object.keys(Xe)),...me(Vs),...me(Object.keys(bs)),...me(Object.keys(_n)),...me(Object.keys(jo)),...me(Gn),...me(kr),...me(qs),...me(Zt),...me(wn),...me(Wn),...me(Object.keys(Ro))]),hl=new Set([...tt,...bl,...Gs]),_l=new Set(me(Si)),ch=new Set([..._l,...hl]),pk=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],fk=[...new Set([...me(Object.keys(de)),...Object.keys(Be),...pk])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!tt.has(e)),mk=new Set(["impact","impacts","impacted"]);Nm=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,bk=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;$k=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,vk=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,Tl=/^(?:are there(?:\s+in\s+total)?|is there|do you know(?:\s+about)?|do you have|exist(?:s)?|are known|in (?:the |a )?(?:graph|memory)|you know(?:\s+about)?)?[?.!\s]*$/i;Sk=new RegExp(`^(?:${qm.map(Qe).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),kk=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,jk=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Fr=e=>String(e||"").toLowerCase();Ik=/^(.+?)@(?:epoch(\d+)@)?(?:turn|step)(\d+)$/;Ck=(e,t,n)=>!e||e.epoch<t||e.epoch===t&&e.stamp<=n;Lk=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Nk=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Pm=(e,t,n,s)=>s.ambiguous?Pk(e,t,n):!!s.miss});function js(e,t,n,s){let o=Math.max(1,t),r=Math.min(e.length,n),i=!1;s!=null&&r-o+1>s&&(r=o+s-1,i=!0);let a=e.slice(o-1,r).map((l,c)=>`${o+c} ${l}`).join(`
|
|
63
|
+
`);return{start:o,end:r,text:a,truncated:i}}async function ss({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Qt(t),a=Qt(i,n);if(a!==i&&!a.startsWith(i+fp))throw new Re(`refusing to read outside the repository root: ${n}`);let c=(await e(a,"utf8")).split(`
|
|
64
|
+
`);return s==null||o==null?{lines:c}:{lines:c,...js(c,s,o,r)}}var ta=O(()=>{Ue();Bt()});function yt(e){return{ok:!0,value:e}}function $t(e,{detail:t="",term:n=null}={}){if(!ot[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function An(e){return!e||!e.id?null:{id:String(e.id),label:e.label!=null?String(e.label):String(e.id),class:e.class||"Entity",attributes:(Array.isArray(e.attributes)?e.attributes:[]).map(t=>({key:t.key,value:t.value,prop:t.prop||null}))}}function na(e,{predicate:t="",prop:n=null}={}){let s={subject:e.subject,object:e.object,predicate:t,prop:n||null};return e.subjectLabel!=null&&(s.subjectLabel=e.subjectLabel),e.objectLabel!=null&&(s.objectLabel=e.objectLabel),e.weight!=null&&(s.weight=e.weight),s}var Il,Mk,ot,Cl,$N,ph,Ol,Fk,En,Al,It,vN,fh=O(()=>{Il="1.1.0",Mk="urn:tmct:core",ot=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),Cl=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),$N=Object.freeze({imports:"tmct:imports",calls:"tmct:calls",callsSymbol:"tmct:calls",defines:"tmct:defines",tests:"tmct:covers",touches:"tmct:touches",touchesSymbol:"tmct:touches",contains:"tmct:contains",inherits:"tmct:extends",cochange:"tmct:dependsOn",reexports:"tmct:exports",serves:"tmct:serves",denotes:"tmct:denotes"}),ph=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),Ol=Object.freeze(Object.values(ph).flat()),Fk=Object.freeze(new Set(ph.source));En="Individual",Al="Edge",It="concurrent-safe: reads immutable graph truth; no shared mutable state",vN=Object.freeze({version:Il,ontology:Mk,missReasons:Object.values(ot),edgeKinds:[...Cl],types:{Individual:{fields:{id:"string (opaque provider id)",label:"string (human/display name)",class:"string \u2014 a tmct: class token (module|class|function|method|attribute|variable|commit|test|\u2026)",attributes:"Array<{ key: string, value: string, prop: string|null }> \u2014 prop is the SEON/mgx token grounding the value"}},Edge:{fields:{subject:"string (individual id)",object:"string (individual id)",predicate:"string \u2014 the relation predicate",prop:"string|null \u2014 the SEON/mgx property token; see edgeKinds \u2192 tmct: mapping",subjectLabel:"string? (additive)",objectLabel:"string? (additive)",weight:"number? (additive; e.g. cochange coupling)"}},Result:{shape:"{ ok: true, value: T } | { ok: false, miss: Miss }"},Miss:{shape:"{ reason: MISS_REASONS, detail: string, term: string|null }"}},capabilitiesModel:"A provider advertises `capabilities: string[]` (service names it implements). A service outside the set is negotiated away to miss(CAPABILITY_ABSENT) \u2014 never an error. snippet may be advertised yet answer miss(NO_SOURCE) when no working tree exists (it has nothing useful without fs); context is graph-only-capable since INTERFACE_VERSION 1.1.0 \u2014 it returns a real hit (graph-only bundle) for any resolvable symbol even with no working tree, only escalating NO_SOURCE-style behavior to richer body text when source-capable.",services:{resolve:{group:"resolution",args:{term:"string"},result:`{ match: ${En}, candidates: ${En}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"The resolveSymbol seam: map a free term to an individual + runner-up candidates. Every id-taking service consumes a resolved id."},describe:{group:"resolution",args:{id:"string"},result:`{ individual: ${En}, out: ${Al}[], incoming: ${Al}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${En}[], attributes: ${En}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${En}[], subclasses: ${En}[], levels: Array<${En}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"Forward bases + the transitive reverse inheritance closure (who extends this). `subclasses` is the flat closure; `levels` groups the same individuals by inheritance depth (direct children first), mirroring `impact`'s leveled shape."},exports:{group:"resolution",args:{moduleId:"string"},result:`{ exports: ${En}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"A module's curated public API (resolved __all__ / re-exports)."},signature:{group:"resolution",args:{id:"string"},result:"{ id, label, class, params, returns, raises, decorators, doc, selfFields, flags }",misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"The compact API surface of a symbol without its body."},edges:{group:"traversal",args:{id:"string",kind:"EDGE_KINDS member"},result:`{ kind: string, edges: ${Al}[] }`,misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"Outgoing edges of one closed kind from an individual (an honest empty array is not a miss).",note:"An unknown kind (outside EDGE_KINDS) is a programming error and throws TypeError, not a miss."},impact:{group:"traversal",args:{moduleId:"string"},result:"{ total: number, levels: Array<Array<{ id, label, via, tests }>> }",misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"The transitive dependent closure the interpreter cannot compute without provider truth."},snippet:{group:"source",args:{id:"string"},result:"{ path: string, span: { start, end }, body: string|null } \u2014 Promise<Result>",misses:["UNRESOLVED_TERM","NO_SOURCE"],concurrency:It,purpose:"The exact source span of a symbol. A provider with no working tree returns miss(NO_SOURCE) honestly \u2014 snippet has nothing useful without fs.",note:"ASYNC (returns Promise<Result>) \u2014 a real body read is inherently fs I/O; callers should always await it. A graph-only provider still resolves synchronously-in-spirit (the promise settles on the same tick) but the return type is uniformly a Promise regardless of sourceAccess."},context:{group:"source",args:{symbol:"string",depth:"min|auto|full?"},result:"{ text: string, tier: string } (a sized edit bundle) \u2014 Promise<Result>",misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"The composed edit bundle (exemplar, siblings, registration, insertion region). A graph-only provider returns the graph-only sections as a real hit; a source-capable provider (sourceAccess:true, repoRoot, readFile) additionally includes the anchor/exemplar/inlined-callee body text.",note:"ASYNC (returns Promise<Result>) \u2014 see snippet's note; source-capable rendering is fs I/O."},architecture:{group:"aggregate",args:{package:"string?"},result:"{ modules: number, packages: Array<[dir, count]>, hubs: Array<{ id, label, importers }> }",misses:[],concurrency:It,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${En}[] }`,misses:[],concurrency:It,purpose:"Modules with no covering test module (via the tests relation)."},stats:{group:"aggregate",args:{},result:"{ total: number, classes: Array<{ class: string, count: number }>, truncated: boolean }",misses:[],concurrency:It,purpose:"Per-tmct:class individual counts, read straight from the payload."},history:{group:"temporal",args:{id:"string"},result:"{ commits: Array<{ id, label, author, date, message }> }",misses:["UNRESOLVED_TERM"],concurrency:It,purpose:"The commits that touched an individual (tmct:commit individuals via tmct:touches)."},search:{group:"search",args:{query:"string",kind:"string?",name:"string?",decorator:"string?"},result:`{ results: ${En}[] }`,misses:[],concurrency:It,purpose:"Lexical, provider-local locate. An empty result set is honest, not a miss."},ask:{group:"search",args:{query:"string"},result:"{ content: string, tmct_ask: object } (the composed NL round-trip envelope)",misses:[],concurrency:It,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function Dk(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(na(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(na(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function zk(e,t){for(let n of e.relations)if(Jn(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function Bk(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await ss({readFile:n,repoRoot:s,path:e.moduleLabel}))}catch{o=null}if(!o)return"";let r=[];if(t.anchor&&e.anchor?.site){let{start:i,end:a}=e.anchor.site;r.push(`
|
|
65
|
+
## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(js(o,i,a,Ll).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,l=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
|
|
66
|
+
## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${l} @ ${e.moduleLabel}:${i}-${a}`),r.push(js(o,i,a,Ll).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=Uk;for(let a of e.calleeBodies){if(i<=0)break;let l=a.site.start,u=a.site.path===e.moduleLabel?o:null;if(!u)try{({lines:u}=await ss({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=js(u,l,a.site.end,i);r.push(`
|
|
67
67
|
## inlined callee body (depth-1 in-repo call): ${a.label} @ ${a.site.path}:${l}-${a.site.end}`),r.push(d.text),i-=d.end-l+1}}return r.join(`
|
|
68
|
-
`)}function
|
|
69
|
-
${b}`:g,tier:m})},architecture({package:c=""}={}){let u=String(c||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(b=>(b.class||"")==="Module"&&(!u||String(b.label||"").toLowerCase().startsWith(u))),f=new Map;for(let b of d){let y=b.label.includes("/")?b.label.slice(0,b.label.lastIndexOf("/")):"(root)";f.set(y,(f.get(y)||0)+1)}let p=new Set(d.map(b=>b.id)),m=new Map;for(let b of ke(e,"imports"))p.has(b.object)&&m.set(b.object,(m.get(b.object)||0)+1);let h=[...m.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),g=[...f.entries()].sort((b,y)=>y[1]-b[1]);return yt({modules:d.length,packages:g,hubs:h})},untested(){let c=new Set(ke(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(An);return yt({modules:u})},stats(){let c=new Map;for(let d of e.individuals){let f=d.class||"Entity";c.set(f,(c.get(f)||0)+1)}let u=[...c.entries()].map(([d,f])=>({class:d,count:f})).sort((d,f)=>f.count-d.count||d.class.localeCompare(f.class));return yt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=[...ke(e,"touches"),...ke(e,"touchesSymbol")].filter(m=>m.object===c),f=new Set,p=[];for(let m of d){if(f.has(m.subject))continue;f.add(m.subject);let h=i.get(m.subject);p.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?
|
|
68
|
+
`)}function sa(e,{sourceAccess:t=!1,repoRoot:n=null,readFile:s=null,tel:o=null,ask:r=null}={}){let i=e.byId;if(t&&(!n||typeof s!="function"))throw new TypeError("createGraphService({ sourceAccess: true }) requires both repoRoot and readFile \u2014 fs access is an injected capability, not an ambient import.");let a=c=>i.get(c)||null,l={version:Il,capabilities:[...Ol],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=tn(e,String(c??""));return u?yt({match:An(u),candidates:d.map(An)}):$t(ot.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return $t(ot.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=Dk(e,c);return yt({individual:An(u),out:d,incoming:f})},members(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=ke(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let h=i.get(m.object),g=h?An(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.class||"")==="Attribute"?p.push(g):f.push(g)}return yt({methods:f,attributes:p})},subclasses(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=ke(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?An(i.get(y.object)):{id:y.object,label:y.objectLabel||y.object,class:"Class",attributes:[]}),p=new Map;for(let y of d)p.has(y.object)||p.set(y.object,[]),p.get(y.object).push(y.subject);let m=new Set([c]),h=[],g=[],b=[c];for(let y=0;y<8&&b.length;y+=1){let w=[],v=[];for(let _ of b)for(let $ of p.get(_)||[]){if(m.has($))continue;m.add($);let x=i.get($),S=x?An(x):{id:$,label:$,class:"Class",attributes:[]};h.push(S),v.push(S),w.push($)}v.length&&g.push(v),b=w}return yt({bases:f,subclasses:h,levels:g})},exports(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let f=ke(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?An(i.get(p.object)):{id:p.object,label:p.objectLabel||p.object,class:"Entity",attributes:[]});return yt({exports:f})},signature(c){let u=a(c);if(!u)return $t(ot.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Vt(u,p)&&d.push(m);let f=Vt(u,"visibility");return f&&d.push(f),yt({id:u.id,label:u.label,class:u.class||"Entity",params:Vt(u,"params"),returns:Vt(u,"returns"),raises:Vt(u,"raises"),decorators:Vt(u,"decorators"),doc:Vt(u,"doc"),selfFields:Vt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!Cl.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let m=zk(e,u),h=ke(e,u).filter(g=>g.subject===c).map(g=>na(g,m));return h=d==null?h.slice(f):h.slice(f,f+d),yt({kind:u,edges:h})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return $t(ot.UNRESOLVED_TERM,{term:c});let f=u==null?No(e,d):No(e,d,{maxDepth:u}),p=f.reduce((m,h)=>m+h.length,0);return yt({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return $t(ot.UNRESOLVED_TERM,{term:c});let d=Rt(u);if(!l.sourceAccess)return $t(ot.NO_SOURCE,{term:c,detail:d?`span is ${d.path}:${d.start}-${d.end}; this provider exposes no working tree`:"no source span in the graph"});if(!d)return $t(ot.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await ss({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Ll});return yt({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return $t(ot.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${f?.message||f}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=tn(e,String(c??""));if(!d)return $t(ot.UNRESOLVED_TERM,{term:String(c??"")});let f=Po(e,d),p=String(u||"auto").trim().toLowerCase(),m,h;p==="min"?(m="TINY",h=Qs("TINY")):p==="full"?(m="FULL",h=Qs("FULL")):{tier:m,mask:h}=Fi(f,e,{});let g=Bf(f,h);if(!l.sourceAccess)return yt({text:g,tier:m});let b=await Bk(f,h,{readFile:s,repoRoot:n});return yt({text:b?`${g}
|
|
69
|
+
${b}`:g,tier:m})},architecture({package:c=""}={}){let u=String(c||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(b=>(b.class||"")==="Module"&&(!u||String(b.label||"").toLowerCase().startsWith(u))),f=new Map;for(let b of d){let y=b.label.includes("/")?b.label.slice(0,b.label.lastIndexOf("/")):"(root)";f.set(y,(f.get(y)||0)+1)}let p=new Set(d.map(b=>b.id)),m=new Map;for(let b of ke(e,"imports"))p.has(b.object)&&m.set(b.object,(m.get(b.object)||0)+1);let h=[...m.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),g=[...f.entries()].sort((b,y)=>y[1]-b[1]);return yt({modules:d.length,packages:g,hubs:h})},untested(){let c=new Set(ke(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(An);return yt({modules:u})},stats(){let c=new Map;for(let d of e.individuals){let f=d.class||"Entity";c.set(f,(c.get(f)||0)+1)}let u=[...c.entries()].map(([d,f])=>({class:d,count:f})).sort((d,f)=>f.count-d.count||d.class.localeCompare(f.class));return yt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return $t(ot.UNRESOLVED_TERM,{term:c});let d=[...ke(e,"touches"),...ke(e,"touchesSymbol")].filter(m=>m.object===c),f=new Set,p=[];for(let m of d){if(f.has(m.subject))continue;f.add(m.subject);let h=i.get(m.subject);p.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?Vt(h,"author")??Vt(h,"commitAuthor"):null,date:h?Vt(h,"date")??Vt(h,"commitDate"):null,message:h?Vt(h,"message")??Vt(h,"commitMessage"):null})}return yt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Li,offset:m=0}={}){let h=String(c||""),g=String(u||"").trim().toLowerCase(),b=String(d||"").trim(),y=String(f||"").trim().toLowerCase(),w;if(g&&g!=="module"){let _=null;if(b){let x=Gc(b);if(x.error)return $t(ot.UNRESOLVED_TERM,{term:b,detail:x.error});_=x}let $=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=Hc(e,$,{kind:g,decFilter:y,nameRe:_}).map(x=>x.ind)}catch(x){return $t(ot.UNRESOLVED_TERM,{term:b,detail:String(x?.message||x)})}}else{let _=new Map;for(let $ of e.individuals)($.class||"")==="Module"&&_.set($.label,$);w=yf(e,h).map(({path:$})=>_.get($)).filter(Boolean)}let v=w.slice(m,m+p).map(An);return yt({results:v})},ask(c){if(typeof r!="function")return $t(ot.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return yt({content:u,tmct_ask:d})}};if(o)for(let c of Ol){let u=l[c];typeof u=="function"&&(l[c]=(...d)=>{let f=performance.now(),p=u.apply(l,d);return p&&typeof p.then=="function"?p.then(m=>(mh(o,c,performance.now()-f,m),m)):(mh(o,c,performance.now()-f,p),p)})}return l}function mh(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:Wk(s)})}catch{}}function Wk(e){if(!e||typeof e!="object"||e.ok!==!0)return{ok:!1,reason:e?.miss?.reason||null};let t=0,n=e.value;if(Array.isArray(n))t=n.length;else if(n&&typeof n=="object")for(let s of Object.values(n))Array.isArray(s)&&(t+=s.length);return{ok:!0,count:t}}var Vt,Ll,Uk,oa=O(()=>{Oe();ta();fh();Vt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Ll=200,Uk=120});async function Br(e,t){let n=await t.fetchEntities(e),s=Oi(n);if(!s.individuals.length){let o=new Re(`the graph at ${e.graphFile} is empty \u2014 no entities to answer from yet (this repo starts with no graph; the chat session folds the conversation into one).`);throw o.emptyGraph=!0,o}return s}var ra=O(()=>{Bt();Oe()});function _s({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function nt(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Re(`${t} is required`);return n}function xt(e,t,n){let{match:s,candidates:o}=tn(e.graph,t);if(!s)throw new Re(`no entity matching ${n} "${t}" in the code-map graph. Try a repo-relative path (e.g. path/to/module), a basename, or tmct_search for a fuzzy lookup.`);return{match:s,candidates:o}}var Wr,rt,Ge=O(()=>{Bt();Oe();Wr=200;rt=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=xt(s,nt(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function hh(e,{config:t,source:n=Io,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Re("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,l=!!e?.untuned,c=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await Br(t,n),f=ve(ve(t.graphFile)),p=sa(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:Ss}),{match:m}=xt(p,r,"symbol"),h=Po(d,m),g,b,y=!1;a||i==="min"?(g="TINY",b=Qs("TINY")):c||i==="full"?(g="FULL",b=Qs("FULL"),y=!0):{tier:g,mask:b,topup:y}=Fi(h,d,{untuned:l}),s&&!c&&(b=zf(b));let w=null;if(h.moduleLabel)try{({lines:w}=await ss({readFile:ze,repoRoot:f,path:h.moduleLabel}))}catch{w=null}let v=x=>w&&w[x-1]!=null?w[x-1].trim():"",_=(x,S)=>js(w,x,S,Wr).text,$=[`Edit context for ${h.moduleLabel} [${g}${s?" secondary":""}] \u2014 assembled from the typed graph + that file. You do NOT need to Read it; write the new code directly after reviewing this.`];if(b.anchor&&h.anchor?.site&&w){let{start:x,end:S}=h.anchor.site;$.push(`
|
|
70
70
|
## anchor: ${h.anchor.label} (${h.anchor.class}) @ ${h.moduleLabel}:${x}-${S}`),$.push(_(x,S)),h.callHint&&$.push(h.callHint)}if(b.registration&&h.globals.length){$.push(`
|
|
71
71
|
## registration / module globals (replicate this pattern):`);for(let x of h.globals)$.push(` ${x.label} = ${x.value}${x.site?` [:${x.site.start}]`:""}`)}if(b.exemplar&&h.exemplar?.site&&w){let{start:x,end:S}=h.exemplar.site,E=h.exemplar.decorators?` @${h.exemplar.decorators}`:"";$.push(`
|
|
72
|
-
## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${E} @ ${h.moduleLabel}:${x}-${S}`),$.push(_(x,S)),h.callHint&&$.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let x=120;for(let S of h.calleeBodies){if(x<=0)break;let E=S.site.start,j=S.site.path===h.moduleLabel&&w?w:await
|
|
72
|
+
## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${E} @ ${h.moduleLabel}:${x}-${S}`),$.push(_(x,S)),h.callHint&&$.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let x=120;for(let S of h.calleeBodies){if(x<=0)break;let E=S.site.start,j=S.site.path===h.moduleLabel&&w?w:await ss({readFile:ze,repoRoot:f,path:S.site.path}).then(F=>F.lines).catch(()=>null);if(!j)continue;let A=js(j,E,S.site.end,x);$.push(`
|
|
73
73
|
## inlined callee body (depth-1 in-repo call): ${S.label} @ ${S.site.path}:${E}-${S.site.end}`),$.push(A.text),x-=A.end-E+1}}if(b.classMembers&&h.classMembers&&h.classMembers.members.length){$.push(`
|
|
74
74
|
## members of ${h.classMembers.className} (the edit likely lives INSIDE this class \u2014 copy a member's shape, do not read the class body):`);for(let x of h.classMembers.members){let S=String(x.label).split(".").pop(),E=x.params!=null&&x.params!==""?`(${x.params})${x.returns?` -> ${x.returns}`:""}`:"",R=x.decorators?`@${x.decorators} `:"",j=x.raises?` raises=${x.raises}`:"";$.push(` ${x.class} ${S}${x.site?` :${x.site.start}`:""} ${R}${S}${E}${j}`)}}if(b.siblings&&h.siblings.length){$.push(`
|
|
75
75
|
## sibling symbols to copy the style of (most relevant first; ${h.siblings.length} total):`);for(let x of h.siblings.slice(0,h.siblingCap)){let S=x.site?v(x.site.start):"",E=x.decorators?`@${x.decorators} `:"",R=x.raises?` raises=${x.raises}`:"";$.push(` ${x.class} ${x.label}${x.site?` :${x.site.start}`:""} ${E}${S}${R}`)}h.siblings.length>h.siblingCap&&$.push(` \u2026+${h.siblings.length-h.siblingCap} more (use ${u}search kind=function or ${u}snippet <name> for any of them)`)}if(b.allExports&&h.allExports&&$.push(`
|
|
@@ -82,29 +82,29 @@ ${b}`:g,tier:m})},architecture({package:c=""}={}){let u=String(c||"").trim().toL
|
|
|
82
82
|
## covering tests: ${h.tests.join(", ")}`),b.cochange&&h.cochange&&h.cochange.length&&$.push(`
|
|
83
83
|
## usually changed together (consider editing these too): ${h.cochange.map(x=>`${x.label} (\xD7${x.weight})`).join(", ")}`),$.push(`
|
|
84
84
|
You now have the snippet, the sibling style, the registration anchor and the tests. Write the new code with Edit/Write \u2014 do NOT Read ${h.moduleLabel}.`),g!=="FULL"&&$.push(`(bundle tier ${g}; for any omitted sections run ${u}context_more {"symbol":"${r}"}, or ${u}context with depth="full".)`),{text:$.join(`
|
|
85
|
-
`),tier:g,topup:y}}async function Ol(e,{config:t,source:n,tel:s}){return(await uh(e,{config:t,source:n,tel:s})).text}var Ll=O(()=>{_t();Ue();zt();ea();_r();Oe();Ss();sa();oa();Ge();Ol.ownsGraphLoad=!0});function dh(e,{graph:t,svc:n}){let{match:s}=vt(n,nt(e,"symbol"),"symbol");return Pf(Po(t,s))}var ph=O(()=>{Oe();Ge()});function ra(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function Gr(e){return ra(e).toString(16).padStart(8,"0")}function Lk(e){let t=new TextEncoder().encode(String(e)),n=t.length*8,s=new Uint8Array((t.length+8>>6)+1<<6);s.set(t),s[t.length]=128;let o=new DataView(s.buffer);o.setUint32(s.length-8,Math.floor(n/4294967296)),o.setUint32(s.length-4,n>>>0);let r=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),i=new Uint32Array(64),a=(u,d)=>u>>>d|u<<32-d;for(let u=0;u<s.length;u+=64){for(let w=0;w<16;w+=1)i[w]=o.getUint32(u+w*4);for(let w=16;w<64;w+=1){let v=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,_=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+v+i[w-7]+_>>>0}let[d,f,p,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let v=a(h,6)^a(h,11)^a(h,25),_=h&g^~h&b,$=y+v+_+Ok[w]+i[w]>>>0,x=a(d,2)^a(d,13)^a(d,22),S=d&f^d&p^f&p,E=x+S>>>0;y=b,b=g,g=h,h=m+$>>>0,m=p,p=f,f=d,d=$+E>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+f>>>0,r[2]=r[2]+p>>>0,r[3]=r[3]+m>>>0,r[4]=r[4]+h>>>0,r[5]=r[5]+g>>>0,r[6]=r[6]+b>>>0,r[7]=r[7]+y>>>0}let l=new Uint8Array(32),c=new DataView(l.buffer);for(let u=0;u<8;u+=1)c.setUint32(u*4,r[u]);return l}function Nk(e,t){let n=Lk(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function J(e){let t=ts(e);return t=t.replace(/^\/c\/[a-z]{2,3}\//i,""),t=t.replace(/^[a-z][\w.-]*:/i,""),t=t.replace(/_/g," ").replace(/\s+/g," ").trim(),t=t.replace(/^(?:the|an?)\s+/i,""),t.toLowerCase()}function ns(e){let t=ts(e);return Mk.get(t)??t}function ge(e,t,n){return Ho(J(e),ns(t),J(n))}var Ok,Pk,ts,Mk,Ho,nn=O(()=>{Ok=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);Pk=2e3,ts=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,Pk);Mk=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"],["mgx:used-for","mgx:usedFor"],["mgx:made-of","mgx:madeOf"]]);Ho=(e,t,n)=>`fact:${Nk(`${e}\0${t}\0${n}`,8)}`});var ln={};Un(ln,{CARDINALITY_RULE_CONFIDENCE:()=>Gk,CAX_DW_RULE:()=>Pl,CAX_DW_RULE_CONFIDENCE:()=>Fl,CAX_MAXC0_RULE_CONFIDENCE:()=>Vk,CLS_SVF1_RULE:()=>Dl,CLS_SVF1_RULE_CONFIDENCE:()=>Ul,DEFAULT_MAX_ENVIRONMENTS:()=>ia,DISJOINT_PREDICATE:()=>Ko,ENTAILED_DISJOINT_PROVENANCE:()=>Ml,ENTAILED_PROVENANCE:()=>hh,ENTAILED_SCM_SVF_PROVENANCE:()=>Gl,ENTAILED_SVF1_PROVENANCE:()=>zl,ENTAILED_TYPE_PROVENANCE:()=>bh,ON_PROPERTY_PREDICATE:()=>In,SCM_SVF_RULE:()=>Wl,SCM_SVF_RULE_CONFIDENCE:()=>ql,SOME_VALUES_FROM_PREDICATE:()=>Cn,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>Lt,buildCardinalityRestrictions:()=>Wk,buildRelevanceFrontier:()=>Nl,deriveDisjointViolations:()=>vh,deriveSomeValuesFromApplication:()=>xh,deriveSomeValuesFromSubsumption:()=>Eh,deriveSubClassClosure:()=>wh,deriveSubClassClosureDelta:()=>yh,deriveTypePropagation:()=>$h,entailedTrustFrom:()=>Dk,findConsistencyViolations:()=>Kk,findIsaChain:()=>Vl,proveCardinalityAtLeast:()=>qk,proveMaxCardinalityZeroDenial:()=>Hk,retractSubClassOf:()=>Zk,syllogise:()=>Yk});function fh(e,t,n){for(let s of t)if(typeof e?.[s]!="function")throw new TypeError(`${n} needs a store option carrying { ${t.join(", ")} } (memory/core.mjs's read/write functions) \u2014 missing ${s}`);return e}function Dk(e,t=1){let n=(Array.isArray(e)?e:[]).filter(o=>typeof o=="number");if(!n.length)return null;let s=Math.max(0,Math.min(1,Math.min(...n)*t));return Number(s.toFixed(6))}function ss(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=J(s);o&&n.add(o)}return n.size?n:null}function wh(e,{depth:t=32,budget:n=50,focus:s=null}={}){let o=new Set,r=new Map;for(let[u,d]of e||[])!u||!d||u===d||(o.add(`${u}${Le}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:ss(s),a=(u,d,f)=>!i||i.has(u)||i.has(d)||i.has(f),l=[],c=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[p,m]of r)for(let h of m){let g=r.get(h);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,h,b)&&d.push([p,h,b,y])}}if(!d.length)break;d.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let f=!1;for(let[p,m,h,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:h,via:m}),r.has(p)||r.set(p,new Set),r.get(p).add(h),f=!0}if(l.length>=n||!f)break}return l}function yh(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[m,h]of e||[])!m||!h||m===h||(r.add(`${m}${Le}${h}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),a.has(h)||a.set(h,new Set),a.get(h).add(m));let l=[],c=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let g=`${m}${Le}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:ss(o),d=(m,h,g)=>!u||u.has(m)||u.has(h)||u.has(g),f=[],p=new Set;for(let m=0;m<n&&l.length;m+=1){let h=[],g=(w,v,_)=>{if(w===_)return;let $=`${w}${Le}${_}`;r.has($)||p.has($)||d(w,v,_)&&h.push([w,v,_,$])};for(let[w,v]of l){for(let _ of i.get(v)||[])g(w,v,_);for(let _ of a.get(w)||[])g(_,w,v)}if(!h.length)break;h.sort((w,v)=>w[0].localeCompare(v[0])||w[2].localeCompare(v[2])||w[1].localeCompare(v[1]));let b=!1,y=[];for(let[w,v,_,$]of h)if(!p.has($)){if(f.length>=s)break;p.add($),f.push({subject:w,object:_,via:v}),i.has(w)||i.set(w,new Set),i.get(w).add(_),a.has(_)||a.set(_,new Set),a.get(_).add(w),y.push([w,_]),b=!0}if(f.length>=s||!b)break;l=y}return f}function On(e){let t=new Map;for(let[s,o]of e||[])!s||!o||s===o||(t.has(s)||t.set(s,new Set),t.get(s).add(o));let n=new Map;return s=>{if(n.has(s))return n.get(s);let o=new Set,r=[...t.get(s)||[]];for(;r.length;){let i=r.pop();if(!o.has(i)){o.add(i);for(let a of t.get(i)||[])o.has(a)||r.push(a)}}return n.set(s,o),o}}function zk(e){return On((e||[]).map(([t,n])=>[n,t]))}function Nl(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(_s(c.predicate)?n.push([c.subject,c.object]):oo(c.predicate)?s.push([c.subject,c.object]):Yo(c.predicate)?o.set(c.subject,c.object):Vr(c.predicate)&&r.set(c.subject,c.object));let i=zk(n),a=new Set;for(let c of t||[]){let u=J(c);if(u){a.add(u);for(let d of i(u))a.add(d)}}let l=new Set(a);for(let[c,u]of s)a.has(u)&&l.add(c);for(let[c,u]of r)o.has(c)&&a.has(u)&&l.add(c);return l}function $h(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=On(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Le}${m}`);let l=s instanceof Set?s.size?s:null:ss(s),c=(p,m,h)=>!l||l.has(p)||l.has(m)||l.has(h),u=[];for(let[p,m]of e||[]){if(!p||!m)continue;let h=`${p}${Le}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,m,g)&&u.push([p,m,g,b])}}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let d=[],f=new Set;for(let[p,m,h,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:h,via:m})}return d}function vh(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Le}${h}`),a.add(`${h}${Le}${m}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(m));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:ss(o),u=(m,h,g)=>!c||c.has(m)||c.has(h)||c.has(g),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let g=`${m}${Le}${h}`;if(!l.has(g)){l.add(g);for(let b of[h,...r(h)]){let y=i.get(b);if(y)for(let w of y){if(w===m)continue;let v=`${m}${Le}${w}`;a.has(v)||u(m,h,w)&&d.push([m,h,b,w,v])}}}}d.sort((m,h)=>m[0].localeCompare(h[0])||m[3].localeCompare(h[3])||m[2].localeCompare(h[2])||m[1].localeCompare(h[1]));let f=[],p=new Set;for(let[m,h,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:m,object:b,viaType:h,viaClass:g})}return f}function xh(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=On(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Le}${g.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(g.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[g,b]of t||[])!g||!b||(l.add(`${g}${Le}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:ss(r),d=(g,b,y)=>!u||u.has(g)||u.has(b)||u.has(y),f=new Set,p=[];for(let[g,b,y]of e||[]){if(!g||!b||!y)continue;let w=J(b),v=`${g}${Le}${w}${Le}${y}`;if(f.has(v))continue;f.add(v);let _=c.get(y);if(_)for(let $ of _)for(let x of[$,...i($)]){let S=a.get(`${w}${Le}${x}`);if(S)for(let E of S){if(g===E)continue;let R=`${g}${Le}${E}`;l.has(R)||d(g,y,E)&&p.push([g,b,w,y,$,x,E,R])}}}p.sort((g,b)=>g[0].localeCompare(b[0])||g[6].localeCompare(b[6])||g[1].localeCompare(b[1])||g[3].localeCompare(b[3]));let m=[],h=new Set;for(let[g,b,y,w,v,_,$,x]of p)if(!h.has(x)){if(m.length>=o)break;h.add(x),m.push({subject:g,object:$,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:v,viaTarget:_})}return m}function Wk(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(Yo(r.predicate))t.set(r.subject,r.object);else if(Fk(r.predicate))s.set(r.subject,r.object);else{let i=Bk[String(r.predicate).trim().toLowerCase()];if(!i)continue;let a=Number(r.object);Number.isFinite(a)&&n.set(r.subject,{kind:i,n:a})}let o=[];for(let[r,{kind:i,n:a}]of n){if(t.get(r)!==Uk)continue;let l=s.get(r);l&&o.push({restriction:r,kind:i,n:a,onClass:l})}return o.sort((r,i)=>r.restriction.localeCompare(i.restriction)),o}function Eh(e,t,{budget:n=50,focus:s=null}={}){let o=On(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=J(f.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:f.restriction,target:f.target})}let i=new Set;for(let[f,p]of t||[])f&&p&&i.add(`${f}${Le}${p}`);let a=s instanceof Set?s.size?s:null:ss(s),l=(f,p)=>!a||a.has(f)||a.has(p),c=[];for(let[,f]of r)if(!(f.length<2))for(let p of f)for(let m of f){if(p.restriction===m.restriction||p.target===m.target||!o(p.target).has(m.target))continue;let h=`${p.restriction}${Le}${m.restriction}`;i.has(h)||l(p.restriction,m.restriction)&&c.push([p.restriction,m.restriction,p.target,m.target,h])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,m,h,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:m,viaY2:h})}return u}function Sh(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=On(e),a=r instanceof Set?r.size?r:null:ss(r),l=f=>!a||a.has(n)||a.has(f),c=new Map;for(let[f,p]of e||[])!f||!p||(c.has(f)||c.set(f,new Set),c.get(f).add(p));let u=new Map((t||[]).map(f=>[f.restriction,f])),d=0;for(let f of[n,...i(n)]){if(d>=o)break;if(d+=1,!!l(f))for(let p of c.get(f)||[]){let m=u.get(p);if(m&&s(m))return{viaClass:f,viaRestriction:p,record:m}}}return null}function qk(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Sh(e,t,n,a=>a.onClass===s&&(a.kind==="exactly"||a.kind==="min")&&a.n>=o,r);return i?{subject:n,object:s,m:o,n:i.record.n,kind:i.record.kind,viaClass:i.viaClass,viaRestriction:i.viaRestriction}:null}function Hk(e,t,n,s,o={}){if(!s)return null;let r=Sh(e,t,n,i=>i.onClass===s&&i.kind==="max"&&i.n===0,o);return r?{subject:n,object:s,viaClass:r.viaClass,viaRestriction:r.viaRestriction}:null}function Kk(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map;for(let[p,m]of n||[])!p||!m||p===m||(i.has(p)||i.set(p,new Set),i.get(p).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(p));if(!i.size)return[];let a=new Map;for(let[p,m]of e||[])!p||!m||(a.has(p)||a.set(p,new Set),a.get(p).add(m));let l=o instanceof Set?o.size?o:null:ss(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,m]of a){if(!c(p))continue;let h=[...m].sort();for(let g=0;g<h.length;g+=1)for(let b=g+1;b<h.length;b+=1){let[y,w]=[h[g],h[b]],v=[y,...r(y)],_=[w,...r(w)],$=null;for(let S of v){let E=i.get(S);if(E){for(let R of _)if(E.has(R)){$=[S,R];break}if($)break}}if(!$)continue;let x=`${p}${Le}${y}${Le}${w}`;d.has(x)||(d.add(x),u.push([p,y,w,$[0],$[1]]))}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[1].localeCompare(m[1])||p[2].localeCompare(m[2]));let f=[];for(let[p,m,h,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:m,classB:h,viaA:g,viaB:b})}return f}async function Yk(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=ia,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=fh(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(k=>_s(k.predicate)).map(k=>[k.subject,k.object]),h=p.filter(k=>oo(k.predicate)).map(k=>[k.subject,k.object]),g=p.filter(k=>so(k.predicate)).map(k=>[k.subject,k.object]),b=new Map,y=new Map,w=[];for(let k of p){let le=String(k.predicate||"").trim().toLowerCase();Yo(k.predicate)?b.set(k.subject,k.object):Vr(k.predicate)?y.set(k.subject,k.object):Bl.has(le)||w.push([k.subject,k.predicate,k.object])}let v=[];for(let[k,le]of b){let Te=y.get(k);Te&&v.push({restriction:k,property:le,target:Te})}let _=ss(s),$=o&&_?Nl(p,[..._]):_,x=$===null&&d?await a.loadSyllogiseState(e):null,S=new Set(p.map(k=>k.id)),E=Array.isArray(x?.factIds)?x.factIds.filter(k=>!S.has(k)):[],R=x&&Array.isArray(x.factIds)&&!E.length&&!i?"delta":"full",j=R==="delta"?new Set(x.factIds):null,A=R==="delta"?p.filter(k=>!j.has(k.id)):p,F=A.length,T=new Map;for(let k of p)T.set(`${k.subject}${Le}${k.predicate}${Le}${k.object}`,k.trust);let M=(k,le,Te)=>T.get(`${k}${Le}${le}${Le}${Te}`),z=(k,le,Te)=>T.has(`${k}${Le}${le}${Le}${Te}`),Y=k=>k.filter(le=>typeof le=="number"),ae=R==="delta"&&!A.length,Z=R==="delta"?A.filter(k=>_s(k.predicate)).map(k=>[k.subject,k.object]):[],D=R==="delta"?Z.length?yh(m,Z,{depth:t,budget:n,focus:$}):[]:wh(m,{depth:t,budget:n,focus:$}),U=m.concat(D.map(k=>[k.subject,k.object])),G=$,I=null;if(R==="delta"&&!ae){let k=p.concat(D.map(Te=>({subject:Te.subject,predicate:Fe,object:Te.object}))),le=[];for(let Te of A)le.push(Te.subject,Te.object);I=Nl(k,le),G=I}let L=k=>!I||I.has(k),C=I?h.filter(([k,le])=>L(k)||L(le)):h,P=new Set;if(I)for(let k of A)so(k.predicate)&&(P.add(k.subject),P.add(k.object));let N=I&&P.size?On(U):null,W=I?h.filter(([k,le])=>L(k)||L(le)||N&&[...N(le)].some(Te=>P.has(Te))):h,V=new Set;if(I){for(let k of A)if(Yo(k.predicate)||Vr(k.predicate)){let le=b.get(k.subject);le&&V.add(J(le))}}let ie=I?w.filter(([k,le,Te])=>L(k)||L(Te)||V.has(J(le))):w,ce=Math.max(0,n-D.length),K=ce>0&&!ae?$h(C,U,{budget:ce,focus:G,presentTypeEdges:h}):[],ee=Math.max(0,n-D.length-K.length),q=ee>0&&!ae?vh(W,U,g,{budget:ee,focus:G}):[],ne=Math.max(0,n-D.length-K.length-q.length),te=ne>0&&v.length&&!ae?xh(ie,h,U,v,{budget:ne,focus:G}):[],xe=Math.max(0,n-D.length-K.length-q.length-te.length),Ae=xe>0&&v.length>1&&!ae?Eh(v,U,{budget:xe,focus:G}):[],pe=new Map(v.map(k=>[k.restriction,k])),re=[...D.map(k=>({subject:k.subject,predicate:Fe,object:k.object,provenance:hh,justification:[[ge(k.subject,Fe,k.via),ge(k.via,Fe,k.object)]]})),...K.map(k=>({subject:k.subject,predicate:Lt,object:k.object,provenance:bh,justification:[[ge(k.subject,Lt,k.via),ge(k.via,Fe,k.object)]]})),...q.map(k=>{let le=z(k.viaClass,Ko,k.object),[Te,zn]=le?[k.viaClass,k.object]:[k.object,k.viaClass],So=Y([M(k.subject,Lt,k.viaType),M(Te,Ko,zn),...k.viaClass!==k.viaType?[M(k.viaType,Fe,k.viaClass)]:[]]);return{subject:k.subject,predicate:Ko,object:k.object,provenance:Ml,justification:[[ge(k.subject,Lt,k.viaType),ge(Te,Ko,zn),...k.viaClass!==k.viaType?[ge(k.viaType,Fe,k.viaClass)]:[]]],...So.length?{premiseTrusts:So,ruleConfidence:Fl}:{}}}),...te.map(k=>{let le=Y([M(k.subject,k.viaProperty,k.viaValue),M(k.viaValue,Lt,k.viaType),M(k.object,In,k.viaPropertyKey),M(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[M(k.viaType,Fe,k.viaTarget)]:[]]);return{subject:k.subject,predicate:Lt,object:k.object,provenance:zl,justification:[[ge(k.subject,k.viaProperty,k.viaValue),ge(k.viaValue,Lt,k.viaType),ge(k.object,In,k.viaPropertyKey),ge(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[ge(k.viaType,Fe,k.viaTarget)]:[]]],...le.length?{premiseTrusts:le,ruleConfidence:Ul}:{}}}),...Ae.map(k=>{let le=pe.get(k.subject),Te=pe.get(k.object),zn=Y([le&&M(k.subject,In,le.property),M(k.subject,Cn,k.viaY1),Te&&M(k.object,In,Te.property),M(k.object,Cn,k.viaY2),M(k.viaY1,Fe,k.viaY2)]);return{subject:k.subject,predicate:Fe,object:k.object,provenance:Gl,justification:[[...le?[ge(k.subject,In,le.property)]:[],ge(k.subject,Cn,k.viaY1),...Te?[ge(k.object,In,Te.property)]:[],ge(k.object,Cn,k.viaY2),ge(k.viaY1,Fe,k.viaY2)]],...zn.length?{premiseTrusts:zn,ruleConfidence:ql}:{}}})],fe=re.map(k=>({id:ge(k.subject,k.predicate,k.object),subject:k.subject,predicate:k.predicate,object:k.object,environments:k.justification,write:k})),be=jh(p.concat(fe.map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object})))),Ie=new Map(p.map(k=>[k.id,k])),ue=k=>_s(k)||oo(k)||so(k),H=k=>R!=="delta"||I!==null&&(I.has(k.subject)||I.has(k.object)),se=p.filter(k=>ue(k.predicate)&&kh(k.provenance)&&qr(k).length<r&&H(k)).map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object,environments:qr(k),provenance:k.provenance})),et=[...fe,...se].sort((k,le)=>k.subject.localeCompare(le.subject)||k.predicate.localeCompare(le.predicate)||k.object.localeCompare(le.object)),De=0,Ve=!1,sn=0;for(let k of et){if(sn>=n){Ve=!0;break}sn+=1;let le=be(k,{maxEnvironments:r+1}),{kept:Te,truncated:zn}=Jk(k.environments,le,r);if(zn&&(Ve=!0),!(Te.length<=k.environments.length)){if(De+=Te.length-k.environments.length,k.write){k.write.justification=Te;continue}re.push({subject:k.subject,predicate:k.predicate,object:k.object,justification:Te,..._h(k.provenance,Te,So=>Ie.get(So)?.trust)||{}})}}let{ids:on}=await u(e,re),Xt=[],Ft=0;for(let k of D)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.via,rule:mh}),Ft+=1;for(let k of K)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.via,rule:gh}),Ft+=1;for(let k of q)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.viaClass,rule:Pl}),Ft+=1;for(let k of te)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.viaValue,rule:Dl}),Ft+=1;for(let k of Ae)Xt.push({id:on[Ft],subject:k.subject,object:k.object,via:k.viaY1,rule:Wl}),Ft+=1;let wi=Xt.length>=n;if($===null&&d&&!wi){let k=new Set(S);for(let le of on)k.add(le);await a.saveSyllogiseState(e,{version:1,factIds:[...k].sort(),completedAt:new Date().toISOString()})}return{derived:Xt,count:Xt.length,budget:n,depth:t,truncated:wi,mode:R,deltaSize:F,environmentsAdded:De,alternatesTruncated:Ve}}function kh(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function Xk(e){let t=[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map;for(let u of e){let d=String(u.predicate||"").trim().toLowerCase();_s(u.predicate)?t.push([u.subject,u.object]):oo(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):so(u.predicate)?(s.has(u.subject)||s.set(u.subject,new Set),s.get(u.subject).add(u.object),s.has(u.object)||s.set(u.object,new Set),s.get(u.object).add(u.subject)):Yo(u.predicate)?o.set(u.subject,u.object):Vr(u.predicate)?r.set(u.subject,u.object):Bl.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([J(u.predicate),u.object]))}let a=On(t),l=(u,d)=>u!==d&&a(u).has(d),c=u=>{let d=o.get(u),f=r.get(u);return d&&f?{property:J(d),target:f}:null};return u=>{if(_s(u.predicate)){if(l(u.subject,u.object))return!0;let d=c(u.subject),f=c(u.object);return!!(d&&f&&d.property===f.property&&l(d.target,f.target))}if(oo(u.predicate)){for(let f of n.get(u.subject)||[])if(l(f,u.object))return!0;let d=c(u.object);if(d){for(let[f,p]of i.get(u.subject)||[])if(f===d.property){for(let m of n.get(p)||[])if(m===d.target||l(m,d.target))return!0}}return!1}if(so(u.predicate)){for(let d of n.get(u.subject)||[])for(let f of[d,...a(d)])if(s.get(f)?.has(u.object))return!0;return!1}return!0}}function jh(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,l=new Map,c=new Map;for(let p of e){if(!p||!p.subject||!p.predicate||!p.object)continue;p.id&&t.add(p.id);let m=String(p.predicate||"").trim().toLowerCase();_s(p.predicate)?(n.push([p.subject,p.object]),s.has(p.subject)||s.set(p.subject,new Set),s.get(p.subject).add(p.object)):oo(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):so(p.predicate)?(r.add(`${p.subject}${Le}${p.object}`),i.has(p.subject)||i.set(p.subject,new Set),i.get(p.subject).add(p.object),i.has(p.object)||i.set(p.object,new Set),i.get(p.object).add(p.subject)):Yo(p.predicate)?a.set(p.subject,p.object):Vr(p.predicate)?l.set(p.subject,p.object):Bl.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=On(n),d=p=>s.get(p)||new Set,f=p=>{let m=a.get(p),h=l.get(p);return m&&h?{property:m,propertyKey:J(m),target:h}:null};return(p,{maxEnvironments:m=ia}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every(v=>t.has(v)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),h.push(y))};if(_s(p.predicate)){for(let y of[...d(p.subject)].sort()){if(h.length>=m)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([ge(p.subject,Fe,y),ge(y,Fe,p.object)])}if(h.length<m){let y=f(p.subject),w=f(p.object);y&&w&&y.propertyKey===w.propertyKey&&y.target!==w.target&&d(y.target).has(w.target)&&b([ge(p.subject,In,y.property),ge(p.subject,Cn,y.target),ge(p.object,In,w.property),ge(p.object,Cn,w.target),ge(y.target,Fe,w.target)])}return h}if(oo(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(h.length>=m)break;w!==p.object&&d(w).has(p.object)&&b([ge(p.subject,Lt,w),ge(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([v])=>J(v)===y.propertyKey).sort((v,_)=>v[0].localeCompare(_[0])||v[1].localeCompare(_[1]));for(let[v,_]of w){if(h.length>=m)break;for(let $ of[...o.get(_)||[]].sort()){if(h.length>=m)break;$!==y.target&&!d($).has(y.target)||b([ge(p.subject,v,_),ge(_,Lt,$),ge(p.object,In,y.propertyKey),ge(p.object,Cn,y.target),...$!==y.target?[ge($,Fe,y.target)]:[]])}}}return h}if(so(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let v of[w,...u(w)])(i.get(v)||new Set).has(p.object)&&y.push([w,v]);y.sort((w,v)=>w[0].localeCompare(v[0])||w[1].localeCompare(v[1]));for(let[w,v]of y){if(h.length>=m)break;let _=r.has(`${v}${Le}${p.object}`),[$,x]=_?[v,p.object]:[p.object,v];b([ge(p.subject,Lt,w),ge($,Ko,x),...v!==w?[ge(w,Fe,v)]:[]])}return h}return h}}function Jk(e,t,n){let s=[],o=new Set,r=!1;for(let i of[...e||[],...t||[]]){if(!Array.isArray(i)||!i.length)continue;let a=[...i].sort().join(" ");if(!o.has(a)){if(s.length>=n){r=!0;continue}o.add(a),s.push(i)}}return{kept:s,truncated:r}}function _h(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=Qk.get(i);if(a!==void 0){s=a;break}}if(s===void 0)return null;let o=null,r=-1;for(let i of t||[]){let a=i.map(c=>n(c)).filter(c=>typeof c=="number");if(a.length!==i.length)continue;let l=Math.min(...a);l>r&&(r=l,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function Zk(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=ia,store:i,sourceTags:a=[]}={}){let{loadMemory:l,readFactRows:c,removeFacts:u}=fh(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),d=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,p=(a||[]).filter(Boolean);if(p.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let m=J(t),h=J(n),g=ge(m,Fe,h),b=await l(e),y=c(b),w=new Map(y.map(M=>[M.id,M]));if(!w.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let v=w.get(g).sourceIds||[],_=p.map(M=>f(g,M).slice(g.length+1)),$=p.length?v.filter(M=>_.includes(M)):[],x=!p.length||$.length>0;if(p.length&&!x)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let S=p.length>0&&$.length<v.length,E=new Set([g]),R=[g],j=new Map,A=!1;if(!S){let M=y.filter(Z=>qr(Z).length&&kh(Z.provenance)),z=new Map;for(let Z of M)for(let D of qr(Z))for(let U of D)z.has(U)||z.set(U,new Set),z.get(U).add(Z.id);let Y=0,ae=[g];for(;Y<o;Y+=1){let Z=new Set;for(let N of ae)for(let W of z.get(N)||[])E.has(W)||Z.add(W);let D=[...Z].map(N=>w.get(N)).sort((N,W)=>N.subject.localeCompare(W.subject)||N.predicate.localeCompare(W.predicate)||N.object.localeCompare(W.object));if(!D.length)break;let U=y.filter(N=>!E.has(N.id)&&!Z.has(N.id)),G=new Set(U.map(N=>N.id)),I=jh(U),L=Xk(U),C=!1,P=!1;ae=[];for(let N of D){if(E.size>=s){P=!0;break}let W=qr(N),V=W.filter(ce=>ce.every(K=>G.has(K)));if(V.length){V.length!==W.length&&j.set(N.id,V);continue}let ie=I(N,{maxEnvironments:r});if(ie.length){j.set(N.id,ie);continue}L(N)||(E.add(N.id),R.push(N.id),ae.push(N.id),C=!0)}if(P){A=!0;break}if(!C)break}!A&&Y>=o&&(A=M.some(Z=>!E.has(Z.id)&&Z.justification.some(D=>E.has(D))))}let F=p.length?[...$.map(M=>`${g}@${M}`),...R.slice(1)]:R,{removed:T}=await u(e,F);if(d){let M=[...j.entries()].filter(([z])=>!E.has(z)).sort((z,Y)=>z[0].localeCompare(Y[0])).map(([z,Y])=>{let ae=w.get(z);return{subject:ae.subject,predicate:ae.predicate,object:ae.object,justification:Y,..._h(ae.provenance,Y,Z=>w.get(Z)?.trust)||{}}});M.length&&await d(e,M)}return{retracted:T,count:T.length,budget:s,depth:o,truncated:A,found:!0,...p.length?{ownRecord:!0,stillStands:S}:{}}}function Vl(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=new Map;for(let[c,u]of s||[])!c||!u||c===u||(i.has(c)||i.set(c,new Set),i.get(c).add(u));let a=[];for(let[c,u]of n||[])c===e&&u&&a.push({node:u,path:[{subject:c,predicate:Lt,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Fe,object:c}]});let l=new Set([e]);for(let c=1;c<=o&&a.length;c+=1){for(let{node:d,path:f}of a)if(r.has(d))return f;if(c===o)break;let u=[];for(let{node:d,path:f}of a)if(!l.has(d)){l.add(d);for(let p of i.get(d)||[])l.has(p)||u.push({node:p,path:[...f,{subject:d,predicate:Fe,object:p}]})}a=u}return null}var Fe,mh,hh,Lt,gh,bh,Ko,Pl,Ml,Fl,In,Cn,Dl,zl,Ul,ia,Le,_s,oo,so,Yo,Vr,Fk,Bl,Uk,Bk,Wl,Gl,ql,Gk,Vk,qr,Qk,qt=O(()=>{nn();Fe="rdfs:subClassOf",mh="subClassOf",hh=`entailed:${mh}`,Lt="rdf:type",gh="type",bh=`entailed:${gh}`,Ko="owl:disjointWith",Pl="disjointWith",Ml=`entailed:${Pl}`,Fl=.95,In="owl:onProperty",Cn="owl:someValuesFrom",Dl="someValuesFrom",zl=`entailed:${Dl}`,Ul=.95,ia=4,Le="\u241F",_s=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",oo=e=>String(e||"").trim().toLowerCase()==="rdf:type",so=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Yo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Vr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",Fk=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Bl=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);Uk="has",Bk={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Wl="someValuesFromSubsumption",Gl=`entailed:${Wl}`,ql=.95;Gk=.95;Vk=.95;qr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);Qk=new Map([[Ml,Fl],[zl,Ul],[Gl,ql]])});function Zo(e){let t=String(e||""),n=Rh.get(t);return n||(t.startsWith(Hl)?Xo+t.slice(Hl.length):t)}function Th(e){let t=String(e||""),n=ej.get(t);return n||(t.startsWith(Xo)?Hl+t.slice(Xo.length):null)}function Ch(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Vl(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function la(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Ih(i),c=i.filter(b=>(b.predicate===ca||b.predicate===Jo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===Jo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=Ch(o,b.subject,a,l,s);w&&w.length&&u.push({fact:b,polarity:y,hops:w.length,chain:w})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:Yl(o,r,i,{maxHops:s})};u.sort((b,y)=>b.hops-y.hops||(y.fact.trust||0)-(b.fact.trust||0));let d=u[0].hops,f=u.filter(b=>b.hops===d),p=f.filter(b=>b.polarity==="positive").map(b=>b.fact),m=f.filter(b=>b.polarity==="negative").map(b=>b.fact),h=m.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==h)||null;return{verdict:p.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:p,negative:m,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function Yl(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===Lt),l=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(h=>h.object===c&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let g=i.find(b=>b.subject===h&&r.has(b.object)&&(b.predicate===ca||b.predicate===Jo));return g?{name:h,polarity:g.predicate===Jo?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=Ih(i);return{klass:c,kinds:u.length,positive:f.filter(h=>h.polarity==="positive"),negative:f.filter(h=>h.polarity==="negative"),unknown:f.filter(h=>h.polarity==="unknown"),chain:Ch(o,c,p,m,s)}}function Xl(e,t,{exclude:n=[],maxHops:s=3}={}){let o=Qo(e),r=Qo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==ca||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),la(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(tj)}var Xo,Hl,aa,Rh,ej,Ah,ca,Jo,Kl,tj,Qo,Ih,ua=O(()=>{qt();Xo="mgxneg:",Hl="mgx:",aa="mgxneg:subClassOf",Rh=new Map([[Fe,aa]]),ej=new Map([...Rh].map(([e,t])=>[t,e]));Ah=e=>String(e||"").startsWith(Xo),ca="mgx:capableOf",Jo=Zo(ca),Kl=6,tj=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),Qo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Ih=e=>({typeEdges:e.filter(t=>t.predicate===Lt).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function da(e){let t=String(e||"");return Zl.has(t)?Jl:sj.has(t)||oj.test(t)?Hr:rj.has(t)?Oh:Ql}function ij(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(Pp.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function aj(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(ij(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function eu(e,t){let n=t===Oh;if(!n&&t!==Hr)return null;let s=(e||[]).map(r=>({row:r,at:aj(r,n)}));s.sort((r,i)=>{if(r.at!==i.at)return r.at===null?1:i.at===null?-1:n?r.at-i.at:i.at-r.at;let a=(i.row.trust||0)-(r.row.trust||0);if(a)return a;let[l,c]=[String(r.row.object),String(i.row.object)];return l<c?-1:l>c?1:0});let o=s.map(r=>r.row);return{winner:o[0]||null,ranked:o,contested:s.length>1&&s[0].at===s[1].at}}var Jl,Hr,Oh,Ql,nj,Zl,sj,oj,rj,Lh=O(()=>{ua();ws();Jl="merge",Hr="latest-observation-wins",Oh="first-claim-wins",Ql="contradiction",nj=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","mgx:usedFor","mgx:receivesAction","mgx:causes","mgx:causesDesire","mgx:hasSubevent","mgx:hasPrerequisite","mgx:motivatedByGoal","mgx:obstructedBy","mgx:desires","mgx:hasProperty","mgx:madeOf","mgx:atLocation","mgx:locatedNear","mgx:createdBy","mgx:mannerOf","mgx:relatedTo","mgx:synonym","mgx:antonym","mgx:similarTo","mgx:symbolOf","mgx:knows-about"],Zl=new Set(nj.flatMap(e=>[e,Zo(e)])),sj=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in","mgx:on-top-of","mgx:on-plane","mgx:under","mgx:is-open","mgx:hasMass","mgx:feels","mgx:faces","mgx:pose","mgx:display-name","mgx:nodeName","mgx:worldName"]),oj=/^mgx:has-exit-([a-z]+)$/,rj=new Set(["mgx:playedBy"])});function Xr(e){let t=String(e||""),n=t.indexOf(pa);return n<0?"":t.slice(n+pa.length)}function pj(e){let t=1,n=0;for(let s of e)t*=1-uj(s),n+=1;return n?dj(Math.min(1,1-t)):0}function Dh(e,t,n){let s=Date.parse(e),o=Date.parse(t);return Number.isFinite(s)?Number.isFinite(o)?n(s,o)===s?String(e):String(t):String(e):Number.isFinite(o)?String(t):""}function Bh(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt),o=Number.isFinite(n)?n:-1/0,r=Number.isFinite(s)?s:-1/0;return o!==r?r-o:e.id<t.id?-1:e.id>t.id?1:0}function Wh(e,t="",n=""){let s=t,o=n;for(let r of e)s=zh(s,r.assertedAt),o=Uh(o,r.assertedAt);return{earliest:s,latest:o}}function ou({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let l=[...new Set(o)].filter(Boolean).sort(),c=a?pj(l.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:cj,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:createdAt",key:"createdAt",value:r},{prop:"mgx:sourceId",key:"sourceId",value:t},{prop:s,key:s===er?"rollupSourceIds":"rollupRecordIds",value:l.join(" ")},{prop:Yr,key:"rollupCount",value:String(l.length)},{prop:Ln,key:"rollupEarliest",value:r},{prop:Nn,key:"rollupLatest",value:i},...c===void 0?[]:[{prop:tr,key:"rollupPrior",value:String(c)}]]}}function Gh({groupId:e,sourceType:t,heads:n=[],existing:s=null,priorFor:o}){if(!e||!t||n.length<64||n.length<=8)return null;let i=n.slice().sort(Bh).slice(8);if(!i.length)return null;let{earliest:a,latest:l}=Wh(i,xt(s,Ln),xt(s,Nn));return{rollup:ou({id:tu(e,t),sourceKey:`rollup:${t}`,template:ru(i[0].record||s),idsProp:er,ids:[...ha(s),...i.map(u=>u.sourceId)],earliest:a,latest:l,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function qh({groupId:e,sourceId:t,leaves:n=[],existing:s=null}){if(!e||!t||n.length<8||n.length<=2)return null;let o=n.slice().sort(Bh),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:l}=Wh(i,xt(s,Ln),xt(s,Nn));return{rollup:ou({id:nu(e,t),sourceKey:t,template:ru(i[0].record||s),idsProp:Kr,ids:[...lj(s),...i.map(u=>u.id)],earliest:a,latest:l}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function iu(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Rs(s),r=o?er:Kr,i=a=>su(xt(a,r));return ou({id:s,sourceKey:xt(e,"mgx:sourceId")||xt(t,"mgx:sourceId"),template:ru(xt(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:zh(xt(e,Ln),xt(t,Ln)),latest:Uh(xt(e,Nn),xt(t,Nn)),priorFor:o?n:void 0})}function Vh(e,t){if(!t)return!1;for(let n of e||[])if(ha(n).includes(t))return!0;return!1}var cj,Nh,Ph,fa,Mh,er,Kr,Yr,Ln,Nn,tr,pa,Fh,tu,nu,Rs,nr,ma,xt,su,ha,lj,uj,dj,zh,Uh,ru,au=O(()=>{cj="Fact",Nh=64,Ph=8,fa=8,Mh=2,er="mgx:rollupSourceIds",Kr="mgx:rollupRecordIds",Yr="mgx:rollupCount",Ln="mgx:rollupEarliest",Nn="mgx:rollupLatest",tr="mgx:rollupPrior",pa="@rollup:",Fh="#rollup",tu=(e,t)=>`${e}${pa}${t}`,nu=(e,t)=>`${e}@${t}${Fh}`,Rs=e=>String(e||"").includes(pa),nr=e=>String(e||"").endsWith(Fh),ma=e=>Rs(e)||nr(e);xt=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",su=e=>String(e||"").split(" ").filter(Boolean),ha=e=>su(xt(e,er)),lj=e=>su(xt(e,Kr)),uj=e=>Math.max(0,Math.min(1,Number(e)||0)),dj=e=>Number(e.toFixed(6));zh=(e,t)=>Dh(e,t,Math.min),Uh=(e,t)=>Dh(e,t,Math.max);ru=e=>({label:e?.label||"",subject:xt(e,"rdf:subject"),predicate:xt(e,"rdf:predicate"),object:xt(e,"rdf:object")})});function du(e){let t=String(e||"");return uu(t)?t.slice(0,-ya.length):""}function Hh(e,t){let n=Date.parse(e),s=Date.parse(t);return Number.isFinite(n)?Number.isFinite(s)&&s>n?String(t):String(e):Number.isFinite(s)?String(t):""}function pu({id:e,sourceId:t,template:n,ids:s,retractedAt:o,tags:r}){let i=[...new Set(s)].filter(Boolean).sort(),a=[...new Set(r)].filter(Boolean).sort();return{id:e,label:n?.label||"",class:xn,derived_from:[],mentions:[],attributes:[{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:sourceId",key:"sourceId",value:t||""},{prop:ba,key:"retractedRecordIds",value:i.join(" ")},{prop:cu,key:"retractedCount",value:String(i.length)},{prop:wa,key:"retractedAt",value:o||""},...a.length?[{prop:Jr,key:"provenance",value:a.join(" | ")}]:[]]}}function Yh({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...ro(o),...n].filter(Boolean);return a.length?pu({id:lu(e,t),sourceId:t,template:r||Kh(o),ids:a,retractedAt:Hh(io(o),s),tags:[...Qr(un(o,Jr)),...Qr(i)]}):null}function Xh(e,t){let n=Kh(un(e,"rdf:subject")?e:t);return pu({id:e?.id||t?.id,sourceId:un(e,"mgx:sourceId")||un(t,"mgx:sourceId"),template:n,ids:[...ro(e),...ro(t)],retractedAt:Hh(io(e),io(t)),tags:[...Qr(un(e,Jr)),...Qr(un(t,Jr))]})}function mj(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function hj(e,t,n=""){return!e||!t||!ro(e).includes(t)?!1:mj(n,io(e))}function $a(e,t,n=""){for(let s of e||[])if(hj(s,t,n))return!0;return!1}function gj(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function bj(e){let t=String(e||"").split(" ").filter(Boolean),n=t[0]||"",s=n==="-"||!Number.isFinite(Date.parse(n))?"":n,o=s||n==="-"?t.slice(1):t;return{retractedAt:s,ids:o}}function va(e){let t=du(e?.id);return t?{id:e.id,subject:t,predicate:ga,object:gj(io(e),ro(e)),provenance:un(e,Jr)}:null}function xa(e){if(!e||e.predicate!==ga)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=bj(e.object);return o.length?pu({id:`${t}${ya}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Qr(e.provenance)}):null}var xn,ga,ba,wa,cu,ya,Jr,lu,uu,un,fj,Qr,ro,io,Kh,fu=O(()=>{xn="Retraction",ga="mgx:retracted",ba="mgx:retractedRecordIds",wa="mgx:retractedAt",cu="mgx:retractedCount",ya="#retracted",Jr="mgx:factProvenance",lu=(e,t)=>`${e}@${t}${ya}`,uu=e=>String(e||"").endsWith(ya);un=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",fj=e=>String(e||"").split(" ").filter(Boolean),Qr=e=>String(e||"").split(" | ").filter(Boolean),ro=e=>fj(un(e,ba)),io=e=>un(e,wa);Kh=e=>({label:e?.label||"",subject:un(e,"rdf:subject"),predicate:un(e,"rdf:predicate"),object:un(e,"rdf:object")})});function os(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function Ej(e,t){(!e?.class||!wj.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function Sj(e,t){for(let i of["rdf:subject","rdf:predicate","rdf:object"])Zr(os(e,i))||t.push(`a Fact needs a non-empty ${i}`);for(let i of["rdf:subject","rdf:object"]){let a=os(e,i);a!==void 0&&$j.test(a)&&t.push(`a Fact's ${i} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(a)})`)}let n=os(e,"mgx:factProvenance");n!==void 0&&!Zr(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";vj(s)&&!Qh.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=os(e,"mgx:sourceId");o!==void 0&&!Zr(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=os(e,"mgx:observedAt");r!==void 0&&!Number.isFinite(Date.parse(r))&&t.push(`mgx:observedAt, when present, must be a parseable instant (got ${JSON.stringify(r)})`);for(let i of xj){let a=os(e,i);if(a===void 0)continue;let l=a.split(" ").filter(Boolean);l.length||t.push(`${i}, when present, must name at least one record id`);for(let c of l)Qh.test(c)||t.push(`${i} must name Fact record ids (got ${JSON.stringify(c)})`)}}function kj(e,t){Zr(os(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=os(e,"mgx:ruleKind");if(!n||!Jh.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...Jh].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of yj[n])Zr(os(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function jj(e){let t=[];return Ej(e,t),e?.class==="Fact"&&Sj(e,t),e?.class==="Rule"&&kj(e,t),{ok:t.length===0,violations:t}}function mu(e){let t=jj(e);if(!t.ok){let n=new Error(`SHACL validation failed for ${e?.class} "${e?.id}": ${t.violations.join(" | ")}`);throw n.violations=t.violations,n}}var wj,Jh,yj,$j,Qh,vj,xj,Zr,Zh=O(()=>{wj=new Set(["Utterance","Fact","Session","Source","Rule"]),Jh=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),yj={compose2:["mgx:ruleBase1","mgx:ruleBase2"],filter:["mgx:ruleBase1","mgx:ruleFilterProperty"],recursive:["mgx:ruleBaseCase","mgx:ruleRecStep"],"action-signature":["mgx:ruleActionSubjectClass","mgx:ruleActionTargetClass"],"action-precond":["mgx:ruleActionPrecondShape","mgx:ruleActionPrecondPredicate","mgx:ruleActionPrecondRole","mgx:ruleActionPrecondScope"],"action-effect":["mgx:ruleActionEffectPredicate","mgx:ruleActionEffectSubject"],"action-constraint":["mgx:ruleActionConstraintLeft","mgx:ruleActionConstraintRight","mgx:ruleActionConstraintGuard"]},$j=/[.!?]\s+\w/,Qh=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,vj=e=>e.includes("@")||/#v\d/.test(e),xj=["mgx:supersedes","mgx:supersededBy"];Zr=e=>typeof e=="string"&&e.trim().length>0});var eg={};Un(eg,{access:()=>Tj,appendFile:()=>Cj,basename:()=>Kj,copyFile:()=>Dj,createInterface:()=>Zj,createReadStream:()=>Uj,createRequire:()=>_j,createWriteStream:()=>Bj,default:()=>t_,dirname:()=>qj,existsSync:()=>Wj,fileURLToPath:()=>Xj,isAbsolute:()=>Hj,join:()=>Gj,mkdir:()=>Oj,mkdtemp:()=>Lj,randomBytes:()=>Jj,readFile:()=>Aj,readFileSync:()=>Rj,readdir:()=>zj,rename:()=>Nj,resolve:()=>Vj,rm:()=>Mj,sep:()=>Yj,spawnSync:()=>Qj,stat:()=>Fj,tmpdir:()=>e_,unlink:()=>Pj,writeFile:()=>Ij});var dt,_j,Rj,Tj,Aj,Ij,Cj,Oj,Lj,Nj,Pj,Mj,Fj,Dj,zj,Uj,Bj,Wj,Gj,qj,Vj,Hj,Kj,Yj,Xj,Jj,Qj,Zj,e_,t_,tg=O(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},_j=dt("createRequire"),Rj=dt("readFileSync"),Tj=dt("access"),Aj=dt("readFile"),Ij=dt("writeFile"),Cj=dt("appendFile"),Oj=dt("mkdir"),Lj=dt("mkdtemp"),Nj=dt("rename"),Pj=dt("unlink"),Mj=dt("rm"),Fj=dt("stat"),Dj=dt("copyFile"),zj=dt("readdir"),Uj=dt("createReadStream"),Bj=dt("createWriteStream"),Wj=()=>!1,Gj=(...e)=>e.join("/"),qj=e=>String(e).replace(/\/[^/]*$/,""),Vj=(...e)=>e.join("/"),Hj=e=>String(e).startsWith("/"),Kj=e=>String(e).split("/").pop(),Yj="/",Xj=e=>String(e),Jj=dt("randomBytes"),Qj=dt("spawnSync"),Zj=dt("createInterface"),e_=()=>"/tmp",t_={}});var n_,ei,hu=O(()=>{n_=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,ei=class e extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,s=!0,o="Z";if(typeof t=="string"){let r=t.match(n_);r?(r[1]||(n=!1,t=`0000-01-01T${t}`),s=!!r[2],s&&t[10]===" "&&(t=t.replace(" ","T")),r[2]&&+r[2]>23?t="":(o=r[3]||null,t=t.toUpperCase(),!o&&s&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=n,this.#n=s,this.#e=o)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let s=new e(t);return s.#e=n,s}static wrapAsLocalDateTime(t){let n=new e(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#t=!1,n.#e=null,n}}});function s_(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function o_(e,t,n){let s=e.split(/\r\n|\n|\r/g),o="",r=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let a=s[i-1];a&&(o+=i.toString().padEnd(r," "),o+=": ",o+=a,o+=`
|
|
85
|
+
`),tier:g,topup:y}}async function Nl(e,{config:t,source:n,tel:s}){return(await hh(e,{config:t,source:n,tel:s})).text}var Pl=O(()=>{_t();Ue();Bt();ta();_r();Oe();ks();oa();ra();Ge();Nl.ownsGraphLoad=!0});function gh(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"symbol"),"symbol");return Uf(Po(t,s))}var bh=O(()=>{Oe();Ge()});function ia(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function Gr(e){return ia(e).toString(16).padStart(8,"0")}function qk(e){let t=new TextEncoder().encode(String(e)),n=t.length*8,s=new Uint8Array((t.length+8>>6)+1<<6);s.set(t),s[t.length]=128;let o=new DataView(s.buffer);o.setUint32(s.length-8,Math.floor(n/4294967296)),o.setUint32(s.length-4,n>>>0);let r=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),i=new Uint32Array(64),a=(u,d)=>u>>>d|u<<32-d;for(let u=0;u<s.length;u+=64){for(let w=0;w<16;w+=1)i[w]=o.getUint32(u+w*4);for(let w=16;w<64;w+=1){let v=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,_=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+v+i[w-7]+_>>>0}let[d,f,p,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let v=a(h,6)^a(h,11)^a(h,25),_=h&g^~h&b,$=y+v+_+Gk[w]+i[w]>>>0,x=a(d,2)^a(d,13)^a(d,22),S=d&f^d&p^f&p,E=x+S>>>0;y=b,b=g,g=h,h=m+$>>>0,m=p,p=f,f=d,d=$+E>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+f>>>0,r[2]=r[2]+p>>>0,r[3]=r[3]+m>>>0,r[4]=r[4]+h>>>0,r[5]=r[5]+g>>>0,r[6]=r[6]+b>>>0,r[7]=r[7]+y>>>0}let l=new Uint8Array(32),c=new DataView(l.buffer);for(let u=0;u<8;u+=1)c.setUint32(u*4,r[u]);return l}function Vk(e,t){let n=qk(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function J(e){let t=os(e);return t=t.replace(/^\/c\/[a-z]{2,3}\//i,""),t=t.replace(/^[a-z][\w.-]*:/i,""),t=t.replace(/_/g," ").replace(/\s+/g," ").trim(),t=t.replace(/^(?:the|an?)\s+/i,""),t.toLowerCase()}function rs(e){let t=os(e);return Kk.get(t)??t}function ge(e,t,n){return Ho(J(e),rs(t),J(n))}var Gk,Hk,os,Kk,Ho,nn=O(()=>{Gk=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);Hk=2e3,os=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,Hk);Kk=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"],["mgx:used-for","mgx:usedFor"],["mgx:made-of","mgx:madeOf"]]);Ho=(e,t,n)=>`fact:${Vk(`${e}\0${t}\0${n}`,8)}`});var un={};Bn(un,{CARDINALITY_RULE_CONFIDENCE:()=>tj,CAX_DW_RULE:()=>Fl,CAX_DW_RULE_CONFIDENCE:()=>zl,CAX_MAXC0_RULE_CONFIDENCE:()=>sj,CLS_SVF1_RULE:()=>Ul,CLS_SVF1_RULE_CONFIDENCE:()=>Wl,DEFAULT_MAX_ENVIRONMENTS:()=>aa,DISJOINT_PREDICATE:()=>Ko,ENTAILED_DISJOINT_PROVENANCE:()=>Dl,ENTAILED_PROVENANCE:()=>$h,ENTAILED_SCM_SVF_PROVENANCE:()=>Vl,ENTAILED_SVF1_PROVENANCE:()=>Bl,ENTAILED_TYPE_PROVENANCE:()=>xh,ON_PROPERTY_PREDICATE:()=>In,SCM_SVF_RULE:()=>ql,SCM_SVF_RULE_CONFIDENCE:()=>Hl,SOME_VALUES_FROM_PREDICATE:()=>Cn,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>Lt,buildCardinalityRestrictions:()=>ej,buildRelevanceFrontier:()=>Ml,deriveDisjointViolations:()=>jh,deriveSomeValuesFromApplication:()=>_h,deriveSomeValuesFromSubsumption:()=>Rh,deriveSubClassClosure:()=>Eh,deriveSubClassClosureDelta:()=>Sh,deriveTypePropagation:()=>kh,entailedTrustFrom:()=>Xk,findConsistencyViolations:()=>rj,findIsaChain:()=>Kl,proveCardinalityAtLeast:()=>nj,proveMaxCardinalityZeroDenial:()=>oj,retractSubClassOf:()=>uj,syllogise:()=>ij});function wh(e,t,n){for(let s of t)if(typeof e?.[s]!="function")throw new TypeError(`${n} needs a store option carrying { ${t.join(", ")} } (memory/core.mjs's read/write functions) \u2014 missing ${s}`);return e}function Xk(e,t=1){let n=(Array.isArray(e)?e:[]).filter(o=>typeof o=="number");if(!n.length)return null;let s=Math.max(0,Math.min(1,Math.min(...n)*t));return Number(s.toFixed(6))}function is(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=J(s);o&&n.add(o)}return n.size?n:null}function Eh(e,{depth:t=32,budget:n=50,focus:s=null}={}){let o=new Set,r=new Map;for(let[u,d]of e||[])!u||!d||u===d||(o.add(`${u}${Le}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:is(s),a=(u,d,f)=>!i||i.has(u)||i.has(d)||i.has(f),l=[],c=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[p,m]of r)for(let h of m){let g=r.get(h);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,h,b)&&d.push([p,h,b,y])}}if(!d.length)break;d.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let f=!1;for(let[p,m,h,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:h,via:m}),r.has(p)||r.set(p,new Set),r.get(p).add(h),f=!0}if(l.length>=n||!f)break}return l}function Sh(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[m,h]of e||[])!m||!h||m===h||(r.add(`${m}${Le}${h}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),a.has(h)||a.set(h,new Set),a.get(h).add(m));let l=[],c=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let g=`${m}${Le}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:is(o),d=(m,h,g)=>!u||u.has(m)||u.has(h)||u.has(g),f=[],p=new Set;for(let m=0;m<n&&l.length;m+=1){let h=[],g=(w,v,_)=>{if(w===_)return;let $=`${w}${Le}${_}`;r.has($)||p.has($)||d(w,v,_)&&h.push([w,v,_,$])};for(let[w,v]of l){for(let _ of i.get(v)||[])g(w,v,_);for(let _ of a.get(w)||[])g(_,w,v)}if(!h.length)break;h.sort((w,v)=>w[0].localeCompare(v[0])||w[2].localeCompare(v[2])||w[1].localeCompare(v[1]));let b=!1,y=[];for(let[w,v,_,$]of h)if(!p.has($)){if(f.length>=s)break;p.add($),f.push({subject:w,object:_,via:v}),i.has(w)||i.set(w,new Set),i.get(w).add(_),a.has(_)||a.set(_,new Set),a.get(_).add(w),y.push([w,_]),b=!0}if(f.length>=s||!b)break;l=y}return f}function On(e){let t=new Map;for(let[s,o]of e||[])!s||!o||s===o||(t.has(s)||t.set(s,new Set),t.get(s).add(o));let n=new Map;return s=>{if(n.has(s))return n.get(s);let o=new Set,r=[...t.get(s)||[]];for(;r.length;){let i=r.pop();if(!o.has(i)){o.add(i);for(let a of t.get(i)||[])o.has(a)||r.push(a)}}return n.set(s,o),o}}function Jk(e){return On((e||[]).map(([t,n])=>[n,t]))}function Ml(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(Rs(c.predicate)?n.push([c.subject,c.object]):oo(c.predicate)?s.push([c.subject,c.object]):Yo(c.predicate)?o.set(c.subject,c.object):Vr(c.predicate)&&r.set(c.subject,c.object));let i=Jk(n),a=new Set;for(let c of t||[]){let u=J(c);if(u){a.add(u);for(let d of i(u))a.add(d)}}let l=new Set(a);for(let[c,u]of s)a.has(u)&&l.add(c);for(let[c,u]of r)o.has(c)&&a.has(u)&&l.add(c);return l}function kh(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=On(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Le}${m}`);let l=s instanceof Set?s.size?s:null:is(s),c=(p,m,h)=>!l||l.has(p)||l.has(m)||l.has(h),u=[];for(let[p,m]of e||[]){if(!p||!m)continue;let h=`${p}${Le}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,m,g)&&u.push([p,m,g,b])}}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let d=[],f=new Set;for(let[p,m,h,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:h,via:m})}return d}function jh(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Le}${h}`),a.add(`${h}${Le}${m}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(m));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:is(o),u=(m,h,g)=>!c||c.has(m)||c.has(h)||c.has(g),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let g=`${m}${Le}${h}`;if(!l.has(g)){l.add(g);for(let b of[h,...r(h)]){let y=i.get(b);if(y)for(let w of y){if(w===m)continue;let v=`${m}${Le}${w}`;a.has(v)||u(m,h,w)&&d.push([m,h,b,w,v])}}}}d.sort((m,h)=>m[0].localeCompare(h[0])||m[3].localeCompare(h[3])||m[2].localeCompare(h[2])||m[1].localeCompare(h[1]));let f=[],p=new Set;for(let[m,h,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:m,object:b,viaType:h,viaClass:g})}return f}function _h(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=On(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Le}${g.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(g.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[g,b]of t||[])!g||!b||(l.add(`${g}${Le}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:is(r),d=(g,b,y)=>!u||u.has(g)||u.has(b)||u.has(y),f=new Set,p=[];for(let[g,b,y]of e||[]){if(!g||!b||!y)continue;let w=J(b),v=`${g}${Le}${w}${Le}${y}`;if(f.has(v))continue;f.add(v);let _=c.get(y);if(_)for(let $ of _)for(let x of[$,...i($)]){let S=a.get(`${w}${Le}${x}`);if(S)for(let E of S){if(g===E)continue;let R=`${g}${Le}${E}`;l.has(R)||d(g,y,E)&&p.push([g,b,w,y,$,x,E,R])}}}p.sort((g,b)=>g[0].localeCompare(b[0])||g[6].localeCompare(b[6])||g[1].localeCompare(b[1])||g[3].localeCompare(b[3]));let m=[],h=new Set;for(let[g,b,y,w,v,_,$,x]of p)if(!h.has(x)){if(m.length>=o)break;h.add(x),m.push({subject:g,object:$,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:v,viaTarget:_})}return m}function ej(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(Yo(r.predicate))t.set(r.subject,r.object);else if(Yk(r.predicate))s.set(r.subject,r.object);else{let i=Zk[String(r.predicate).trim().toLowerCase()];if(!i)continue;let a=Number(r.object);Number.isFinite(a)&&n.set(r.subject,{kind:i,n:a})}let o=[];for(let[r,{kind:i,n:a}]of n){if(t.get(r)!==Qk)continue;let l=s.get(r);l&&o.push({restriction:r,kind:i,n:a,onClass:l})}return o.sort((r,i)=>r.restriction.localeCompare(i.restriction)),o}function Rh(e,t,{budget:n=50,focus:s=null}={}){let o=On(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=J(f.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:f.restriction,target:f.target})}let i=new Set;for(let[f,p]of t||[])f&&p&&i.add(`${f}${Le}${p}`);let a=s instanceof Set?s.size?s:null:is(s),l=(f,p)=>!a||a.has(f)||a.has(p),c=[];for(let[,f]of r)if(!(f.length<2))for(let p of f)for(let m of f){if(p.restriction===m.restriction||p.target===m.target||!o(p.target).has(m.target))continue;let h=`${p.restriction}${Le}${m.restriction}`;i.has(h)||l(p.restriction,m.restriction)&&c.push([p.restriction,m.restriction,p.target,m.target,h])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,m,h,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:m,viaY2:h})}return u}function Th(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=On(e),a=r instanceof Set?r.size?r:null:is(r),l=f=>!a||a.has(n)||a.has(f),c=new Map;for(let[f,p]of e||[])!f||!p||(c.has(f)||c.set(f,new Set),c.get(f).add(p));let u=new Map((t||[]).map(f=>[f.restriction,f])),d=0;for(let f of[n,...i(n)]){if(d>=o)break;if(d+=1,!!l(f))for(let p of c.get(f)||[]){let m=u.get(p);if(m&&s(m))return{viaClass:f,viaRestriction:p,record:m}}}return null}function nj(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Th(e,t,n,a=>a.onClass===s&&(a.kind==="exactly"||a.kind==="min")&&a.n>=o,r);return i?{subject:n,object:s,m:o,n:i.record.n,kind:i.record.kind,viaClass:i.viaClass,viaRestriction:i.viaRestriction}:null}function oj(e,t,n,s,o={}){if(!s)return null;let r=Th(e,t,n,i=>i.onClass===s&&i.kind==="max"&&i.n===0,o);return r?{subject:n,object:s,viaClass:r.viaClass,viaRestriction:r.viaRestriction}:null}function rj(e,t,n,{budget:s=50,focus:o=null}={}){let r=On(t),i=new Map;for(let[p,m]of n||[])!p||!m||p===m||(i.has(p)||i.set(p,new Set),i.get(p).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(p));if(!i.size)return[];let a=new Map;for(let[p,m]of e||[])!p||!m||(a.has(p)||a.set(p,new Set),a.get(p).add(m));let l=o instanceof Set?o.size?o:null:is(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,m]of a){if(!c(p))continue;let h=[...m].sort();for(let g=0;g<h.length;g+=1)for(let b=g+1;b<h.length;b+=1){let[y,w]=[h[g],h[b]],v=[y,...r(y)],_=[w,...r(w)],$=null;for(let S of v){let E=i.get(S);if(E){for(let R of _)if(E.has(R)){$=[S,R];break}if($)break}}if(!$)continue;let x=`${p}${Le}${y}${Le}${w}`;d.has(x)||(d.add(x),u.push([p,y,w,$[0],$[1]]))}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[1].localeCompare(m[1])||p[2].localeCompare(m[2]));let f=[];for(let[p,m,h,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:m,classB:h,viaA:g,viaB:b})}return f}async function ij(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=aa,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=wh(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(k=>Rs(k.predicate)).map(k=>[k.subject,k.object]),h=p.filter(k=>oo(k.predicate)).map(k=>[k.subject,k.object]),g=p.filter(k=>so(k.predicate)).map(k=>[k.subject,k.object]),b=new Map,y=new Map,w=[];for(let k of p){let le=String(k.predicate||"").trim().toLowerCase();Yo(k.predicate)?b.set(k.subject,k.object):Vr(k.predicate)?y.set(k.subject,k.object):Gl.has(le)||w.push([k.subject,k.predicate,k.object])}let v=[];for(let[k,le]of b){let Te=y.get(k);Te&&v.push({restriction:k,property:le,target:Te})}let _=is(s),$=o&&_?Ml(p,[..._]):_,x=$===null&&d?await a.loadSyllogiseState(e):null,S=new Set(p.map(k=>k.id)),E=Array.isArray(x?.factIds)?x.factIds.filter(k=>!S.has(k)):[],R=x&&Array.isArray(x.factIds)&&!E.length&&!i?"delta":"full",j=R==="delta"?new Set(x.factIds):null,A=R==="delta"?p.filter(k=>!j.has(k.id)):p,F=A.length,T=new Map;for(let k of p)T.set(`${k.subject}${Le}${k.predicate}${Le}${k.object}`,k.trust);let M=(k,le,Te)=>T.get(`${k}${Le}${le}${Le}${Te}`),z=(k,le,Te)=>T.has(`${k}${Le}${le}${Le}${Te}`),Y=k=>k.filter(le=>typeof le=="number"),ae=R==="delta"&&!A.length,Z=R==="delta"?A.filter(k=>Rs(k.predicate)).map(k=>[k.subject,k.object]):[],D=R==="delta"?Z.length?Sh(m,Z,{depth:t,budget:n,focus:$}):[]:Eh(m,{depth:t,budget:n,focus:$}),U=m.concat(D.map(k=>[k.subject,k.object])),G=$,I=null;if(R==="delta"&&!ae){let k=p.concat(D.map(Te=>({subject:Te.subject,predicate:Fe,object:Te.object}))),le=[];for(let Te of A)le.push(Te.subject,Te.object);I=Ml(k,le),G=I}let L=k=>!I||I.has(k),C=I?h.filter(([k,le])=>L(k)||L(le)):h,P=new Set;if(I)for(let k of A)so(k.predicate)&&(P.add(k.subject),P.add(k.object));let N=I&&P.size?On(U):null,W=I?h.filter(([k,le])=>L(k)||L(le)||N&&[...N(le)].some(Te=>P.has(Te))):h,V=new Set;if(I){for(let k of A)if(Yo(k.predicate)||Vr(k.predicate)){let le=b.get(k.subject);le&&V.add(J(le))}}let ie=I?w.filter(([k,le,Te])=>L(k)||L(Te)||V.has(J(le))):w,ce=Math.max(0,n-D.length),K=ce>0&&!ae?kh(C,U,{budget:ce,focus:G,presentTypeEdges:h}):[],ee=Math.max(0,n-D.length-K.length),q=ee>0&&!ae?jh(W,U,g,{budget:ee,focus:G}):[],ne=Math.max(0,n-D.length-K.length-q.length),te=ne>0&&v.length&&!ae?_h(ie,h,U,v,{budget:ne,focus:G}):[],xe=Math.max(0,n-D.length-K.length-q.length-te.length),Ae=xe>0&&v.length>1&&!ae?Rh(v,U,{budget:xe,focus:G}):[],pe=new Map(v.map(k=>[k.restriction,k])),re=[...D.map(k=>({subject:k.subject,predicate:Fe,object:k.object,provenance:$h,justification:[[ge(k.subject,Fe,k.via),ge(k.via,Fe,k.object)]]})),...K.map(k=>({subject:k.subject,predicate:Lt,object:k.object,provenance:xh,justification:[[ge(k.subject,Lt,k.via),ge(k.via,Fe,k.object)]]})),...q.map(k=>{let le=z(k.viaClass,Ko,k.object),[Te,Un]=le?[k.viaClass,k.object]:[k.object,k.viaClass],So=Y([M(k.subject,Lt,k.viaType),M(Te,Ko,Un),...k.viaClass!==k.viaType?[M(k.viaType,Fe,k.viaClass)]:[]]);return{subject:k.subject,predicate:Ko,object:k.object,provenance:Dl,justification:[[ge(k.subject,Lt,k.viaType),ge(Te,Ko,Un),...k.viaClass!==k.viaType?[ge(k.viaType,Fe,k.viaClass)]:[]]],...So.length?{premiseTrusts:So,ruleConfidence:zl}:{}}}),...te.map(k=>{let le=Y([M(k.subject,k.viaProperty,k.viaValue),M(k.viaValue,Lt,k.viaType),M(k.object,In,k.viaPropertyKey),M(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[M(k.viaType,Fe,k.viaTarget)]:[]]);return{subject:k.subject,predicate:Lt,object:k.object,provenance:Bl,justification:[[ge(k.subject,k.viaProperty,k.viaValue),ge(k.viaValue,Lt,k.viaType),ge(k.object,In,k.viaPropertyKey),ge(k.object,Cn,k.viaTarget),...k.viaType!==k.viaTarget?[ge(k.viaType,Fe,k.viaTarget)]:[]]],...le.length?{premiseTrusts:le,ruleConfidence:Wl}:{}}}),...Ae.map(k=>{let le=pe.get(k.subject),Te=pe.get(k.object),Un=Y([le&&M(k.subject,In,le.property),M(k.subject,Cn,k.viaY1),Te&&M(k.object,In,Te.property),M(k.object,Cn,k.viaY2),M(k.viaY1,Fe,k.viaY2)]);return{subject:k.subject,predicate:Fe,object:k.object,provenance:Vl,justification:[[...le?[ge(k.subject,In,le.property)]:[],ge(k.subject,Cn,k.viaY1),...Te?[ge(k.object,In,Te.property)]:[],ge(k.object,Cn,k.viaY2),ge(k.viaY1,Fe,k.viaY2)]],...Un.length?{premiseTrusts:Un,ruleConfidence:Hl}:{}}})],fe=re.map(k=>({id:ge(k.subject,k.predicate,k.object),subject:k.subject,predicate:k.predicate,object:k.object,environments:k.justification,write:k})),be=Ih(p.concat(fe.map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object})))),Ie=new Map(p.map(k=>[k.id,k])),ue=k=>Rs(k)||oo(k)||so(k),H=k=>R!=="delta"||I!==null&&(I.has(k.subject)||I.has(k.object)),se=p.filter(k=>ue(k.predicate)&&Ah(k.provenance)&&qr(k).length<r&&H(k)).map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object,environments:qr(k),provenance:k.provenance})),et=[...fe,...se].sort((k,le)=>k.subject.localeCompare(le.subject)||k.predicate.localeCompare(le.predicate)||k.object.localeCompare(le.object)),De=0,Ve=!1,on=0;for(let k of et){if(on>=n){Ve=!0;break}on+=1;let le=be(k,{maxEnvironments:r+1}),{kept:Te,truncated:Un}=cj(k.environments,le,r);if(Un&&(Ve=!0),!(Te.length<=k.environments.length)){if(De+=Te.length-k.environments.length,k.write){k.write.justification=Te;continue}re.push({subject:k.subject,predicate:k.predicate,object:k.object,justification:Te,...Ch(k.provenance,Te,So=>Ie.get(So)?.trust)||{}})}}let{ids:rn}=await u(e,re),Xt=[],zt=0;for(let k of D)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.via,rule:yh}),zt+=1;for(let k of K)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.via,rule:vh}),zt+=1;for(let k of q)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.viaClass,rule:Fl}),zt+=1;for(let k of te)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.viaValue,rule:Ul}),zt+=1;for(let k of Ae)Xt.push({id:rn[zt],subject:k.subject,object:k.object,via:k.viaY1,rule:ql}),zt+=1;let yi=Xt.length>=n;if($===null&&d&&!yi){let k=new Set(S);for(let le of rn)k.add(le);await a.saveSyllogiseState(e,{version:1,factIds:[...k].sort(),completedAt:new Date().toISOString()})}return{derived:Xt,count:Xt.length,budget:n,depth:t,truncated:yi,mode:R,deltaSize:F,environmentsAdded:De,alternatesTruncated:Ve}}function Ah(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function aj(e){let t=[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map;for(let u of e){let d=String(u.predicate||"").trim().toLowerCase();Rs(u.predicate)?t.push([u.subject,u.object]):oo(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):so(u.predicate)?(s.has(u.subject)||s.set(u.subject,new Set),s.get(u.subject).add(u.object),s.has(u.object)||s.set(u.object,new Set),s.get(u.object).add(u.subject)):Yo(u.predicate)?o.set(u.subject,u.object):Vr(u.predicate)?r.set(u.subject,u.object):Gl.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([J(u.predicate),u.object]))}let a=On(t),l=(u,d)=>u!==d&&a(u).has(d),c=u=>{let d=o.get(u),f=r.get(u);return d&&f?{property:J(d),target:f}:null};return u=>{if(Rs(u.predicate)){if(l(u.subject,u.object))return!0;let d=c(u.subject),f=c(u.object);return!!(d&&f&&d.property===f.property&&l(d.target,f.target))}if(oo(u.predicate)){for(let f of n.get(u.subject)||[])if(l(f,u.object))return!0;let d=c(u.object);if(d){for(let[f,p]of i.get(u.subject)||[])if(f===d.property){for(let m of n.get(p)||[])if(m===d.target||l(m,d.target))return!0}}return!1}if(so(u.predicate)){for(let d of n.get(u.subject)||[])for(let f of[d,...a(d)])if(s.get(f)?.has(u.object))return!0;return!1}return!0}}function Ih(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,l=new Map,c=new Map;for(let p of e){if(!p||!p.subject||!p.predicate||!p.object)continue;p.id&&t.add(p.id);let m=String(p.predicate||"").trim().toLowerCase();Rs(p.predicate)?(n.push([p.subject,p.object]),s.has(p.subject)||s.set(p.subject,new Set),s.get(p.subject).add(p.object)):oo(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):so(p.predicate)?(r.add(`${p.subject}${Le}${p.object}`),i.has(p.subject)||i.set(p.subject,new Set),i.get(p.subject).add(p.object),i.has(p.object)||i.set(p.object,new Set),i.get(p.object).add(p.subject)):Yo(p.predicate)?a.set(p.subject,p.object):Vr(p.predicate)?l.set(p.subject,p.object):Gl.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=On(n),d=p=>s.get(p)||new Set,f=p=>{let m=a.get(p),h=l.get(p);return m&&h?{property:m,propertyKey:J(m),target:h}:null};return(p,{maxEnvironments:m=aa}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every(v=>t.has(v)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),h.push(y))};if(Rs(p.predicate)){for(let y of[...d(p.subject)].sort()){if(h.length>=m)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([ge(p.subject,Fe,y),ge(y,Fe,p.object)])}if(h.length<m){let y=f(p.subject),w=f(p.object);y&&w&&y.propertyKey===w.propertyKey&&y.target!==w.target&&d(y.target).has(w.target)&&b([ge(p.subject,In,y.property),ge(p.subject,Cn,y.target),ge(p.object,In,w.property),ge(p.object,Cn,w.target),ge(y.target,Fe,w.target)])}return h}if(oo(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(h.length>=m)break;w!==p.object&&d(w).has(p.object)&&b([ge(p.subject,Lt,w),ge(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([v])=>J(v)===y.propertyKey).sort((v,_)=>v[0].localeCompare(_[0])||v[1].localeCompare(_[1]));for(let[v,_]of w){if(h.length>=m)break;for(let $ of[...o.get(_)||[]].sort()){if(h.length>=m)break;$!==y.target&&!d($).has(y.target)||b([ge(p.subject,v,_),ge(_,Lt,$),ge(p.object,In,y.propertyKey),ge(p.object,Cn,y.target),...$!==y.target?[ge($,Fe,y.target)]:[]])}}}return h}if(so(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let v of[w,...u(w)])(i.get(v)||new Set).has(p.object)&&y.push([w,v]);y.sort((w,v)=>w[0].localeCompare(v[0])||w[1].localeCompare(v[1]));for(let[w,v]of y){if(h.length>=m)break;let _=r.has(`${v}${Le}${p.object}`),[$,x]=_?[v,p.object]:[p.object,v];b([ge(p.subject,Lt,w),ge($,Ko,x),...v!==w?[ge(w,Fe,v)]:[]])}return h}return h}}function cj(e,t,n){let s=[],o=new Set,r=!1;for(let i of[...e||[],...t||[]]){if(!Array.isArray(i)||!i.length)continue;let a=[...i].sort().join(" ");if(!o.has(a)){if(s.length>=n){r=!0;continue}o.add(a),s.push(i)}}return{kept:s,truncated:r}}function Ch(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=lj.get(i);if(a!==void 0){s=a;break}}if(s===void 0)return null;let o=null,r=-1;for(let i of t||[]){let a=i.map(c=>n(c)).filter(c=>typeof c=="number");if(a.length!==i.length)continue;let l=Math.min(...a);l>r&&(r=l,o=a)}return o?{premiseTrusts:o,ruleConfidence:s}:null}async function uj(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=aa,store:i,sourceTags:a=[]}={}){let{loadMemory:l,readFactRows:c,removeFacts:u}=wh(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),d=typeof i?.appendFacts=="function"?i.appendFacts:null,f=typeof i?.factRecordIdForTag=="function"?i.factRecordIdForTag:null,p=(a||[]).filter(Boolean);if(p.length&&!f)throw new TypeError("retractSubClassOf needs a store option carrying factRecordIdForTag (memory/core.mjs's) to scope a retraction to sourceTags");let m=J(t),h=J(n),g=ge(m,Fe,h),b=await l(e),y=c(b),w=new Map(y.map(M=>[M.id,M]));if(!w.has(g))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let v=w.get(g).sourceIds||[],_=p.map(M=>f(g,M).slice(g.length+1)),$=p.length?v.filter(M=>_.includes(M)):[],x=!p.length||$.length>0;if(p.length&&!x)return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!0,ownRecord:!1,stillStands:!0};let S=p.length>0&&$.length<v.length,E=new Set([g]),R=[g],j=new Map,A=!1;if(!S){let M=y.filter(Z=>qr(Z).length&&Ah(Z.provenance)),z=new Map;for(let Z of M)for(let D of qr(Z))for(let U of D)z.has(U)||z.set(U,new Set),z.get(U).add(Z.id);let Y=0,ae=[g];for(;Y<o;Y+=1){let Z=new Set;for(let N of ae)for(let W of z.get(N)||[])E.has(W)||Z.add(W);let D=[...Z].map(N=>w.get(N)).sort((N,W)=>N.subject.localeCompare(W.subject)||N.predicate.localeCompare(W.predicate)||N.object.localeCompare(W.object));if(!D.length)break;let U=y.filter(N=>!E.has(N.id)&&!Z.has(N.id)),G=new Set(U.map(N=>N.id)),I=Ih(U),L=aj(U),C=!1,P=!1;ae=[];for(let N of D){if(E.size>=s){P=!0;break}let W=qr(N),V=W.filter(ce=>ce.every(K=>G.has(K)));if(V.length){V.length!==W.length&&j.set(N.id,V);continue}let ie=I(N,{maxEnvironments:r});if(ie.length){j.set(N.id,ie);continue}L(N)||(E.add(N.id),R.push(N.id),ae.push(N.id),C=!0)}if(P){A=!0;break}if(!C)break}!A&&Y>=o&&(A=M.some(Z=>!E.has(Z.id)&&Z.justification.some(D=>E.has(D))))}let F=p.length?[...$.map(M=>`${g}@${M}`),...R.slice(1)]:R,{removed:T}=await u(e,F);if(d){let M=[...j.entries()].filter(([z])=>!E.has(z)).sort((z,Y)=>z[0].localeCompare(Y[0])).map(([z,Y])=>{let ae=w.get(z);return{subject:ae.subject,predicate:ae.predicate,object:ae.object,justification:Y,...Ch(ae.provenance,Y,Z=>w.get(Z)?.trust)||{}}});M.length&&await d(e,M)}return{retracted:T,count:T.length,budget:s,depth:o,truncated:A,found:!0,...p.length?{ownRecord:!0,stillStands:S}:{}}}function Kl(e,t,n,s,{maxHops:o=6}={}){let r=t instanceof Set?t:new Set(t||[]),i=new Map;for(let[c,u]of s||[])!c||!u||c===u||(i.has(c)||i.set(c,new Set),i.get(c).add(u));let a=[];for(let[c,u]of n||[])c===e&&u&&a.push({node:u,path:[{subject:c,predicate:Lt,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Fe,object:c}]});let l=new Set([e]);for(let c=1;c<=o&&a.length;c+=1){for(let{node:d,path:f}of a)if(r.has(d))return f;if(c===o)break;let u=[];for(let{node:d,path:f}of a)if(!l.has(d)){l.add(d);for(let p of i.get(d)||[])l.has(p)||u.push({node:p,path:[...f,{subject:d,predicate:Fe,object:p}]})}a=u}return null}var Fe,yh,$h,Lt,vh,xh,Ko,Fl,Dl,zl,In,Cn,Ul,Bl,Wl,aa,Le,Rs,oo,so,Yo,Vr,Yk,Gl,Qk,Zk,ql,Vl,Hl,tj,sj,qr,lj,Ht=O(()=>{nn();Fe="rdfs:subClassOf",yh="subClassOf",$h=`entailed:${yh}`,Lt="rdf:type",vh="type",xh=`entailed:${vh}`,Ko="owl:disjointWith",Fl="disjointWith",Dl=`entailed:${Fl}`,zl=.95,In="owl:onProperty",Cn="owl:someValuesFrom",Ul="someValuesFrom",Bl=`entailed:${Ul}`,Wl=.95,aa=4,Le="\u241F",Rs=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",oo=e=>String(e||"").trim().toLowerCase()==="rdf:type",so=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Yo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Vr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",Yk=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Gl=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);Qk="has",Zk={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};ql="someValuesFromSubsumption",Vl=`entailed:${ql}`,Hl=.95;tj=.95;sj=.95;qr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);lj=new Map([[Dl,zl],[Bl,Wl],[Vl,Hl]])});function Zo(e){let t=String(e||""),n=Oh.get(t);return n||(t.startsWith(Yl)?Xo+t.slice(Yl.length):t)}function Lh(e){let t=String(e||""),n=dj.get(t);return n||(t.startsWith(Xo)?Yl+t.slice(Xo.length):null)}function Mh(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Kl(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function ua(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Ph(i),c=i.filter(b=>(b.predicate===la||b.predicate===Jo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===Jo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=Mh(o,b.subject,a,l,s);w&&w.length&&u.push({fact:b,polarity:y,hops:w.length,chain:w})}if(!u.length)return{verdict:"none",hops:0,positive:[],negative:[],chain:null,overrides:null,baseRate:Jl(o,r,i,{maxHops:s})};u.sort((b,y)=>b.hops-y.hops||(y.fact.trust||0)-(b.fact.trust||0));let d=u[0].hops,f=u.filter(b=>b.hops===d),p=f.filter(b=>b.polarity==="positive").map(b=>b.fact),m=f.filter(b=>b.polarity==="negative").map(b=>b.fact),h=m.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==h)||null;return{verdict:p.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:p,negative:m,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function Jl(e,t,n,{maxHops:s=3}={}){let o=Qo(e),r=Qo(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===Lt),l=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(h=>h.object===c&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let g=i.find(b=>b.subject===h&&r.has(b.object)&&(b.predicate===la||b.predicate===Jo));return g?{name:h,polarity:g.predicate===Jo?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=Ph(i);return{klass:c,kinds:u.length,positive:f.filter(h=>h.polarity==="positive"),negative:f.filter(h=>h.polarity==="negative"),unknown:f.filter(h=>h.polarity==="unknown"),chain:Mh(o,c,p,m,s)}}function Ql(e,t,{exclude:n=[],maxHops:s=3}={}){let o=Qo(e),r=Qo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==la||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),ua(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(pj)}var Xo,Yl,ca,Oh,dj,Nh,la,Jo,Xl,pj,Qo,Ph,da=O(()=>{Ht();Xo="mgxneg:",Yl="mgx:",ca="mgxneg:subClassOf",Oh=new Map([[Fe,ca]]),dj=new Map([...Oh].map(([e,t])=>[t,e]));Nh=e=>String(e||"").startsWith(Xo),la="mgx:capableOf",Jo=Zo(la),Xl=6,pj=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),Qo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Ph=e=>({typeEdges:e.filter(t=>t.predicate===Lt).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function pa(e){let t=String(e||"");return tu.has(t)?Zl:mj.has(t)||hj.test(t)?Hr:gj.has(t)?Fh:eu}function bj(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(Up.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function wj(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(bj(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function nu(e,t){let n=t===Fh;if(!n&&t!==Hr)return null;let s=(e||[]).map(r=>({row:r,at:wj(r,n)}));s.sort((r,i)=>{if(r.at!==i.at)return r.at===null?1:i.at===null?-1:n?r.at-i.at:i.at-r.at;let a=(i.row.trust||0)-(r.row.trust||0);if(a)return a;let[l,c]=[String(r.row.object),String(i.row.object)];return l<c?-1:l>c?1:0});let o=s.map(r=>r.row);return{winner:o[0]||null,ranked:o,contested:s.length>1&&s[0].at===s[1].at}}var Zl,Hr,Fh,eu,fj,tu,mj,hj,gj,Dh=O(()=>{da();Hn();Zl="merge",Hr="latest-observation-wins",Fh="first-claim-wins",eu="contradiction",fj=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","mgx:usedFor","mgx:receivesAction","mgx:causes","mgx:causesDesire","mgx:hasSubevent","mgx:hasPrerequisite","mgx:motivatedByGoal","mgx:obstructedBy","mgx:desires","mgx:hasProperty","mgx:madeOf","mgx:atLocation","mgx:locatedNear","mgx:createdBy","mgx:mannerOf","mgx:relatedTo","mgx:synonym","mgx:antonym","mgx:similarTo","mgx:symbolOf","mgx:knows-about"],tu=new Set(fj.flatMap(e=>[e,Zo(e)])),mj=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in","mgx:on-top-of","mgx:on-plane","mgx:under","mgx:is-open","mgx:hasMass","mgx:feels","mgx:faces","mgx:pose","mgx:display-name","mgx:nodeName","mgx:worldName"]),hj=/^mgx:has-exit-([a-z]+)$/,gj=new Set(["mgx:playedBy"])});function Xr(e){let t=String(e||""),n=t.indexOf(fa);return n<0?"":t.slice(n+fa.length)}function Ej(e){let t=1,n=0;for(let s of e)t*=1-vj(s),n+=1;return n?xj(Math.min(1,1-t)):0}function Gh(e,t,n){let s=Date.parse(e),o=Date.parse(t);return Number.isFinite(s)?Number.isFinite(o)?n(s,o)===s?String(e):String(t):String(e):Number.isFinite(o)?String(t):""}function Hh(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt),o=Number.isFinite(n)?n:-1/0,r=Number.isFinite(s)?s:-1/0;return o!==r?r-o:e.id<t.id?-1:e.id>t.id?1:0}function Kh(e,t="",n=""){let s=t,o=n;for(let r of e)s=qh(s,r.assertedAt),o=Vh(o,r.assertedAt);return{earliest:s,latest:o}}function iu({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let l=[...new Set(o)].filter(Boolean).sort(),c=a?Ej(l.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:yj,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:createdAt",key:"createdAt",value:r},{prop:"mgx:sourceId",key:"sourceId",value:t},{prop:s,key:s===er?"rollupSourceIds":"rollupRecordIds",value:l.join(" ")},{prop:Yr,key:"rollupCount",value:String(l.length)},{prop:Ln,key:"rollupEarliest",value:r},{prop:Nn,key:"rollupLatest",value:i},...c===void 0?[]:[{prop:tr,key:"rollupPrior",value:String(c)}]]}}function Yh({groupId:e,sourceType:t,heads:n=[],existing:s=null,priorFor:o}){if(!e||!t||n.length<64||n.length<=8)return null;let i=n.slice().sort(Hh).slice(8);if(!i.length)return null;let{earliest:a,latest:l}=Kh(i,Et(s,Ln),Et(s,Nn));return{rollup:iu({id:su(e,t),sourceKey:`rollup:${t}`,template:au(i[0].record||s),idsProp:er,ids:[...ga(s),...i.map(u=>u.sourceId)],earliest:a,latest:l,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function Xh({groupId:e,sourceId:t,leaves:n=[],existing:s=null}){if(!e||!t||n.length<8||n.length<=2)return null;let o=n.slice().sort(Hh),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:l}=Kh(i,Et(s,Ln),Et(s,Nn));return{rollup:iu({id:ou(e,t),sourceKey:t,template:au(i[0].record||s),idsProp:Kr,ids:[...$j(s),...i.map(u=>u.id)],earliest:a,latest:l}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function cu(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=Ts(s),r=o?er:Kr,i=a=>ru(Et(a,r));return iu({id:s,sourceKey:Et(e,"mgx:sourceId")||Et(t,"mgx:sourceId"),template:au(Et(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:qh(Et(e,Ln),Et(t,Ln)),latest:Vh(Et(e,Nn),Et(t,Nn)),priorFor:o?n:void 0})}function Jh(e,t){if(!t)return!1;for(let n of e||[])if(ga(n).includes(t))return!0;return!1}var yj,zh,Uh,ma,Bh,er,Kr,Yr,Ln,Nn,tr,fa,Wh,su,ou,Ts,nr,ha,Et,ru,ga,$j,vj,xj,qh,Vh,au,lu=O(()=>{yj="Fact",zh=64,Uh=8,ma=8,Bh=2,er="mgx:rollupSourceIds",Kr="mgx:rollupRecordIds",Yr="mgx:rollupCount",Ln="mgx:rollupEarliest",Nn="mgx:rollupLatest",tr="mgx:rollupPrior",fa="@rollup:",Wh="#rollup",su=(e,t)=>`${e}${fa}${t}`,ou=(e,t)=>`${e}@${t}${Wh}`,Ts=e=>String(e||"").includes(fa),nr=e=>String(e||"").endsWith(Wh),ha=e=>Ts(e)||nr(e);Et=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",ru=e=>String(e||"").split(" ").filter(Boolean),ga=e=>ru(Et(e,er)),$j=e=>ru(Et(e,Kr)),vj=e=>Math.max(0,Math.min(1,Number(e)||0)),xj=e=>Number(e.toFixed(6));qh=(e,t)=>Gh(e,t,Math.min),Vh=(e,t)=>Gh(e,t,Math.max);au=e=>({label:e?.label||"",subject:Et(e,"rdf:subject"),predicate:Et(e,"rdf:predicate"),object:Et(e,"rdf:object")})});function fu(e){let t=String(e||"");return pu(t)?t.slice(0,-$a.length):""}function Qh(e,t){let n=Date.parse(e),s=Date.parse(t);return Number.isFinite(n)?Number.isFinite(s)&&s>n?String(t):String(e):Number.isFinite(s)?String(t):""}function mu({id:e,sourceId:t,template:n,ids:s,retractedAt:o,tags:r}){let i=[...new Set(s)].filter(Boolean).sort(),a=[...new Set(r)].filter(Boolean).sort();return{id:e,label:n?.label||"",class:sn,derived_from:[],mentions:[],attributes:[{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:sourceId",key:"sourceId",value:t||""},{prop:wa,key:"retractedRecordIds",value:i.join(" ")},{prop:uu,key:"retractedCount",value:String(i.length)},{prop:ya,key:"retractedAt",value:o||""},...a.length?[{prop:Jr,key:"provenance",value:a.join(" | ")}]:[]]}}function eg({groupId:e,sourceId:t,recordIds:n=[],retractedAt:s="",existing:o=null,template:r=null,provenance:i=""}){if(!e||!t)return null;let a=[...ro(o),...n].filter(Boolean);return a.length?mu({id:du(e,t),sourceId:t,template:r||Zh(o),ids:a,retractedAt:Qh(io(o),s),tags:[...Qr(dn(o,Jr)),...Qr(i)]}):null}function tg(e,t){let n=Zh(dn(e,"rdf:subject")?e:t);return mu({id:e?.id||t?.id,sourceId:dn(e,"mgx:sourceId")||dn(t,"mgx:sourceId"),template:n,ids:[...ro(e),...ro(t)],retractedAt:Qh(io(e),io(t)),tags:[...Qr(dn(e,Jr)),...Qr(dn(t,Jr))]})}function kj(e,t){let n=Date.parse(e),s=Date.parse(t);return!Number.isFinite(s)||!Number.isFinite(n)?!0:n<=s}function jj(e,t,n=""){return!e||!t||!ro(e).includes(t)?!1:kj(n,io(e))}function va(e,t,n=""){for(let s of e||[])if(jj(s,t,n))return!0;return!1}function _j(e,t){let n=[...new Set(t||[])].filter(Boolean).sort();return[e||"-",...n].join(" ")}function Rj(e){let t=String(e||"").split(" ").filter(Boolean),n=t[0]||"",s=n==="-"||!Number.isFinite(Date.parse(n))?"":n,o=s||n==="-"?t.slice(1):t;return{retractedAt:s,ids:o}}function xa(e){let t=fu(e?.id);return t?{id:e.id,subject:t,predicate:ba,object:_j(io(e),ro(e)),provenance:dn(e,Jr)}:null}function Ea(e){if(!e||e.predicate!==ba)return null;let t=String(e.subject||""),n=t.indexOf("@");if(n<=0||n===t.length-1)return null;let{retractedAt:s,ids:o}=Rj(e.object);return o.length?mu({id:`${t}${$a}`,sourceId:t.slice(n+1),template:null,ids:o,retractedAt:s,tags:Qr(e.provenance)}):null}var sn,ba,wa,ya,uu,$a,Jr,du,pu,dn,Sj,Qr,ro,io,Zh,hu=O(()=>{sn="Retraction",ba="mgx:retracted",wa="mgx:retractedRecordIds",ya="mgx:retractedAt",uu="mgx:retractedCount",$a="#retracted",Jr="mgx:factProvenance",du=(e,t)=>`${e}@${t}${$a}`,pu=e=>String(e||"").endsWith($a);dn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Sj=e=>String(e||"").split(" ").filter(Boolean),Qr=e=>String(e||"").split(" | ").filter(Boolean),ro=e=>Sj(dn(e,wa)),io=e=>dn(e,ya);Zh=e=>({label:e?.label||"",subject:dn(e,"rdf:subject"),predicate:dn(e,"rdf:predicate"),object:dn(e,"rdf:object")})});var Tj,Aj,Ij,Cj,gu,n0,ng=O(()=>{Hn();Tj="mgx:worldName",Aj="mgx:nodeName",Ij="mgx:playedBy",Cj="mgx:waved",gu="mgx:invitedBy",n0=Object.freeze([Tj,Aj,Ij,Cj,gu])});function Sa(e){let t=new Set;for(let n of e||[])n?.predicate===gu&&(n.subject&&t.add(String(n.subject)),n.object&&t.add(String(n.object)));return[...t].sort()}function bu(e,t=""){let n=String(t||"");return(e||[]).map(String).filter(s=>s&&s!==n)}function ka({recordIds:e=[],roster:t=[],self:n="",acknowledgedBy:s=null}={}){let o=bu(t,n);if(!o.length)return[];if(typeof s!="function")return[];let r=new Map;for(let a of o){let l=s(a);r.set(a,new Set([...l||[]].map(String)))}return[...new Set((e||[]).map(String).filter(Boolean))].sort().filter(a=>o.every(l=>r.get(l).has(a)))}var wu=O(()=>{ng()});function as(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function Fj(e,t){(!e?.class||!Oj.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function Dj(e,t){for(let i of["rdf:subject","rdf:predicate","rdf:object"])Zr(as(e,i))||t.push(`a Fact needs a non-empty ${i}`);for(let i of["rdf:subject","rdf:object"]){let a=as(e,i);a!==void 0&&Nj.test(a)&&t.push(`a Fact's ${i} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(a)})`)}let n=as(e,"mgx:factProvenance");n!==void 0&&!Zr(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";Pj(s)&&!og.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=as(e,"mgx:sourceId");o!==void 0&&!Zr(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=as(e,"mgx:observedAt");r!==void 0&&!Number.isFinite(Date.parse(r))&&t.push(`mgx:observedAt, when present, must be a parseable instant (got ${JSON.stringify(r)})`);for(let i of Mj){let a=as(e,i);if(a===void 0)continue;let l=a.split(" ").filter(Boolean);l.length||t.push(`${i}, when present, must name at least one record id`);for(let c of l)og.test(c)||t.push(`${i} must name Fact record ids (got ${JSON.stringify(c)})`)}}function zj(e,t){Zr(as(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=as(e,"mgx:ruleKind");if(!n||!sg.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...sg].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of Lj[n])Zr(as(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function Uj(e){let t=[];return Fj(e,t),e?.class==="Fact"&&Dj(e,t),e?.class==="Rule"&&zj(e,t),{ok:t.length===0,violations:t}}function yu(e){let t=Uj(e);if(!t.ok){let n=new Error(`SHACL validation failed for ${e?.class} "${e?.id}": ${t.violations.join(" | ")}`);throw n.violations=t.violations,n}}var Oj,sg,Lj,Nj,og,Pj,Mj,Zr,rg=O(()=>{Oj=new Set(["Utterance","Fact","Session","Source","Rule"]),sg=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),Lj={compose2:["mgx:ruleBase1","mgx:ruleBase2"],filter:["mgx:ruleBase1","mgx:ruleFilterProperty"],recursive:["mgx:ruleBaseCase","mgx:ruleRecStep"],"action-signature":["mgx:ruleActionSubjectClass","mgx:ruleActionTargetClass"],"action-precond":["mgx:ruleActionPrecondShape","mgx:ruleActionPrecondPredicate","mgx:ruleActionPrecondRole","mgx:ruleActionPrecondScope"],"action-effect":["mgx:ruleActionEffectPredicate","mgx:ruleActionEffectSubject"],"action-constraint":["mgx:ruleActionConstraintLeft","mgx:ruleActionConstraintRight","mgx:ruleActionConstraintGuard"]},Nj=/[.!?]\s+\w/,og=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,Pj=e=>e.includes("@")||/#v\d/.test(e),Mj=["mgx:supersedes","mgx:supersededBy"];Zr=e=>typeof e=="string"&&e.trim().length>0});var ig={};Bn(ig,{access:()=>Gj,appendFile:()=>Hj,basename:()=>l_,copyFile:()=>e_,createInterface:()=>m_,createReadStream:()=>n_,createRequire:()=>Bj,createWriteStream:()=>s_,default:()=>g_,dirname:()=>i_,existsSync:()=>o_,fileURLToPath:()=>d_,isAbsolute:()=>c_,join:()=>r_,mkdir:()=>Kj,mkdtemp:()=>Yj,randomBytes:()=>p_,readFile:()=>qj,readFileSync:()=>Wj,readdir:()=>t_,rename:()=>Xj,resolve:()=>a_,rm:()=>Qj,sep:()=>u_,spawnSync:()=>f_,stat:()=>Zj,tmpdir:()=>h_,unlink:()=>Jj,writeFile:()=>Vj});var dt,Bj,Wj,Gj,qj,Vj,Hj,Kj,Yj,Xj,Jj,Qj,Zj,e_,t_,n_,s_,o_,r_,i_,a_,c_,l_,u_,d_,p_,f_,m_,h_,g_,ag=O(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Bj=dt("createRequire"),Wj=dt("readFileSync"),Gj=dt("access"),qj=dt("readFile"),Vj=dt("writeFile"),Hj=dt("appendFile"),Kj=dt("mkdir"),Yj=dt("mkdtemp"),Xj=dt("rename"),Jj=dt("unlink"),Qj=dt("rm"),Zj=dt("stat"),e_=dt("copyFile"),t_=dt("readdir"),n_=dt("createReadStream"),s_=dt("createWriteStream"),o_=()=>!1,r_=(...e)=>e.join("/"),i_=e=>String(e).replace(/\/[^/]*$/,""),a_=(...e)=>e.join("/"),c_=e=>String(e).startsWith("/"),l_=e=>String(e).split("/").pop(),u_="/",d_=e=>String(e),p_=dt("randomBytes"),f_=dt("spawnSync"),m_=dt("createInterface"),h_=()=>"/tmp",g_={}});var b_,ei,$u=O(()=>{b_=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,ei=class e extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,s=!0,o="Z";if(typeof t=="string"){let r=t.match(b_);r?(r[1]||(n=!1,t=`0000-01-01T${t}`),s=!!r[2],s&&t[10]===" "&&(t=t.replace(" ","T")),r[2]&&+r[2]>23?t="":(o=r[3]||null,t=t.toUpperCase(),!o&&s&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=n,this.#n=s,this.#e=o)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let s=new e(t);return s.#e=n,s}static wrapAsLocalDateTime(t){let n=new e(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#t=!1,n.#e=null,n}}});function w_(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function y_(e,t,n){let s=e.split(/\r\n|\n|\r/g),o="",r=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let a=s[i-1];a&&(o+=i.toString().padEnd(r," "),o+=": ",o+=a,o+=`
|
|
86
86
|
`,i===t&&(o+=" ".repeat(r+n+2),o+=`^
|
|
87
|
-
`))}return o}var he,ao=O(()=>{he=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=
|
|
87
|
+
`))}return o}var he,ao=O(()=>{he=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=w_(n.toml,n.ptr),r=y_(n.toml,s,o);super(`Invalid TOML document: ${t}
|
|
88
88
|
|
|
89
|
-
${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function
|
|
89
|
+
${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function ja(e,t){let n=e[t++],s=n,o=n==="'",r=n===e[t]&&n===e[t+1];r&&(e[t+=2]===`
|
|
90
90
|
`?t++:e[t]==="\r"&&e[t+1]===`
|
|
91
91
|
`&&(t+=2));let i="",a=t,l=0;for(let c=t;c<e.length;c++)if(n=e[c],r&&(n===`
|
|
92
92
|
`||n==="\r"&&e[c+1]===`
|
|
93
93
|
`))l=l&&3;else{if(n<" "&&n!==" "||n==="\x7F")throw new he("control characters are not allowed in strings",{toml:e,ptr:c});if((!l||l===3)&&n===s&&(!r||e[c+1]===s&&e[c+2]===s))return r&&(e[c+3]===s&&c++,e[c+3]===s&&c++),[l?i:i+e.slice(a,c),c+(r?3:1)];if(!l)!o&&n==="\\"&&(i+=e.slice(a,a=c),l=1);else if(l===1)if(n==="x"||n==="u"||n==="U"){let u=0,d=n==="x"?2:n==="u"?4:8;for(let f=0;f<d;f++,c++){let p=e.charCodeAt(c+1),m=p>=48&&p<=57?p-48:p>=65&&p<=70?p-65+10:p>=97&&p<=102?p-97+10:-1;if(m<0)throw new he("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});u=u<<4|m}if(u<0||u>1114111||u>=55296&&u<=57343)throw new he("invalid unicode escape",{toml:e,ptr:c});i+=String.fromCodePoint(u),a=c+1,l=0}else if(n===" "||n===" ")l=2;else{if(n==="b")i+="\b";else if(n==="t")i+=" ";else if(n==="n")i+=`
|
|
94
|
-
`;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new he("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new he("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new he("unfinished string",{toml:e,ptr:t})}function
|
|
94
|
+
`;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new he("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new he("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new he("unfinished string",{toml:e,ptr:t})}function cg(e,t,n,s){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return s?0n:0;let o=$_.test(e);if(o||v_.test(e)){if(x_.test(e))throw new he("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new he("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new he("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new ei(e);if(!r.isValid())throw new he("invalid value",{toml:t,ptr:n});return r}var $_,v_,x_,vu=O(()=>{$u();ao();$_=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,v_=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,x_=/^[+-]?0[0-9_]/});function _a(e,t=0,n=e.length){let s=e.indexOf(`
|
|
95
95
|
`,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function sr(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
|
|
96
96
|
`)return n;if(s==="\r"&&e[n+1]===`
|
|
97
97
|
`)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new he("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function Pn(e,t,n,s){let o;for(;;){for(;(o=e[t])===" "||o===" "||!n&&(o===`
|
|
98
98
|
`||o==="\r"&&e[t+1]===`
|
|
99
|
-
`);)t++;if(s||o!=="#")break;t=sr(e,t)}return t}function
|
|
99
|
+
`);)t++;if(s||o!=="#")break;t=sr(e,t)}return t}function lg(e,t,n,s,o=!1){if(!s)return t=_a(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=_a(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
|
|
100
100
|
`||i==="\r"&&e[r+1]===`
|
|
101
|
-
`))return r}}throw new he("cannot find end of structure",{toml:e,ptr:t})}var
|
|
102
|
-
`&&e[c]!=="\r")throw new he("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=
|
|
103
|
-
`&&i!=="\r"){let a,l=o,c=!1,[u,d]=
|
|
104
|
-
`&&r!=="\r"){let i=ti(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new he("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var
|
|
105
|
-
`&&e[a]!=="\r")throw new he("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=Pn(e,a)}return s}var
|
|
106
|
-
`)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Qt(t,r))}return s}async function lg(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await u_(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Qt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Qt(s,String(n.graph_file))),n.graph_files!==void 0){let w=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=w.map(v=>Qt(s,String(v)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},l={};a.enabled!==void 0&&(l.enabled=a.enabled),a.limit!==void 0&&(l.limit=a.limit),a.capture_unknown_context!==void 0&&(l.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(l.unknownContextLimit=a.unknown_context_limit),Object.keys(l).length&&(o.seed=l),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.discourse!==void 0&&(o.discourse=n.discourse);let c=n.index||{},u={};c.languages!==void 0&&(u.languages=c.languages),c.exclude!==void 0&&(u.exclude=c.exclude),c.secret_exclude!==void 0&&(u.secretExclude=c.secret_exclude),c.history_depth!==void 0&&(u.historyDepth=c.history_depth),c.include_text!==void 0&&(u.includeText=c.include_text),c.include_structure!==void 0&&(u.includeStructure=c.include_structure),c.respect_gitignore!==void 0&&(u.respectGitignore=c.respect_gitignore),c.markdown_sections!==void 0&&(u.markdownSections=c.markdown_sections),c.vue!==void 0&&(u.vue=c.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},f={};d.score_gap_k!==void 0&&(f.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(f.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(f.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(f.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(f.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(f.beamSearch=d.beam_search),d.beam_width!==void 0&&(f.beamWidth=d.beam_width),d.prose_layers!==void 0&&(f.proseLayers=d.prose_layers);let p=d.expansion||{},m={};p.strategy!==void 0&&(m.strategy=p.strategy),p.nodes!==void 0&&(m.nodes=p.nodes),p.q!==void 0&&(m.q=p.q),p.depth!==void 0&&(m.depth=p.depth),Object.keys(m).length&&(f.expansion=m),Object.keys(f).length&&(o.tune=f);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.enabled});let g=n.memory||{},b={};g.retention_versions!==void 0&&(b.retentionVersions=g.retention_versions),g.backend!==void 0&&(b.backend=g.backend),Object.keys(b).length&&(o.memory=b);let y=[];for(let[w,v]of d_)n[w]&&n[w][v]!==void 0&&y.push(`${w}.${v}`);return o.unwired=y,o}function Ra(e,t="",n={}){for(let[s,o]of Object.entries(e||{})){if(o==null)continue;let r=t?`${t}.${s}`:s;Array.isArray(o)||typeof o!="object"?n[r]=o:Ra(o,r,n)}return n}function ug({args:e={},toml:t=null,defaults:n={}}={}){let s=Ra(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Ra(o):{},i=Ra(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),l={},c={};for(let u of a)u in i?(l[u]=i[u],c[u]="arg"):u in r?(l[u]=r[u],c[u]="tmct.toml"):(l[u]=s[u],c[u]="default");return{effective:l,sources:c}}var Ta,d_,Aa=O(()=>{_t();Ue();_a();Ta="tmct.toml";d_=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Os={};Un(Os,{CANONICALISED_FROM_PROP:()=>Ou,CAPABLE_OF_PREDICATE:()=>yR,CHAIN_KEEP_DEPTH:()=>Mh,CHAIN_ROLLUP_THRESHOLD:()=>fa,CREATED_AT_PROP:()=>Je,DEFAULT_RETENTION:()=>ku,FACT_CLASS:()=>Et,GROUP_ROLLUP_THRESHOLD:()=>Nh,HAS_A_PREDICATE:()=>dr,IN_REPLY_TO_PROP:()=>Cu,MEMORY_DIR_REL:()=>ir,MEMORY_GRAPH_REL:()=>Ru,MEMORY_MANIFEST_REL:()=>Cg,MEMORY_SESSION_CLASS:()=>Au,MULTI_VALUED_PREDICATES:()=>$R,NODE_ID_REL:()=>Mu,OPERATOR_SOURCE_ID:()=>Ia,RETRACTED_AT_PROP:()=>wa,RETRACTED_COUNT_PROP:()=>cu,RETRACTED_RECORD_IDS_PROP:()=>ba,RETRACTION_CLASS:()=>xn,RETRACTION_PREDICATE:()=>ga,ROLLUP_COUNT_PROP:()=>Yr,ROLLUP_EARLIEST_PROP:()=>Ln,ROLLUP_KEEP_PER_TYPE:()=>Ph,ROLLUP_LATEST_PROP:()=>Nn,ROLLUP_PRIOR_PROP:()=>tr,ROLLUP_RECORD_IDS_PROP:()=>Kr,ROLLUP_SOURCE_IDS_PROP:()=>er,RULE_CLASS:()=>cr,RULE_KIND_ACTION_CONSTRAINT:()=>Gu,RULE_KIND_ACTION_EFFECT:()=>li,RULE_KIND_ACTION_PRECOND:()=>Fa,RULE_KIND_ACTION_SIGNATURE:()=>Wu,RULE_KIND_COMPOSE2:()=>ai,RULE_KIND_FILTER:()=>ci,RULE_KIND_PROP:()=>ur,RULE_KIND_RECURSIVE:()=>Bu,SAID_IN_SESSION_PROP:()=>Iu,SOURCE_CLASS:()=>ar,SOURCE_RELIABILITY_PROP:()=>hg,STATED_BY_PROP:()=>dn,SYLLOGISE_STATE_REL:()=>Pu,UPDATED_AT_PROP:()=>gs,UTTERANCE_CLASS:()=>Tu,appendCanonicalisedFromEdges:()=>oR,appendFact:()=>cR,appendFacts:()=>uo,appendRetractions:()=>bR,appendRule:()=>za,appendUtterance:()=>sR,appendUtterances:()=>Dg,applySeedPayload:()=>h_,attachFactHeads:()=>Sg,chainRollupIdFor:()=>nu,cloneMemoryPayload:()=>g_,closeSqliteMemoryStore:()=>Rg,createInMemoryStore:()=>La,createSqliteMemoryStore:()=>_g,emptyMemory:()=>ri,factGroupId:()=>Vt,factHeadsOf:()=>kg,factIdForTriple:()=>ge,factRecordIdForTag:()=>w_,factRecordIdsFor:()=>lo,findContradictions:()=>Hg,findRuleByName:()=>qu,findRulesByName:()=>fR,headRollupIdFor:()=>tu,isChainRollupId:()=>nr,isHeadRollupId:()=>Rs,isMemoryOrSqliteHandle:()=>Nu,isRetractionId:()=>uu,isRollupId:()=>ma,loadMemory:()=>Nt,loadNodeId:()=>q_,loadSyllogiseState:()=>W_,normFactPredicate:()=>ns,normFactTerm:()=>J,openConfiguredMemoryBackend:()=>Is,openMemoryBackend:()=>Tg,provSourceClassFor:()=>K_,provenanceTagToSource:()=>bs,readFactRows:()=>St,readObjectSupersessions:()=>j_,readRetractions:()=>gR,readRuleRows:()=>Vu,removeFacts:()=>hR,resolveMemoryGraphFile:()=>ni,resolveRelationChase:()=>Hu,resolveRelationChaseReverse:()=>Vg,retractedAtOf:()=>io,retractedRecordIds:()=>ro,retractionFromWire:()=>xa,retractionIdFor:()=>lu,retractionScopeOf:()=>du,retractionWireFact:()=>va,saveNodeId:()=>V_,saveSyllogiseState:()=>G_,snapshotMemory:()=>F_});function ri(){return{generated_at:"",memory:!0,prefixes:{owl:"http://www.w3.org/2002/07/owl#",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",mgx:"urn:tmct:mgx#",mgxneg:"urn:tmct:mgxneg#"},vocabulary:m_.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function ni(e,t=null){if(As(e)||Fn(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Q(e,Ru):Q(e,ir,`graph.v${t}.json`)}function As(e){return!!e&&typeof e=="object"&&e.backend===Lu}function Fn(e){return!!e&&typeof e=="object"&&e.backend===bg}function Nu(e){return As(e)||Fn(e)}function La(){return{backend:Lu,payload:ri()}}function h_(e,t){t&&(e.payload={...e.payload,...t})}function g_(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function wg(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Du(bs(t));if(n)return n}return{id:rs,type:""}}function Vt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function w_(e,t){return`${e}@${yg(t).id}`}function yg(e){return Du(bs(e))||{id:rs,type:""}}function $g(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=yg(s),i=t.get(o)||{sourceId:o,sourceType:r,tags:[]};i.tags.includes(s)||i.tags.push(s),t.set(o,i)}return t.size||t.set(rs,{sourceId:rs,sourceType:"",tags:[]}),[...t.values()]}function Eu(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=bs(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function lr(e,t="",n=Math.max){return Eu(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function y_(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt);return!Number.isFinite(n)||!Number.isFinite(s)?!1:n>s?!0:n===s&&!!e.observedAt&&!t.observedAt}function vg(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=wg(n("mgx:factProvenance")),o=n(ii).split(" ").filter(Boolean)[0]||null,r=Xr(e.id);return[e.id,Vt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(co)||s.id,r||s.type,Number(n(r?tr:Oo))||0,n(Je),n(si)||null,o,t]}function $_(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Et))return;let t=e.prepare(xg);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(Et))t.run(...vg(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function v_(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Sg(e,t){return e&&t&&(e[Eg]=t),e}function E_(e){let t=new Map;for(let n of e.prepare("SELECT triple_hash, trust_base, inputs_json FROM fact_heads").all())t.set(n.triple_hash,{trustBase:n.trust_base,inputs:JSON.parse(n.inputs_json)});return t}function jg(e,t,n,s){let o=e.prepare(x_),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=is();for(let a of n){let l=t.groups.get(a);if(!l?.length){r.run(a),s?.delete(a);continue}let c=v_(Yu(a,l,t).assertions),u=Up(c).score;o.run(a,u,JSON.stringify(c),i),s?.set(a,{trustBase:u,inputs:c})}}function S_(e){let t=e.db;if(t.prepare("SELECT triple_hash FROM fact_heads LIMIT 1").get()||!t.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Et))return;let n=Ku(Ag(e));t.exec("BEGIN IMMEDIATE");try{jg(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function k_(e,t,n){let s=e.prepare("SELECT ord, to_id FROM fact_object_supersessions WHERE subject = ? AND predicate = ? ORDER BY ord DESC LIMIT 1"),o=e.prepare("INSERT INTO fact_object_supersessions(subject, predicate, ord, from_id, to_id, recorded_at) VALUES (?, ?, ?, ?, ?, ?)"),r=is();for(let i of n){let[a,l]=i.split("\0");if(da(l)!==Hr)continue;let c=t.groupsByPair.get(i)||[];if(c.length<2)continue;let u=c.map(p=>{let m=Yu(p,t.groups.get(p),t);return m.trust=Ri(m.assertions).score,m});if(new Set(u.map(p=>p.object)).size<2)continue;let d=eu(u,Hr)?.winner?.id;if(!d)continue;let f=s.get(a,l);f?.to_id!==d&&o.run(a,l,(f?.ord??-1)+1,f?.to_id||"",d,r)}}function j_(e,{subject:t,predicate:n}={}){if(!Fn(e))return[];let s=t&&n?" WHERE subject = ? AND predicate = ?":"",o=s?[t,n]:[];return e.db.prepare(`SELECT subject, predicate, ord, from_id, to_id, recorded_at FROM fact_object_supersessions${s} ORDER BY subject, predicate, ord`).all(...o).map(r=>({subject:r.subject,predicate:r.predicate,ord:r.ord,fromId:r.from_id,toId:r.to_id,recordedAt:r.recorded_at}))}function R_(){if(fg)return;fg=!0;let e=process.listeners("warning").slice();process.removeAllListeners("warning"),process.on("warning",t=>{if(!(t?.name==="ExperimentalWarning"&&/sqlite/i.test(String(t?.message))))if(e.length)for(let n of e)n(t);else console.error(t.stack||String(t))})}async function _g(e){R_();let{DatabaseSync:t}=await Promise.resolve().then(()=>(tg(),eg)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(b_),$_(n);let s={backend:bg,db:n,dbPath:e};return S_(s),s}function Rg(e){Fn(e)&&e.db.close()}async function Tg(e,t){if(t===Lu)return{dir:La(),close:async()=>{}};let n=Q(e,".tmct","memory","graph.sqlite"),s=r=>lp(r).then(()=>!0,()=>!1);!await s(n)&&await s(Q(e,Ru))&&process.stderr.write(`found .tmct/memory/graph.json \u2014 the flat-file memory backend is retired; starting a fresh sqlite store (the old file is left untouched)
|
|
107
|
-
`),await kn(ve(n),{recursive:!0});let o=await _g(n);return{dir:o,close:async()=>Rg(o)}}async function Is(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Aa(),dg));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Tg(e,n)}function T_(e){let t=e.db.prepare("PRAGMA data_version").get()?.data_version;return e.cachedPayload&&e.cachedDataVersion!==t&&(e.cachedPayload=null),e.cachedPayload||(e.cachedPayload=Ag(e),e.cachedFactHeads=E_(e.db),e.cachedDataVersion=t),Sg(En(e.cachedPayload),e.cachedFactHeads)}function Ag(e){let t=e.db,n=ri(),s=(a,l)=>{let c=t.prepare("SELECT v FROM meta WHERE k = ?").get(a);return c?JSON.parse(c.v):l},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(a=>JSON.parse(a.json)),r=t.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid"),i=t.prepare("SELECT prop, predicate, count FROM relations ORDER BY ord").all().map(a=>({predicate:a.predicate,prop:a.prop,count:a.count,examples:r.all(a.prop).map(l=>{let c={subject:l.subject,object:l.object,subjectLabel:l.subject_label,objectLabel:l.object_label};return l.extra&&Object.assign(c,JSON.parse(l.extra)),c})}));return{generated_at:s("generated_at",n.generated_at),memory:s("memory",n.memory),prefixes:s("prefixes",n.prefixes),vocabulary:s("vocabulary",n.vocabulary),classes:s("classes",n.classes),objectProperties:i,individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function A_(e,t){let n=En(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function I_(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function C_(e,t){let n=e.objectProperties.find(s=>s?.prop===t);return n||(n={predicate:null,prop:t,count:0,examples:[]},e.objectProperties.push(n)),n}function O_(e,t,n){let s=`${t.subject}\0${t.object}`;e.examples=e.examples.filter(r=>`${r.subject}\0${r.object}`!==s);let o={subject:t.subject,object:t.object,subjectLabel:t.subjectLabel??null,objectLabel:t.objectLabel??null};n.length&&Object.assign(o,En(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function L_(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function N_(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function P_(e,t){let n=e.db,s=ri(),o=e.cachedPayload||null;n.exec("BEGIN IMMEDIATE");try{let r=n.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)");r.run("generated_at",JSON.stringify(t.generated_at??s.generated_at)),r.run("memory",JSON.stringify(t.memory??s.memory)),r.run("prefixes",JSON.stringify(t.prefixes??s.prefixes)),r.run("vocabulary",JSON.stringify(t.vocabulary??s.vocabulary)),r.run("classes",JSON.stringify(t.classes??s.classes)),r.run("proseIndex",JSON.stringify(t.proseIndex??s.proseIndex)),o&&(o.generated_at=En(t.generated_at??s.generated_at),o.memory=En(t.memory??s.memory),o.prefixes=En(t.prefixes??s.prefixes),o.vocabulary=En(t.vocabulary??s.vocabulary),o.classes=En(t.classes??s.classes),o.proseIndex=En(t.proseIndex??s.proseIndex));let i=n.prepare("SELECT ord, json FROM individuals WHERE id = ?"),l=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM individuals").get().m+1,c=n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),u=n.prepare(xg),d=new Set,f=new Set,p=new Set;for(let E of t.individuals||[]){d.add(E.id);let R=JSON.stringify(E),j=i.get(E.id);if(j&&j.json===R)continue;let A=j?j.ord:l++;c.run(E.id,A,E.class??null,E.label??null,R),E.class===Et&&(u.run(...vg(E,R)),f.add(Vt(E.id)),p.add(Su(oi(E,"subject"),oi(E,"predicate")))),o&&A_(o,E)}let m=n.prepare("DELETE FROM individuals WHERE id = ?"),h=n.prepare("DELETE FROM facts WHERE id = ?"),g=n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?");for(let E of n.prepare("SELECT id FROM individuals").all()){if(d.has(E.id))continue;let R=g.get(E.id);R&&(f.add(R.triple_hash),p.add(Su(R.subject,R.predicate))),m.run(E.id),h.run(E.id)}o&&I_(o,d);let b=n.prepare("SELECT ord FROM relations WHERE prop = ?"),w=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,v=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),_=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),$=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),x=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),S=new Set;for(let E of t.objectProperties||[]){S.add(E.prop);let R=_.all(E.prop),j=new Map(R.map(z=>[`${z.subject}\0${z.object}`,z])),A=new Set,F=o?C_(o,E.prop):null;for(let z of E.examples||[]){let Y=`${z.subject}\0${z.object}`;A.add(Y);let ae=Object.keys(z).filter(G=>!__.has(G)),Z=ae.length?JSON.stringify(Object.fromEntries(ae.map(G=>[G,z[G]]))):null,D=j.get(Y);D&&(D.subject_label??null)===(z.subjectLabel??null)&&(D.object_label??null)===(z.objectLabel??null)&&(D.extra??null)===(Z??null)||($.run(E.prop,z.subject,z.object,z.subjectLabel??null,z.objectLabel??null,Z),F&&O_(F,z,ae))}for(let z of j.keys()){if(A.has(z))continue;let[Y,ae]=z.split("\0");x.run(E.prop,Y,ae)}F&&L_(F,A);let T=Number.isFinite(E.count)?E.count:(E.examples||[]).length,M=b.get(E.prop)?.ord??w++;v.run(E.prop,M,E.predicate??null,T),F&&(F.predicate=E.predicate??null,F.count=T)}for(let E of n.prepare("SELECT prop FROM relations").all())S.has(E.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run(E.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run(E.prop));if(o&&N_(o,S),f.size){let E=Ku(t);jg(n,E,f,e.cachedFactHeads),k_(n,E,p)}n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}async function Ig(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await $r(n,t),await vi(n,e)}async function Na(e,t){await Ig(e,JSON.stringify(t))}async function F_(e,{retentionVersions:t}={}){if(Nu(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a memory/sqlite handle has no on-disk graph.json to snapshot");let n=ni(e),s;try{s=await ze(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=M_(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??ku}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??ku);let i=r.version,a=ni(e,i);await kn(ve(a),{recursive:!0}),await Ig(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await yc(ni(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await Na(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Nt(e){if(As(e))return $u(e.payload);if(Fn(e))return $u(T_(e));let t;try{t=await ze(xu(e),"utf8")}catch(n){if(n?.code==="ENOENT")return ri();throw n}return $u(JSON.parse(t))}function z_(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==Et||!D_.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Ho(o("subject"),o("predicate"),o("object"));r!==s.id&&(t.set(s.id,r),s.id=r)}if(!t.size)return e;let n=s=>t.get(s)||s;for(let s of e.objectProperties||[])for(let o of s.examples||[])o&&(t.has(o.subject)&&(o.subject=t.get(o.subject)),t.has(o.object)&&(o.object=t.get(o.object)));for(let s of e.individuals){Array.isArray(s?.derived_from)&&s.derived_from.length&&(s.derived_from=s.derived_from.map(n));let o=(s?.attributes||[]).find(r=>r?.prop==="mgx:factJustification");o?.value&&(o.value=o.value.split(" | ").map(r=>r.split(" ").filter(Boolean).map(n).join(" ")).filter(Boolean).join(" | "))}return e}function U_(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(l=>l?.prop===dn),n=new Map;for(let l of t?.examples||[]){if(!l?.subject)continue;let c=n.get(l.subject);c?c.push(l):n.set(l.subject,[l])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let l of e.individuals){if(l?.class!==Et||String(l.id||"").includes("@")){a.push(l);continue}let c=w=>(l.attributes||[]).find(v=>v?.prop===w)?.value||"",u=c("rdf:subject"),d=c("rdf:predicate"),f=c("rdf:object");if(!u||!d||!f){a.push(l);continue}let p=Ho(u,d,f),m=c(Je),h=c("mgx:factProvenance"),g=n.get(l.id)||[],b=h?$g(h):[];for(let w of g)b.some(v=>v.sourceId===w.object)||b.push({sourceId:w.object,sourceType:"",tags:[]});b.length||b.push({sourceId:rs,sourceType:"",tags:[]});let y=[];for(let w of b){let v={id:`${p}@${w.sourceId}`,label:l.label,class:Et,derived_from:En(l.derived_from)||[],mentions:En(l.mentions)||[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:u},{prop:"rdf:predicate",key:"predicate",value:d},{prop:"rdf:object",key:"object",value:f},{prop:Je,key:"createdAt",value:lr(w.tags,m,Math.min)||m||is()},{prop:co,key:"sourceId",value:w.sourceId},...w.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.tags.join(" | ")}]:[],...c("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:c("mgx:hasProseTokens")}]:[],...c("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:c("mgx:factQuantifier")}]:[],...w.sourceType==="entailed"&&c("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:c("mgx:factJustification")}]:[]]};if(a.push(v),r.push(v),y.push(v.id),w.sourceId!==rs){let _=g.find($=>$?.object===w.sourceId);i.push({..._||{},subject:v.id,object:w.sourceId,subjectLabel:v.label,objectLabel:zu(w.sourceId)})}}s.add(l.id),o.set(l.id,y)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(l=>!s.has(l?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:dn,count:i.length,examples:i}));for(let l of e.objectProperties||[]){if(l?.prop===dn||!l?.examples?.length)continue;let c=[];for(let u of l.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],f=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let p of d)for(let m of f)c.push({...u,subject:p,object:m})}l.examples=c,l.count=c.length}e.individuals=a,Ng(e);for(let l of r)rr(e,l);return cs(e),e}async function B_(e,t){if(As(e)){e.payload=t;return}if(Fn(e)){P_(e,t);return}await kn(ve(xu(e)),{recursive:!0}),await Na(xu(e),t)}async function W_(e){if(As(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Og);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(Q(e,Pu),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function G_(e,t){if(As(e)){e.syllogiseState=structuredClone(t);return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Og,JSON.stringify(t));return}let n=Q(e,Pu);await kn(ve(n),{recursive:!0}),await Na(n,t)}async function q_(e){if(As(e))return e.nodeId||null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Lg);return t?.v&&JSON.parse(t.v).nodeId||null}try{return JSON.parse(await ze(Q(e,Mu),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function V_(e,t){if(As(e)){e.nodeId=t;return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Lg,JSON.stringify({nodeId:t}));return}let n=Q(e,Mu);await kn(ve(n),{recursive:!0}),await Na(n,{nodeId:t})}function Ng(e){let t=new Map,n=new Map,s=new Map,o=new Map,r=new Map;for(let a of e.individuals||[])if(a?.id&&(t.set(a.id,a),a.class===ar&&n.set(a.id,a),a.class===xn&&_u(r,a),a.class===Et)){let l=Vt(a.id),c=o.get(l);c?c.push(a.id):o.set(l,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===dn);for(let a of i?.examples||[]){if(!a?.subject)continue;let l=s.get(a.subject);l?l.push(a.object):s.set(a.subject,[a.object])}return e[ju]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[ju]}function _u(e,t){let n=Vt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function H_(e,t){let n=Ht(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===xn&&Vt(s.id)===t)}async function Cs(e,t){let n=await Nt(e);Ng(n);let s=await t(n)??n;return Q_(s),eR(s),s.proseIndex=Tp(s.individuals),await B_(e,s),s}function Fu(e,t){return e?.attributes?.find(n=>n?.prop===Je)?.value||t||is()}function pn(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Du(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Ia}:${e.sessionId}`:Ia,type:"operator"};case"teach":return{id:e.sessionId?`${vu}:${e.sessionId}`:vu,type:"teach"};case"teachNode":return{id:`${gg}:${e.nodeId}`,type:"teach"};case"provider":return{id:`src:provider:${e.name}`,type:"provider"};case"corpus":return{id:`src:corpus:${e.name}`,type:"corpus"};case"corpusWeak":return{id:`src:corpus-weak:${e.name}`,type:"corpusWeak"};case"reference":return{id:`src:reference:${e.pack}:${e.article}`,type:"reference"};case"referenceLive":return{id:`src:reference:${e.pack}:${e.article}`,type:"referenceLive"};case"extracted":return{id:`src:extracted:${e.name}`,type:"extracted"};case"optimisticExtract":return{id:`src:optimistic-extract:${e.name}`,type:"optimisticExtract"};case"web":return{id:`src:learned:web:${Gr(String(e.url||""))}`,type:"web",url:String(e.url||"")};case"entailed":return{id:`src:entailed:${e.rule}`,type:"entailed",rule:String(e.rule||"")};default:return null}}function K_(e){return Ac[e]||null}function Y_(e,t,n){let s=Du(t);if(!s)return null;let o=Ht(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=Fu(r,t?.createdAt||n),a={id:s.id,label:zu(s.id),class:ar,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Je,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},l=as(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function Ma(e){let t=Ht(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===ar&&(n[s.id]=s);return n}function Pg(e,t){let n=Ht(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===dn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function X_(e,t,n=Date.now(),s={}){let o=Pg(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Je)?.value||"",{score:i,inputs:a}=zp({sourceIds:o,createdAt:r},Ma(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});pn(t,Oo,"trustScore",String(i)),pn(t,ji,"trustInputs",JSON.stringify(a)),pn(t,gs,"updatedAt",new Date(n).toISOString())}function J_(e,t,n=Date.now(),s={}){let[o]=Pg(e,t.id),r=o?Ma(e)[o]:null,i=(r?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||"",a=_i(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let c=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*c))}let l=(t.attributes||[]).find(c=>c?.prop===Je)?.value||"";pn(t,Oo,"trustScore",String(a)),pn(t,ji,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:l})),pn(t,gs,"updatedAt",new Date(n).toISOString())}function Mg(e,t,n,s){t?.class===Et?J_(e,t,n,s):X_(e,t,n,s)}function rr(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Je)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=bs(i);if(!a)continue;let l=Y_(e,a,r);l&&Oa(e,{predicate:"statedBy",prop:dn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:zu(l)})}Mg(e,t,n,s)}function Q_(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===dn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==Et||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(rr(e,r,o),s=!0);s&&cs(e)}function eR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=St(e),n=new Set;for(let a of Hg(e))for(let l of a)n.add(l.id);let s=new Map;for(let a of t)for(let l of a.sourceIds){if(!Z_(l))continue;let c=s.get(l)||{factsAsserted:0,factsContradicted:0};c.factsAsserted+=1,n.has(a.id)&&(c.factsContradicted+=1),s.set(l,c)}if(!s.size)return;let o=Ht(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(pn(c,hg,"sourceReliability",String(Bp(l))),pn(c,gs,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===dn),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let l=o?o.individualsById.get(a):e.individuals.find(c=>c?.id===a);l&&Mg(e,l)}}function tR(e,t,n){if(!ma(n?.id))return n;let s=Xr(n.id);if(!s)return iu(t,n);let o=Ma(e);return iu(t,n,{priorFor:r=>_i(s,o[r])})}function mg(e,t,n){return n?.class===xn?Xh(t,n):tR(e,t,n)}function as(e,t){let n=Ht(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,mg(e,o,t)),o.class===xn&&_u(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===xn&&_u(n.retractionsByGroup,t),t.class===Et){let r=Vt(t.id),i=n.factRecordsByGroup.get(r);i?i.push(t.id):n.factRecordsByGroup.set(r,[t.id])}return t}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=mg(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function Oa(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(l=>l?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===dn?Ht(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||is()}),o.count=o.examples.length,l?l.push(s.object):r.statedByBySubject.set(s.subject,[s.object]);return}}let a=(o.examples||[]).find(l=>l?.subject===s.subject&&l?.object===s.object)?.createdAt||s.createdAt||is();if(o.examples=(o.examples||[]).filter(l=>!(l?.subject===s.subject&&l?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r){let l=r.statedByBySubject.get(s.subject)||[];l.includes(s.object)||l.push(s.object),r.statedByBySubject.set(s.subject,l)}}function cs(e){let t=[Au,Tu,Et,ar,cr];e.classes=(e.classes||[]).filter(n=>!t.includes(n?.name));for(let n of t){let s=e.individuals.filter(o=>o?.class===n);s.length&&e.classes.push({name:n,count:s.length,sample:s.slice(0,3).map(o=>o.label)})}}function nR(e,t,n=""){let s=`session:${t}`;return e.individuals.some(o=>o?.id===s)||e.individuals.push({id:s,label:String(t).slice(0,8),class:Au,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Je,key:"createdAt",value:n||is()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Fg(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!f_.has(t))throw new Error(`utterance role must be "visitor" or "tmct", got ${JSON.stringify(t)}`);if(!o)throw new Error("utterance needs a sessionId");let c=String(s||""),u=ts(n),d=`utt:${o}#${c}#${t}`,f=Pa(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=ki({doc:u}),m=e.individuals.find(y=>y?.id===d),h=Fu(m,l||c),g={id:d,label:f,class:Tu,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:utteranceRole",key:"role",value:t},{prop:"mgx:utteranceText",key:"text",value:u},{prop:"mgx:utteranceTs",key:"ts",value:c},{prop:Je,key:"createdAt",value:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};as(e,g);let b=nR(e,o,r);if(Oa(e,{predicate:"saidInSession",prop:Iu},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&Oa(e,{predicate:"inReplyTo",prop:Cu},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function sR(e,t){let n;return await Cs(e,s=>{n=Fg(s,t),cs(s)}),{id:n}}async function Dg(e,t){let n=[];return t?.length?(await Cs(e,s=>{for(let o of t)n.push(Fg(s,o));cs(s)}),{ids:n}):{ids:n}}async function oR(e,t){t?.length&&await Cs(e,n=>{for(let s of t)for(let o of lo(n,s.factId))Oa(n,{predicate:"canonicalisedFrom",prop:Ou},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function lo(e,t){let n=Ht(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===Et&&Vt(s.id)===t).map(s=>s.id)}function zg(e,t,n,s=""){let o=$g(n);if(o.length===1&&o[0].sourceId===rs&&lo(e,t).length)return[];let r=H_(e,t);if(r.length&&(o=o.filter(a=>!$a(r,`${t}@${a.sourceId}`,lr(a.tags,s))),!o.length))return o;let i=rR(e,t);return i.length?o.filter(a=>!Vh(i,a.sourceId)):o}function rR(e,t){let n=Ht(e),s=n?n.factRecordsByGroup.get(t):lo(e,t),o=[];for(let r of s||[]){if(!Rs(r))continue;let i=Ts(e,r);i&&o.push(i)}return o}function Ug(e,t,{quantifier:n,environments:s}){let o=lo(e,t).map(i=>Ts(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===ii)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(l=>l?.prop==="mgx:factJustification"));for(let a of i.length?i:o)pn(a,"mgx:factJustification","justification",s.map(l=>l.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(pn(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function iR(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Ca)?.value||"";for(let s of n.split(" ").filter(Boolean)){let o=/#v([1-9][0-9]*)$/.exec(s);o&&(t=Math.max(t,Number(o[1])))}return t+1}function Bg(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:l,createdAt:c,observedAt:u,quantifier:d,environments:f}=t,p=`${n}@${l.sourceId}`,m=Ht(e),h=m?m.individualsById.get(p):e.individuals.find(R=>R?.id===p),g=R=>(h?.attributes||[]).find(j=>j?.prop===R)?.value||"",b=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Eu(l.tags),observedAt:u},w=null,v=l.tags,_=y.assertedAt||c||is(),$=u,x=[],S=d;if(h){let R={assertedAt:Eu(b),observedAt:g(si)};y_(y,R)?(w={head:h,id:`${p}#v${iR(h)}`},x=[w.id]):(v=[...new Set([...b,...l.tags])],_=g(Je)||_,$=u||g(si),x=g(Ca).split(" ").filter(Boolean)),S=d||g("mgx:factQuantifier")}return{candidate:{id:p,label:i,class:Et,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:s},{prop:"rdf:predicate",key:"predicate",value:o},{prop:"rdf:object",key:"object",value:r},{prop:Je,key:"createdAt",value:_},{prop:co,key:"sourceId",value:l.sourceId},...v.length?[{prop:"mgx:factProvenance",key:"provenance",value:v.join(" | ")}]:[],...$?[{prop:si,key:"observedAt",value:$}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...S?[{prop:"mgx:factQuantifier",key:"quantifier",value:S}]:[],...f?[{prop:"mgx:factJustification",key:"justification",value:f.map(R=>R.join(" ")).join(" | ")}]:[],...x.length?[{prop:Ca,key:"supersedes",value:x.join(" ")}]:[]]},demote:w}}function aR(e,t){let n=`${t}@${rs}`,s=Ht(e);if((s?!s.individualsById.has(n):!e.individuals.some(r=>r?.id===n))||(e.individuals=e.individuals.filter(r=>r?.id!==n),!s))return;s.individualsById.delete(n);let o=(s.factRecordsByGroup.get(t)||[]).filter(r=>r!==n);o.length?s.factRecordsByGroup.set(t,o):s.factRecordsByGroup.delete(t)}function Wg(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${rs}`)||aR(e,Vt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};pn(o,ii,"supersededBy",t.id),as(e,o),s.push(o.id)}return as(e,t),s.push(t.id),s}function Ts(e,t){let n=Ht(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Uu(e,t){let n=new Set(t);if(!n.size)return;e.individuals=(e.individuals||[]).filter(o=>!n.has(o?.id));for(let o of e.objectProperties||[]){let r=o.examples||[],i=r.filter(a=>!n.has(a?.subject)&&!n.has(a?.object));i.length!==r.length&&(o.examples=i,o.count=i.length)}let s=Ht(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Vt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function Gg(e,t){let n=Ht(e),s=(n?n.factRecordsByGroup.get(t):lo(e,t))||[];if(s.length<8)return[];let o=new Map,r=new Map,i=new Map,a=new Map;for(let u of s.slice()){let d=Ts(e,u);if(!d)continue;let f=y=>(d.attributes||[]).find(w=>w?.prop===y)?.value||"";if(Rs(u)){i.set(Xr(u),d);continue}if(nr(u)){a.set(f(co),d);continue}let p=f("mgx:factProvenance"),m=wg(p),h=p.split(" | ").filter(Boolean),g={id:u,sourceId:f(co)||m.id,assertedAt:lr(h,f(Je)),record:d};if(f(ii)){let y=r.get(g.sourceId);y?y.push(g):r.set(g.sourceId,[g]);continue}if(!m.type)continue;let b=o.get(m.type);b?b.push(g):o.set(m.type,[g])}let l=Ma(e),c=[];for(let[u,d]of o){let f=Gh({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:p=>_i(u,l[p])});if(f){as(e,f.rollup),c.push(...f.absorbed);for(let p of f.absorbedSourceIds){for(let h of r.get(p)||[])c.push(h.id);r.delete(p);let m=a.get(p);m&&c.push(m.id),a.delete(p)}}}for(let[u,d]of r){let f=qh({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!f)continue;as(e,f.rollup),c.push(...f.absorbed);let p=Ts(e,f.rewire);p&&pn(p,Ca,"supersedes",f.rollup.id)}return c}async function cR(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",premiseTrusts:l,ruleConfidence:c}={}){let u=J(t),d=ns(n),f=J(s);if(!u||!d||!f)throw new Error("a fact needs subject, predicate and object");let p=Ho(u,d,f),m=`${u} ${d} ${f}`,h=ki({doc:m}),g=ts(a);return await Cs(e,async b=>{let y=zg(b,p,ts(o),r);for(let w of y.length?[]:Ug(b,p,{quantifier:g}))rr(b,Ts(b,w),void 0,{premiseTrusts:l,ruleConfidence:c});for(let w of y){let v=Bg(b,{groupId:p,s:u,p:d,o:f,label:Pa(m),tokens:h,group:w,createdAt:r,observedAt:i,quantifier:g});await mu(v.candidate);for(let _ of Wg(b,v))rr(b,Ts(b,_),void 0,_===v.candidate.id?{premiseTrusts:l,ruleConfidence:c}:void 0)}Uu(b,Gg(b,p)),cs(b)}),{id:p}}function lR(e){if(!Array.isArray(e))return;let t=e.some(Array.isArray)?e.filter(Array.isArray):[e],n=[],s=new Set;for(let o of t){let r=o.filter(a=>typeof a=="string"&&a);if(!r.length)continue;let i=[...r].sort().join(" ");s.has(i)||(s.add(i),n.push(r))}return n.length?n:void 0}async function uo(e,t){let n=[],s=0;for(let r of t||[]){let i=J(r?.subject),a=ns(r?.predicate),l=J(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:Ho(i,a,l),s:i,p:a,o:l,text:c,tokens:ki({doc:c}),provenance:ts(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:ts(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:lR(r?.justification)})}let o=[];return n.length?(await Cs(e,r=>{let i=[],a=new Set,l=new Map;for(let u of n){let d=zg(r,u.id,u.provenance,u.createdAt);for(let f of d.length?[]:Ug(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(f)||(a.add(f),i.push(f)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(f,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let f of d){let p=Bg(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:Pa(u.text),tokens:u.tokens,group:f,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments});for(let m of Wg(r,p))a.has(m)||(a.add(m),i.push(m));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(p.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)rr(r,Ts(r,u),void 0,l.get(u));let c=[];for(let u of new Set(o))c.push(...Gg(r,u));Uu(r,c),cs(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function za(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=qg[n];if(!i)throw new Error(`a rule kind must be one of ${uR.join(", ")}, got ${JSON.stringify(n)}`);let a=J(t);if(!a)throw new Error("a rule needs a name");let l=dR[n]||new Set,c=i.map(([p])=>J(s?.[p])),u=i.filter(([p],m)=>!l.has(p)&&!c[m]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([p])=>p).join(" + ")}`);if(n===li){let p=c[i.findIndex(([h])=>h==="objectRole")],m=c[i.findIndex(([h])=>h==="value")];if(!p&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=pR(n,a,c),f=Pa(`${a} = ${n}(${c.join(", ")})`);return await Cs(e,async p=>{let m=p.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...h.split(" | "),ts(o)].filter(Boolean))],b=Fu(m,r),y={id:d,label:f,class:cr,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Da,key:"ruleName",value:a},{prop:ur,key:"ruleKind",value:n},...i.map(([w,v],_)=>({prop:v,key:w,value:c[_],skip:!c[_]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...v})=>v),{prop:Je,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await mu(y),as(p,y),rr(p,p.individuals.find(w=>w?.id===d)),cs(p)}),{id:d}}function qu(e,t){let n=J(t);return(e?.individuals||[]).find(s=>s?.class===cr&&(s.attributes||[]).find(o=>o?.prop===Da)?.value===n)}function fR(e,t){let n=J(t),s=o=>(o.attributes||[]).find(r=>r?.prop===ur)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===cr&&(o.attributes||[]).find(r=>r?.prop===Da)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Vu(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==cr)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(ur),r=qg[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Da)||"",kind:o,slots:i,provenance:s("mgx:factProvenance")||""})}return t.sort((n,s)=>n.name.localeCompare(s.name)||n.kind.localeCompare(s.kind)||String(n.id).localeCompare(String(s.id))),t}async function Hu(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:l,byTrust:c,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:f}=o,p=String(t||"").trim().toLowerCase(),m=l(J,n),h=l(J,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(g.length){let w=g.slice().sort((v,_)=>c(v.fact,_.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map(v=>`${a(v)}${v.provenance?` (source: ${v.provenance})`:""}`)]}}let b=qu(e,p),y=b?.attributes?.find(w=>w.prop===ur)?.value;if(b&&y===ai){let w=b.attributes.find(F=>F.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(F=>F.prop==="mgx:ruleBase2")?.value,_=J(n),$=J(s);if(!w||!v||!_||!$)return null;let R=f({entity:_,hopsTaken:0},F=>F.hopsTaken===2&&F.entity===$,F=>{if(F.hopsTaken>=2)return[];let T=F.hopsTaken===0?w:v;return r(T).filter(M=>M.fact.subject===F.entity).map(M=>({action:M,nextState:{entity:M.fact.object,hopsTaken:F.hopsTaken+1}}))},{maxDepth:2,stateKey:F=>`${F.entity}#${F.hopsTaken}`});if(!R)return null;let j=new Set,A=[];for(let F of R.actions){A.push(i(F.fact));for(let T of F.aliasFacts){let M=T.id||`${T.subject}|${T.predicate}|${T.object}`;j.has(M)||(j.add(M),A.push(`${a(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{citation:A}}if(b&&y===ci){let w=b.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(E=>E.prop==="mgx:ruleFilterProperty")?.value;if(!w||!v)return null;let _=await Hu(e,w,n,s,o);if(!_)return null;let $=J(n),x=J(v),S=u.find(E=>E.predicate===d&&E.subject===$&&J(E.object)===x);return S?{citation:[..._.citation,i(S)]}:null}return null}async function Vg(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:l,rows:c,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,f=String(t||"").trim().toLowerCase(),p=a(J,n),m=o(f).filter(b=>p.has(b.fact.object));if(m.length){let b=new Map;for(let y of m)b.has(y.fact.subject)||b.set(y.fact.subject,[]),b.get(y.fact.subject).push(y);return[...b.entries()].map(([y,w])=>{let v=w.slice().sort((_,$)=>l(_.fact,$.fact))[0];return{subject:y,citation:[r(v.fact),...v.aliasFacts.map(_=>`${i(_)}${_.provenance?` (source: ${_.provenance})`:""}`)]}})}let h=qu(e,f),g=h?.attributes?.find(b=>b.prop===ur)?.value;if(h&&g===ai){let b=h.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=J(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},x=>{if(x.hopsTaken>=2)return[];let S=x.hopsTaken===0?y:b;return o(S).filter(E=>E.fact.object===x.entity).map(E=>({action:E,nextState:{entity:E.fact.subject,hopsTaken:x.hopsTaken+1}}))},{maxDepth:2,stateKey:x=>`${x.entity}#${x.hopsTaken}`}).filter(x=>x.node.hopsTaken===2).map(({node:x,path:S})=>{let E=new Set,R=[];for(let j of S.actions.slice().reverse()){R.push(r(j.fact));for(let A of j.aliasFacts){let F=A.id||`${A.subject}|${A.predicate}|${A.object}`;E.has(F)||(E.add(F),R.push(`${i(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{subject:x.entity,citation:R}})}if(h&&g===ci){let b=h.attributes.find($=>$.prop==="mgx:ruleBase1")?.value,y=h.attributes.find($=>$.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await Vg(e,b,n,s),v=J(y),_=[];for(let $ of w){let x=J($.subject),S=c.find(E=>E.predicate===u&&E.subject===x&&J(E.object)===v);S&&_.push({subject:$.subject,citation:[...$.citation,r(S)]})}return _}return[]}function St(e,t={}){let n=Ku(e),s=kg(e),o=[];for(let[r,i]of n.groups){let a=Yu(r,i,n),l=s?.get(r);a.trust=Ri(l?l.inputs:a.assertions,t).score,o.push(a)}return o}function Ku(e){let t=e?.individuals||[],n=new Map(t.filter(l=>l?.class===ar).map(l=>[l.id,l])),s=(e?.objectProperties||[]).find(l=>l?.prop===dn),o=new Map;for(let l of s?.examples||[])o.has(l.subject)||o.set(l.subject,[]),o.get(l.subject).push(l.object);let r=new Map,i=new Map;for(let l of t){if(l?.class===xn){let d=Vt(l.id),f=i.get(d);f?f.push(l):i.set(d,[l]);continue}if(l?.class!==Et||(l.attributes||[]).some(d=>d?.prop===ii)||nr(l.id))continue;let c=Vt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}for(let[l,c]of i){let u=r.get(l);if(!u)continue;let d=u.filter(f=>!$a(c,f.id,lr(Mn(f,"mgx:factProvenance").split(" | ").filter(Boolean),Mn(f,Je))));d.length!==u.length&&(d.length?r.set(l,d):r.delete(l))}let a=new Map;for(let[l,c]of r){c.sort((f,p)=>f.id<p.id?-1:f.id>p.id?1:0);let u=Su(oi(c[0],"subject"),oi(c[0],"predicate")),d=a.get(u);d?d.push(l):a.set(u,[l])}return{groups:r,groupsByPair:a,statedByRecord:o,sourceTypeOf:l=>(n.get(l)?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||""}}function Yu(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=Mn,i=oi,a=[],l=[],c=[],u=new Set,d=[],f=new Set,p="";for(let g of t){if(Rs(g.id)){let x=Xr(g.id),S=ha(g);for(let E of S)l.includes(E)||(l.push(E),x&&c.push(x));a.push({id:g.id,sourceId:"",sourceType:x,provenance:"",createdAt:r(g,Ln),ownTrust:Number(r(g,tr))||0,assertedAt:r(g,Nn),rollup:{count:Number(r(g,Yr))||S.length,sourceIds:S,earliest:r(g,Ln),latest:r(g,Nn)}});continue}let b=r(g,"mgx:factProvenance").split(" | ").filter(Boolean);for(let x of b)u.add(x);let[y]=s.get(g.id)||[],w=y||r(g,co),v=o(w);y&&!l.includes(y)&&(l.push(y),v&&c.push(v));let _=r(g,Je),$=r(g,si);a.push({id:g.id,sourceId:w,sourceType:v,provenance:b.join(" | "),createdAt:_,...$?{observedAt:$}:{},ownTrust:Number(r(g,Oo))||0,assertedAt:lr(b,_)}),p=p||i(g,"quantifier");for(let x of i(g,"justification").split(" | ")){let S=x.split(" ").filter(Boolean);if(!S.length)continue;let E=S.join(" ");f.has(E)||(f.add(E),d.push(S))}}let m=[],h=new Set;for(let g of d)for(let b of g)h.has(b)||(h.add(b),m.push(b));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:p,sourceIds:l,sourceTypes:c,environments:d,justification:m,assertions:a}}function mR(e){let t=Mn(e,co);if(t)return t;let n=String(e?.id||""),s=n.indexOf("@");if(s<0)return"";let o=n.slice(s+1),r=o.indexOf("#");return r<0?o:o.slice(0,r)}async function hR(e,t,{provenance:n="",retractedAt:s=""}={}){let o=new Set((t||[]).filter(Boolean)),r=[],i=[];if(!o.size)return{removed:r,records:i};let a=s||is();return await Cs(e,l=>{let c=new Set,u=new Set,d=new Map;l.individuals=(l.individuals||[]).filter(f=>{if(f?.class!==Et)return!0;let p=Vt(f.id),m=o.has(f.id)?f.id:o.has(p)?p:"";if(!m)return!0;u.add(m),c.add(f.id);let h=mR(f),g=`${p}\0${h}`,b=Mn(f,"mgx:factProvenance"),y=d.get(g);return y?(y.ids.push(f.id),b&&y.tags.push(b)):d.set(g,{groupId:p,sourceId:h,ids:[f.id],tags:b?[b]:[],template:{label:f.label||"",subject:Mn(f,"rdf:subject"),predicate:Mn(f,"rdf:predicate"),object:Mn(f,"rdf:object")}}),!1});for(let f of u)r.push(f);if(r.length){for(let f of c)i.push(f);for(let f of l.objectProperties||[]){let p=f.examples||[];f.examples=p.filter(m=>!c.has(m?.subject)&&!c.has(m?.object)),f.count=f.examples.length}for(let f of d.values()){let p=Yh({groupId:f.groupId,sourceId:f.sourceId,recordIds:f.ids,retractedAt:a,template:f.template,provenance:[...f.tags,n].filter(Boolean).join(" | ")});p&&as(l,p)}cs(l)}}),{removed:r,records:i}}function gR(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==xn)continue;let s=va(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function bR(e,t){let n=[];for(let o of t||[]){let r=xa(o);r&&n.push(r)}let s=[];return n.length?(await Cs(e,o=>{let r=new Map;for(let a of n){let l=as(o,a),c=Vt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}let i=new Set;for(let[a,l]of r)for(let c of lo(o,a)){let u=Ts(o,c);if(!u)continue;let d=Mn(u,"mgx:factProvenance").split(" | ").filter(Boolean);$a(l,c,lr(d,Mn(u,Je)))&&i.add(c)}if(i.size){Uu(o,i);for(let a of i)s.push(a)}cs(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function Hg(e,{floor:t=wR}={}){let n=St(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(da(r.predicate)===Jl)continue;let i=`${r.subject} ${r.predicate}`;s.has(i)||s.set(i,[]),s.get(i).push(r)}let o=[];for(let r of s.values()){if(new Set(r.map(a=>a.object)).size<2)continue;let i=da(r[0].predicate);i!==Ql&&!eu(r,i).contested||o.push(r.slice().sort((a,l)=>l.trust-a.trust||a.object.localeCompare(l.object)))}return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var ir,Ru,Tu,Et,Au,ar,cr,Iu,Cu,p_,dn,Ou,hg,Ia,vu,gg,f_,pg,m_,xu,Lu,bg,b_,rs,si,co,Ca,ii,xg,Mn,oi,Su,Eg,kg,x_,__,fg,En,Cg,ku,M_,$u,D_,Pu,Og,Mu,Lg,ju,Ht,Pa,is,zu,Z_,ai,ci,Bu,Wu,Fa,li,Gu,uR,Da,ur,qg,dR,pR,wR,dr,yR,$R,qe=O(()=>{_t();Ue();hs();nn();nn();ws();Lh();ws();ua();au();fu();Zh();au();fu();ir=Q(".tmct","memory"),Ru=Q(ir,"graph.json"),Tu="Utterance",Et="Fact",Au="Session",ar="Source",cr="Rule",Iu="mgx:saidInSession",Cu="mgx:inReplyTo",p_="mgx:derivedFrom",dn="mgx:statedBy",Ou="mgx:canonicalisedFrom",hg="mgx:sourceReliability",Ia="src:operator-chat",vu="src:teach-chat",gg="src:teach-node",f_=new Set(["visitor","tmct"]),pg=48,m_=[{prop:"rdf:type",note:"rdf-ish typing attribute: owl:NamedIndividual (utterances/sessions) or rdf:Statement (reified facts)"},{prop:"mgx:utteranceRole",note:"who said it: visitor (an a-visitor-said item) or tmct (the response alongside it)"},{prop:"mgx:utteranceText",note:"the utterance's normalized text (capped)"},{prop:"mgx:utteranceTs",note:"when it was said, ISO-8601 (the chat turn timestamp)"},{prop:"mgx:utteranceParsed",note:"optional JSON of the parse the interpretation pipeline produced for this request"},{prop:Iu,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Cu,predicate:"inReplyTo",note:"tmct Utterance \u2192 the visitor Utterance it answers (the Q/A pairing)"},{prop:"rdf:subject",note:"reified fact: the triple's subject term"},{prop:"rdf:predicate",note:"reified fact: the triple's predicate term"},{prop:"rdf:object",note:"reified fact: the triple's object term"},{prop:"mgx:factProvenance",note:"LEGACY COMPAT SHIM: the ' | '-joined provenance tag string a fact came from; the source-of-truth is now the mgx:statedBy edges derived from it"},{prop:"mgx:sourceId",note:"the assertion key a Fact record is filed under \u2014 the Source id of the ONE party asserting it, which is also the @-suffix of the record's own id. `src:none` when no tag names a Source, so every record has a key rather than a hole"},{prop:"mgx:observedAt",note:"OPTIONAL valid time: when the asserting party WITNESSED the claim, as against mgx:createdAt's transaction time (when this store recorded it). A stale article read today loses to an eyewitness report from yesterday. Stored only when a caller supplies one \u2014 never fabricated, never backfilled"},{prop:"mgx:supersedes",note:"the record id(s) this one replaced when its own source re-asserted the triple with a newer embedded timestamp. A space-joined LIST; absent, never empty, until the first supersession"},{prop:"mgx:supersededBy",note:"the record id(s) that replaced this one. Its presence is what makes a record a demoted leaf rather than a live head, and the group fold skips it: a source's past belief is not a second vote for the present one. A LIST, because one source with two live replicas can fork before they sync"},{prop:"mgx:factQuantifier",note:"OPTIONAL: the quantifier word a plural class-membership teach used ('every'/'some'/'a few'), for literal recall by 'how many Xs are Ys' \u2014 never real cardinality counting"},{prop:"mgx:factJustification",note:"an entailed Fact's supporting premise fact ids: ' | '-separated environments, one space-separated premise-id list per independent derivation, capped by syllogise's maxEnvironments knob; a value with no ' | ' is a single environment"},{prop:"mgx:ruleName",note:"a taught Rule's own name (e.g. 'grandparent') \u2014 the query-dispatcher's lookup key, PLAN_TAUGHT_RELATIONS.md \xA72/\xA73"},{prop:"mgx:ruleKind",note:"a taught Rule's SHAPE tag \u2014 the closed vocabulary compose2 | filter | recursive (structural, like 'Fact'/'Rule' themselves, never a domain word)"},{prop:"mgx:ruleBase1",note:"compose2: the first hop's base relation name; filter: the base rule/relation being filtered (same 'base relation' role in both kinds, so the name is shared)"},{prop:"mgx:ruleBase2",note:"compose2 only: the second hop's base relation name"},{prop:"mgx:ruleFilterProperty",note:"filter only: the property literal candidates are filtered by (an mgx:hasProperty-shaped Fact lookup)"},{prop:"mgx:ruleBaseCase",note:"recursive only: the base-case relation name (hop zero)"},{prop:"mgx:ruleRecStep",note:"recursive only: the self-referential recursive-step relation name"},{prop:Je,note:"when an individual was FIRST written, ISO-8601 (first-write-wins on upsert); the audit 'when', the recency input to trust, the novelty signal"},{prop:gs,note:"an audit / last-modified stamp: when an individual's OWN attributes were last mutated in place (upsertSession, recomputeFactTrust, recomputeSourceReliability) \u2014 most individuals never carry it at all. NOT transaction time: a mutable stamp cannot record when the previous version stopped being current, so tmct is not bitemporal"},{prop:p_,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:dn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Ou,predicate:"canonicalisedFrom",note:"subPropertyOf derivedFrom: a canonical Fact cleaned from a raw Block/Source, never replacing it"},{prop:"mgx:sourceType",note:"a Source's kind: operator | teach | provider | corpus | corpusWeak | reference | referenceLive | extracted | optimisticExtract | web | entailed (the trust-prior key)"},{prop:"mgx:sourceUrl",note:"a web Source's URL"},{prop:"mgx:sourceRule",note:"an entailed Source's rule id"},{prop:"mgx:sourceReliability",note:"actor-level (session-scoped) trust nudge in [0.5,1.5], neutral 1.0 when absent \u2014 materialised by recomputeSourceReliability from a session's asserted-vs-contradicted track record (memory/trust.mjs's sessionReliabilityFrom); folds into computeTrust's per-source prior"},{prop:Oo,note:"materialised trust cache in [0,1] \u2014 pure function of a fact's Sources + createdAt (memory/trust.mjs); invalidated when a statedBy edge is added"},{prop:ji,note:"JSON of the inputs the trust score was computed from (source-type multiset, corroboration count, createdAt, recency) \u2014 makes the score auditable"},{prop:"mgx:hasProseTokens",note:"prose tokens (prose.mjs tokenizer) backing the payload's proseIndex"},{prop:"mgx:sessionStarted",note:"session anchor: when the session started, ISO-8601"},{prop:"rdf:predicate",prefix:Xo,note:"a reified fact's predicate carries its POLARITY: mgxneg:capableOf is the negative twin of mgx:capableOf ('a penguin cannot fly'). Polarity cannot be a separate property \u2014 the fact id hashes (subject, predicate, object), so both polarities would share one id and union their statedBy edges (memory/capability.mjs)"}];xu=e=>ni(e),Lu="memory",bg="sqlite";b_=`
|
|
101
|
+
`))return r}}throw new he("cannot find end of structure",{toml:e,ptr:t})}var Ra=O(()=>{ao();});function E_(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(sr(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function ti(e,t,n,s,o){if(s===0)throw new he("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?dg(e,t,s,o):ug(e,t,s,o);if(n){if(c=Pn(e,c),e[c]===",")c++;else if(e[c]!==n)throw new he("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=ja(e,t);if(n){if(c=Pn(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
|
|
102
|
+
`&&e[c]!=="\r")throw new he("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=lg(e,t,",",n),a=E_(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new he("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=Pn(e,t+a[1]),e[i]===","&&i++),[cg(a[0],e,t,o),i]}var xu=O(()=>{vu();Eu();Ra();ao();});function Ta(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new he("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let i=e[t=++s];if(i!==" "&&i!==" ")if(i==='"'||i==="'"){if(i===e[t+1]&&i===e[t+2])throw new he("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=ja(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=_a(c);if(u>-1)throw new he("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new he("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new he("incomplete key-value: cannot find end of key",{toml:e,ptr:t});o.push(a)}else{s=e.indexOf(".",t);let a=e.slice(t,s<0||s>r?r:s);if(!S_.test(a))throw new he("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});o.push(a.trimEnd())}}while(s+1&&s<r);return[o,Pn(e,r+1,!0,!0)]}function ug(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=sr(e,t);else if(i!==" "&&i!==" "&&i!==`
|
|
103
|
+
`&&i!=="\r"){let a,l=o,c=!1,[u,d]=Ta(e,t-1);for(let m=0;m<u.length;m++){if(m&&(l=c?l[a]:l[a]={}),a=u[m],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||r.has(l[a])))throw new he("trying to redefine an already defined value",{toml:e,ptr:t});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:!0,configurable:!0,writable:!0})}if(c)throw new he("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=ti(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new he("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function dg(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=sr(e,t);else if(r!==" "&&r!==" "&&r!==`
|
|
104
|
+
`&&r!=="\r"){let i=ti(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new he("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var S_,Eu=O(()=>{vu();xu();Ra();ao();S_=/^[a-zA-Z0-9-_]+[ \t]*$/});function pg(e,t,n,s){let o=t,r=n,i,a=!1,l;for(let c=0;c<e.length;c++){if(c){if(o=a?o[i]:o[i]={},r=(l=r[i]).c,s===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=o.length-1;o=o[u],r=r[u].c}}if(i=e[c],(a=Object.hasOwn(o,i))&&r[i]?.t===0&&r[i]?.d)return null;a||(i==="__proto__"&&(Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(r,i,{enumerable:!0,configurable:!0,writable:!0})),r[i]={t:c<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(l=r[i],l.t!==s&&!(s===1&&l.t===3)||(s===2&&(l.d||(l.d=!0,o[i]=[]),o[i].push(o={}),l.c[l.i++]=l={t:1,d:!1,i:0,c:{}}),l.d))return null;if(l.d=!0,s===1)o=a?o[i]:o[i]={};else if(s===0&&a)return null;return[i,o,l.c]}function or(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=Pn(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=Ta(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new he("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=pg(c[0],s,o,l?2:1);if(!u)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});i=u[2],r=u[1],a=c[1]}else{let l=Ta(e,a),c=pg(l[0],r,i,0);if(!c)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=ti(e,l[1],void 0,t,n);c[1][c[0]]=u[0],a=u[1]}if(a=Pn(e,a,!0),e[a]&&e[a]!==`
|
|
105
|
+
`&&e[a]!=="\r")throw new he("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=Pn(e,a)}return s}var fg=O(()=>{Eu();xu();Ra();ao();});var mg=O(()=>{});var Aa=O(()=>{fg();mg();$u();ao();});var bg={};Bn(bg,{CONFIG_FILE:()=>Ca,loadTomlConfig:()=>Su,mergeEffective:()=>gg,normalizeConfig:()=>hg});async function Su(e,{file:t}={}){let n=t||Q(e,Ca),s;try{s=await ze(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return or(s)}catch(o){throw new Error(`Invalid ${Ca} at ${n}: ${o&&o.message?o.message:o}`)}}async function k_(e,t){let n;if(Array.isArray(e))n=e;else{let o=Qt(t,String(e));n=(await ze(o,"utf8")).split(`
|
|
106
|
+
`)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Qt(t,r))}return s}async function hg(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await k_(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Qt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Qt(s,String(n.graph_file))),n.graph_files!==void 0){let w=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=w.map(v=>Qt(s,String(v)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},l={};a.enabled!==void 0&&(l.enabled=a.enabled),a.limit!==void 0&&(l.limit=a.limit),a.capture_unknown_context!==void 0&&(l.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(l.unknownContextLimit=a.unknown_context_limit),Object.keys(l).length&&(o.seed=l),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.discourse!==void 0&&(o.discourse=n.discourse);let c=n.index||{},u={};c.languages!==void 0&&(u.languages=c.languages),c.exclude!==void 0&&(u.exclude=c.exclude),c.secret_exclude!==void 0&&(u.secretExclude=c.secret_exclude),c.history_depth!==void 0&&(u.historyDepth=c.history_depth),c.include_text!==void 0&&(u.includeText=c.include_text),c.include_structure!==void 0&&(u.includeStructure=c.include_structure),c.respect_gitignore!==void 0&&(u.respectGitignore=c.respect_gitignore),c.markdown_sections!==void 0&&(u.markdownSections=c.markdown_sections),c.vue!==void 0&&(u.vue=c.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},f={};d.score_gap_k!==void 0&&(f.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(f.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(f.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(f.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(f.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(f.beamSearch=d.beam_search),d.beam_width!==void 0&&(f.beamWidth=d.beam_width),d.prose_layers!==void 0&&(f.proseLayers=d.prose_layers);let p=d.expansion||{},m={};p.strategy!==void 0&&(m.strategy=p.strategy),p.nodes!==void 0&&(m.nodes=p.nodes),p.q!==void 0&&(m.q=p.q),p.depth!==void 0&&(m.depth=p.depth),Object.keys(m).length&&(f.expansion=m),Object.keys(f).length&&(o.tune=f);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.enabled});let g=n.memory||{},b={};g.retention_versions!==void 0&&(b.retentionVersions=g.retention_versions),g.backend!==void 0&&(b.backend=g.backend),Object.keys(b).length&&(o.memory=b);let y=[];for(let[w,v]of j_)n[w]&&n[w][v]!==void 0&&y.push(`${w}.${v}`);return o.unwired=y,o}function Ia(e,t="",n={}){for(let[s,o]of Object.entries(e||{})){if(o==null)continue;let r=t?`${t}.${s}`:s;Array.isArray(o)||typeof o!="object"?n[r]=o:Ia(o,r,n)}return n}function gg({args:e={},toml:t=null,defaults:n={}}={}){let s=Ia(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Ia(o):{},i=Ia(e),a=[...new Set([...Object.keys(s),...Object.keys(r),...Object.keys(i)])].sort(),l={},c={};for(let u of a)u in i?(l[u]=i[u],c[u]="arg"):u in r?(l[u]=r[u],c[u]="tmct.toml"):(l[u]=s[u],c[u]="default");return{effective:l,sources:c}}var Ca,j_,Oa=O(()=>{_t();Ue();Aa();Ca="tmct.toml";j_=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var Os={};Bn(Os,{CANONICALISED_FROM_PROP:()=>Fu,CAPABLE_OF_PREDICATE:()=>PR,CHAIN_KEEP_DEPTH:()=>Bh,CHAIN_ROLLUP_THRESHOLD:()=>ma,CREATED_AT_PROP:()=>Je,DEFAULT_RETENTION:()=>Au,FACT_CLASS:()=>St,GROUP_ROLLUP_THRESHOLD:()=>zh,HAS_A_PREDICATE:()=>dr,IN_REPLY_TO_PROP:()=>Mu,MEMORY_DIR_REL:()=>ir,MEMORY_GRAPH_REL:()=>Ou,MEMORY_MANIFEST_REL:()=>Fg,MEMORY_SESSION_CLASS:()=>Nu,MULTI_VALUED_PREDICATES:()=>MR,NODE_ID_REL:()=>Bu,OPERATOR_SOURCE_ID:()=>La,RETRACTED_AT_PROP:()=>ya,RETRACTED_COUNT_PROP:()=>uu,RETRACTED_RECORD_IDS_PROP:()=>wa,RETRACTION_CLASS:()=>sn,RETRACTION_PREDICATE:()=>ba,ROLLUP_COUNT_PROP:()=>Yr,ROLLUP_EARLIEST_PROP:()=>Ln,ROLLUP_KEEP_PER_TYPE:()=>Uh,ROLLUP_LATEST_PROP:()=>Nn,ROLLUP_PRIOR_PROP:()=>tr,ROLLUP_RECORD_IDS_PROP:()=>Kr,ROLLUP_SOURCE_IDS_PROP:()=>er,RULE_CLASS:()=>cr,RULE_KIND_ACTION_CONSTRAINT:()=>Yu,RULE_KIND_ACTION_EFFECT:()=>li,RULE_KIND_ACTION_PRECOND:()=>Ua,RULE_KIND_ACTION_SIGNATURE:()=>Ku,RULE_KIND_COMPOSE2:()=>ai,RULE_KIND_FILTER:()=>ci,RULE_KIND_PROP:()=>ur,RULE_KIND_RECURSIVE:()=>Hu,SAID_IN_SESSION_PROP:()=>Pu,SOURCE_CLASS:()=>ar,SOURCE_RELIABILITY_PROP:()=>vg,STATED_BY_PROP:()=>pn,SYLLOGISE_STATE_REL:()=>Uu,UPDATED_AT_PROP:()=>ys,UTTERANCE_CLASS:()=>Lu,admittedNodes:()=>Sa,appendCanonicalisedFromEdges:()=>yR,appendFact:()=>ER,appendFacts:()=>uo,appendRetractions:()=>CR,appendRule:()=>Wa,appendUtterance:()=>wR,appendUtterances:()=>qg,applySeedPayload:()=>A_,attachFactHeads:()=>Ag,chainRollupIdFor:()=>ou,cloneMemoryPayload:()=>I_,closeSqliteMemoryStore:()=>Lg,createInMemoryStore:()=>Ma,createSqliteMemoryStore:()=>Og,emptyMemory:()=>ri,factGroupId:()=>Nt,factHeadsOf:()=>Ig,factIdForTriple:()=>ge,factRecordIdForTag:()=>O_,factRecordIdsFor:()=>lo,findContradictions:()=>Zg,findRuleByName:()=>Xu,findRulesByName:()=>RR,headRollupIdFor:()=>su,isChainRollupId:()=>nr,isHeadRollupId:()=>Ts,isMemoryOrSqliteHandle:()=>zu,isRetractionId:()=>pu,isRollupId:()=>ha,loadMemory:()=>Pt,loadNodeId:()=>iR,loadSyllogiseState:()=>oR,normFactPredicate:()=>rs,normFactTerm:()=>J,openConfiguredMemoryBackend:()=>Cs,openMemoryBackend:()=>Ng,peersToConvince:()=>bu,provSourceClassFor:()=>lR,provenanceTagToSource:()=>Vn,readFactRows:()=>vt,readObjectSupersessions:()=>U_,readRetractions:()=>IR,readRuleRows:()=>Ju,removeFacts:()=>AR,resolveMemoryGraphFile:()=>ni,resolveRelationChase:()=>Qu,resolveRelationChaseReverse:()=>Qg,retirableRetractions:()=>OR,retireRetractions:()=>LR,retractedAtOf:()=>io,retractedRecordIds:()=>ro,retractionFromWire:()=>Ea,retractionIdFor:()=>du,retractionScopeOf:()=>fu,retractionWireFact:()=>xa,saveNodeId:()=>aR,saveSyllogiseState:()=>rR,snapshotMemory:()=>Z_,stableRecordIds:()=>ka});function ri(){return{generated_at:"",memory:!0,prefixes:{owl:"http://www.w3.org/2002/07/owl#",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",mgx:"urn:tmct:mgx#",mgxneg:"urn:tmct:mgxneg#"},vocabulary:T_.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function ni(e,t=null){if(Is(e)||Fn(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Q(e,Ou):Q(e,ir,`graph.v${t}.json`)}function Is(e){return!!e&&typeof e=="object"&&e.backend===Du}function Fn(e){return!!e&&typeof e=="object"&&e.backend===Eg}function zu(e){return Is(e)||Fn(e)}function Ma(){return{backend:Du,payload:ri()}}function A_(e,t){t&&(e.payload={...e.payload,...t})}function I_(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function Sg(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=Gu(Vn(t));if(n)return n}return{id:cs,type:""}}function Nt(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function O_(e,t){return`${e}@${kg(t).id}`}function kg(e){return Gu(Vn(e))||{id:cs,type:""}}function jg(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=kg(s),i=t.get(o)||{sourceId:o,sourceType:r,tags:[]};i.tags.includes(s)||i.tags.push(s),t.set(o,i)}return t.size||t.set(cs,{sourceId:cs,sourceType:"",tags:[]}),[...t.values()]}function Ru(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=Vn(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function lr(e,t="",n=Math.max){return Ru(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function L_(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt);return!Number.isFinite(n)||!Number.isFinite(s)?!1:n>s?!0:n===s&&!!e.observedAt&&!t.observedAt}function _g(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=Sg(n("mgx:factProvenance")),o=n(ii).split(" ").filter(Boolean)[0]||null,r=Xr(e.id);return[e.id,Nt(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(co)||s.id,r||s.type,Number(n(r?tr:Oo))||0,n(Je),n(si)||null,o,t]}function N_(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(St))return;let t=e.prepare(Rg);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(St))t.run(..._g(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function P_(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Ag(e,t){return e&&t&&(e[Tg]=t),e}function F_(e){let t=new Map;for(let n of e.prepare("SELECT triple_hash, trust_base, inputs_json FROM fact_heads").all())t.set(n.triple_hash,{trustBase:n.trust_base,inputs:JSON.parse(n.inputs_json)});return t}function Cg(e,t,n,s){let o=e.prepare(M_),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=ls();for(let a of n){let l=t.groups.get(a);if(!l?.length){r.run(a),s?.delete(a);continue}let c=P_(ed(a,l,t).assertions),u=Vp(c).score;o.run(a,u,JSON.stringify(c),i),s?.set(a,{trustBase:u,inputs:c})}}function D_(e){let t=e.db;if(t.prepare("SELECT triple_hash FROM fact_heads LIMIT 1").get()||!t.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(St))return;let n=Zu(Pg(e));t.exec("BEGIN IMMEDIATE");try{Cg(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function z_(e,t,n){let s=e.prepare("SELECT ord, to_id FROM fact_object_supersessions WHERE subject = ? AND predicate = ? ORDER BY ord DESC LIMIT 1"),o=e.prepare("INSERT INTO fact_object_supersessions(subject, predicate, ord, from_id, to_id, recorded_at) VALUES (?, ?, ?, ?, ?, ?)"),r=ls();for(let i of n){let[a,l]=i.split("\0");if(pa(l)!==Hr)continue;let c=t.groupsByPair.get(i)||[];if(c.length<2)continue;let u=c.map(p=>{let m=ed(p,t.groups.get(p),t);return m.trust=Ti(m.assertions).score,m});if(new Set(u.map(p=>p.object)).size<2)continue;let d=nu(u,Hr)?.winner?.id;if(!d)continue;let f=s.get(a,l);f?.to_id!==d&&o.run(a,l,(f?.ord??-1)+1,f?.to_id||"",d,r)}}function U_(e,{subject:t,predicate:n}={}){if(!Fn(e))return[];let s=t&&n?" WHERE subject = ? AND predicate = ?":"",o=s?[t,n]:[];return e.db.prepare(`SELECT subject, predicate, ord, from_id, to_id, recorded_at FROM fact_object_supersessions${s} ORDER BY subject, predicate, ord`).all(...o).map(r=>({subject:r.subject,predicate:r.predicate,ord:r.ord,fromId:r.from_id,toId:r.to_id,recordedAt:r.recorded_at}))}function W_(){if(yg)return;yg=!0;let e=process.listeners("warning").slice();process.removeAllListeners("warning"),process.on("warning",t=>{if(!(t?.name==="ExperimentalWarning"&&/sqlite/i.test(String(t?.message))))if(e.length)for(let n of e)n(t);else console.error(t.stack||String(t))})}async function Og(e){W_();let{DatabaseSync:t}=await Promise.resolve().then(()=>(ag(),ig)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(C_),N_(n);let s={backend:Eg,db:n,dbPath:e};return D_(s),s}function Lg(e){Fn(e)&&e.db.close()}async function Ng(e,t){if(t===Du)return{dir:Ma(),close:async()=>{}};let n=Q(e,".tmct","memory","graph.sqlite"),s=r=>mp(r).then(()=>!0,()=>!1);!await s(n)&&await s(Q(e,Ou))&&process.stderr.write(`found .tmct/memory/graph.json \u2014 the flat-file memory backend is retired; starting a fresh sqlite store (the old file is left untouched)
|
|
107
|
+
`),await jn(ve(n),{recursive:!0});let o=await Og(n);return{dir:o,close:async()=>Lg(o)}}async function Cs(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Oa(),bg));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Ng(e,n)}function G_(e){let t=e.db.prepare("PRAGMA data_version").get()?.data_version;return e.cachedPayload&&e.cachedDataVersion!==t&&(e.cachedPayload=null),e.cachedPayload||(e.cachedPayload=Pg(e),e.cachedFactHeads=F_(e.db),e.cachedDataVersion=t),Ag(Sn(e.cachedPayload),e.cachedFactHeads)}function Pg(e){let t=e.db,n=ri(),s=(a,l)=>{let c=t.prepare("SELECT v FROM meta WHERE k = ?").get(a);return c?JSON.parse(c.v):l},o=t.prepare("SELECT json FROM individuals ORDER BY ord").all().map(a=>JSON.parse(a.json)),r=t.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ? ORDER BY rowid"),i=t.prepare("SELECT prop, predicate, count FROM relations ORDER BY ord").all().map(a=>({predicate:a.predicate,prop:a.prop,count:a.count,examples:r.all(a.prop).map(l=>{let c={subject:l.subject,object:l.object,subjectLabel:l.subject_label,objectLabel:l.object_label};return l.extra&&Object.assign(c,JSON.parse(l.extra)),c})}));return{generated_at:s("generated_at",n.generated_at),memory:s("memory",n.memory),prefixes:s("prefixes",n.prefixes),vocabulary:s("vocabulary",n.vocabulary),classes:s("classes",n.classes),objectProperties:i,individuals:o,proseIndex:s("proseIndex",n.proseIndex)}}function q_(e,t){let n=Sn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function V_(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function H_(e,t){let n=e.objectProperties.find(s=>s?.prop===t);return n||(n={predicate:null,prop:t,count:0,examples:[]},e.objectProperties.push(n)),n}function K_(e,t,n){let s=`${t.subject}\0${t.object}`;e.examples=e.examples.filter(r=>`${r.subject}\0${r.object}`!==s);let o={subject:t.subject,object:t.object,subjectLabel:t.subjectLabel??null,objectLabel:t.objectLabel??null};n.length&&Object.assign(o,Sn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function Y_(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function X_(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function J_(e,t){let n=e.db,s=ri(),o=e.cachedPayload||null;n.exec("BEGIN IMMEDIATE");try{let r=n.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)");r.run("generated_at",JSON.stringify(t.generated_at??s.generated_at)),r.run("memory",JSON.stringify(t.memory??s.memory)),r.run("prefixes",JSON.stringify(t.prefixes??s.prefixes)),r.run("vocabulary",JSON.stringify(t.vocabulary??s.vocabulary)),r.run("classes",JSON.stringify(t.classes??s.classes)),r.run("proseIndex",JSON.stringify(t.proseIndex??s.proseIndex)),o&&(o.generated_at=Sn(t.generated_at??s.generated_at),o.memory=Sn(t.memory??s.memory),o.prefixes=Sn(t.prefixes??s.prefixes),o.vocabulary=Sn(t.vocabulary??s.vocabulary),o.classes=Sn(t.classes??s.classes),o.proseIndex=Sn(t.proseIndex??s.proseIndex));let i=n.prepare("SELECT ord, json FROM individuals WHERE id = ?"),l=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM individuals").get().m+1,c=n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),u=n.prepare(Rg),d=new Set,f=new Set,p=new Set;for(let E of t.individuals||[]){d.add(E.id);let R=JSON.stringify(E),j=i.get(E.id);if(j&&j.json===R)continue;let A=j?j.ord:l++;c.run(E.id,A,E.class??null,E.label??null,R),E.class===St&&(u.run(..._g(E,R)),f.add(Nt(E.id)),p.add(Tu(oi(E,"subject"),oi(E,"predicate")))),o&&q_(o,E)}let m=n.prepare("DELETE FROM individuals WHERE id = ?"),h=n.prepare("DELETE FROM facts WHERE id = ?"),g=n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?");for(let E of n.prepare("SELECT id FROM individuals").all()){if(d.has(E.id))continue;let R=g.get(E.id);R&&(f.add(R.triple_hash),p.add(Tu(R.subject,R.predicate))),m.run(E.id),h.run(E.id)}o&&V_(o,d);let b=n.prepare("SELECT ord FROM relations WHERE prop = ?"),w=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,v=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),_=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),$=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),x=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),S=new Set;for(let E of t.objectProperties||[]){S.add(E.prop);let R=_.all(E.prop),j=new Map(R.map(z=>[`${z.subject}\0${z.object}`,z])),A=new Set,F=o?H_(o,E.prop):null;for(let z of E.examples||[]){let Y=`${z.subject}\0${z.object}`;A.add(Y);let ae=Object.keys(z).filter(G=>!B_.has(G)),Z=ae.length?JSON.stringify(Object.fromEntries(ae.map(G=>[G,z[G]]))):null,D=j.get(Y);D&&(D.subject_label??null)===(z.subjectLabel??null)&&(D.object_label??null)===(z.objectLabel??null)&&(D.extra??null)===(Z??null)||($.run(E.prop,z.subject,z.object,z.subjectLabel??null,z.objectLabel??null,Z),F&&K_(F,z,ae))}for(let z of j.keys()){if(A.has(z))continue;let[Y,ae]=z.split("\0");x.run(E.prop,Y,ae)}F&&Y_(F,A);let T=Number.isFinite(E.count)?E.count:(E.examples||[]).length,M=b.get(E.prop)?.ord??w++;v.run(E.prop,M,E.predicate??null,T),F&&(F.predicate=E.predicate??null,F.count=T)}for(let E of n.prepare("SELECT prop FROM relations").all())S.has(E.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run(E.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run(E.prop));if(o&&X_(o,S),f.size){let E=Zu(t);Cg(n,E,f,e.cachedFactHeads),z_(n,E,p)}n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}async function Mg(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await $r(n,t),await xi(n,e)}async function Fa(e,t){await Mg(e,JSON.stringify(t))}async function Z_(e,{retentionVersions:t}={}){if(zu(e))throw new Error("snapshotMemory only supports the flat-JSON backend (Backend A) \u2014 a memory/sqlite handle has no on-disk graph.json to snapshot");let n=ni(e),s;try{s=await ze(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=Q_(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Au}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Au);let i=r.version,a=ni(e,i);await jn(ve(a),{recursive:!0}),await Mg(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await vc(ni(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await Fa(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Pt(e){if(Is(e))return ku(e.payload);if(Fn(e))return ku(G_(e));let t;try{t=await ze(_u(e),"utf8")}catch(n){if(n?.code==="ENOENT")return ri();throw n}return ku(JSON.parse(t))}function tR(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==St||!eR.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Ho(o("subject"),o("predicate"),o("object"));r!==s.id&&(t.set(s.id,r),s.id=r)}if(!t.size)return e;let n=s=>t.get(s)||s;for(let s of e.objectProperties||[])for(let o of s.examples||[])o&&(t.has(o.subject)&&(o.subject=t.get(o.subject)),t.has(o.object)&&(o.object=t.get(o.object)));for(let s of e.individuals){Array.isArray(s?.derived_from)&&s.derived_from.length&&(s.derived_from=s.derived_from.map(n));let o=(s?.attributes||[]).find(r=>r?.prop==="mgx:factJustification");o?.value&&(o.value=o.value.split(" | ").map(r=>r.split(" ").filter(Boolean).map(n).join(" ")).filter(Boolean).join(" | "))}return e}function nR(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(l=>l?.prop===pn),n=new Map;for(let l of t?.examples||[]){if(!l?.subject)continue;let c=n.get(l.subject);c?c.push(l):n.set(l.subject,[l])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let l of e.individuals){if(l?.class!==St||String(l.id||"").includes("@")){a.push(l);continue}let c=w=>(l.attributes||[]).find(v=>v?.prop===w)?.value||"",u=c("rdf:subject"),d=c("rdf:predicate"),f=c("rdf:object");if(!u||!d||!f){a.push(l);continue}let p=Ho(u,d,f),m=c(Je),h=c("mgx:factProvenance"),g=n.get(l.id)||[],b=h?jg(h):[];for(let w of g)b.some(v=>v.sourceId===w.object)||b.push({sourceId:w.object,sourceType:"",tags:[]});b.length||b.push({sourceId:cs,sourceType:"",tags:[]});let y=[];for(let w of b){let v={id:`${p}@${w.sourceId}`,label:l.label,class:St,derived_from:Sn(l.derived_from)||[],mentions:Sn(l.mentions)||[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:u},{prop:"rdf:predicate",key:"predicate",value:d},{prop:"rdf:object",key:"object",value:f},{prop:Je,key:"createdAt",value:lr(w.tags,m,Math.min)||m||ls()},{prop:co,key:"sourceId",value:w.sourceId},...w.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.tags.join(" | ")}]:[],...c("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:c("mgx:hasProseTokens")}]:[],...c("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:c("mgx:factQuantifier")}]:[],...w.sourceType==="entailed"&&c("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:c("mgx:factJustification")}]:[]]};if(a.push(v),r.push(v),y.push(v.id),w.sourceId!==cs){let _=g.find($=>$?.object===w.sourceId);i.push({..._||{},subject:v.id,object:w.sourceId,subjectLabel:v.label,objectLabel:qu(w.sourceId)})}}s.add(l.id),o.set(l.id,y)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(l=>!s.has(l?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:pn,count:i.length,examples:i}));for(let l of e.objectProperties||[]){if(l?.prop===pn||!l?.examples?.length)continue;let c=[];for(let u of l.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],f=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let p of d)for(let m of f)c.push({...u,subject:p,object:m})}l.examples=c,l.count=c.length}e.individuals=a,Ug(e);for(let l of r)rr(e,l);return Dn(e),e}async function sR(e,t){if(Is(e)){e.payload=t;return}if(Fn(e)){J_(e,t);return}await jn(ve(_u(e)),{recursive:!0}),await Fa(_u(e),t)}async function oR(e){if(Is(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Dg);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(Q(e,Uu),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function rR(e,t){if(Is(e)){e.syllogiseState=structuredClone(t);return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Dg,JSON.stringify(t));return}let n=Q(e,Uu);await jn(ve(n),{recursive:!0}),await Fa(n,t)}async function iR(e){if(Is(e))return e.nodeId||null;if(Fn(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(zg);return t?.v&&JSON.parse(t.v).nodeId||null}try{return JSON.parse(await ze(Q(e,Bu),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function aR(e,t){if(Is(e)){e.nodeId=t;return}if(Fn(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(zg,JSON.stringify({nodeId:t}));return}let n=Q(e,Bu);await jn(ve(n),{recursive:!0}),await Fa(n,{nodeId:t})}function Ug(e){let t=new Map,n=new Map,s=new Map,o=new Map,r=new Map;for(let a of e.individuals||[])if(a?.id&&(t.set(a.id,a),a.class===ar&&n.set(a.id,a),a.class===sn&&Cu(r,a),a.class===St)){let l=Nt(a.id),c=o.get(l);c?c.push(a.id):o.set(l,[a.id])}let i=(e.objectProperties||[]).find(a=>a?.prop===pn);for(let a of i?.examples||[]){if(!a?.subject)continue;let l=s.get(a.subject);l?l.push(a.object):s.set(a.subject,[a.object])}return e[Iu]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o,retractionsByGroup:r},e[Iu]}function Cu(e,t){let n=Nt(t.id),s=(e.get(n)||[]).filter(o=>o.id!==t.id);s.push(t),e.set(n,s)}function cR(e,t){let n=Mt(e);return n?n.retractionsByGroup.get(t)||[]:(e?.individuals||[]).filter(s=>s?.class===sn&&Nt(s.id)===t)}async function ds(e,t){let n=await Pt(e);Ug(n);let s=await t(n)??n;return fR(s),hR(s),s.proseIndex=Lp(s.individuals),await sR(e,s),s}function Wu(e,t){return e?.attributes?.find(n=>n?.prop===Je)?.value||t||ls()}function fn(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Gu(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${La}:${e.sessionId}`:La,type:"operator"};case"teach":return{id:e.sessionId?`${ju}:${e.sessionId}`:ju,type:"teach"};case"teachNode":return{id:`${xg}:${e.nodeId}`,type:"teach"};case"provider":return{id:`src:provider:${e.name}`,type:"provider"};case"corpus":return{id:`src:corpus:${e.name}`,type:"corpus"};case"corpusWeak":return{id:`src:corpus-weak:${e.name}`,type:"corpusWeak"};case"reference":return{id:`src:reference:${e.pack}:${e.article}`,type:"reference"};case"referenceLive":return{id:`src:reference:${e.pack}:${e.article}`,type:"referenceLive"};case"extracted":return{id:`src:extracted:${e.name}`,type:"extracted"};case"optimisticExtract":return{id:`src:optimistic-extract:${e.name}`,type:"optimisticExtract"};case"web":return{id:`src:learned:web:${Gr(String(e.url||""))}`,type:"web",url:String(e.url||"")};case"entailed":return{id:`src:entailed:${e.rule}`,type:"entailed",rule:String(e.rule||"")};default:return null}}function lR(e){return Cc[e]||null}function uR(e,t,n){let s=Gu(t);if(!s)return null;let o=Mt(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=Wu(r,t?.createdAt||n),a={id:s.id,label:qu(s.id),class:ar,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Je,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},l=us(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function za(e){let t=Mt(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===ar&&(n[s.id]=s);return n}function Bg(e,t){let n=Mt(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===pn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function dR(e,t,n=Date.now(),s={}){let o=Bg(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Je)?.value||"",{score:i,inputs:a}=qp({sourceIds:o,createdAt:r},za(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});fn(t,Oo,"trustScore",String(i)),fn(t,_i,"trustInputs",JSON.stringify(a)),fn(t,ys,"updatedAt",new Date(n).toISOString())}function pR(e,t,n=Date.now(),s={}){let[o]=Bg(e,t.id),r=o?za(e)[o]:null,i=(r?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||"",a=Ri(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let c=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*c))}let l=(t.attributes||[]).find(c=>c?.prop===Je)?.value||"";fn(t,Oo,"trustScore",String(a)),fn(t,_i,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:l})),fn(t,ys,"updatedAt",new Date(n).toISOString())}function Wg(e,t,n,s){t?.class===St?pR(e,t,n,s):dR(e,t,n,s)}function rr(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Je)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Vn(i);if(!a)continue;let l=uR(e,a,r);l&&Pa(e,{predicate:"statedBy",prop:pn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:qu(l)})}Wg(e,t,n,s)}function fR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===pn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==St||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(rr(e,r,o),s=!0);s&&Dn(e)}function hR(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=vt(e),n=new Set;for(let a of Zg(e))for(let l of a)n.add(l.id);let s=new Map;for(let a of t)for(let l of a.sourceIds){if(!mR(l))continue;let c=s.get(l)||{factsAsserted:0,factsContradicted:0};c.factsAsserted+=1,n.has(a.id)&&(c.factsContradicted+=1),s.set(l,c)}if(!s.size)return;let o=Mt(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(fn(c,vg,"sourceReliability",String(Hp(l))),fn(c,ys,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===pn),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let l=o?o.individualsById.get(a):e.individuals.find(c=>c?.id===a);l&&Wg(e,l)}}function gR(e,t,n){if(!ha(n?.id))return n;let s=Xr(n.id);if(!s)return cu(t,n);let o=za(e);return cu(t,n,{priorFor:r=>Ri(s,o[r])})}function $g(e,t,n){return n?.class===sn?tg(t,n):gR(e,t,n)}function us(e,t){let n=Mt(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,$g(e,o,t)),o.class===sn&&Cu(n.retractionsByGroup,o),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===sn&&Cu(n.retractionsByGroup,t),t.class===St){let r=Nt(t.id),i=n.factRecordsByGroup.get(r);i?i.push(t.id):n.factRecordsByGroup.set(r,[t.id])}return t}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=$g(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function Pa(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(l=>l?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===pn?Mt(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||ls()}),o.count=o.examples.length,l?l.push(s.object):r.statedByBySubject.set(s.subject,[s.object]);return}}let a=(o.examples||[]).find(l=>l?.subject===s.subject&&l?.object===s.object)?.createdAt||s.createdAt||ls();if(o.examples=(o.examples||[]).filter(l=>!(l?.subject===s.subject&&l?.object===s.object)),o.examples.push({...s,createdAt:a}),o.count=o.examples.length,r){let l=r.statedByBySubject.get(s.subject)||[];l.includes(s.object)||l.push(s.object),r.statedByBySubject.set(s.subject,l)}}function Dn(e){let t=[Nu,Lu,St,ar,cr];e.classes=(e.classes||[]).filter(n=>!t.includes(n?.name));for(let n of t){let s=e.individuals.filter(o=>o?.class===n);s.length&&e.classes.push({name:n,count:s.length,sample:s.slice(0,3).map(o=>o.label)})}}function bR(e,t,n=""){let s=`session:${t}`;return e.individuals.some(o=>o?.id===s)||e.individuals.push({id:s,label:String(t).slice(0,8),class:Nu,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Je,key:"createdAt",value:n||ls()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Gg(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!R_.has(t))throw new Error(`utterance role must be "visitor" or "tmct", got ${JSON.stringify(t)}`);if(!o)throw new Error("utterance needs a sessionId");let c=String(s||""),u=os(n),d=`utt:${o}#${c}#${t}`,f=Da(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=ji({doc:u}),m=e.individuals.find(y=>y?.id===d),h=Wu(m,l||c),g={id:d,label:f,class:Lu,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:utteranceRole",key:"role",value:t},{prop:"mgx:utteranceText",key:"text",value:u},{prop:"mgx:utteranceTs",key:"ts",value:c},{prop:Je,key:"createdAt",value:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};us(e,g);let b=bR(e,o,r);if(Pa(e,{predicate:"saidInSession",prop:Pu},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&Pa(e,{predicate:"inReplyTo",prop:Mu},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function wR(e,t){let n;return await ds(e,s=>{n=Gg(s,t),Dn(s)}),{id:n}}async function qg(e,t){let n=[];return t?.length?(await ds(e,s=>{for(let o of t)n.push(Gg(s,o));Dn(s)}),{ids:n}):{ids:n}}async function yR(e,t){t?.length&&await ds(e,n=>{for(let s of t)for(let o of lo(n,s.factId))Pa(n,{predicate:"canonicalisedFrom",prop:Fu},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function lo(e,t){let n=Mt(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===St&&Nt(s.id)===t).map(s=>s.id)}function Vg(e,t,n,s=""){let o=jg(n);if(o.length===1&&o[0].sourceId===cs&&lo(e,t).length)return[];let r=cR(e,t);if(r.length&&(o=o.filter(a=>!va(r,`${t}@${a.sourceId}`,lr(a.tags,s))),!o.length))return o;let i=$R(e,t);return i.length?o.filter(a=>!Jh(i,a.sourceId)):o}function $R(e,t){let n=Mt(e),s=n?n.factRecordsByGroup.get(t):lo(e,t),o=[];for(let r of s||[]){if(!Ts(r))continue;let i=As(e,r);i&&o.push(i)}return o}function Hg(e,t,{quantifier:n,environments:s}){let o=lo(e,t).map(i=>As(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===ii)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(l=>l?.prop==="mgx:factJustification"));for(let a of i.length?i:o)fn(a,"mgx:factJustification","justification",s.map(l=>l.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(fn(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function vR(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===Na)?.value||"";for(let s of n.split(" ").filter(Boolean)){let o=/#v([1-9][0-9]*)$/.exec(s);o&&(t=Math.max(t,Number(o[1])))}return t+1}function Kg(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:l,createdAt:c,observedAt:u,quantifier:d,environments:f}=t,p=`${n}@${l.sourceId}`,m=Mt(e),h=m?m.individualsById.get(p):e.individuals.find(R=>R?.id===p),g=R=>(h?.attributes||[]).find(j=>j?.prop===R)?.value||"",b=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Ru(l.tags),observedAt:u},w=null,v=l.tags,_=y.assertedAt||c||ls(),$=u,x=[],S=d;if(h){let R={assertedAt:Ru(b),observedAt:g(si)};L_(y,R)?(w={head:h,id:`${p}#v${vR(h)}`},x=[w.id]):(v=[...new Set([...b,...l.tags])],_=g(Je)||_,$=u||g(si),x=g(Na).split(" ").filter(Boolean)),S=d||g("mgx:factQuantifier")}return{candidate:{id:p,label:i,class:St,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:s},{prop:"rdf:predicate",key:"predicate",value:o},{prop:"rdf:object",key:"object",value:r},{prop:Je,key:"createdAt",value:_},{prop:co,key:"sourceId",value:l.sourceId},...v.length?[{prop:"mgx:factProvenance",key:"provenance",value:v.join(" | ")}]:[],...$?[{prop:si,key:"observedAt",value:$}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...S?[{prop:"mgx:factQuantifier",key:"quantifier",value:S}]:[],...f?[{prop:"mgx:factJustification",key:"justification",value:f.map(R=>R.join(" ")).join(" | ")}]:[],...x.length?[{prop:Na,key:"supersedes",value:x.join(" ")}]:[]]},demote:w}}function xR(e,t){let n=`${t}@${cs}`,s=Mt(e);if((s?!s.individualsById.has(n):!e.individuals.some(r=>r?.id===n))||(e.individuals=e.individuals.filter(r=>r?.id!==n),!s))return;s.individualsById.delete(n);let o=(s.factRecordsByGroup.get(t)||[]).filter(r=>r!==n);o.length?s.factRecordsByGroup.set(t,o):s.factRecordsByGroup.delete(t)}function Yg(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${cs}`)||xR(e,Nt(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};fn(o,ii,"supersededBy",t.id),us(e,o),s.push(o.id)}return us(e,t),s.push(t.id),s}function As(e,t){let n=Mt(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function Vu(e,t){let n=new Set(t);if(!n.size)return;e.individuals=(e.individuals||[]).filter(o=>!n.has(o?.id));for(let o of e.objectProperties||[]){let r=o.examples||[],i=r.filter(a=>!n.has(a?.subject)&&!n.has(a?.object));i.length!==r.length&&(o.examples=i,o.count=i.length)}let s=Mt(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Nt(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function Xg(e,t){let n=Mt(e),s=(n?n.factRecordsByGroup.get(t):lo(e,t))||[];if(s.length<8)return[];let o=new Map,r=new Map,i=new Map,a=new Map;for(let u of s.slice()){let d=As(e,u);if(!d)continue;let f=y=>(d.attributes||[]).find(w=>w?.prop===y)?.value||"";if(Ts(u)){i.set(Xr(u),d);continue}if(nr(u)){a.set(f(co),d);continue}let p=f("mgx:factProvenance"),m=Sg(p),h=p.split(" | ").filter(Boolean),g={id:u,sourceId:f(co)||m.id,assertedAt:lr(h,f(Je)),record:d};if(f(ii)){let y=r.get(g.sourceId);y?y.push(g):r.set(g.sourceId,[g]);continue}if(!m.type)continue;let b=o.get(m.type);b?b.push(g):o.set(m.type,[g])}let l=za(e),c=[];for(let[u,d]of o){let f=Yh({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:p=>Ri(u,l[p])});if(f){us(e,f.rollup),c.push(...f.absorbed);for(let p of f.absorbedSourceIds){for(let h of r.get(p)||[])c.push(h.id);r.delete(p);let m=a.get(p);m&&c.push(m.id),a.delete(p)}}}for(let[u,d]of r){let f=Xh({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!f)continue;us(e,f.rollup),c.push(...f.absorbed);let p=As(e,f.rewire);p&&fn(p,Na,"supersedes",f.rollup.id)}return c}async function ER(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",premiseTrusts:l,ruleConfidence:c}={}){let u=J(t),d=rs(n),f=J(s);if(!u||!d||!f)throw new Error("a fact needs subject, predicate and object");let p=Ho(u,d,f),m=`${u} ${d} ${f}`,h=ji({doc:m}),g=os(a);return await ds(e,async b=>{let y=Vg(b,p,os(o),r);for(let w of y.length?[]:Hg(b,p,{quantifier:g}))rr(b,As(b,w),void 0,{premiseTrusts:l,ruleConfidence:c});for(let w of y){let v=Kg(b,{groupId:p,s:u,p:d,o:f,label:Da(m),tokens:h,group:w,createdAt:r,observedAt:i,quantifier:g});await yu(v.candidate);for(let _ of Yg(b,v))rr(b,As(b,_),void 0,_===v.candidate.id?{premiseTrusts:l,ruleConfidence:c}:void 0)}Vu(b,Xg(b,p)),Dn(b)}),{id:p}}function SR(e){if(!Array.isArray(e))return;let t=e.some(Array.isArray)?e.filter(Array.isArray):[e],n=[],s=new Set;for(let o of t){let r=o.filter(a=>typeof a=="string"&&a);if(!r.length)continue;let i=[...r].sort().join(" ");s.has(i)||(s.add(i),n.push(r))}return n.length?n:void 0}async function uo(e,t){let n=[],s=0;for(let r of t||[]){let i=J(r?.subject),a=rs(r?.predicate),l=J(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:Ho(i,a,l),s:i,p:a,o:l,text:c,tokens:ji({doc:c}),provenance:os(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:os(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:SR(r?.justification)})}let o=[];return n.length?(await ds(e,r=>{let i=[],a=new Set,l=new Map;for(let u of n){let d=Vg(r,u.id,u.provenance,u.createdAt);for(let f of d.length?[]:Hg(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(f)||(a.add(f),i.push(f)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(f,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let f of d){let p=Kg(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:Da(u.text),tokens:u.tokens,group:f,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments});for(let m of Yg(r,p))a.has(m)||(a.add(m),i.push(m));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(p.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)rr(r,As(r,u),void 0,l.get(u));let c=[];for(let u of new Set(o))c.push(...Xg(r,u));Vu(r,c),Dn(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function Wa(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=Jg[n];if(!i)throw new Error(`a rule kind must be one of ${kR.join(", ")}, got ${JSON.stringify(n)}`);let a=J(t);if(!a)throw new Error("a rule needs a name");let l=jR[n]||new Set,c=i.map(([p])=>J(s?.[p])),u=i.filter(([p],m)=>!l.has(p)&&!c[m]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([p])=>p).join(" + ")}`);if(n===li){let p=c[i.findIndex(([h])=>h==="objectRole")],m=c[i.findIndex(([h])=>h==="value")];if(!p&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=_R(n,a,c),f=Da(`${a} = ${n}(${c.join(", ")})`);return await ds(e,async p=>{let m=p.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...h.split(" | "),os(o)].filter(Boolean))],b=Wu(m,r),y={id:d,label:f,class:cr,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Ba,key:"ruleName",value:a},{prop:ur,key:"ruleKind",value:n},...i.map(([w,v],_)=>({prop:v,key:w,value:c[_],skip:!c[_]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...v})=>v),{prop:Je,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await yu(y),us(p,y),rr(p,p.individuals.find(w=>w?.id===d)),Dn(p)}),{id:d}}function Xu(e,t){let n=J(t);return(e?.individuals||[]).find(s=>s?.class===cr&&(s.attributes||[]).find(o=>o?.prop===Ba)?.value===n)}function RR(e,t){let n=J(t),s=o=>(o.attributes||[]).find(r=>r?.prop===ur)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===cr&&(o.attributes||[]).find(r=>r?.prop===Ba)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Ju(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==cr)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(ur),r=Jg[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Ba)||"",kind:o,slots:i,provenance:s("mgx:factProvenance")||""})}return t.sort((n,s)=>n.name.localeCompare(s.name)||n.kind.localeCompare(s.kind)||String(n.id).localeCompare(String(s.id))),t}async function Qu(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:l,byTrust:c,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:f}=o,p=String(t||"").trim().toLowerCase(),m=l(J,n),h=l(J,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(g.length){let w=g.slice().sort((v,_)=>c(v.fact,_.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map(v=>`${a(v)}${v.provenance?` (source: ${v.provenance})`:""}`)]}}let b=Xu(e,p),y=b?.attributes?.find(w=>w.prop===ur)?.value;if(b&&y===ai){let w=b.attributes.find(F=>F.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(F=>F.prop==="mgx:ruleBase2")?.value,_=J(n),$=J(s);if(!w||!v||!_||!$)return null;let R=f({entity:_,hopsTaken:0},F=>F.hopsTaken===2&&F.entity===$,F=>{if(F.hopsTaken>=2)return[];let T=F.hopsTaken===0?w:v;return r(T).filter(M=>M.fact.subject===F.entity).map(M=>({action:M,nextState:{entity:M.fact.object,hopsTaken:F.hopsTaken+1}}))},{maxDepth:2,stateKey:F=>`${F.entity}#${F.hopsTaken}`});if(!R)return null;let j=new Set,A=[];for(let F of R.actions){A.push(i(F.fact));for(let T of F.aliasFacts){let M=T.id||`${T.subject}|${T.predicate}|${T.object}`;j.has(M)||(j.add(M),A.push(`${a(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{citation:A}}if(b&&y===ci){let w=b.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(E=>E.prop==="mgx:ruleFilterProperty")?.value;if(!w||!v)return null;let _=await Qu(e,w,n,s,o);if(!_)return null;let $=J(n),x=J(v),S=u.find(E=>E.predicate===d&&E.subject===$&&J(E.object)===x);return S?{citation:[..._.citation,i(S)]}:null}return null}async function Qg(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:l,rows:c,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,f=String(t||"").trim().toLowerCase(),p=a(J,n),m=o(f).filter(b=>p.has(b.fact.object));if(m.length){let b=new Map;for(let y of m)b.has(y.fact.subject)||b.set(y.fact.subject,[]),b.get(y.fact.subject).push(y);return[...b.entries()].map(([y,w])=>{let v=w.slice().sort((_,$)=>l(_.fact,$.fact))[0];return{subject:y,citation:[r(v.fact),...v.aliasFacts.map(_=>`${i(_)}${_.provenance?` (source: ${_.provenance})`:""}`)]}})}let h=Xu(e,f),g=h?.attributes?.find(b=>b.prop===ur)?.value;if(h&&g===ai){let b=h.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=J(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},x=>{if(x.hopsTaken>=2)return[];let S=x.hopsTaken===0?y:b;return o(S).filter(E=>E.fact.object===x.entity).map(E=>({action:E,nextState:{entity:E.fact.subject,hopsTaken:x.hopsTaken+1}}))},{maxDepth:2,stateKey:x=>`${x.entity}#${x.hopsTaken}`}).filter(x=>x.node.hopsTaken===2).map(({node:x,path:S})=>{let E=new Set,R=[];for(let j of S.actions.slice().reverse()){R.push(r(j.fact));for(let A of j.aliasFacts){let F=A.id||`${A.subject}|${A.predicate}|${A.object}`;E.has(F)||(E.add(F),R.push(`${i(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{subject:x.entity,citation:R}})}if(h&&g===ci){let b=h.attributes.find($=>$.prop==="mgx:ruleBase1")?.value,y=h.attributes.find($=>$.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await Qg(e,b,n,s),v=J(y),_=[];for(let $ of w){let x=J($.subject),S=c.find(E=>E.predicate===u&&E.subject===x&&J(E.object)===v);S&&_.push({subject:$.subject,citation:[...$.citation,r(S)]})}return _}return[]}function vt(e,t={}){let n=Zu(e),s=Ig(e),o=[];for(let[r,i]of n.groups){let a=ed(r,i,n),l=s?.get(r);a.trust=Ti(l?l.inputs:a.assertions,t).score,o.push(a)}return o}function Zu(e){let t=e?.individuals||[],n=new Map(t.filter(l=>l?.class===ar).map(l=>[l.id,l])),s=(e?.objectProperties||[]).find(l=>l?.prop===pn),o=new Map;for(let l of s?.examples||[])o.has(l.subject)||o.set(l.subject,[]),o.get(l.subject).push(l.object);let r=new Map,i=new Map;for(let l of t){if(l?.class===sn){let d=Nt(l.id),f=i.get(d);f?f.push(l):i.set(d,[l]);continue}if(l?.class!==St||(l.attributes||[]).some(d=>d?.prop===ii)||nr(l.id))continue;let c=Nt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}for(let[l,c]of i){let u=r.get(l);if(!u)continue;let d=u.filter(f=>!va(c,f.id,lr(Mn(f,"mgx:factProvenance").split(" | ").filter(Boolean),Mn(f,Je))));d.length!==u.length&&(d.length?r.set(l,d):r.delete(l))}let a=new Map;for(let[l,c]of r){c.sort((f,p)=>f.id<p.id?-1:f.id>p.id?1:0);let u=Tu(oi(c[0],"subject"),oi(c[0],"predicate")),d=a.get(u);d?d.push(l):a.set(u,[l])}return{groups:r,groupsByPair:a,statedByRecord:o,sourceTypeOf:l=>(n.get(l)?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||""}}function ed(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=Mn,i=oi,a=[],l=[],c=[],u=new Set,d=[],f=new Set,p="";for(let g of t){if(Ts(g.id)){let x=Xr(g.id),S=ga(g);for(let E of S)l.includes(E)||(l.push(E),x&&c.push(x));a.push({id:g.id,sourceId:"",sourceType:x,provenance:"",createdAt:r(g,Ln),ownTrust:Number(r(g,tr))||0,assertedAt:r(g,Nn),rollup:{count:Number(r(g,Yr))||S.length,sourceIds:S,earliest:r(g,Ln),latest:r(g,Nn)}});continue}let b=r(g,"mgx:factProvenance").split(" | ").filter(Boolean);for(let x of b)u.add(x);let[y]=s.get(g.id)||[],w=y||r(g,co),v=o(w);y&&!l.includes(y)&&(l.push(y),v&&c.push(v));let _=r(g,Je),$=r(g,si);a.push({id:g.id,sourceId:w,sourceType:v,provenance:b.join(" | "),createdAt:_,...$?{observedAt:$}:{},ownTrust:Number(r(g,Oo))||0,assertedAt:lr(b,_)}),p=p||i(g,"quantifier");for(let x of i(g,"justification").split(" | ")){let S=x.split(" ").filter(Boolean);if(!S.length)continue;let E=S.join(" ");f.has(E)||(f.add(E),d.push(S))}}let m=[],h=new Set;for(let g of d)for(let b of g)h.has(b)||(h.add(b),m.push(b));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:p,sourceIds:l,sourceTypes:c,environments:d,justification:m,assertions:a}}function TR(e){let t=Mn(e,co);if(t)return t;let n=String(e?.id||""),s=n.indexOf("@");if(s<0)return"";let o=n.slice(s+1),r=o.indexOf("#");return r<0?o:o.slice(0,r)}async function AR(e,t,{provenance:n="",retractedAt:s=""}={}){let o=new Set((t||[]).filter(Boolean)),r=[],i=[];if(!o.size)return{removed:r,records:i};let a=s||ls();return await ds(e,l=>{let c=new Set,u=new Set,d=new Map;l.individuals=(l.individuals||[]).filter(f=>{if(f?.class!==St)return!0;let p=Nt(f.id),m=o.has(f.id)?f.id:o.has(p)?p:"";if(!m)return!0;u.add(m),c.add(f.id);let h=TR(f),g=`${p}\0${h}`,b=Mn(f,"mgx:factProvenance"),y=d.get(g);return y?(y.ids.push(f.id),b&&y.tags.push(b)):d.set(g,{groupId:p,sourceId:h,ids:[f.id],tags:b?[b]:[],template:{label:f.label||"",subject:Mn(f,"rdf:subject"),predicate:Mn(f,"rdf:predicate"),object:Mn(f,"rdf:object")}}),!1});for(let f of u)r.push(f);if(r.length){for(let f of c)i.push(f);for(let f of l.objectProperties||[]){let p=f.examples||[];f.examples=p.filter(m=>!c.has(m?.subject)&&!c.has(m?.object)),f.count=f.examples.length}for(let f of d.values()){let p=eg({groupId:f.groupId,sourceId:f.sourceId,recordIds:f.ids,retractedAt:a,template:f.template,provenance:[...f.tags,n].filter(Boolean).join(" | ")});p&&us(l,p)}Dn(l)}}),{removed:r,records:i}}function IR(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==sn)continue;let s=xa(n);s&&t.push(s)}return t.sort((n,s)=>n.id<s.id?-1:n.id>s.id?1:0)}async function CR(e,t){let n=[];for(let o of t||[]){let r=Ea(o);r&&n.push(r)}let s=[];return n.length?(await ds(e,o=>{let r=new Map;for(let a of n){let l=us(o,a),c=Nt(l.id),u=r.get(c);u?u.push(l):r.set(c,[l])}let i=new Set;for(let[a,l]of r)for(let c of lo(o,a)){let u=As(o,c);if(!u)continue;let d=Mn(u,"mgx:factProvenance").split(" | ").filter(Boolean);va(l,c,lr(d,Mn(u,Je)))&&i.add(c)}if(i.size){Vu(o,i);for(let a of i)s.push(a)}Dn(o)}),{merged:n.length,removed:s}):{merged:0,removed:s}}function OR(e,{self:t="",acknowledgedBy:n=null}={}){let s=Sa(vt(e)),o=[];for(let r of e?.individuals||[])r?.class===sn&&r.id&&o.push(r.id);return{roster:s,retirable:ka({recordIds:o,roster:s,self:t,acknowledgedBy:n})}}async function LR(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await ds(e,o=>{let r=new Set;if(o.individuals=(o.individuals||[]).filter(a=>a?.class!==sn||!n.has(a.id)?!0:(r.add(a.id),!1)),!r.size)return;for(let a of r)s.push(a);let i=Mt(o);if(i)for(let a of r){i.individualsById.delete(a);let l=Nt(a),c=(i.retractionsByGroup.get(l)||[]).filter(u=>!r.has(u.id));c.length?i.retractionsByGroup.set(l,c):i.retractionsByGroup.delete(l)}Dn(o)}),{retired:s}):{retired:s}}function Zg(e,{floor:t=NR}={}){let n=vt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(pa(r.predicate)===Zl)continue;let i=`${r.subject} ${r.predicate}`;s.has(i)||s.set(i,[]),s.get(i).push(r)}let o=[];for(let r of s.values()){if(new Set(r.map(a=>a.object)).size<2)continue;let i=pa(r[0].predicate);i!==eu&&!nu(r,i).contested||o.push(r.slice().sort((a,l)=>l.trust-a.trust||a.object.localeCompare(l.object)))}return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var ir,Ou,Lu,St,Nu,ar,cr,Pu,Mu,__,pn,Fu,vg,La,ju,xg,R_,wg,T_,_u,Du,Eg,C_,cs,si,co,Na,ii,Rg,Mn,oi,Tu,Tg,Ig,M_,B_,yg,Sn,Fg,Au,Q_,ku,eR,Uu,Dg,Bu,zg,Iu,Mt,Da,ls,qu,mR,ai,ci,Hu,Ku,Ua,li,Yu,kR,Ba,ur,Jg,jR,_R,NR,dr,PR,MR,qe=O(()=>{_t();Ue();ws();nn();nn();Hn();Dh();Hn();da();lu();hu();wu();rg();lu();hu();wu();ir=Q(".tmct","memory"),Ou=Q(ir,"graph.json"),Lu="Utterance",St="Fact",Nu="Session",ar="Source",cr="Rule",Pu="mgx:saidInSession",Mu="mgx:inReplyTo",__="mgx:derivedFrom",pn="mgx:statedBy",Fu="mgx:canonicalisedFrom",vg="mgx:sourceReliability",La="src:operator-chat",ju="src:teach-chat",xg="src:teach-node",R_=new Set(["visitor","tmct"]),wg=48,T_=[{prop:"rdf:type",note:"rdf-ish typing attribute: owl:NamedIndividual (utterances/sessions) or rdf:Statement (reified facts)"},{prop:"mgx:utteranceRole",note:"who said it: visitor (an a-visitor-said item) or tmct (the response alongside it)"},{prop:"mgx:utteranceText",note:"the utterance's normalized text (capped)"},{prop:"mgx:utteranceTs",note:"when it was said, ISO-8601 (the chat turn timestamp)"},{prop:"mgx:utteranceParsed",note:"optional JSON of the parse the interpretation pipeline produced for this request"},{prop:Pu,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Mu,predicate:"inReplyTo",note:"tmct Utterance \u2192 the visitor Utterance it answers (the Q/A pairing)"},{prop:"rdf:subject",note:"reified fact: the triple's subject term"},{prop:"rdf:predicate",note:"reified fact: the triple's predicate term"},{prop:"rdf:object",note:"reified fact: the triple's object term"},{prop:"mgx:factProvenance",note:"LEGACY COMPAT SHIM: the ' | '-joined provenance tag string a fact came from; the source-of-truth is now the mgx:statedBy edges derived from it"},{prop:"mgx:sourceId",note:"the assertion key a Fact record is filed under \u2014 the Source id of the ONE party asserting it, which is also the @-suffix of the record's own id. `src:none` when no tag names a Source, so every record has a key rather than a hole"},{prop:"mgx:observedAt",note:"OPTIONAL valid time: when the asserting party WITNESSED the claim, as against mgx:createdAt's transaction time (when this store recorded it). A stale article read today loses to an eyewitness report from yesterday. Stored only when a caller supplies one \u2014 never fabricated, never backfilled"},{prop:"mgx:supersedes",note:"the record id(s) this one replaced when its own source re-asserted the triple with a newer embedded timestamp. A space-joined LIST; absent, never empty, until the first supersession"},{prop:"mgx:supersededBy",note:"the record id(s) that replaced this one. Its presence is what makes a record a demoted leaf rather than a live head, and the group fold skips it: a source's past belief is not a second vote for the present one. A LIST, because one source with two live replicas can fork before they sync"},{prop:"mgx:factQuantifier",note:"OPTIONAL: the quantifier word a plural class-membership teach used ('every'/'some'/'a few'), for literal recall by 'how many Xs are Ys' \u2014 never real cardinality counting"},{prop:"mgx:factJustification",note:"an entailed Fact's supporting premise fact ids: ' | '-separated environments, one space-separated premise-id list per independent derivation, capped by syllogise's maxEnvironments knob; a value with no ' | ' is a single environment"},{prop:"mgx:ruleName",note:"a taught Rule's own name (e.g. 'grandparent') \u2014 the query-dispatcher's lookup key, PLAN_TAUGHT_RELATIONS.md \xA72/\xA73"},{prop:"mgx:ruleKind",note:"a taught Rule's SHAPE tag \u2014 the closed vocabulary compose2 | filter | recursive (structural, like 'Fact'/'Rule' themselves, never a domain word)"},{prop:"mgx:ruleBase1",note:"compose2: the first hop's base relation name; filter: the base rule/relation being filtered (same 'base relation' role in both kinds, so the name is shared)"},{prop:"mgx:ruleBase2",note:"compose2 only: the second hop's base relation name"},{prop:"mgx:ruleFilterProperty",note:"filter only: the property literal candidates are filtered by (an mgx:hasProperty-shaped Fact lookup)"},{prop:"mgx:ruleBaseCase",note:"recursive only: the base-case relation name (hop zero)"},{prop:"mgx:ruleRecStep",note:"recursive only: the self-referential recursive-step relation name"},{prop:Je,note:"when an individual was FIRST written, ISO-8601 (first-write-wins on upsert); the audit 'when', the recency input to trust, the novelty signal"},{prop:ys,note:"an audit / last-modified stamp: when an individual's OWN attributes were last mutated in place (upsertSession, recomputeFactTrust, recomputeSourceReliability) \u2014 most individuals never carry it at all. NOT transaction time: a mutable stamp cannot record when the previous version stopped being current, so tmct is not bitemporal"},{prop:__,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:pn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Fu,predicate:"canonicalisedFrom",note:"subPropertyOf derivedFrom: a canonical Fact cleaned from a raw Block/Source, never replacing it"},{prop:"mgx:sourceType",note:"a Source's kind: operator | teach | provider | corpus | corpusWeak | reference | referenceLive | extracted | optimisticExtract | web | entailed (the trust-prior key)"},{prop:"mgx:sourceUrl",note:"a web Source's URL"},{prop:"mgx:sourceRule",note:"an entailed Source's rule id"},{prop:"mgx:sourceReliability",note:"actor-level (session-scoped) trust nudge in [0.5,1.5], neutral 1.0 when absent \u2014 materialised by recomputeSourceReliability from a session's asserted-vs-contradicted track record (memory/trust.mjs's sessionReliabilityFrom); folds into computeTrust's per-source prior"},{prop:Oo,note:"materialised trust cache in [0,1] \u2014 pure function of a fact's Sources + createdAt (memory/trust.mjs); invalidated when a statedBy edge is added"},{prop:_i,note:"JSON of the inputs the trust score was computed from (source-type multiset, corroboration count, createdAt, recency) \u2014 makes the score auditable"},{prop:"mgx:hasProseTokens",note:"prose tokens (prose.mjs tokenizer) backing the payload's proseIndex"},{prop:"mgx:sessionStarted",note:"session anchor: when the session started, ISO-8601"},{prop:"rdf:predicate",prefix:Xo,note:"a reified fact's predicate carries its POLARITY: mgxneg:capableOf is the negative twin of mgx:capableOf ('a penguin cannot fly'). Polarity cannot be a separate property \u2014 the fact id hashes (subject, predicate, object), so both polarities would share one id and union their statedBy edges (memory/capability.mjs)"}];_u=e=>ni(e),Du="memory",Eg="sqlite";C_=`
|
|
108
108
|
CREATE TABLE IF NOT EXISTS meta (k TEXT PRIMARY KEY, v TEXT NOT NULL);
|
|
109
109
|
CREATE TABLE IF NOT EXISTS individuals (id TEXT PRIMARY KEY, ord INTEGER NOT NULL, class TEXT, label TEXT, json TEXT NOT NULL);
|
|
110
110
|
CREATE TABLE IF NOT EXISTS relations (prop TEXT PRIMARY KEY, ord INTEGER NOT NULL, predicate TEXT, count INTEGER);
|
|
@@ -143,85 +143,85 @@ CREATE TABLE IF NOT EXISTS fact_object_supersessions (
|
|
|
143
143
|
recorded_at TEXT NOT NULL,
|
|
144
144
|
PRIMARY KEY (subject, predicate, ord)
|
|
145
145
|
);
|
|
146
|
-
`,
|
|
146
|
+
`,cs="src:none",si="mgx:observedAt",co="mgx:sourceId",Na="mgx:supersedes",ii="mgx:supersededBy";Rg="INSERT OR REPLACE INTO facts(id, triple_hash, subject, predicate, object, source_id, source_type, trust_score, created_at, observed_at, superseded_by, json) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";Mn=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",oi=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",Tu=(e,t)=>`${e}\0${t}`;Tg=Symbol("materialised fact_heads index");Ig=e=>e?.[Tg]||null,M_="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";B_=new Set(["subject","object","subjectLabel","objectLabel"]),yg=!1;Sn=e=>e===void 0?e:structuredClone(e);Fg=Q(ir,"manifest.json"),Au=5,Q_=e=>Q(e,Fg);ku=e=>nR(tR(e)),eR=/^fact:[0-9a-f]{8}$/;Uu=Q(ir,"syllogise-state.json"),Dg="syllogiseState";Bu=Q(ir,"node-id.json"),zg="nodeId";Iu=Symbol("mutateMemory lookup index");Mt=e=>e?.[Iu]||null;Da=e=>e.length>wg?e.slice(0,wg-1)+"\u2026":e,ls=()=>new Date().toISOString();qu=e=>String(e).replace(/^src:/,"");mR=e=>typeof e=="string"&&(e.startsWith(`${La}:`)||e.startsWith(`${ju}:`)||e.startsWith(`${xg}:`));ai="compose2",ci="filter",Hu="recursive",Ku="action-signature",Ua="action-precond",li="action-effect",Yu="action-constraint",kR=Object.freeze([ai,ci,Hu,Ku,Ua,li,Yu]),Ba="mgx:ruleName",ur="mgx:ruleKind",Jg={[ai]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[ci]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Hu]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[Ku]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Ua]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[li]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[Yu]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},jR={[Ua]:new Set(["value","negate"]),[li]:new Set(["objectRole","value"])},_R=(e,t,n)=>`rule:${Gr([e,t,...n].join("\0"))}`;NR=.5,dr="mgx:hasA",PR="mgx:capableOf",MR=tu});async function mn(e,t=null){try{if(t)return vt(await Pt(t));let{dir:n,close:s}=await Cs(ve(ve(e.graphFile)));try{return vt(await Pt(n))}finally{await s()}}catch{return[]}}function tb(e){let t=[...new Set(e.map(s=>s.provenance).filter(Boolean))];return t.length?`provenance: ${t.slice(0,2).join("; ")}${t.length>2?`, +${t.length-2} more source(s)`:""}`:"provenance: memory/corpus facts"}function Ga(e,t){let n=J(t),s=e.filter(a=>eb.has(a.predicate)&&a.object===n);if(!s.length)return null;let o=[...new Set(s.map(a=>a.subject))].sort(),r=o.slice(0,po),i=o.length>po?`
|
|
147
147
|
\u2026+${o.length-po} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
|
|
148
148
|
${r.join(`
|
|
149
149
|
`)}${i}
|
|
150
|
-
(${
|
|
151
|
-
`)}var
|
|
150
|
+
(${tb(s)})`}function qa(e,t){let n=J(t),s=e.filter(a=>eb.has(a.predicate)&&(a.subject===n||a.object===n));if(!s.length)return null;let o=[...new Set(s.filter(a=>a.subject===n).map(a=>a.object))],r=[...new Set(s.filter(a=>a.object===n).map(a=>a.subject))].sort(),i=[`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts.`];if(o.length&&i.push(`is a: ${o.slice(0,po).join(", ")}`),r.length){let a=r.length>po?`, +${r.length-po} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,po).join(", ")}${a}`)}return i.push(`(${tb(s)})`),i.join(`
|
|
151
|
+
`)}var eb,po,fo=O(()=>{Ue();qe();eb=new Set(["rdfs:subClassOf","rdf:type"]),po=40});async function nb(e,{graph:t,svc:n,config:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=tn(n.graph,o);if(r)return Wc(t,r,{candidates:i});let a=qa(await mn(s),o);if(a)return a;xt(n,o,"symbol")}var sb=O(()=>{Oe();fo();Ge()});async function ob(e,{graph:t,svc:n,repoRoot:s}){let o=nt(e,"symbol"),{match:r,candidates:i}=xt(n,o,"symbol"),a=Rt(r);if(!a)throw new Re(`"${r.label}" (${r.class||"Entity"}) has no source span in the graph \u2014 it is likely a module. Use tmct_describe for its contents, then tmct_snippet one of the functions/classes it defines.`);let l;try{l=await ss({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Wr})}catch(g){throw g instanceof Re?g:new Re(`could not read ${a.path} (${g?.code||g?.message||g})`)}let{text:c,truncated:u}=l,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,f=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,p=u?`
|
|
152
152
|
\u2026 (truncated to ${Wr} lines; full span ${d})`:"",m=i.length?`
|
|
153
|
-
(other matches: ${i.map(g=>g.label).join(", ")})`:"",h=
|
|
153
|
+
(other matches: ${i.map(g=>g.label).join(", ")})`:"",h=Vc(t,r);return`${f}
|
|
154
154
|
${c}${p}${h?`
|
|
155
|
-
${h}`:""}${m}`}var
|
|
156
|
-
`),data:o})}var ub=O(()=>{zt();Ju();fo();Ge();Qu.ownsGraphLoad=!0});function MR(e,t){let n=[];for(let s of t||[])s?.predicate===SR&&J(s.subject)===e&&n.push(J(s.object));return n}function Wa(e,t){let n=J(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of MR(i,t))s.has(a)||o.push(a)}}return r}var SR,kR,jR,_R,RR,TR,AR,IR,CR,OR,LR,NR,PR,db,Zu=O(()=>{nn();SR="rdfs:subClassOf",kR='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="10" r="3.4" fill="currentColor"/><circle cx="12" cy="15.6" r="4.6" fill="currentColor"/><g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round"><path d="M9 8 L2 4"/><path d="M9 10 L1.5 9"/><path d="M9 12.5 L2 14"/><path d="M9 15.5 L3 19"/><path d="M15 8 L22 4"/><path d="M15 10 L22.5 9"/><path d="M15 12.5 L22 14"/><path d="M15 15.5 L21 19"/></g></svg>',jR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13.2" rx="3.2" ry="5" fill="currentColor"/><circle cx="12" cy="7" r="2.6" fill="currentColor"/><g fill="currentColor" opacity="0.55"><path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/><path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/></g></svg>',_R='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/></svg>',RR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/><circle cx="7" cy="8.5" r="4" fill="currentColor"/><g fill="currentColor"><circle cx="4" cy="6" r="1.6"/><circle cx="7" cy="4.2" r="1.7"/><circle cx="10" cy="6" r="1.6"/></g><rect x="18.5" y="14" width="2.2" height="6" rx="1.1" fill="currentColor"/><circle cx="19.6" cy="13" r="1.5" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19.5" x2="9" y2="22"/><line x1="17" y1="19.5" x2="17" y2="22"/></g></svg>',TR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.2" fill="currentColor"/><circle cx="7" cy="9" r="3.6" fill="currentColor"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="currentColor"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>',AR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13" rx="7" ry="4.4" fill="currentColor"/><circle cx="12" cy="7" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="7" y1="17" x2="7" y2="21"/><line x1="17" y1="17" x2="17" y2="21"/></g></svg>',IR='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/></svg>',CR='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="3" rx="1" fill="currentColor"/><rect x="4" y="8" width="3" height="12" fill="currentColor"/><rect x="17" y="8" width="3" height="12" fill="currentColor"/></svg>',OR='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/><path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor" opacity="0.28"/></svg>',LR='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/></svg>',NR='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/><rect x="15.5" y="13.5" width="4.5" height="5" rx="1" fill="currentColor" opacity="0.6"/></svg>',PR='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/><path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor" opacity="0.7"/><rect x="10.6" y="9.4" width="2.8" height="2.2" rx="0.4" fill="currentColor" opacity="0.35"/></svg>',db=Object.freeze({spider:kR,fly:jR,egg:_R,poodle:RR,dog:TR,animal:AR,room:IR,furniture:CR,portable:OR,person:LR,adventurer:NR,container:PR})});function FR(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function pb(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of FR(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var fb=O(()=>{});function DR(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function zR(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function gb(e){return zR(e).filter(t=>t?.property&&t.value!==void 0)}function UR(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function BR(e,t){let n=null,s=0;for(let o of e){let r=gb(o);r.length<=s||UR(r,t)&&(n=o,s=r.length)}return n}function WR(e,t,n){if(typeof n=="string"&&t.placeholder)return e.split(t.placeholder).join(n);if(n&&typeof n=="object"&&t.placeholders){let s=e;for(let[o,r]of Object.entries(t.placeholders)){if(!Object.prototype.hasOwnProperty.call(n,o))return null;s=s.split(r).join(n[o])}return s}return null}function mb(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(l=>l.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,l.object));if(!i)continue;let a=WR(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function GR(e){let t=[];for(let n of Object.values(e.parameters||{})){n?.placeholder&&t.push(n.placeholder);for(let s of Object.values(n?.placeholders||{}))t.push(s)}return t}function qR(e,t){let n=t;for(let s of GR(e))n=n.split(s).join("");return n}function hb(e,t,n){let s=DR(e,n),o=BR(s,t);if(o&&!o.parameters)return o.svg;if(o)return qR(o,mb(o,t)||o.svg);for(let i of s){if(i.match||!i.parameters)continue;let a=mb(i,t);if(a)return a}let r=s.find(i=>!i.match&&!i.parameters);return r?r.svg:null}function VR(e,t,n,s,o,r){for(let a of Wa(e,t)){let l=hb(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=hb(r,n,s);return i||o[r]}function bb(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=VR(e,t,n,s,o,r);return i?pb(a,i):a}var y1,$1,ed=O(()=>{Zu();fb();y1=Object.freeze(["left","half-left","half-right","right"]),$1=Object.freeze(["moving"])});function td(e){for(let t of e||[])if(t?.predicate===HR&&Object.prototype.hasOwnProperty.call(wb,t.object))return wb[t.object];return 1}var HR,wb,yb=O(()=>{HR="mgx:hasProperty",wb=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function $b(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},l=a.resolveSpriteAsset;if(typeof l!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let c=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],f=a.rootFallback||"animal",p=a.classAncestorChain,m=a.sizeScaleFor,h=a.expressionPalette,g=[];r&&g.push({predicate:n,object:r}),i&&g.push({predicate:s,object:i});let b={rootFallback:f};a.instanceKey&&(b.instanceKey=a.instanceKey);let y=l(o,d,g,c,u,b),w=R=>l(R,[],g,c,{},{rootFallback:R}),v=R=>Object.prototype.hasOwnProperty.call(u,R),_=(R,j)=>{let A=c.filter(M=>M&&Array.isArray(M.classes)&&M.classes.indexOf(R)>=0),T=A.find(M=>M.svg===j)||A.find(M=>!M.match&&M.parameters)||null;return T?{classes:T.classes.slice(),parameters:Object.keys(T.parameters||{}).sort(),match:T.match||null}:null},$=null,x=null;if(typeof p=="function"){$=[];for(let R of p(o,d)){let j=w(R);if($.push({term:R,template:!!j,registry:v(R)}),j){x={term:R,via:"template",hops:$.length-1,root:!1,template:_(R,j)};break}if(v(R)){x={term:R,via:"registry",hops:$.length-1,root:!1,template:null};break}}if(!x){let R=w(f);$.push({term:f,template:!!R,registry:v(f),root:!0}),x={term:f,via:R?"template":"registry",hops:$.length-1,root:!0,template:R?_(f,R):null}}}let S=a.instanceKey?l(o,d,g,c,u,{rootFallback:f}):y,E=r?l(o,d,g.filter(R=>R.predicate!==n),c,u,{rootFallback:f}):null;return{class:o,expression:r||null,size:i||null,svg:y,scale:typeof m=="function"?m(g):1,sizeKnown:i&&typeof m=="function"?m([{predicate:s,object:i}])!==1:null,expressionKnown:r&&h?Object.prototype.hasOwnProperty.call(h,r):null,expressionApplied:r?S!==E:null,rootFallback:f,fellBackToRoot:x?!!x.root:null,chain:$,matched:x}}var vb=O(()=>{});var xb,Eb,KR,k1,Sb=O(()=>{ed();xb="icon tier",Eb="sprite tier",KR=Object.freeze({takeParameter:Object.freeze({predicate:"mgx:take-parameter",comment:"sprite class -> parameter name: a parameter that class's own templates declare."}),offerVariant:Object.freeze({predicate:"mgx:offer-variant",comment:"sprite class -> variant value: a hand-authored [match] constraint that class's templates offer."})}),k1=Object.freeze(Object.values(KR).map(e=>e.predicate))});var kb,jb=O(()=>{kb=()=>[]});var _b,Rb=O(()=>{_b=()=>[]});function QR(){let e=_b();return e.length?{templates:e,tier:Eb}:{templates:kb(),tier:xb}}function Tb(e){return e.map(t=>t.term).join(" -> ")}async function nd(e,{config:t,memoryBackend:n=null}){let s=nt(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(To,o))throw new Re(`"${o}" is not a sprite expression. The palette holds: ${XR().join(", ")}.`);if(r&&!JR(r))throw new Re(`"${r}" is not a size the sprite scale recognises \u2014 it reads a taught mgx:hasProperty size word off the individual, and has no entry for this one.`);let{templates:i,tier:a}=QR(),l=await fn(t,n),c=$b({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:db,resolveSpriteAsset:bb,classAncestorChain:Wa,sizeScaleFor:td,expressionPalette:To});if(!c.svg||c.fellBackToRoot)throw new Re(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${Tb(c.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!c.expressionApplied)throw new Re(`the ${a} draws "${s}" (matched at "${c.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,c.matched.hops===0?`matched at "${c.matched.term}", the class itself, via its own ${c.matched.via}`:`matched at "${c.matched.term}", ${c.matched.hops} hop(s) up the ancestor chain, via its ${c.matched.via}`,`ancestor chain walked: ${Tb(c.chain)}`];return c.matched.template?.parameters.length&&d.push(`template parameters: ${c.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${c.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${c.svg.length} characters of SVG markup`),js({content:d.join(`
|
|
157
|
-
`),data:{class:c.class,expression:c.expression,size:c.size,tier:a,scale:c.scale,svg:c.svg,chain:c.chain,matched:c.matched,expressionApplied:c.expressionApplied}})}var
|
|
155
|
+
${h}`:""}${m}`}var rb=O(()=>{_t();Bt();ta();Oe();Ge()});var ib,ab=O(()=>{Oe();Ge();ib=rt(xf)});function cb(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return df(t,s)}var lb=O(()=>{Oe();Ge()});async function ub(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Re("query is required");let r=$f(t,s,{kind:o,decorator:String(e?.decorator||"").trim(),name:String(e?.name||"").trim(),toolNamePrefix:n?.toolNamePrefix});if(!o&&/^no module matches/.test(r)){let i=qa(await mn(n),s);if(i)return i}return r}var db=O(()=>{Bt();Oe();fo()});async function pb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=tn(n.graph,o);if(r)return vf(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Ga(await mn(s),o);if(i)return i;xt(n,o,"class")}var fb=O(()=>{Oe();fo();Ge()});async function mb(e,{graph:t,svc:n,config:s}){let o=nt(e,"class"),{match:r}=tn(n.graph,o);if(r)return Ef(t,r);let i=Ga(await mn(s),o);if(i)return i;xt(n,o,"class")}var hb=O(()=>{Oe();fo();Ge()});function zR(e,{conceptBase:t="concept:",relationMap:n=DR}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=g=>{r.has(g)||r.set(g,g)},a=g=>{let b=g;for(;r.get(b)!==b;)b=r.get(b);for(;r.get(g)!==b;){let y=r.get(g);r.set(g,b),g=y}return b},l=(g,b)=>{let y=a(g),w=a(b);y!==w&&(y<w?r.set(w,y):r.set(y,w))},c=[];for(let g of e){let b=g.predicate;if(!s.has(b)&&!o.has(b))continue;let y=J(g.subject),w=J(g.object);!y||!w||(i(y),i(w),s.has(b)?l(y,w):c.push({s:y,o:w}))}let u=g=>t+g.replace(/ /g,"_"),d=new Map;for(let g of r.keys()){let b=a(g);d.has(b)||d.set(b,new Set),d.get(b).add(g)}let f=[];for(let[g,b]of d){let y=[...b].sort();f.push({id:u(g),prefLabel:g,altLabels:y.filter(w=>w!==g)})}f.sort((g,b)=>g.id<b.id?-1:g.id>b.id?1:0);let p=new Set,m=[];for(let{s:g,o:b}of c){let y=u(a(g)),w=u(a(b));if(y===w)continue;let v=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has(v)||(p.add(v),m.push({subject:y,object:w}))}return m.sort((g,b)=>`${g.subject}${g.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:m,conceptIdForTerm:g=>{let b=J(g);return r.has(b)?u(a(b)):null},namespace:FR}}function td(e,t,n={}){let s=zR(e,n),o=s.conceptIdForTerm(t);if(!o)return null;let r=new Map(s.concepts.map(u=>[u.id,u])),i=r.get(o),a=J(t),l=[i.prefLabel,...i.altLabels].filter(u=>u!==a),c=s.related.filter(u=>u.subject===o||u.object===o).map(u=>r.get(u.subject===o?u.object:u.subject)).filter(Boolean);return{conceptId:o,prefLabel:i.prefLabel,altLabels:i.altLabels,synonyms:l,related:c}}var FR,DR,nd=O(()=>{nn();FR="http://www.w3.org/2004/02/skos/core#",DR={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function sd(e,{config:t,memoryBackend:n=null}){let s=nt(e,"term"),o=td(await mn(t,n),s);if(!o)throw new Re(`no synonym or related facts for "${s}" in the memory graph. This view answers where the store holds mgx:synonym / mgx:relatedTo facts (a corpus import seeds them).`);let r=[`${o.prefLabel} [${o.conceptId}]`];return o.synonyms.length&&r.push(`synonyms (skos:altLabel): ${o.synonyms.join(", ")}`),o.related.length&&r.push(`related (skos:related): ${o.related.map(i=>i.prefLabel).join(", ")}`),r.push("(from the memory graph's mgx:synonym / mgx:relatedTo / mgx:similarTo facts)"),_s({content:r.join(`
|
|
156
|
+
`),data:o})}var gb=O(()=>{Bt();nd();fo();Ge();sd.ownsGraphLoad=!0});function eT(e,t){let n=[];for(let s of t||[])s?.predicate===UR&&J(s.subject)===e&&n.push(J(s.object));return n}function Va(e,t){let n=J(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of eT(i,t))s.has(a)||o.push(a)}}return r}var UR,BR,WR,GR,qR,VR,HR,KR,YR,XR,JR,QR,ZR,bb,od=O(()=>{nn();UR="rdfs:subClassOf",BR='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="10" r="3.4" fill="currentColor"/><circle cx="12" cy="15.6" r="4.6" fill="currentColor"/><g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round"><path d="M9 8 L2 4"/><path d="M9 10 L1.5 9"/><path d="M9 12.5 L2 14"/><path d="M9 15.5 L3 19"/><path d="M15 8 L22 4"/><path d="M15 10 L22.5 9"/><path d="M15 12.5 L22 14"/><path d="M15 15.5 L21 19"/></g></svg>',WR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13.2" rx="3.2" ry="5" fill="currentColor"/><circle cx="12" cy="7" r="2.6" fill="currentColor"/><g fill="currentColor" opacity="0.55"><path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/><path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/></g></svg>',GR='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/></svg>',qR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/><circle cx="7" cy="8.5" r="4" fill="currentColor"/><g fill="currentColor"><circle cx="4" cy="6" r="1.6"/><circle cx="7" cy="4.2" r="1.7"/><circle cx="10" cy="6" r="1.6"/></g><rect x="18.5" y="14" width="2.2" height="6" rx="1.1" fill="currentColor"/><circle cx="19.6" cy="13" r="1.5" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19.5" x2="9" y2="22"/><line x1="17" y1="19.5" x2="17" y2="22"/></g></svg>',VR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.2" fill="currentColor"/><circle cx="7" cy="9" r="3.6" fill="currentColor"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="currentColor"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>',HR='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13" rx="7" ry="4.4" fill="currentColor"/><circle cx="12" cy="7" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="7" y1="17" x2="7" y2="21"/><line x1="17" y1="17" x2="17" y2="21"/></g></svg>',KR='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/></svg>',YR='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="3" rx="1" fill="currentColor"/><rect x="4" y="8" width="3" height="12" fill="currentColor"/><rect x="17" y="8" width="3" height="12" fill="currentColor"/></svg>',XR='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/><path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor" opacity="0.28"/></svg>',JR='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/></svg>',QR='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/><rect x="15.5" y="13.5" width="4.5" height="5" rx="1" fill="currentColor" opacity="0.6"/></svg>',ZR='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/><path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor" opacity="0.7"/><rect x="10.6" y="9.4" width="2.8" height="2.2" rx="0.4" fill="currentColor" opacity="0.35"/></svg>',bb=Object.freeze({spider:BR,fly:WR,egg:GR,poodle:qR,dog:VR,animal:HR,room:KR,furniture:YR,portable:XR,person:JR,adventurer:QR,container:ZR})});function tT(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function wb(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of tT(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var yb=O(()=>{});function nT(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function sT(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function xb(e){return sT(e).filter(t=>t?.property&&t.value!==void 0)}function oT(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function rT(e,t){let n=null,s=0;for(let o of e){let r=xb(o);r.length<=s||oT(r,t)&&(n=o,s=r.length)}return n}function iT(e,t,n){if(typeof n=="string"&&t.placeholder)return e.split(t.placeholder).join(n);if(n&&typeof n=="object"&&t.placeholders){let s=e;for(let[o,r]of Object.entries(t.placeholders)){if(!Object.prototype.hasOwnProperty.call(n,o))return null;s=s.split(r).join(n[o])}return s}return null}function $b(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(l=>l.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,l.object));if(!i)continue;let a=iT(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function aT(e){let t=[];for(let n of Object.values(e.parameters||{})){n?.placeholder&&t.push(n.placeholder);for(let s of Object.values(n?.placeholders||{}))t.push(s)}return t}function cT(e,t){let n=t;for(let s of aT(e))n=n.split(s).join("");return n}function vb(e,t,n){let s=nT(e,n),o=rT(s,t);if(o&&!o.parameters)return o.svg;if(o)return cT(o,$b(o,t)||o.svg);for(let i of s){if(i.match||!i.parameters)continue;let a=$b(i,t);if(a)return a}let r=s.find(i=>!i.match&&!i.parameters);return r?r.svg:null}function lT(e,t,n,s,o,r){for(let a of Va(e,t)){let l=vb(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=vb(r,n,s);return i||o[r]}function Eb(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=lT(e,t,n,s,o,r);return i?wb(a,i):a}var V1,H1,rd=O(()=>{od();yb();V1=Object.freeze(["left","half-left","half-right","right"]),H1=Object.freeze(["moving"])});function id(e){for(let t of e||[])if(t?.predicate===uT&&Object.prototype.hasOwnProperty.call(Sb,t.object))return Sb[t.object];return 1}var uT,Sb,kb=O(()=>{uT="mgx:hasProperty",Sb=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function jb(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},l=a.resolveSpriteAsset;if(typeof l!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let c=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],f=a.rootFallback||"animal",p=a.classAncestorChain,m=a.sizeScaleFor,h=a.expressionPalette,g=[];r&&g.push({predicate:n,object:r}),i&&g.push({predicate:s,object:i});let b={rootFallback:f};a.instanceKey&&(b.instanceKey=a.instanceKey);let y=l(o,d,g,c,u,b),w=R=>l(R,[],g,c,{},{rootFallback:R}),v=R=>Object.prototype.hasOwnProperty.call(u,R),_=(R,j)=>{let A=c.filter(M=>M&&Array.isArray(M.classes)&&M.classes.indexOf(R)>=0),T=A.find(M=>M.svg===j)||A.find(M=>!M.match&&M.parameters)||null;return T?{classes:T.classes.slice(),parameters:Object.keys(T.parameters||{}).sort(),match:T.match||null}:null},$=null,x=null;if(typeof p=="function"){$=[];for(let R of p(o,d)){let j=w(R);if($.push({term:R,template:!!j,registry:v(R)}),j){x={term:R,via:"template",hops:$.length-1,root:!1,template:_(R,j)};break}if(v(R)){x={term:R,via:"registry",hops:$.length-1,root:!1,template:null};break}}if(!x){let R=w(f);$.push({term:f,template:!!R,registry:v(f),root:!0}),x={term:f,via:R?"template":"registry",hops:$.length-1,root:!0,template:R?_(f,R):null}}}let S=a.instanceKey?l(o,d,g,c,u,{rootFallback:f}):y,E=r?l(o,d,g.filter(R=>R.predicate!==n),c,u,{rootFallback:f}):null;return{class:o,expression:r||null,size:i||null,svg:y,scale:typeof m=="function"?m(g):1,sizeKnown:i&&typeof m=="function"?m([{predicate:s,object:i}])!==1:null,expressionKnown:r&&h?Object.prototype.hasOwnProperty.call(h,r):null,expressionApplied:r?S!==E:null,rootFallback:f,fellBackToRoot:x?!!x.root:null,chain:$,matched:x}}var _b=O(()=>{});var Rb,Tb,dT,Q1,Ab=O(()=>{rd();Rb="icon tier",Tb="sprite tier",dT=Object.freeze({takeParameter:Object.freeze({predicate:"mgx:take-parameter",comment:"sprite class -> parameter name: a parameter that class's own templates declare."}),offerVariant:Object.freeze({predicate:"mgx:offer-variant",comment:"sprite class -> variant value: a hand-authored [match] constraint that class's templates offer."})}),Q1=Object.freeze(Object.values(dT).map(e=>e.predicate))});var Ib,Cb=O(()=>{Ib=()=>[]});var Ob,Lb=O(()=>{Ob=()=>[]});function hT(){let e=Ob();return e.length?{templates:e,tier:Tb}:{templates:Ib(),tier:Rb}}function Nb(e){return e.map(t=>t.term).join(" -> ")}async function ad(e,{config:t,memoryBackend:n=null}){let s=nt(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(To,o))throw new Re(`"${o}" is not a sprite expression. The palette holds: ${fT().join(", ")}.`);if(r&&!mT(r))throw new Re(`"${r}" is not a size the sprite scale recognises \u2014 it reads a taught mgx:hasProperty size word off the individual, and has no entry for this one.`);let{templates:i,tier:a}=hT(),l=await mn(t,n),c=jb({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:bb,resolveSpriteAsset:Eb,classAncestorChain:Va,sizeScaleFor:id,expressionPalette:To});if(!c.svg||c.fellBackToRoot)throw new Re(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${Nb(c.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!c.expressionApplied)throw new Re(`the ${a} draws "${s}" (matched at "${c.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,c.matched.hops===0?`matched at "${c.matched.term}", the class itself, via its own ${c.matched.via}`:`matched at "${c.matched.term}", ${c.matched.hops} hop(s) up the ancestor chain, via its ${c.matched.via}`,`ancestor chain walked: ${Nb(c.chain)}`];return c.matched.template?.parameters.length&&d.push(`template parameters: ${c.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${c.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${c.svg.length} characters of SVG markup`),_s({content:d.join(`
|
|
157
|
+
`),data:{class:c.class,expression:c.expression,size:c.size,tier:a,scale:c.scale,svg:c.svg,chain:c.chain,matched:c.matched,expressionApplied:c.expressionApplied}})}var pT,fT,mT,Pb=O(()=>{Bt();od();rd();_c();kb();_b();Ab();Cb();Lb();fo();Ge();pT="mgx:hasProperty",fT=()=>Object.keys(To).sort(),mT=e=>!!e&&id([{predicate:pT,object:String(e)}])!==1;ad.ownsGraphLoad=!0});function Mb(e,{graph:t}){return Sf(t,{pkg:String(e?.package||"").trim()})}var Fb=O(()=>{Oe()});function Db(e,{graph:t,svc:n}){let{match:s}=xt(n,nt(e,"module"),"module");return qf(t,s)}var zb=O(()=>{Oe();Ge()});function Ub(e,{graph:t}){return _f(t)}var Bb=O(()=>{Oe()});function Gb(e,{graph:t}){let{content:n,tmct_ask:s}=Ss(t,nt(e,"query"));return _s({content:n,data:s,text:`${n}${Wb}${JSON.stringify(s,null,2)}`})}var Wb,cd=O(()=>{ks();Ge();Wb=`
|
|
158
158
|
|
|
159
159
|
---tmct_ask---
|
|
160
|
-
`});var
|
|
160
|
+
`});var qb,Vb=O(()=>{Oe();Ge();qb=rt(jf)});var Hb,Kb=O(()=>{Oe();Ge();Hb=rt(Rf)});var Yb,Xb=O(()=>{Oe();Ge();Yb=rt(Nf)});var Jb,Qb=O(()=>{Oe();Ge();Jb=rt(Mf)});var Zb,ew=O(()=>{Oe();Ge();Zb=rt(Ff)});var tw,nw=O(()=>{Oe();Ge();tw=rt(Af)});var sw,ow=O(()=>{Oe();Ge();sw=rt(If)});var rw,iw=O(()=>{Oe();Ge();rw=rt(Of)});var aw,cw=O(()=>{Oe();Ge();aw=rt(Gf)});function gT(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function bT(e){let t=(e||[]).map(gT);return t.map(n=>JSON.stringify(n)).join(`
|
|
161
161
|
`)+(t.length?`
|
|
162
|
-
`:"")}function
|
|
162
|
+
`:"")}function lw(e){return bT(vt(e))}var uw=O(()=>{qe()});async function ld(e,{config:t,memoryBackend:n=null}){let s=n?null:await Cs(ve(ve(t.graphFile))),o=n||s.dir;try{return lw(await Pt(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var dw=O(()=>{uw();Ue();qe();ld.ownsGraphLoad=!0});async function ud(e,{config:t,ingest:n}){let s=String(e?.text??"");if(!s.trim())return"(nothing to ingest \u2014 pass some text)";if(typeof n!="function")return"(ingest isn't wired into this context \u2014 invoke tmct_ingest through the CLI `cli` route or the chat surface)";let o=e?.optimistic===!0,{dir:r,close:i}=await Cs(ve(ve(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0}),l=a.extracted.length+a.optimistic.length,c=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${l} fact(s) grounded.`;return _s({content:l?`${c}
|
|
163
163
|
${a.canonical.join(`
|
|
164
|
-
`)}`:c,data:{...a,grounded:l}})}finally{await i()}}var iw=O(()=>{Ue();qe();Ge();rd.ownsGraphLoad=!0});var tT,aw=O(()=>{Ll();ph();Jg();Zg();tb();sb();rb();ab();lb();ub();Ab();Cb();Lb();Pb();sd();zb();Bb();Gb();Vb();Kb();Xb();Qb();ew();nw();rw();iw();tT=Object.freeze({tmct_context:Ol,tmct_context_more:dh,tmct_describe:Xg,tmct_snippet:Qg,tmct_signature:eb,tmct_impact:nb,tmct_search:ob,tmct_members:ib,tmct_subclasses:cb,tmct_related:Qu,tmct_sprite:nd,tmct_architecture:Ib,tmct_exports:Ob,tmct_untested:Nb,tmct_ask:Fb,tmct_tests_for:Db,tmct_history:Ub,tmct_file_history:Wb,tmct_method_history:qb,tmct_class_history:Hb,tmct_callers:Yb,tmct_callees:Jb,tmct_calls:Zb,tmct_cochanges:tw,tmct_export:od,tmct_ingest:rd})});var id=O(()=>{});var Ga,ad=O(()=>{Ga=()=>({relations:[],constructions:[]})});var cw,lw=O(()=>{_t();Ue();Sp();zt();_r();Ss();sa();oa();aw();Ge();zo();Gi();id();ad();oa();Ll();sd();qi(void 0);Wi(Ga);cw=Ep.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var _M,RM,TM,qa=O(()=>{_M=Object.freeze(["entity","set","event","measure"]),RM=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),TM=Object.freeze({it:Object.freeze(["entity","event","measure"]),this:Object.freeze(["entity","event","measure"]),that:Object.freeze(["entity","event","measure"]),"this one":Object.freeze(["entity","event","measure"]),"that one":Object.freeze(["entity","event","measure"]),those:Object.freeze(["set"]),them:Object.freeze(["set"]),these:Object.freeze(["set"]),here:Object.freeze(["entity"])})});var pt,IM,CM,OM,LM,NM,PM,MM,FM,DM,zM,UM,BM,WM,GM,qM,VM,nT,HM,KM,uw=O(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},IM=pt("createRequire"),CM=pt("readFileSync"),OM=pt("access"),LM=pt("readFile"),NM=pt("writeFile"),PM=pt("appendFile"),MM=pt("mkdir"),FM=pt("mkdtemp"),DM=pt("rename"),zM=pt("unlink"),UM=pt("rm"),BM=pt("stat"),WM=pt("copyFile"),GM=pt("readdir"),qM=pt("createReadStream"),VM=pt("createWriteStream"),nT=pt("randomBytes"),HM=pt("spawnSync"),KM=pt("createInterface")});var Va=O(()=>{uw()});var ft,QM,ZM,eF,tF,nF,sF,oF,rF,iF,aF,cF,lF,uF,dF,pF,fF,Kt,mF,hF,gF,Ls=O(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},QM=ft("createRequire"),ZM=ft("readFileSync"),eF=ft("access"),tF=ft("readFile"),nF=ft("writeFile"),sF=ft("appendFile"),oF=ft("mkdir"),rF=ft("mkdtemp"),iF=ft("rename"),aF=ft("unlink"),cF=ft("rm"),lF=ft("stat"),uF=ft("copyFile"),dF=ft("readdir"),pF=ft("createReadStream"),fF=ft("createWriteStream"),Kt=e=>String(e),mF=ft("randomBytes"),hF=ft("spawnSync"),gF=ft("createInterface")});var sT,dw,vF,xF,EF,ld=O(()=>{_t();Ls();Ue();sT={},dw=Q(ve(Kt(sT.url)),"..","..",".."),vF=Q(dw,"data","templates","responses.jsonl"),xF=Q(dw,"data","phrasebook","software-phrases.txt"),EF=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function rT(e,t={}){let n=oT.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function iT(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>rT(s,t))):1}function Ze(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:iT(s,t)})).sort((s,o)=>o.bias-s.bias||(o.row?.trust??0)-(s.row?.trust??0)||s.index-o.index).map(s=>s.row)}var oT,pw=O(()=>{oT=/^src:corpus:(.+)$/});var mt,jF,pr,_F,RF,TF,AF,IF,CF,OF,LF,NF,PF,MF,FF,aT,cT,DF,zF,UF,mo=O(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},jF=mt("createRequire"),pr=mt("readFileSync"),_F=mt("access"),RF=mt("readFile"),TF=mt("writeFile"),AF=mt("appendFile"),IF=mt("mkdir"),CF=mt("mkdtemp"),OF=mt("rename"),LF=mt("unlink"),NF=mt("rm"),PF=mt("stat"),MF=mt("copyFile"),FF=mt("readdir"),aT=mt("createReadStream"),cT=mt("createWriteStream"),DF=mt("randomBytes"),zF=mt("spawnSync"),UF=mt("createInterface")});function fw(e,t){let n=String(e).toLowerCase().replace(/^[^a-z]+/,"");if(!n)return null;for(let o of t.vowel_sound_consonants||[])if(n.startsWith(o))return!0;for(let o of t.consonant_sound_vowels||[])if(n.startsWith(o))return!1;let s=n[0];return"aeiou".includes(s)?!0:/[a-z]/.test(s)?!1:null}function pT(e=uT){let t=or(pr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function ud(){if(Ha===null)try{Ha=pT()}catch{Ha=[]}return Ha}var fT,lT,uT,dT,YF,Ha,dd=O(()=>{mo();Ls();Ue();_a();ld();fT={},lT=ve(Kt(fT.url)),uT=Q(lT,"..","..","data","templates","grammar-rules.toml"),dT=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),YF=Object.freeze(new Set(dT.filter(e=>e!=="prose")));Ha=null});function mT(){if(ui!==void 0)return ui;try{let e=mw?mw():hT();ui=e&&e.winkNLP&&e.model?e:null}catch{ui=null}return ui}function hT(){let e=process.getBuiltinModule("node:module").createRequire(gT.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function pd(){if(fr!==void 0)return fr;let e=mT();if(!e)return fr=null,null;try{fr=e.winkNLP(e.model)}catch{fr=null}return fr}var gT,mw,ui,fr,fd=O(()=>{gT={}});var hw=O(()=>{fd()});var bw,gw=O(()=>{bw={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});function vT(e){let t=String(e),n=[t];return t.length>4&&/[a-z]ies$/.test(t)&&n.push(`${t.slice(0,-3)}y`),/(ses|xes|zes|ches|shes)$/.test(t)&&n.push(t.slice(0,-2)),/[a-z]s$/.test(t)&&!/ss$/.test(t)&&n.push(t.slice(0,-1)),t==="has"&&n.push("have"),n}function ww(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!xT.has(o.property))throw new Error(`lexicon noun "${n}": property must be "data" or "object", got ${JSON.stringify(o.property)}`);e.nouns.set(n,o),o.plural&&e.nounPlurals.set(o.plural,n)}for(let[n,s]of Object.entries(t.verbs||{}))e.verbs.set(n,{lemma:n,...s||{}});for(let[n,s]of Object.entries(t.adjectives||{})){let o={lemma:n,...s||{}};if(!ET.has(o.type))throw new Error(`lexicon adjective "${n}": type must be "subclass" or "data", got ${JSON.stringify(o.type)}`);e.adjectives.set(n,o)}for(let n of t.properNames||[])e.properNames.set(String(n).toLowerCase(),String(n))}function Ns(e,t=wT){if(!e&&md.has(t))return md.get(t);let n=bw,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return ww(s,n),e?(ww(s,e),s):(md.set(t,s),s)}function di(e,t,n={}){return ST(e,t,n)[0]??null}function ST(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,l=c=>{c&&!a.has(c.lemma)&&(a.add(c.lemma),i.push(c))};if(r){let c=e.nouns.get(r)??null;return n.singularOnly&&o?(l(o),l(c)):(l(c),l(o)),i}for(let c of vT(s))l(e.nouns.get(c));return i}var wT,nD,sD,yT,$T,oD,xT,ET,md,ho=O(()=>{gw();wT="tmct:",nD=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),sD=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),yT=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),$T=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),oD=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});xT=new Set(["data","object"]),ET=new Set(["subclass","data"]);md=new Map});var cD,lD,uD,kT,dD,pD,fD,yw=O(()=>{Ss();Oe();cD=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),lD=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),uD=Object.freeze({Class:[e=>`which classes inherit from ${e}`,e=>`what does ${e} contain`,e=>`where is ${e} defined`],Module:[e=>`what does ${e} import`,e=>`which modules import ${e}`,e=>`where is ${e} defined`],Function:[e=>`what calls ${e}`,e=>`what does ${e} call`,e=>`where is ${e} defined`],Method:[e=>`which class contains ${e}`,e=>`what calls ${e}`,e=>`where is ${e} defined`],Attribute:[e=>`which class contains ${e}`,e=>`where is ${e} defined`],GlobalVariable:[e=>`where is ${e} defined`,e=>`where is ${e} mentioned`],Commit:[e=>`what did commit ${e} touch`,e=>`when did ${e} change`]}),kT=Object.freeze({import:"imports",imports:"imports",importing:"imports",imported:"imports",call:"calls",calls:"calls",calling:"calls",called:"calls",invoke:"calls",invokes:"calls",invoking:"calls",contain:"contains",contains:"contains",containing:"contains",containment:"contains",member:"contains",members:"contains",inherit:"inherits",inherits:"inherits",inheriting:"inherits",inheritance:"inherits",extend:"inherits",extends:"inherits",extending:"inherits",subclass:"inherits",subclasses:"inherits",subclassing:"inherits",test:"tests",tests:"tests",testing:"tests",tested:"tests",coverage:"tests",define:"defines",defines:"defines",defining:"defines",defined:"defines",definition:"defines",definitions:"defines",declaration:"defines",touch:"touches",touches:"touches",touching:"touches",touched:"touches",cochange:"cochange","co-change":"cochange","change-coupling":"cochange",coupled:"cochange",export:"reexports",exports:"reexports",exporting:"reexports",exported:"reexports",reexport:"reexports",reexports:"reexports",reexporting:"reexports","re-export":"reexports","re-exports":"reexports","re-exporting":"reexports",serve:"serves",serves:"serves",serving:"serves",served:"serves",denote:"denotes",denotes:"denotes",denoting:"denotes",denoted:"denotes"}),dD=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"],serves:["serves"],denotes:["denotes"]}),pD=Object.freeze({imports:{verb:"imports",edgeNoun:"import"},calls:{verb:"calls",edgeNoun:"call"},contains:{verb:"contains",edgeNoun:"containment"},inherits:{verb:"inherits from",edgeNoun:"inheritance"},tests:{verb:"tests",edgeNoun:"test"},defines:{verb:"defines",edgeNoun:"definition"},touches:{verb:"touches",edgeNoun:"touch"},cochange:{verb:"changes together with",edgeNoun:"change-coupling"},reexports:{verb:"re-exports",edgeNoun:"re-export"},serves:{verb:"serves",edgeNoun:"service"},denotes:{verb:"denotes",edgeNoun:"denotation"}}),fD=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});var Ka=O(()=>{nn();ho();yw()});var Ya,Xa=O(()=>{Ya=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var _T,jD,$w=O(()=>{mo();Xa();Ls();Ue();Ka();_T={},jD=Q(ve(Kt(_T.url)),"..","..","..")});var vw=O(()=>{nn();ho();Ka()});var RT,TT,FD,hd=O(()=>{nn();ho();zo();RT=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),TT=["this","is","about","the"],FD=TT.length});var xw=O(()=>{_t();Ue()});var gd=O(()=>{nn()});var AT,ZD,Ew=O(()=>{mo();Xa();Ls();Ue();gd();nn();AT={},ZD=Q(ve(Kt(AT.url)),"..","..","..")});var tz,nz,sz,Sw=O(()=>{tz=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),nz=Object.freeze({propositionalQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question about whether a proposition holds ('does X import Y?')"}),checkQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question whose asker already expects the answer yes ('..., right?')"}),setQuestion:Object.freeze({dimension:"task",gloss:"a wh-question asking for the members of a set ('what does X import?')"}),choiceQuestion:Object.freeze({dimension:"task",gloss:"a question asking which of the listed alternatives holds ('is X a module or a class?')"}),inform:Object.freeze({dimension:"task",gloss:"a declarative telling the addressee something (a teach turn; also tmct explaining its own function)"}),answer:Object.freeze({dimension:"task",gloss:"an inform that discharges a question just asked (an answer grounded in the graph)"}),confirm:Object.freeze({dimension:"task",gloss:"an answer 'yes' to a check question"}),disconfirm:Object.freeze({dimension:"task",gloss:"an answer 'no' to a check question"}),agreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be true"}),disagreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be false"}),correction:Object.freeze({dimension:"task",gloss:"a disagreement that also supplies the replacement ('no, I meant Y')"}),request:Object.freeze({dimension:"task",gloss:"asks the addressee to perform an action ('solve it' \u2014 a goal turn)"}),instruct:Object.freeze({dimension:"task",gloss:"a request the addressee is expected to carry out without negotiation (a bare imperative)"}),suggestion:Object.freeze({dimension:"task",gloss:"puts an action forward as advisable without claiming authority over the addressee"}),offer:Object.freeze({dimension:"task",gloss:"commits the speaker to an action, conditional on the addressee wanting it"}),autoPositive:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn succeeded (an acknowledgement)"}),autoNegative:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn failed \u2014 tmct's honest miss"}),initialGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"opens an exchange of greetings ('hi')"}),returnGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"answers a greeting with a greeting"}),thanking:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses gratitude for something the addressee did"}),apology:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses regret for something the speaker did"})}),sz=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});function pi(e){let t=new Map;for(let[n,s]of e||[])!n||!s||n===s||(t.has(n)||t.set(n,new Set),t.get(n).add(s));return t}function Ja(e,t,{cap:n=6}={}){let s=[e],o=new Set([e]),r=e;for(;s.length<n;){let i=[...t.get(r)||[]].filter(a=>!o.has(a)).sort();if(!i.length)break;r=i[0],o.add(r),s.push(r)}return s}function kw(e,t,{cap:n=64}={}){let s=new Set([e]),o=[e];for(;o.length&&s.size<n;){let r=o.shift();for(let i of t.get(r)||[])s.has(i)||(s.add(i),o.push(i))}return s}function bd(e,t,n,s){if(n.has(e))return n.get(e);if(s.has(e))return 1;s.add(e);let o=t.get(e),r=1;if(o&&o.size){let i=0;for(let a of o)i=Math.max(i,bd(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function IT(e){let t=new Map;for(let[n,s]of e||[])!n||!s||(t.has(n)||t.set(n,new Set),t.get(n).add(s),t.has(s)||t.set(s,new Set),t.get(s).add(n));return t}function CT(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=kw(e,n),c=kw(t,n);if(l.has(t)||c.has(e))return{distinct:!1,reason:"subsumes",lcs:l.has(t)?t:e};if(s.size)for(let h of l){let g=s.get(h);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(h=>c.has(h));if(!u.length)return l.size<2||c.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=h=>bd(h,n,o,new Set),f=u[0],p=d(f);for(let h of u){let g=d(h);(g>p||g===p&&h<f)&&(f=h,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let h=a.get(f);return typeof h=="number"&&h<r?{distinct:!0,reason:"low-ic",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}return 2*p/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}function Qa(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],l=n||pi(t),c=IT(s),u=new Map,d=new Map(a.map(y=>[y,y])),f=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let v=f(y),_=f(w);v!==_&&d.set(v<_?_:v,v<_?v:_)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let v=CT(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...v}),v.distinct||p(a[y],a[w])}let h=new Map;for(let y of a){let w=f(y);h.has(w)||h.set(w,[]),h.get(w).push(y)}let g=y=>bd(y,l,u,new Set),b=[...h.values()].map(y=>{let w=[...y].sort(),v=w[0],_=g(v);for(let $ of w){let x=g($);x>_&&(_=x,v=$)}return{objects:w,label:v}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:m}}var Za=O(()=>{qt()});function wd(e){return typeof e=="string"&&OT.test(e)}function jw(e){return!!e&&typeof e=="object"&&go(e.s)}function yd(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&wd(e.world)&&go(e.subject)&&go(e.predicate)&&go(e.object)}function $d(e){if(!e||typeof e!="object"||e.kind!=="rule"||!wd(e.world)||!go(e.name)||!NT.has(e.ruleKind)||!e.slots||typeof e.slots!="object"||Array.isArray(e.slots))return!1;let t=Object.values(e.slots);return t.length>0&&t.every(go)}function vd(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&wd(e.world)&&go(e.opening)}function _w(e){return yd(e)||$d(e)||vd(e)}function Rw(e){let t=e||[],n=t.filter(c=>c.predicate===PT).sort((c,u)=>`${c.subject}\0${c.object}`.localeCompare(`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(c=>c.predicate==="rdf:type").map(c=>c.subject)),o=new Map;for(let c of t)c.predicate==="mgx:located-in"&&o.set(c.subject,c.object);let r=(c,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===c&&o.get(d.subject)===u),i=t.find(c=>typeof c.world=="string"&&c.kind==="fact"),a=(c,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:c,predicate:u,object:d}),l=[];for(let c of n){let u=c.subject,d=c.object;if(r(d,u))continue;let f=d,p=1;for(;s.has(f);)p+=1,f=`${d}-${p}`;s.add(f),l.push(a(f,"rdf:type",d)),l.push(a(f,"rdf:type","portable")),l.push(a(f,"mgx:located-in",u))}return l.length?[...t,...l]:t}var OT,LT,NT,go,PT,bo=O(()=>{OT=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,LT=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),NT=new Set(LT),go=e=>typeof e=="string"&&e.trim()!=="";PT="mgx:default-contains"});var FT,DT,zT,UT,BT,WT,GT,qT,VT,hz,HT,Tw,gz,bz,Aw=O(()=>{ho();Mo();FT="subClassOf",DT="typeAssertion",zT="relation",UT="someValuesFrom",BT="cardinality",WT="disjointWith",GT="possessive",qT="adjective",VT="capability",hz=Object.freeze([FT,DT,zT,UT,BT,WT,GT,qT,VT]),HT=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Tw=new Map([["pick up","take"],["pick","take"],["grab","take"],["put down","drop"],["set down","drop"],["leave","drop"],["talk to","talk"],["speak to","talk"],["speak with","talk"],["talk","talk"],["speak","talk"],["chat with","talk"],["converse with","talk"],["look at","examine"],["examine","examine"],["inspect","examine"],["have a look at","examine"],["take a look at","examine"],["check out","examine"],["shut","close"]]),gz=Math.max(...[...Tw.keys()].map(e=>e.split(" ").length)),bz=[...new Set([...HT,...[...Tw.keys()].map(e=>e.split(" ")[0])])]});var wo=O(()=>{});var xd=O(()=>{Oe();Ss();wo()});function jt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:Ps.Capability,name:e,label:t,question:n,readOnly:!0,parameters:Object.freeze(s),preconditions:Object.freeze(o),effects:Object.freeze({add:Object.freeze(r),del:Object.freeze(i)})})}var KT,Ps,Ee,Sz,mi,st,Pt,Yt,YT,Iw,kt,XT,JT,Cw,kz,jz,_z,Ow=O(()=>{KT=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),Ps=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Ee=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),Sz=Object.freeze([Ee.MemoryTerm]),mi=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),st=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:Ps.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Pt=()=>Object.freeze({type:Ps.Precondition,pred:mi.graphLoaded}),Yt=(e,t)=>Object.freeze({type:Ps.Precondition,pred:mi.resolves,param:e,as:t}),YT=e=>Object.freeze({type:Ps.Precondition,pred:mi.anyPresent,params:Object.freeze([...e])}),Iw=()=>Object.freeze({type:Ps.Precondition,pred:mi.memoryFacts}),kt=(e,t=null)=>Object.freeze({type:Ps.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});XT=Object.freeze([jt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[st("query",Ee.Query,{required:!1,note:"required unless a kind filter is given"}),st("kind",Ee.Kind,{required:!1}),st("name",Ee.Query,{required:!1}),st("decorator",Ee.Query,{required:!1})],preconditions:[Pt(),YT(["query","kind"])],add:[kt("matches","query")]}),jt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("description","symbol")]}),jt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("signature","symbol")]}),jt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[st("module",Ee.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Pt(),Yt("module",Ee.Symbol)],add:[kt("impact","module")]}),jt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Pt(),Yt("class",Ee.Class)],add:[kt("members","class")]}),jt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Pt(),Yt("class",Ee.Class)],add:[kt("subclasses","class")]}),jt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[st("module",Ee.Module)],preconditions:[Pt(),Yt("module",Ee.Module)],add:[kt("exports","module")]}),jt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("callers","symbol")]}),jt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("callees","symbol")]}),jt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("calls","symbol")]}),jt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("tests","symbol")]}),jt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Pt()],add:[kt("untested",null)]}),jt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("history","symbol")]}),jt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[st("symbol",Ee.Symbol)],preconditions:[Pt(),Yt("symbol",Ee.Symbol)],add:[kt("cochanges","symbol")]}),jt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[st("package",Ee.Package,{required:!1})],preconditions:[Pt()],add:[kt("architecture","package")]}),jt({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[st("term",Ee.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[Iw(),Yt("term",Ee.MemoryTerm)],add:[kt("related","term")]}),jt({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[st("class",Ee.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),st("expression",Ee.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),st("size",Ee.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[Iw(),Yt("class",Ee.MemoryTerm)],add:[kt("sprite","class")]})]),JT=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Cw=XT,kz=JT(Cw),jz=Object.freeze({tmct_context:"unbounded edit-context bundle (multi-file); needs a size/budget precondition",tmct_context_more:"unbounded context continuation; same as tmct_context",tmct_snippet:"raw source-file read (reads the filesystem); needs a file-read + span precondition",tmct_ask:"the plain-English question entry point itself \u2014 calls ask.mjs directly and bypasses the capability planner; not one of the planner's operators",tmct_export:"reads the memory store's whole fact set with no discriminating param and no resolver goal frame; needs NL-reachability wiring before it can join",tmct_ingest:"writes into the memory store (grounds facts); capability() only models read-only operators, so a write path needs its own precondition/effect design first",tmct_file_history:"a module-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_method_history:"a method-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_class_history:"a class-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet"}),_z=Object.freeze({prefixes:KT,vocab:Ps,kinds:Ee,precond:mi,get capabilities(){return Cw}})});var Lw=O(()=>{Ow()});var Nw=O(()=>{ws()});function ZT(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Q(QT,"corpus","worlds")}function Pw(e){try{return Ya(pr(e))}catch{return null}}function Mw(e){if(Ed.has(e))return Ed.get(e);let t=null,n=Pw(Q(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Ed.set(e,t),t}function eA(e,t){let n=Mw(e);if(!n)return null;let s=n[String(t??"")];if(!jw(s))return null;let o=`${e}\0${t}`;if(Sd.has(o))return Sd.get(o);let r=null,i=Pw(Q(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
|
|
165
|
-
`))if(u.trim())try{let d=JSON.parse(u);if(!
|
|
166
|
-
:root { color-scheme: light dark; ${
|
|
167
|
-
@media (prefers-color-scheme: dark) { :root { ${
|
|
168
|
-
:root[data-theme="dark"] { ${
|
|
169
|
-
:root[data-theme="light"] { ${
|
|
170
|
-
`});var Hw=O(()=>{jd()});var Kw=O(()=>{jd()});var Yw=O(()=>{qe();bo();Tn();oc()});var _d,mA,hA,gA,bA,wA,yA,OU,LU,oc=O(()=>{bo();Aw();ho();qa();xd();Lw();Nw();ec();qe();qw();Hw();Kw();Yw();_d="mgx:world-epoch",mA=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),hA=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),gA="mgx:is-open",bA="mgx:hasMass",wA="mgx:knows-about",yA="mgx:display-name",OU=new Set([...mA,...hA,gA,bA,wA,yA,"rdf:type",_d]),LU=new RegExp("^(?:what\\s+foods?\\s+(?:do\\s+you\\s+know(?:\\s+about)?|have\\s+you\\s+(?:found|seen|heard\\s+(?:about|of))|do\\s+you\\s+know\\s+of)|what\\s+do\\s+you\\s+know\\s+about\\s+(?:any\\s+)?foods?|do\\s+you\\s+know\\s+(?:about|of)\\s+(?:any\\s+)?foods?|where\\s+is\\s+(?:the\\s+)?food)[?.!\\s]*$","i")});var hr,PU,MU,FU,DU,zU,UU,Ms=O(()=>{hr=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),mudiii:Object.freeze({predatorInitialMass:20,predatorMassDecrementPerTurn:.08,predatorVisionRadius:4,preyInitialMass:8,preyMassDecrementPerTurn:.06,preyVisionRadius:3,preySpawnIntervalTurns:5,foodSpawnIntervalTurns:3,spawnedFoodMass:2,placedFoodMass:2,maxPreyPopulation:6,maxFoodItems:8,foodVisionGated:!0}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),adventure:Object.freeze({teach:!1}),planning:Object.freeze({maxDepth:300})}),PU=Object.freeze({spider_initial_mass:"spiderInitialMass",spider_mass_decrement_per_turn:"spiderMassDecrementPerTurn",fly_initial_mass:"flyInitialMass",fly_mass_decrement_per_turn:"flyMassDecrementPerTurn",spider_vision_radius:"spiderVisionRadius",fly_vision_radius:"flyVisionRadius",egg_hatch_delay_turns:"eggHatchDelayTurns",fly_spawn_interval_turns:"flySpawnIntervalTurns",egg_lay_mass_threshold:"eggLayMassThreshold",egg_hatch_count:"eggHatchCount",min_hatchling_mass:"minHatchlingMass",web_duration_turns:"webDurationTurns"}),MU=Object.freeze({mole_initial_mass:"moleInitialMass",mole_mass_decrement_per_turn:"moleMassDecrementPerTurn",mole_speed:"moleSpeed",mole_dig_reach:"moleDigReach",vole_initial_mass:"voleInitialMass",vole_mass_decrement_per_turn:"voleMassDecrementPerTurn",vole_speed:"voleSpeed",vole_dig_reach:"voleDigReach",badger_initial_mass:"badgerInitialMass",badger_mass_decrement_per_turn:"badgerMassDecrementPerTurn",badger_speed:"badgerSpeed",badger_dig_reach:"badgerDigReach",groundhog_initial_mass:"groundhogInitialMass",groundhog_mass_decrement_per_turn:"groundhogMassDecrementPerTurn",groundhog_speed:"groundhogSpeed",groundhog_dig_reach:"groundhogDigReach",meerkat_initial_mass:"meerkatInitialMass",meerkat_mass_decrement_per_turn:"meerkatMassDecrementPerTurn",meerkat_speed:"meerkatSpeed",meerkat_dig_reach:"meerkatDigReach"}),FU=Object.freeze({predator_initial_mass:"predatorInitialMass",predator_mass_decrement_per_turn:"predatorMassDecrementPerTurn",predator_vision_radius:"predatorVisionRadius",prey_initial_mass:"preyInitialMass",prey_mass_decrement_per_turn:"preyMassDecrementPerTurn",prey_vision_radius:"preyVisionRadius",prey_spawn_interval_turns:"preySpawnIntervalTurns",food_spawn_interval_turns:"foodSpawnIntervalTurns",spawned_food_mass:"spawnedFoodMass",placed_food_mass:"placedFoodMass",max_prey_population:"maxPreyPopulation",max_food_items:"maxFoodItems",food_vision_gated:"foodVisionGated"}),DU=Object.freeze({teach:"teach"}),zU=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),UU=Object.freeze({max_depth:"maxDepth"})});var Jw,$A,rc,vA,xA,Qw,Zw,EA,SA,GU,kA,jA,ey=O(()=>{Ms();Jw="spider-fly",$A=10,rc=Object.freeze({x:2,y:2}),vA=1,xA=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly"}),food:null}),Qw=(e,t)=>`cell-${e}-${t}`,Zw=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),EA=(e,t)=>Zw(e,t,rc.x,rc.y)<=vA,SA=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),GU=Object.freeze([Object.freeze(["poodle","dog"]),Object.freeze(["sheepdog","dog"]),Object.freeze(["dog","animal"]),Object.freeze(["spider","arachnid"]),Object.freeze(["arachnid","animal"]),Object.freeze(["fly","insect"]),Object.freeze(["insect","animal"])]),kA="a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move. Watch, or address one by name in chat.",jA=Object.freeze({name:Jw,gridSize:$A,opening:kA,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:EA,webHomeCell:Qw(rc.x,rc.y)})});var ty,ry,HU,KU,Rd,ny,sy,oy,Td,YU,XU,ic=O(()=>{Ms();ty=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),ry=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),HU=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),KU=Object.freeze([ty.spawnedFood,ty.placedFood]),Rd=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),ny=Rd({name:"town-square",gridSize:12,opening:"a fox prowls the town square; goblins pick over the stalls for scraps. Neither is yours to move. Watch, or address one by name in chat.",cast:{predators:1,prey:3},props:[{id:"house-1",model:"house-1",cell:"cell-8-1",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-8-2",rotation:"180"},{id:"house-3",model:"house-3",cell:"cell-8-3",rotation:"180"},{id:"well-1",model:"well",cell:"cell-6-7",rotation:"0"},{id:"stall-1",model:"market-stall-1",cell:"cell-3-9",rotation:"90"},{id:"inn-1",model:"inn",cell:"cell-11-10",rotation:"270"}]}),sy=Rd({name:"town-square-market",gridSize:10,opening:"market day in the town square: two rows of stalls, goblins working the lanes between them, and a fox somewhere among the crowd.",cast:{predators:1,prey:4},props:[{id:"stall-1",model:"market-stall-1",cell:"cell-2-4",rotation:"0"},{id:"stall-2",model:"market-stall-2",cell:"cell-3-4",rotation:"0"},{id:"stall-3",model:"market-stall-1",cell:"cell-4-4",rotation:"0"},{id:"stall-4",model:"market-stall-2",cell:"cell-6-4",rotation:"0"},{id:"stall-5",model:"market-stall-1",cell:"cell-7-4",rotation:"0"},{id:"stall-6",model:"market-stall-2",cell:"cell-8-4",rotation:"0"},{id:"stall-7",model:"market-stall-2",cell:"cell-2-7",rotation:"180"},{id:"stall-8",model:"market-stall-1",cell:"cell-3-7",rotation:"180"},{id:"stall-9",model:"market-stall-2",cell:"cell-4-7",rotation:"180"},{id:"stall-10",model:"market-stall-1",cell:"cell-6-7",rotation:"180"},{id:"stall-11",model:"market-stall-2",cell:"cell-7-7",rotation:"180"},{id:"stall-12",model:"market-stall-1",cell:"cell-8-7",rotation:"180"},{id:"well-1",model:"well",cell:"cell-5-5",rotation:"0"},{id:"blacksmith-1",model:"blacksmith",cell:"cell-10-5",rotation:"270"},{id:"cart-1",model:"cart",cell:"cell-1-1",rotation:"90"},{id:"cart-2",model:"cart",cell:"cell-10-10",rotation:"270"},{id:"bush-1",model:"bush",cell:"cell-10-1",rotation:"0"},{id:"bush-2",model:"bush",cell:"cell-1-10",rotation:"0"}]}),oy=Rd({name:"town-square-chapel",gridSize:14,opening:"the chapel corner of the town square, fenced to the south and shaded by three oaks. Two foxes hunt here, and two goblins know it.",cast:{predators:2,prey:2},props:[{id:"inn-1",model:"inn",cell:"cell-2-2",rotation:"180"},{id:"house-1",model:"house-1",cell:"cell-3-2",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-2-3",rotation:"90"},{id:"fence-1",model:"fence",cell:"cell-7-11",rotation:"0"},{id:"fence-2",model:"fence",cell:"cell-8-11",rotation:"0"},{id:"fence-3",model:"fence",cell:"cell-9-11",rotation:"0"},{id:"oak-1",model:"oak-tree",cell:"cell-12-4",rotation:"0"},{id:"oak-2",model:"oak-tree",cell:"cell-12-12",rotation:"90"},{id:"oak-3",model:"oak-tree",cell:"cell-5-8",rotation:"180"}]}),Td=Object.freeze({[ny.name]:ny,[sy.name]:sy,[oy.name]:oy}),YU=Object.freeze(Object.keys(Td)),XU=Object.freeze([Object.freeze(["fox","canine"]),Object.freeze(["canine","animal"]),Object.freeze(["goblin","humanoid"]),Object.freeze(["humanoid","creature"]),Object.freeze(["creature","animal"]),Object.freeze(["crumb","food"]),Object.freeze(["morsel","food"]),Object.freeze(["food","thing"]),Object.freeze(["prop","thing"])])});var iy=O(()=>{});var ay=O(()=>{});var hi,OA,LA,NA,PA,MA,FA,DA,zA,UA,BA,WA,GA,qA,VA,HA,KA,yB,Ad=O(()=>{ic();iy();Js();qe();bo();ay();nn();Ms();oc();hi=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin"},food:{spawnedKind:"crumb",placedKind:"morsel"}}),OA="mgx:currently-in",LA="mgx:hasMass",NA="mgx:feels",PA="mgx:facing",MA="mgx:eaten-by",FA="mgx:starved",DA="mgx:placed-by",zA="mgx:model",UA="mgx:rotation",BA="mgx:carrying",WA="mgx:prey-eaten",GA="mgx:web-built-at-turn",qA="mgx:laid-at-turn",VA="mgx:hatched-into",HA="mgx:turn-played",KA=new Set([OA,LA,NA,PA,MA,FA,DA,zA,UA,HA,BA,WA,GA,qA,VA,"rdf:type",_d]),yB=Object.freeze([...KA].sort())});var MB,FB,ly=O(()=>{ey();ic();Ad();bo();ec();qe();Ms();MB=new RegExp("^@(spider|fly)(?:-(\\d+))?[,:]?\\s+the\\s+(spider|fly)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),FB=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var ZB,eW,tW,nW,sW,oW,uy=O(()=>{ic();Ad();bo();ec();qe();Ms();ZB=hi.predator.kind,eW=hi.prey.kind,tW=hi.food.spawnedKind,nW=hi.food.placedKind,sW=new RegExp("^@(fox|goblin)(?:-(\\d+))?[,:]?\\s+the\\s+(fox|goblin|crumb|morsel)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),oW=new RegExp("^who\\s+(?:put|placed|dropped)\\s+(?:(?:the\\s+)?(morsel|crumb)(?:-(\\d+))?|(?:(?:the\\s+)?(?:food|morsel|crumb|that|it)\\s+)?(?:at|on)\\s+(cell-\\d+-\\d+))(?:\\s+there)?[?.!\\s]*$","i")});var ht,iW,aW,cW,lW,uW,dW,pW,fW,mW,hW,gW,bW,wW,yW,$W,vW,xW,EW,SW,dy=O(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},iW=ht("createRequire"),aW=ht("readFileSync"),cW=ht("access"),lW=ht("readFile"),uW=ht("writeFile"),dW=ht("appendFile"),pW=ht("mkdir"),fW=ht("mkdtemp"),mW=ht("rename"),hW=ht("unlink"),gW=ht("rm"),bW=ht("stat"),wW=ht("copyFile"),yW=ht("readdir"),$W=ht("createReadStream"),vW=ht("createWriteStream"),xW=ht("randomBytes"),EW=ht("spawnSync"),SW=ht("createInterface")});var gt,jW,_W,RW,TW,AW,IW,CW,OW,LW,NW,PW,MW,FW,DW,zW,UW,BW,WW,QA,py=O(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},jW=gt("createRequire"),_W=gt("readFileSync"),RW=gt("access"),TW=gt("readFile"),AW=gt("writeFile"),IW=gt("appendFile"),CW=gt("mkdir"),OW=gt("mkdtemp"),LW=gt("rename"),NW=gt("unlink"),PW=gt("rm"),MW=gt("stat"),FW=gt("copyFile"),DW=gt("readdir"),zW=gt("createReadStream"),UW=gt("createWriteStream"),BW=gt("randomBytes"),WW=gt("spawnSync"),QA=gt("createInterface")});var bt,qW,VW,HW,KW,YW,XW,JW,QW,ZW,eG,tG,nG,sG,oG,rG,iG,aG,fy,cG,Id=O(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},qW=bt("createRequire"),VW=bt("readFileSync"),HW=bt("access"),KW=bt("readFile"),YW=bt("writeFile"),XW=bt("appendFile"),JW=bt("mkdir"),QW=bt("mkdtemp"),ZW=bt("rename"),eG=bt("unlink"),tG=bt("rm"),nG=bt("stat"),sG=bt("copyFile"),oG=bt("readdir"),rG=bt("createReadStream"),iG=bt("createWriteStream"),aG=bt("randomBytes"),fy=bt("spawnSync"),cG=bt("createInterface")});var my=O(()=>{Id();Ue();_t();Ue();Aa();zt()});var hy=O(()=>{});var ZA,gy=O(()=>{_t();Ue();qe();hy();ZA=Q(".tmct","sessions")});var wy=O(()=>{_t();Ue();Va()});var wt,TG,AG,IG,CG,OG,LG,NG,PG,MG,FG,DG,zG,UG,BG,WG,GG,qG,VG,eI,yy=O(()=>{wt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},TG=wt("createRequire"),AG=wt("readFileSync"),IG=wt("access"),CG=wt("readFile"),OG=wt("writeFile"),LG=wt("appendFile"),NG=wt("mkdir"),PG=wt("mkdtemp"),MG=wt("rename"),FG=wt("unlink"),DG=wt("rm"),zG=wt("stat"),UG=wt("copyFile"),BG=wt("readdir"),WG=wt("createReadStream"),GG=wt("createWriteStream"),qG=wt("randomBytes"),VG=wt("spawnSync"),eI=wt("createInterface")});var nI,gr,$y,tI,vy,tq,ls,nq,ac,sq,xy=O(()=>{mo();_t();yy();Ls();Ue();_a();qe();nI={},gr=Q(ve(Kt(nI.url)),"..","..",".."),$y=Q(gr,"corpus","conceptnet","slice.jsonl"),tI=Q(gr,"src","adapters","corpus","conceptnet-map.toml"),vy=Q(gr,"corpus","seon","concepts.jsonl"),tq=Q(gr,"corpus","seon","definitions.jsonl"),ls=Q(gr,"corpus","tier2"),nq=Q(ls,"manifest.json"),ac=Q(gr,"corpus","wordnet"),sq=Q(ac,"manifest.json")});function rI(){return{seon:{kind:"corpus",active:!1,corpusPath:vy,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:$y,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:oI},human:{kind:"corpus",active:!0,corpusPath:Q(ls,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Q(ls,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Q(ls,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Q(ls,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Q(ls,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Q(ls,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Q(ls,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Q(ac,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Q(ac,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Q(sI,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var iI,sI,mq,oI,hq,Ey=O(()=>{Ue();_t();Ls();Aa();xy();iI={},sI=Q(ve(Kt(iI.url)),"..","..","corpus","namenet"),mq=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),oI=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];hq=Object.freeze(rI())});var Sy=O(()=>{});var ky=O(()=>{Ue();mo();_t();dy();py();Id();zt();my();Oe();gy();Va();wy();_r();Ey();cc();Ms();qa();hd();Sy()});var jy={};Un(jy,{proseLemma:()=>cI});function cI(){if(yo!==void 0)return yo;try{let e=pd();if(!e)return yo=null,yo;let t=e.its,n=new Map;yo=s=>{let o=String(s||"");if(n.has(o))return n.get(o);let r;try{r=String(e.readDoc(o).tokens().out(t.lemma)[0]||o).toLowerCase()}catch{r=o.toLowerCase()}return n.set(o,r),r}}catch{yo=null}return yo}var yo,_y=O(()=>{fd()});var Ry={};Un(Ry,{digestTermFromRows:()=>dI,loadDigestStructureTable:()=>uI,readDigestStructures:()=>lI});var lI,uI,dI,Ty=O(()=>{lI=()=>null,uI=()=>null,dI=()=>null});function Gd(e){if(!e)return null;let{node:t,shape:n,kind:s}=e;if(t==="find")return`locate a specific named entity ("${e.term}")`;if(t==="count")return`get a count of ${lc(e.entityType)}`;if(t==="list")return`list/enumerate ${lc(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${lc(e.entityType)} by ${e.metricNoun||e.metric||"a metric"}`;if(t==="anaphora")return"follow up on the previous answer's result set (discourse anaphora)";if(t==="membership")return`understand "${e.term||"an entity"}"'s membership/relationship`;if(t==="clause")return Gd(e.clause);if(t==="miss")return null;if(t==="boolean"||t==="qualifier"||t==="reverseSet"||t==="forwardSet"||t==="allOfClass"||t==="temporal"){let o=s||e.inner?.kind;return o&&hn[o]?hn[o]:`filter/traverse ${lc(e.entityType)} by a relationship`}return n==="meta"?`understand a vocabulary/definition term ("${e.object}")`:n==="where"?`locate where something is defined ("${e.object}")`:n==="when"?"understand when something last changed (history)":n==="whoLast"?"find who most recently touched something (history)":n==="mentions"?`find where something is mentioned in prose ("${e.object}")`:n==="ask"?s&&hn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?hn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function Jd(e){let t=new Map;for(let n of e)t.has(Cy(n))||t.set(Cy(n),n);return t}function Ld(e,t=bi){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),$o(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function Nd(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function bI(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function wI(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(_y(),jy)),s=n();return s?bI(t,s(t)):t}catch{return t}}function Zd(e){let t=String(e||"").trim();if(/[a-z]ies$/i.test(t))return`${t.slice(0,-3)}y`;if(/[a-z]ses$/i.test(t)){let n=t.slice(0,-2);return/ss$/i.test(n)||yI.has(n.toLowerCase())?n:t.slice(0,-1)}return/(xes|zes|ches|shes)$/i.test(t)?t.slice(0,-2):/[a-z]s$/i.test(t)&&!/(?:ss|ous)$/i.test(t)?t.slice(0,-1):t}async function Fd(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return dr;if(t==="can")return"mgx:capableOf";try{let n=await wI(t);return n==="have"?dr:ns(`mgx:${n}`)}catch{return ns(`mgx:${t}`)}}function kI(e,t){let n=String(t||"").match(SI);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function gi(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(Ss(),ih)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function TI(e){let t=String(e||"");return/^have$/i.test(t)?"has":/[a-z]y$/i.test(t)&&!/[aeiou]y$/i.test(t)?`${t.slice(0,-1)}ies`:/(?:s|x|z|ch|sh|o)$/i.test(t)?`${t}es`:`${t}s`}function s$(e){let t=String(e||"");return/^has$/i.test(t)?"have":/[a-z]ies$/i.test(t)&&!/[aeiou]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(?:s|x|z|ch|sh|o)es$/i.test(t)?t.slice(0,-2):t.replace(/s$/i,"")}function o$(e){if(vo[e])return vo[e];let t=String(e||""),n=Th(t);if(n){let a=o$(n);if(a==="can")return"cannot";if(a==="can be")return"cannot be";if(a==="is"||a.startsWith("is "))return`is not${a.slice(2)}`;let[l,...c]=a.split(" ");return["does not",s$(l),...c].join(" ")}let s=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(t);if(s)return`is ${s[1].replace(/-/g," ")} than`;let o=new RegExp(`^mgx:(${ep})-([a-z]+)$`,"i").exec(t);if(o)return`is ${o[1].toLowerCase()} ${o[2].toLowerCase()}`;let r=/^mgx:same-([a-z]+)-as$/i.exec(t);if(r)return`has the same ${r[1].toLowerCase()} as`;let i=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(t);return i?`${TI(i[1])}${i[2]?` ${i[2]}`:""}`:e}function zd(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function II(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of AI)if(n!==s&&n.endsWith(` ${s}`)){let r=t.slice(0,t.length-s.length).trim();if(r)return{subject:r,predicate:o}}return{subject:t,predicate:null}}function Dn(e){return e.replace(/#node:[0-9a-f]+/g,"")}function oe(e){let t=e.provenance?` (source: ${Dn(e.provenance)})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Mt(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Mt(e)}${t}`:e.provenance.includes("corpus:")?`${Mt(e)}${t}`:e.provenance.includes("reference:")?`${Mt(e)}${t}`:`i learned: ${Mt(e)}${t}`}function Ny(e,t,n){let s=oe(e);if(!ds.has(e.predicate)||!n.has(e.subject))return s;let o=Ja(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(CI);return i?s.slice(0,i.index)+r+i[0]:s+r}function Py(e,t,n,{indent:s=""}={}){let o=t.filter(_=>_.predicate===bi).map(_=>[_.subject,_.object]),r=pi(o),i=e.map(_=>`${s}${Ny(_,r,n)}`),a=e.filter(_=>ds.has(_.predicate)&&n.has(_.subject)),l=[...new Set(a.map(_=>_.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(_=>_.predicate==="owl:disjointWith").map(_=>[_.subject,_.object]),{split:u,clusters:d}=Qa(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let _ of d)for(let $ of _.objects)p.set($,_);let m=e.filter(_=>!(ds.has(_.predicate)&&n.has(_.subject))),h=[],g=[],b=0,y=_=>{let $=Ny(_,r,n);return b<je?(b+=1,`${s}${$}`):(g.push($),null)};for(let _ of d){let $=a.filter(x=>p.get(x.object)===_).map(y).filter(Boolean);$.length&&h.push(`${s}${f}, the ${_.label}:
|
|
164
|
+
`)}`:c,data:{...a,grounded:l}})}finally{await i()}}var pw=O(()=>{Ue();qe();Ge();ud.ownsGraphLoad=!0});var wT,fw=O(()=>{Pl();bh();sb();rb();ab();lb();db();fb();hb();gb();Pb();Fb();zb();Bb();cd();Vb();Kb();Xb();Qb();ew();nw();ow();iw();cw();dw();pw();wT=Object.freeze({tmct_context:Nl,tmct_context_more:gh,tmct_describe:nb,tmct_snippet:ob,tmct_signature:ib,tmct_impact:cb,tmct_search:ub,tmct_members:pb,tmct_subclasses:mb,tmct_related:sd,tmct_sprite:ad,tmct_architecture:Mb,tmct_exports:Db,tmct_untested:Ub,tmct_ask:Gb,tmct_tests_for:qb,tmct_history:Hb,tmct_file_history:Yb,tmct_method_history:Jb,tmct_class_history:Zb,tmct_callers:tw,tmct_callees:sw,tmct_calls:rw,tmct_cochanges:aw,tmct_export:ld,tmct_ingest:ud})});var dd=O(()=>{});var Ha,pd=O(()=>{Ha=()=>({relations:[],constructions:[]})});var mw,hw=O(()=>{_t();Ue();Tp();Bt();_r();ks();oa();ra();fw();Ge();zo();qi();dd();pd();ra();Pl();cd();Vi(void 0);Gi(Ha);mw=Rp.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var eF,tF,nF,Ka=O(()=>{eF=Object.freeze(["entity","set","event","measure"]),tF=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),nF=Object.freeze({it:Object.freeze(["entity","event","measure"]),this:Object.freeze(["entity","event","measure"]),that:Object.freeze(["entity","event","measure"]),"this one":Object.freeze(["entity","event","measure"]),"that one":Object.freeze(["entity","event","measure"]),those:Object.freeze(["set"]),them:Object.freeze(["set"]),these:Object.freeze(["set"]),here:Object.freeze(["entity"])})});var pt,oF,rF,iF,aF,cF,lF,uF,dF,pF,fF,mF,hF,gF,bF,wF,yF,yT,$F,vF,gw=O(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},oF=pt("createRequire"),rF=pt("readFileSync"),iF=pt("access"),aF=pt("readFile"),cF=pt("writeFile"),lF=pt("appendFile"),uF=pt("mkdir"),dF=pt("mkdtemp"),pF=pt("rename"),fF=pt("unlink"),mF=pt("rm"),hF=pt("stat"),gF=pt("copyFile"),bF=pt("readdir"),wF=pt("createReadStream"),yF=pt("createWriteStream"),yT=pt("randomBytes"),$F=pt("spawnSync"),vF=pt("createInterface")});var Ya=O(()=>{gw()});var ft,kF,jF,_F,RF,TF,AF,IF,CF,OF,LF,NF,PF,MF,FF,DF,zF,Kt,UF,BF,WF,Ls=O(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},kF=ft("createRequire"),jF=ft("readFileSync"),_F=ft("access"),RF=ft("readFile"),TF=ft("writeFile"),AF=ft("appendFile"),IF=ft("mkdir"),CF=ft("mkdtemp"),OF=ft("rename"),LF=ft("unlink"),NF=ft("rm"),PF=ft("stat"),MF=ft("copyFile"),FF=ft("readdir"),DF=ft("createReadStream"),zF=ft("createWriteStream"),Kt=e=>String(e),UF=ft("randomBytes"),BF=ft("spawnSync"),WF=ft("createInterface")});var $T,bw,KF,YF,XF,md=O(()=>{_t();Ls();Ue();$T={},bw=Q(ve(Kt($T.url)),"..","..",".."),KF=Q(bw,"data","templates","responses.jsonl"),YF=Q(bw,"data","phrasebook","software-phrases.txt"),XF=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function xT(e,t={}){let n=vT.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function ET(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>xT(s,t))):1}function Ze(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:ET(s,t)})).sort((s,o)=>o.bias-s.bias||(o.row?.trust??0)-(s.row?.trust??0)||s.index-o.index).map(s=>s.row)}var vT,ww=O(()=>{vT=/^src:corpus:(.+)$/});var mt,ZF,pr,eD,tD,nD,sD,oD,rD,iD,aD,cD,lD,uD,dD,ST,kT,pD,fD,mD,mo=O(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},ZF=mt("createRequire"),pr=mt("readFileSync"),eD=mt("access"),tD=mt("readFile"),nD=mt("writeFile"),sD=mt("appendFile"),oD=mt("mkdir"),rD=mt("mkdtemp"),iD=mt("rename"),aD=mt("unlink"),cD=mt("rm"),lD=mt("stat"),uD=mt("copyFile"),dD=mt("readdir"),ST=mt("createReadStream"),kT=mt("createWriteStream"),pD=mt("randomBytes"),fD=mt("spawnSync"),mD=mt("createInterface")});function yw(e,t){let n=String(e).toLowerCase().replace(/^[^a-z]+/,"");if(!n)return null;for(let o of t.vowel_sound_consonants||[])if(n.startsWith(o))return!0;for(let o of t.consonant_sound_vowels||[])if(n.startsWith(o))return!1;let s=n[0];return"aeiou".includes(s)?!0:/[a-z]/.test(s)?!1:null}function TT(e=_T){let t=or(pr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function hd(){if(Xa===null)try{Xa=TT()}catch{Xa=[]}return Xa}var AT,jT,_T,RT,xD,Xa,gd=O(()=>{mo();Ls();Ue();Aa();md();AT={},jT=ve(Kt(AT.url)),_T=Q(jT,"..","..","data","templates","grammar-rules.toml"),RT=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),xD=Object.freeze(new Set(RT.filter(e=>e!=="prose")));Xa=null});function IT(){if(ui!==void 0)return ui;try{let e=$w?$w():CT();ui=e&&e.winkNLP&&e.model?e:null}catch{ui=null}return ui}function CT(){let e=process.getBuiltinModule("node:module").createRequire(OT.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function bd(){if(fr!==void 0)return fr;let e=IT();if(!e)return fr=null,null;try{fr=e.winkNLP(e.model)}catch{fr=null}return fr}var OT,$w,ui,fr,wd=O(()=>{OT={}});var vw=O(()=>{wd()});var Ew,xw=O(()=>{Ew={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});function FT(e){let t=String(e),n=[t];return t.length>4&&/[a-z]ies$/.test(t)&&n.push(`${t.slice(0,-3)}y`),/(ses|xes|zes|ches|shes)$/.test(t)&&n.push(t.slice(0,-2)),/[a-z]s$/.test(t)&&!/ss$/.test(t)&&n.push(t.slice(0,-1)),t==="has"&&n.push("have"),n}function Sw(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!DT.has(o.property))throw new Error(`lexicon noun "${n}": property must be "data" or "object", got ${JSON.stringify(o.property)}`);e.nouns.set(n,o),o.plural&&e.nounPlurals.set(o.plural,n)}for(let[n,s]of Object.entries(t.verbs||{}))e.verbs.set(n,{lemma:n,...s||{}});for(let[n,s]of Object.entries(t.adjectives||{})){let o={lemma:n,...s||{}};if(!zT.has(o.type))throw new Error(`lexicon adjective "${n}": type must be "subclass" or "data", got ${JSON.stringify(o.type)}`);e.adjectives.set(n,o)}for(let n of t.properNames||[])e.properNames.set(String(n).toLowerCase(),String(n))}function Ns(e,t=NT){if(!e&&yd.has(t))return yd.get(t);let n=Ew,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Sw(s,n),e?(Sw(s,e),s):(yd.set(t,s),s)}function di(e,t,n={}){return UT(e,t,n)[0]??null}function UT(e,t,n={}){let s=String(t??"").toLowerCase(),o=e.nouns.get(s),r=e.nounPlurals.get(s),i=[],a=new Set,l=c=>{c&&!a.has(c.lemma)&&(a.add(c.lemma),i.push(c))};if(r){let c=e.nouns.get(r)??null;return n.singularOnly&&o?(l(o),l(c)):(l(c),l(o)),i}for(let c of FT(s))l(e.nouns.get(c));return i}var NT,TD,AD,PT,MT,ID,DT,zT,yd,ho=O(()=>{xw();NT="tmct:",TD=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),AD=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),PT=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),MT=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),ID=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});DT=new Set(["data","object"]),zT=new Set(["subclass","data"]);yd=new Map});var ND,PD,MD,BT,FD,DD,zD,kw=O(()=>{ks();Oe();ND=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),PD=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),MD=Object.freeze({Class:[e=>`which classes inherit from ${e}`,e=>`what does ${e} contain`,e=>`where is ${e} defined`],Module:[e=>`what does ${e} import`,e=>`which modules import ${e}`,e=>`where is ${e} defined`],Function:[e=>`what calls ${e}`,e=>`what does ${e} call`,e=>`where is ${e} defined`],Method:[e=>`which class contains ${e}`,e=>`what calls ${e}`,e=>`where is ${e} defined`],Attribute:[e=>`which class contains ${e}`,e=>`where is ${e} defined`],GlobalVariable:[e=>`where is ${e} defined`,e=>`where is ${e} mentioned`],Commit:[e=>`what did commit ${e} touch`,e=>`when did ${e} change`]}),BT=Object.freeze({import:"imports",imports:"imports",importing:"imports",imported:"imports",call:"calls",calls:"calls",calling:"calls",called:"calls",invoke:"calls",invokes:"calls",invoking:"calls",contain:"contains",contains:"contains",containing:"contains",containment:"contains",member:"contains",members:"contains",inherit:"inherits",inherits:"inherits",inheriting:"inherits",inheritance:"inherits",extend:"inherits",extends:"inherits",extending:"inherits",subclass:"inherits",subclasses:"inherits",subclassing:"inherits",test:"tests",tests:"tests",testing:"tests",tested:"tests",coverage:"tests",define:"defines",defines:"defines",defining:"defines",defined:"defines",definition:"defines",definitions:"defines",declaration:"defines",touch:"touches",touches:"touches",touching:"touches",touched:"touches",cochange:"cochange","co-change":"cochange","change-coupling":"cochange",coupled:"cochange",export:"reexports",exports:"reexports",exporting:"reexports",exported:"reexports",reexport:"reexports",reexports:"reexports",reexporting:"reexports","re-export":"reexports","re-exports":"reexports","re-exporting":"reexports",serve:"serves",serves:"serves",serving:"serves",served:"serves",denote:"denotes",denotes:"denotes",denoting:"denotes",denoted:"denotes"}),FD=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"],serves:["serves"],denotes:["denotes"]}),DD=Object.freeze({imports:{verb:"imports",edgeNoun:"import"},calls:{verb:"calls",edgeNoun:"call"},contains:{verb:"contains",edgeNoun:"containment"},inherits:{verb:"inherits from",edgeNoun:"inheritance"},tests:{verb:"tests",edgeNoun:"test"},defines:{verb:"defines",edgeNoun:"definition"},touches:{verb:"touches",edgeNoun:"touch"},cochange:{verb:"changes together with",edgeNoun:"change-coupling"},reexports:{verb:"re-exports",edgeNoun:"re-export"},serves:{verb:"serves",edgeNoun:"service"},denotes:{verb:"denotes",edgeNoun:"denotation"}}),zD=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});var Ja=O(()=>{nn();ho();kw()});var Qa,Za=O(()=>{Qa=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var GT,ZD,jw=O(()=>{mo();Za();Ls();Ue();Ja();GT={},ZD=Q(ve(Kt(GT.url)),"..","..","..")});var _w=O(()=>{nn();ho();Ja()});var qT,VT,dz,$d=O(()=>{nn();ho();zo();qT=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),VT=["this","is","about","the"],dz=VT.length});var Rw=O(()=>{_t();Ue()});var vd=O(()=>{nn()});var HT,jz,Tw=O(()=>{mo();Za();Ls();Ue();vd();nn();HT={},jz=Q(ve(Kt(HT.url)),"..","..","..")});var Rz,Tz,Az,Aw=O(()=>{Rz=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),Tz=Object.freeze({propositionalQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question about whether a proposition holds ('does X import Y?')"}),checkQuestion:Object.freeze({dimension:"task",gloss:"a yes/no question whose asker already expects the answer yes ('..., right?')"}),setQuestion:Object.freeze({dimension:"task",gloss:"a wh-question asking for the members of a set ('what does X import?')"}),choiceQuestion:Object.freeze({dimension:"task",gloss:"a question asking which of the listed alternatives holds ('is X a module or a class?')"}),inform:Object.freeze({dimension:"task",gloss:"a declarative telling the addressee something (a teach turn; also tmct explaining its own function)"}),answer:Object.freeze({dimension:"task",gloss:"an inform that discharges a question just asked (an answer grounded in the graph)"}),confirm:Object.freeze({dimension:"task",gloss:"an answer 'yes' to a check question"}),disconfirm:Object.freeze({dimension:"task",gloss:"an answer 'no' to a check question"}),agreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be true"}),disagreement:Object.freeze({dimension:"task",gloss:"an inform stating that the speaker holds what the addressee just stated to be false"}),correction:Object.freeze({dimension:"task",gloss:"a disagreement that also supplies the replacement ('no, I meant Y')"}),request:Object.freeze({dimension:"task",gloss:"asks the addressee to perform an action ('solve it' \u2014 a goal turn)"}),instruct:Object.freeze({dimension:"task",gloss:"a request the addressee is expected to carry out without negotiation (a bare imperative)"}),suggestion:Object.freeze({dimension:"task",gloss:"puts an action forward as advisable without claiming authority over the addressee"}),offer:Object.freeze({dimension:"task",gloss:"commits the speaker to an action, conditional on the addressee wanting it"}),autoPositive:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn succeeded (an acknowledgement)"}),autoNegative:Object.freeze({dimension:"autoFeedback",gloss:"the sender reports its own processing of the previous turn failed \u2014 tmct's honest miss"}),initialGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"opens an exchange of greetings ('hi')"}),returnGreeting:Object.freeze({dimension:"socialObligationsManagement",gloss:"answers a greeting with a greeting"}),thanking:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses gratitude for something the addressee did"}),apology:Object.freeze({dimension:"socialObligationsManagement",gloss:"expresses regret for something the speaker did"})}),Az=Object.freeze({teach:"inform","ask-set":"setQuestion","ask-propositional":"propositionalQuestion",goal:"request",imperative:"instruct","honest-miss":"autoNegative",greeting:"initialGreeting",thanks:"thanking",help:"inform","game-answer":"answer","game-inform":"inform"})});function pi(e){let t=new Map;for(let[n,s]of e||[])!n||!s||n===s||(t.has(n)||t.set(n,new Set),t.get(n).add(s));return t}function ec(e,t,{cap:n=6}={}){let s=[e],o=new Set([e]),r=e;for(;s.length<n;){let i=[...t.get(r)||[]].filter(a=>!o.has(a)).sort();if(!i.length)break;r=i[0],o.add(r),s.push(r)}return s}function Iw(e,t,{cap:n=64}={}){let s=new Set([e]),o=[e];for(;o.length&&s.size<n;){let r=o.shift();for(let i of t.get(r)||[])s.has(i)||(s.add(i),o.push(i))}return s}function xd(e,t,n,s){if(n.has(e))return n.get(e);if(s.has(e))return 1;s.add(e);let o=t.get(e),r=1;if(o&&o.size){let i=0;for(let a of o)i=Math.max(i,xd(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function KT(e){let t=new Map;for(let[n,s]of e||[])!n||!s||(t.has(n)||t.set(n,new Set),t.get(n).add(s),t.has(s)||t.set(s,new Set),t.get(s).add(n));return t}function YT(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=Iw(e,n),c=Iw(t,n);if(l.has(t)||c.has(e))return{distinct:!1,reason:"subsumes",lcs:l.has(t)?t:e};if(s.size)for(let h of l){let g=s.get(h);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(h=>c.has(h));if(!u.length)return l.size<2||c.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=h=>xd(h,n,o,new Set),f=u[0],p=d(f);for(let h of u){let g=d(h);(g>p||g===p&&h<f)&&(f=h,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let h=a.get(f);return typeof h=="number"&&h<r?{distinct:!0,reason:"low-ic",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}return 2*p/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}function tc(e,{subClassEdges:t=[],parents:n=null,disjointEdges:s=[],threshold:o=.5,rootDepth:r=1,icByTerm:i=null}={}){let a=[...new Set((e||[]).filter(Boolean))],l=n||pi(t),c=KT(s),u=new Map,d=new Map(a.map(y=>[y,y])),f=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let v=f(y),_=f(w);v!==_&&d.set(v<_?_:v,v<_?v:_)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let v=YT(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...v}),v.distinct||p(a[y],a[w])}let h=new Map;for(let y of a){let w=f(y);h.has(w)||h.set(w,[]),h.get(w).push(y)}let g=y=>xd(y,l,u,new Set),b=[...h.values()].map(y=>{let w=[...y].sort(),v=w[0],_=g(v);for(let $ of w){let x=g($);x>_&&(_=x,v=$)}return{objects:w,label:v}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:m}}var nc=O(()=>{Ht()});function Ed(e){return typeof e=="string"&&XT.test(e)}function Cw(e){return!!e&&typeof e=="object"&&go(e.s)}function Sd(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Ed(e.world)&&go(e.subject)&&go(e.predicate)&&go(e.object)}function kd(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Ed(e.world)||!go(e.name)||!QT.has(e.ruleKind)||!e.slots||typeof e.slots!="object"||Array.isArray(e.slots))return!1;let t=Object.values(e.slots);return t.length>0&&t.every(go)}function jd(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Ed(e.world)&&go(e.opening)}function Ow(e){return Sd(e)||kd(e)||jd(e)}function Lw(e){let t=e||[],n=t.filter(c=>c.predicate===ZT).sort((c,u)=>`${c.subject}\0${c.object}`.localeCompare(`${u.subject}\0${u.object}`));if(!n.length)return t;let s=new Set(t.filter(c=>c.predicate==="rdf:type").map(c=>c.subject)),o=new Map;for(let c of t)c.predicate==="mgx:located-in"&&o.set(c.subject,c.object);let r=(c,u)=>t.some(d=>d.predicate==="rdf:type"&&d.object===c&&o.get(d.subject)===u),i=t.find(c=>typeof c.world=="string"&&c.kind==="fact"),a=(c,u,d)=>({...i?{world:i.world,kind:"fact"}:{},subject:c,predicate:u,object:d}),l=[];for(let c of n){let u=c.subject,d=c.object;if(r(d,u))continue;let f=d,p=1;for(;s.has(f);)p+=1,f=`${d}-${p}`;s.add(f),l.push(a(f,"rdf:type",d)),l.push(a(f,"rdf:type","portable")),l.push(a(f,"mgx:located-in",u))}return l.length?[...t,...l]:t}var XT,JT,QT,go,ZT,bo=O(()=>{XT=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,JT=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),QT=new Set(JT),go=e=>typeof e=="string"&&e.trim()!=="";ZT="mgx:default-contains"});var tA,nA,sA,oA,rA,iA,aA,cA,lA,Bz,uA,Nw,Wz,Gz,Pw=O(()=>{ho();Mo();tA="subClassOf",nA="typeAssertion",sA="relation",oA="someValuesFrom",rA="cardinality",iA="disjointWith",aA="possessive",cA="adjective",lA="capability",Bz=Object.freeze([tA,nA,sA,oA,rA,iA,aA,cA,lA]),uA=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Nw=new Map([["pick up","take"],["pick","take"],["grab","take"],["put down","drop"],["set down","drop"],["leave","drop"],["talk to","talk"],["speak to","talk"],["speak with","talk"],["talk","talk"],["speak","talk"],["chat with","talk"],["converse with","talk"],["look at","examine"],["examine","examine"],["inspect","examine"],["have a look at","examine"],["take a look at","examine"],["check out","examine"],["shut","close"]]),Wz=Math.max(...[...Nw.keys()].map(e=>e.split(" ").length)),Gz=[...new Set([...uA,...[...Nw.keys()].map(e=>e.split(" ")[0])])]});var wo=O(()=>{});var _d=O(()=>{Oe();ks();wo()});function jt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:Ps.Capability,name:e,label:t,question:n,readOnly:!0,parameters:Object.freeze(s),preconditions:Object.freeze(o),effects:Object.freeze({add:Object.freeze(r),del:Object.freeze(i)})})}var dA,Ps,Ee,Jz,mi,st,Ft,Yt,pA,Mw,kt,fA,mA,Fw,Qz,Zz,e2,Dw=O(()=>{dA=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),Ps=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Ee=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),Jz=Object.freeze([Ee.MemoryTerm]),mi=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),st=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:Ps.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Ft=()=>Object.freeze({type:Ps.Precondition,pred:mi.graphLoaded}),Yt=(e,t)=>Object.freeze({type:Ps.Precondition,pred:mi.resolves,param:e,as:t}),pA=e=>Object.freeze({type:Ps.Precondition,pred:mi.anyPresent,params:Object.freeze([...e])}),Mw=()=>Object.freeze({type:Ps.Precondition,pred:mi.memoryFacts}),kt=(e,t=null)=>Object.freeze({type:Ps.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});fA=Object.freeze([jt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[st("query",Ee.Query,{required:!1,note:"required unless a kind filter is given"}),st("kind",Ee.Kind,{required:!1}),st("name",Ee.Query,{required:!1}),st("decorator",Ee.Query,{required:!1})],preconditions:[Ft(),pA(["query","kind"])],add:[kt("matches","query")]}),jt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("description","symbol")]}),jt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("signature","symbol")]}),jt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[st("module",Ee.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Ft(),Yt("module",Ee.Symbol)],add:[kt("impact","module")]}),jt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Ft(),Yt("class",Ee.Class)],add:[kt("members","class")]}),jt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[st("class",Ee.Class,{arg:"class"})],preconditions:[Ft(),Yt("class",Ee.Class)],add:[kt("subclasses","class")]}),jt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[st("module",Ee.Module)],preconditions:[Ft(),Yt("module",Ee.Module)],add:[kt("exports","module")]}),jt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("callers","symbol")]}),jt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("callees","symbol")]}),jt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("calls","symbol")]}),jt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("tests","symbol")]}),jt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Ft()],add:[kt("untested",null)]}),jt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("history","symbol")]}),jt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[st("symbol",Ee.Symbol)],preconditions:[Ft(),Yt("symbol",Ee.Symbol)],add:[kt("cochanges","symbol")]}),jt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[st("package",Ee.Package,{required:!1})],preconditions:[Ft()],add:[kt("architecture","package")]}),jt({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[st("term",Ee.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[Mw(),Yt("term",Ee.MemoryTerm)],add:[kt("related","term")]}),jt({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[st("class",Ee.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),st("expression",Ee.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),st("size",Ee.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[Mw(),Yt("class",Ee.MemoryTerm)],add:[kt("sprite","class")]})]),mA=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Fw=fA,Qz=mA(Fw),Zz=Object.freeze({tmct_context:"unbounded edit-context bundle (multi-file); needs a size/budget precondition",tmct_context_more:"unbounded context continuation; same as tmct_context",tmct_snippet:"raw source-file read (reads the filesystem); needs a file-read + span precondition",tmct_ask:"the plain-English question entry point itself \u2014 calls ask.mjs directly and bypasses the capability planner; not one of the planner's operators",tmct_export:"reads the memory store's whole fact set with no discriminating param and no resolver goal frame; needs NL-reachability wiring before it can join",tmct_ingest:"writes into the memory store (grounds facts); capability() only models read-only operators, so a write path needs its own precondition/effect design first",tmct_file_history:"a module-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_method_history:"a method-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet",tmct_class_history:"a class-grain cut of the same history edge tmct_history already models; no NL frame distinguishes the granularities yet"}),e2=Object.freeze({prefixes:dA,vocab:Ps,kinds:Ee,precond:mi,get capabilities(){return Fw}})});var zw=O(()=>{Dw()});var Uw=O(()=>{Hn()});function gA(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Q(hA,"corpus","worlds")}function Bw(e){try{return Qa(pr(e))}catch{return null}}function Ww(e){if(Rd.has(e))return Rd.get(e);let t=null,n=Bw(Q(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Rd.set(e,t),t}function bA(e,t){let n=Ww(e);if(!n)return null;let s=n[String(t??"")];if(!Cw(s))return null;let o=`${e}\0${t}`;if(Td.has(o))return Td.get(o);let r=null,i=Bw(Q(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
|
|
165
|
+
`))if(u.trim())try{let d=JSON.parse(u);if(!Ow(d)||d.world!==t)continue;Sd(d)?a.push(d):kd(d)?l.push(d):jd(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:Lw(a),rules:l,meta:c})}return Td.set(o,r),r}var yA,hA,Rd,Td,wA,f2,sc=O(()=>{mo();Za();Ls();Ue();bo();yA={},hA=Q(ve(Kt(yA.url)),"..","..","..");Rd=new Map,Td=new Map;wA=e=>({list:async()=>{let t=Ww(e());return t?Object.keys(t).sort():null},load:async t=>bA(e(),t)}),f2=wA(()=>gA())});var x2,Gw=O(()=>{_t();Ue();ws();Rr();Hn();qe();x2=Q(".tmct","memory","blocks")});var qw=O(()=>{wo()});var Hw=O(()=>{ws();Rr();wo()});var Ad=O(()=>{ws();Rr();wo()});var Kw=O(()=>{Ad();ws();Js();wo()});var Yw=O(()=>{});var Xw=O(()=>{qw();Hw();Ad();Kw();Yw();wo()});var Jw=O(()=>{Gw();qe();oa();gd();Xw();_d()});var Qw=O(()=>{yn();Mo()});function mr(e,t){let n=parseInt(e.slice(1),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, ${t})`}function rc(e){let t=n=>EA.map((s,o)=>`--${n}-t${o+1}: ${mr(e[n],s)};`).join(" ");return[`--bg: ${e.bg}; --ink: ${e.ink}; --muted: ${e.muted}; --line: ${e.line}; --card: ${e.card};`,`--taught: ${e.taught}; --corpus: ${e.corpus}; --entail: ${e.entail}; --alert: ${e.alert};`,t("taught"),t("corpus"),t("entail"),`--taught-soft: ${mr(e.taught,.12)}; --corpus-soft: ${mr(e.corpus,.12)};`,`--entail-soft: ${mr(e.entail,.14)}; --alert-soft: ${mr(e.alert,.12)};`,`--sprite-pop: drop-shadow(0 0 .6px ${mr(e.ink,e.popRimAlpha)}) drop-shadow(${e.popShadow});`].join(" ")}var oc,EA,wU,Id=O(()=>{Qw();oc=Object.freeze({light:Object.freeze({bg:"#F7F6F2",ink:"#23272B",muted:"#6E7168",line:"#DDD9D0",card:"#FFFFFF",taught:"#2E7D4F",corpus:"#5A80AC",entail:"#B07C2E",alert:"#B0503F",popRimAlpha:.66,popShadow:"0 1px 1.2px rgba(0, 0, 0, .30)"}),dark:Object.freeze({bg:"#15181C",ink:"#E7E5DF",muted:"#9A9E95",line:"#2B3036",card:"#1C2126",taught:"#5FBE8B",corpus:"#6C93BF",entail:"#D9A554",alert:"#D08070",popRimAlpha:.45,popShadow:"0 1px 1.4px rgba(0, 0, 0, .55)"})}),EA=[.35,.65,1];wU=`
|
|
166
|
+
:root { color-scheme: light dark; ${rc(oc.light)} }
|
|
167
|
+
@media (prefers-color-scheme: dark) { :root { ${rc(oc.dark)} } }
|
|
168
|
+
:root[data-theme="dark"] { ${rc(oc.dark)} }
|
|
169
|
+
:root[data-theme="light"] { ${rc(oc.light)} }
|
|
170
|
+
`});var Zw=O(()=>{Id()});var ey=O(()=>{Id()});var sy=O(()=>{qe();bo();yn();hi()});var Cd,RA,TA,AA,IA,CA,OA,iB,aB,hi=O(()=>{bo();Pw();ho();Ka();_d();zw();Uw();sc();qe();Jw();Zw();ey();sy();Cd="mgx:world-epoch",RA=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),TA=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),AA="mgx:is-open",IA="mgx:hasMass",CA="mgx:knows-about",OA="mgx:display-name",iB=new Set([...RA,...TA,AA,IA,CA,OA,"rdf:type",Cd]),aB=new RegExp("^(?:what\\s+foods?\\s+(?:do\\s+you\\s+know(?:\\s+about)?|have\\s+you\\s+(?:found|seen|heard\\s+(?:about|of))|do\\s+you\\s+know\\s+of)|what\\s+do\\s+you\\s+know\\s+about\\s+(?:any\\s+)?foods?|do\\s+you\\s+know\\s+(?:about|of)\\s+(?:any\\s+)?foods?|where\\s+is\\s+(?:the\\s+)?food)[?.!\\s]*$","i")});var hr,lB,uB,dB,pB,fB,mB,Ms=O(()=>{hr=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),mudiii:Object.freeze({predatorInitialMass:20,predatorMassDecrementPerTurn:.08,predatorVisionRadius:4,preyInitialMass:8,preyMassDecrementPerTurn:.06,preyVisionRadius:3,preySpawnIntervalTurns:5,foodSpawnIntervalTurns:3,spawnedFoodMass:2,placedFoodMass:2,maxPreyPopulation:6,maxFoodItems:8,foodVisionGated:!0,teach:!1}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),adventure:Object.freeze({teach:!1}),planning:Object.freeze({maxDepth:300})}),lB=Object.freeze({spider_initial_mass:"spiderInitialMass",spider_mass_decrement_per_turn:"spiderMassDecrementPerTurn",fly_initial_mass:"flyInitialMass",fly_mass_decrement_per_turn:"flyMassDecrementPerTurn",spider_vision_radius:"spiderVisionRadius",fly_vision_radius:"flyVisionRadius",egg_hatch_delay_turns:"eggHatchDelayTurns",fly_spawn_interval_turns:"flySpawnIntervalTurns",egg_lay_mass_threshold:"eggLayMassThreshold",egg_hatch_count:"eggHatchCount",min_hatchling_mass:"minHatchlingMass",web_duration_turns:"webDurationTurns"}),uB=Object.freeze({mole_initial_mass:"moleInitialMass",mole_mass_decrement_per_turn:"moleMassDecrementPerTurn",mole_speed:"moleSpeed",mole_dig_reach:"moleDigReach",vole_initial_mass:"voleInitialMass",vole_mass_decrement_per_turn:"voleMassDecrementPerTurn",vole_speed:"voleSpeed",vole_dig_reach:"voleDigReach",badger_initial_mass:"badgerInitialMass",badger_mass_decrement_per_turn:"badgerMassDecrementPerTurn",badger_speed:"badgerSpeed",badger_dig_reach:"badgerDigReach",groundhog_initial_mass:"groundhogInitialMass",groundhog_mass_decrement_per_turn:"groundhogMassDecrementPerTurn",groundhog_speed:"groundhogSpeed",groundhog_dig_reach:"groundhogDigReach",meerkat_initial_mass:"meerkatInitialMass",meerkat_mass_decrement_per_turn:"meerkatMassDecrementPerTurn",meerkat_speed:"meerkatSpeed",meerkat_dig_reach:"meerkatDigReach"}),dB=Object.freeze({predator_initial_mass:"predatorInitialMass",predator_mass_decrement_per_turn:"predatorMassDecrementPerTurn",predator_vision_radius:"predatorVisionRadius",prey_initial_mass:"preyInitialMass",prey_mass_decrement_per_turn:"preyMassDecrementPerTurn",prey_vision_radius:"preyVisionRadius",prey_spawn_interval_turns:"preySpawnIntervalTurns",food_spawn_interval_turns:"foodSpawnIntervalTurns",spawned_food_mass:"spawnedFoodMass",placed_food_mass:"placedFoodMass",max_prey_population:"maxPreyPopulation",max_food_items:"maxFoodItems",food_vision_gated:"foodVisionGated",teach:"teach"}),pB=Object.freeze({teach:"teach"}),fB=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),mB=Object.freeze({max_depth:"maxDepth"})});var iy,LA,ac,NA,PA,ay,cy,MA,FA,bB,DA,zA,ly=O(()=>{Ms();iy="spider-fly",LA=10,ac=Object.freeze({x:2,y:2}),NA=1,PA=Object.freeze({predator:Object.freeze({role:"predator",kind:"spider",idPrefix:"spider"}),prey:Object.freeze({role:"prey",kind:"fly",idPrefix:"fly"}),food:null}),ay=(e,t)=>`cell-${e}-${t}`,cy=(e,t,n,s)=>Math.max(Math.abs(e-n),Math.abs(t-s)),MA=(e,t)=>cy(e,t,ac.x,ac.y)<=NA,FA=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),bB=Object.freeze([Object.freeze(["poodle","dog"]),Object.freeze(["sheepdog","dog"]),Object.freeze(["dog","animal"]),Object.freeze(["spider","arachnid"]),Object.freeze(["arachnid","animal"]),Object.freeze(["fly","insect"]),Object.freeze(["insect","animal"])]),DA="a spider waits in its web; a fly drifts in from the edge of the board. Neither is yours to move. Watch, or address one by name in chat.",zA=Object.freeze({name:iy,gridSize:LA,opening:DA,boardNoun:"board",boardSubject:"board",cast:Object.freeze({predators:1,prey:1}),props:Object.freeze([]),staticWebAt:MA,webHomeCell:ay(ac.x,ac.y)})});var uy,my,$B,vB,xB,Od,dy,py,fy,Ld,EB,SB,cc=O(()=>{Ms();uy=Object.freeze({predator:"fox",prey:"goblin",spawnedFood:"crumb",placedFood:"morsel"}),my=Object.freeze({north:Object.freeze({dx:0,dy:-1}),south:Object.freeze({dx:0,dy:1}),east:Object.freeze({dx:1,dy:0}),west:Object.freeze({dx:-1,dy:0})}),$B=Object.freeze(["north","northeast","east","southeast","south","southwest","west","northwest"]),vB=Object.freeze(["blacksmith","bush","cart","fence","house","inn","oak","stall","well"]),xB=Object.freeze([uy.spawnedFood,uy.placedFood]),Od=e=>Object.freeze({...e,props:Object.freeze(e.props.map(t=>Object.freeze(t))),cast:Object.freeze(e.cast)}),dy=Od({name:"town-square",gridSize:12,opening:"a fox prowls the town square; goblins pick over the stalls for scraps. Neither is yours to move. Watch, or address one by name in chat.",cast:{predators:1,prey:3},props:[{id:"house-1",model:"house-1",cell:"cell-8-1",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-8-2",rotation:"180"},{id:"house-3",model:"house-3",cell:"cell-8-3",rotation:"180"},{id:"well-1",model:"well",cell:"cell-6-7",rotation:"0"},{id:"stall-1",model:"market-stall-1",cell:"cell-3-9",rotation:"90"},{id:"inn-1",model:"inn",cell:"cell-11-10",rotation:"270"}]}),py=Od({name:"town-square-market",gridSize:10,opening:"market day in the town square: two rows of stalls, goblins working the lanes between them, and a fox somewhere among the crowd.",cast:{predators:1,prey:4},props:[{id:"stall-1",model:"market-stall-1",cell:"cell-2-4",rotation:"0"},{id:"stall-2",model:"market-stall-2",cell:"cell-3-4",rotation:"0"},{id:"stall-3",model:"market-stall-1",cell:"cell-4-4",rotation:"0"},{id:"stall-4",model:"market-stall-2",cell:"cell-6-4",rotation:"0"},{id:"stall-5",model:"market-stall-1",cell:"cell-7-4",rotation:"0"},{id:"stall-6",model:"market-stall-2",cell:"cell-8-4",rotation:"0"},{id:"stall-7",model:"market-stall-2",cell:"cell-2-7",rotation:"180"},{id:"stall-8",model:"market-stall-1",cell:"cell-3-7",rotation:"180"},{id:"stall-9",model:"market-stall-2",cell:"cell-4-7",rotation:"180"},{id:"stall-10",model:"market-stall-1",cell:"cell-6-7",rotation:"180"},{id:"stall-11",model:"market-stall-2",cell:"cell-7-7",rotation:"180"},{id:"stall-12",model:"market-stall-1",cell:"cell-8-7",rotation:"180"},{id:"well-1",model:"well",cell:"cell-5-5",rotation:"0"},{id:"blacksmith-1",model:"blacksmith",cell:"cell-10-5",rotation:"270"},{id:"cart-1",model:"cart",cell:"cell-1-1",rotation:"90"},{id:"cart-2",model:"cart",cell:"cell-10-10",rotation:"270"},{id:"bush-1",model:"bush",cell:"cell-10-1",rotation:"0"},{id:"bush-2",model:"bush",cell:"cell-1-10",rotation:"0"}]}),fy=Od({name:"town-square-chapel",gridSize:14,opening:"the chapel corner of the town square, fenced to the south and shaded by three oaks. Two foxes hunt here, and two goblins know it.",cast:{predators:2,prey:2},props:[{id:"inn-1",model:"inn",cell:"cell-2-2",rotation:"180"},{id:"house-1",model:"house-1",cell:"cell-3-2",rotation:"180"},{id:"house-2",model:"house-2",cell:"cell-2-3",rotation:"90"},{id:"fence-1",model:"fence",cell:"cell-7-11",rotation:"0"},{id:"fence-2",model:"fence",cell:"cell-8-11",rotation:"0"},{id:"fence-3",model:"fence",cell:"cell-9-11",rotation:"0"},{id:"oak-1",model:"oak-tree",cell:"cell-12-4",rotation:"0"},{id:"oak-2",model:"oak-tree",cell:"cell-12-12",rotation:"90"},{id:"oak-3",model:"oak-tree",cell:"cell-5-8",rotation:"180"}]}),Ld=Object.freeze({[dy.name]:dy,[py.name]:py,[fy.name]:fy}),EB=Object.freeze(Object.keys(Ld)),SB=Object.freeze([Object.freeze(["fox","canine"]),Object.freeze(["canine","animal"]),Object.freeze(["goblin","humanoid"]),Object.freeze(["humanoid","creature"]),Object.freeze(["creature","animal"]),Object.freeze(["crumb","food"]),Object.freeze(["morsel","food"]),Object.freeze(["food","thing"]),Object.freeze(["prop","thing"])])});var hy=O(()=>{});var gy=O(()=>{});var gi,HA,KA,YA,XA,JA,QA,ZA,eI,tI,nI,sI,oI,rI,iI,aI,cI,lI,HB,Nd=O(()=>{cc();hy();Js();qe();bo();gy();nn();Ms();hi();gi=Object.freeze({predator:{role:"predator",kind:"fox",idPrefix:"fox"},prey:{role:"prey",kind:"goblin",idPrefix:"goblin"},food:{spawnedKind:"crumb",placedKind:"morsel"}}),HA="mgx:currently-in",KA="mgx:hasMass",YA="mgx:feels",XA="mgx:facing",JA="mgx:driven-facing",QA="mgx:eaten-by",ZA="mgx:starved",eI="mgx:placed-by",tI="mgx:model",nI="mgx:rotation",sI="mgx:carrying",oI="mgx:prey-eaten",rI="mgx:web-built-at-turn",iI="mgx:laid-at-turn",aI="mgx:hatched-into",cI="mgx:turn-played",lI=new Set([HA,KA,YA,XA,JA,QA,ZA,eI,tI,nI,cI,sI,oI,rI,iI,aI,"rdf:type",Cd]),HB=Object.freeze([...lI].sort())});var dW,pW,wy=O(()=>{ly();cc();Nd();bo();sc();qe();Ms();dW=new RegExp("^@(spider|fly)(?:-(\\d+))?[,:]?\\s+the\\s+(spider|fly)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),pW=Object.freeze({"catch-prey":"caught","eat-agent":"eaten",starve:"starved","lay-egg":"laid","hatch-egg":"hatched","spawn-prey":"spawned"})});var AW,IW,CW,OW,LW,NW,fI,mI,hI,gI,yy,$y,bI,PW,MW,vy=O(()=>{cc();Nd();hi();yn();bo();sc();qe();Ms();AW=gi.predator.kind,IW=gi.prey.kind,CW=gi.food.spawnedKind,OW=gi.food.placedKind,LW=new RegExp("^@(fox|goblin)(?:-(\\d+))?[,:]?\\s+the\\s+(fox|goblin|crumb|morsel)(?:-(\\d+))?\\s+is\\s+(?:(north|south|east|west)|at\\s+(cell-\\d+-\\d+))[.!?\\s]*$","i"),NW=new RegExp("^who\\s+(?:put|placed|dropped)\\s+(?:(?:the\\s+)?(morsel|crumb)(?:-(\\d+))?|(?:(?:the\\s+)?(?:food|morsel|crumb|that|it)\\s+)?(?:at|on)\\s+(cell-\\d+-\\d+))(?:\\s+there)?[?.!\\s]*$","i"),fI="mgx:currently-in",mI="mgx:hasMass",hI="mgx:feels",gI="mgx:facing",yy="(fox|goblin|crumb|morsel)(?:-(\\d+))?",$y="(fox|goblin)(?:-(\\d+))?",bI="(crumb|morsel)(?:-(\\d+))?",PW=[{kind:"placement",predicate:fI,re:new RegExp(`^(?:the\\s+)?${yy}\\s+is\\s+at\\s+(cell-\\d+-\\d+)[.!\\s]*$`,"i")},{kind:"mass",predicate:mI,re:new RegExp(`^(?:the\\s+)?${yy}\\s+weighs\\s+(\\d+(?:\\.\\d+)?)[.!\\s]*$`,"i")},{kind:"mood",predicate:hI,re:new RegExp(`^(?:the\\s+)?${$y}\\s+feels\\s+(calm|angry|scared|happy)[.!\\s]*$`,"i")},{kind:"facing",predicate:gI,re:new RegExp(`^(?:the\\s+)?${$y}\\s+faces\\s+(north|south|east|west)[.!\\s]*$`,"i")}],MW=new RegExp(`^(?:the\\s+)?([a-z][a-z-]*)\\s+(?:put|placed|dropped)\\s+(?:the\\s+)?${bI}\\s+there[.!\\s]*$`,"i")});var ht,DW,zW,UW,BW,WW,GW,qW,VW,HW,KW,YW,XW,JW,QW,ZW,eG,tG,nG,sG,xy=O(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},DW=ht("createRequire"),zW=ht("readFileSync"),UW=ht("access"),BW=ht("readFile"),WW=ht("writeFile"),GW=ht("appendFile"),qW=ht("mkdir"),VW=ht("mkdtemp"),HW=ht("rename"),KW=ht("unlink"),YW=ht("rm"),XW=ht("stat"),JW=ht("copyFile"),QW=ht("readdir"),ZW=ht("createReadStream"),eG=ht("createWriteStream"),tG=ht("randomBytes"),nG=ht("spawnSync"),sG=ht("createInterface")});var gt,rG,iG,aG,cG,lG,uG,dG,pG,fG,mG,hG,gG,bG,wG,yG,$G,vG,xG,wI,Ey=O(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},rG=gt("createRequire"),iG=gt("readFileSync"),aG=gt("access"),cG=gt("readFile"),lG=gt("writeFile"),uG=gt("appendFile"),dG=gt("mkdir"),pG=gt("mkdtemp"),fG=gt("rename"),mG=gt("unlink"),hG=gt("rm"),gG=gt("stat"),bG=gt("copyFile"),wG=gt("readdir"),yG=gt("createReadStream"),$G=gt("createWriteStream"),vG=gt("randomBytes"),xG=gt("spawnSync"),wI=gt("createInterface")});var bt,SG,kG,jG,_G,RG,TG,AG,IG,CG,OG,LG,NG,PG,MG,FG,DG,zG,Sy,UG,Pd=O(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},SG=bt("createRequire"),kG=bt("readFileSync"),jG=bt("access"),_G=bt("readFile"),RG=bt("writeFile"),TG=bt("appendFile"),AG=bt("mkdir"),IG=bt("mkdtemp"),CG=bt("rename"),OG=bt("unlink"),LG=bt("rm"),NG=bt("stat"),PG=bt("copyFile"),MG=bt("readdir"),FG=bt("createReadStream"),DG=bt("createWriteStream"),zG=bt("randomBytes"),Sy=bt("spawnSync"),UG=bt("createInterface")});var ky=O(()=>{Pd();Ue();_t();Ue();Oa();Bt()});var jy=O(()=>{});var yI,_y=O(()=>{_t();Ue();qe();jy();yI=Q(".tmct","sessions")});var Ty=O(()=>{_t();Ue();Ya()});var wt,cq,lq,uq,dq,pq,fq,mq,hq,gq,bq,wq,yq,$q,vq,xq,Eq,Sq,kq,$I,Ay=O(()=>{wt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},cq=wt("createRequire"),lq=wt("readFileSync"),uq=wt("access"),dq=wt("readFile"),pq=wt("writeFile"),fq=wt("appendFile"),mq=wt("mkdir"),hq=wt("mkdtemp"),gq=wt("rename"),bq=wt("unlink"),wq=wt("rm"),yq=wt("stat"),$q=wt("copyFile"),vq=wt("readdir"),xq=wt("createReadStream"),Eq=wt("createWriteStream"),Sq=wt("randomBytes"),kq=wt("spawnSync"),$I=wt("createInterface")});var xI,gr,Iy,vI,Cy,Lq,ps,Nq,lc,Pq,Oy=O(()=>{mo();_t();Ay();Ls();Ue();Aa();qe();xI={},gr=Q(ve(Kt(xI.url)),"..","..",".."),Iy=Q(gr,"corpus","conceptnet","slice.jsonl"),vI=Q(gr,"src","adapters","corpus","conceptnet-map.toml"),Cy=Q(gr,"corpus","seon","concepts.jsonl"),Lq=Q(gr,"corpus","seon","definitions.jsonl"),ps=Q(gr,"corpus","tier2"),Nq=Q(ps,"manifest.json"),lc=Q(gr,"corpus","wordnet"),Pq=Q(lc,"manifest.json")});function kI(){return{seon:{kind:"corpus",active:!1,corpusPath:Cy,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:Iy,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:SI},human:{kind:"corpus",active:!0,corpusPath:Q(ps,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Q(ps,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Q(ps,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Q(ps,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Q(ps,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Q(ps,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Q(ps,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Q(lc,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Q(lc,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Q(EI,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var jI,EI,Hq,SI,Kq,Ly=O(()=>{Ue();_t();Ls();Oa();Oy();jI={},EI=Q(ve(Kt(jI.url)),"..","..","corpus","namenet"),Hq=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),SI=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];Kq=Object.freeze(kI())});var Ny=O(()=>{});var Py=O(()=>{Ue();mo();_t();xy();Ey();Pd();Bt();ky();Oe();_y();Ya();Ty();_r();Ly();uc();Ms();Ka();$d();Ny()});var My={};Bn(My,{proseLemma:()=>RI});function RI(){if(yo!==void 0)return yo;try{let e=bd();if(!e)return yo=null,yo;let t=e.its,n=new Map;yo=s=>{let o=String(s||"");if(n.has(o))return n.get(o);let r;try{r=String(e.readDoc(o).tokens().out(t.lemma)[0]||o).toLowerCase()}catch{r=o.toLowerCase()}return n.set(o,r),r}}catch{yo=null}return yo}var yo,Fy=O(()=>{wd()});var Dy={};Bn(Dy,{digestTermFromRows:()=>II,loadDigestStructureTable:()=>AI,readDigestStructures:()=>TI});var TI,AI,II,zy=O(()=>{TI=()=>null,AI=()=>null,II=()=>null});function Yd(e){if(!e)return null;let{node:t,shape:n,kind:s}=e;if(t==="find")return`locate a specific named entity ("${e.term}")`;if(t==="count")return`get a count of ${dc(e.entityType)}`;if(t==="list")return`list/enumerate ${dc(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${dc(e.entityType)} by ${e.metricNoun||e.metric||"a metric"}`;if(t==="anaphora")return"follow up on the previous answer's result set (discourse anaphora)";if(t==="membership")return`understand "${e.term||"an entity"}"'s membership/relationship`;if(t==="clause")return Yd(e.clause);if(t==="miss")return null;if(t==="boolean"||t==="qualifier"||t==="reverseSet"||t==="forwardSet"||t==="allOfClass"||t==="temporal"){let o=s||e.inner?.kind;return o&&gn[o]?gn[o]:`filter/traverse ${dc(e.entityType)} by a relationship`}return n==="meta"?`understand a vocabulary/definition term ("${e.object}")`:n==="where"?`locate where something is defined ("${e.object}")`:n==="when"?"understand when something last changed (history)":n==="whoLast"?"find who most recently touched something (history)":n==="mentions"?`find where something is mentioned in prose ("${e.object}")`:n==="ask"?s&&gn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?gn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function np(e){let t=new Map;for(let n of e)t.has(Wy(n))||t.set(Wy(n),n);return t}function Dd(e,t=wi){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),$o(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function zd(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function MI(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function FI(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(Fy(),My)),s=n();return s?MI(t,s(t)):t}catch{return t}}function op(e){let t=String(e||"").trim();if(/[a-z]ies$/i.test(t))return`${t.slice(0,-3)}y`;if(/[a-z]ses$/i.test(t)){let n=t.slice(0,-2);return/ss$/i.test(n)||DI.has(n.toLowerCase())?n:t.slice(0,-1)}return/(xes|zes|ches|shes)$/i.test(t)?t.slice(0,-2):/[a-z]s$/i.test(t)&&!/(?:ss|ous)$/i.test(t)?t.slice(0,-1):t}async function Wd(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return dr;if(t==="can")return"mgx:capableOf";try{let n=await FI(t);return n==="have"?dr:rs(`mgx:${n}`)}catch{return rs(`mgx:${t}`)}}function qI(e,t){let n=String(t||"").match(GI);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function bi(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(ks(),dh)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function YI(e){let t=String(e||"");return/^have$/i.test(t)?"has":/[a-z]y$/i.test(t)&&!/[aeiou]y$/i.test(t)?`${t.slice(0,-1)}ies`:/(?:s|x|z|ch|sh|o)$/i.test(t)?`${t}es`:`${t}s`}function m$(e){let t=String(e||"");return/^has$/i.test(t)?"have":/[a-z]ies$/i.test(t)&&!/[aeiou]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(?:s|x|z|ch|sh|o)es$/i.test(t)?t.slice(0,-2):t.replace(/s$/i,"")}function h$(e){if(vo[e])return vo[e];let t=String(e||""),n=Lh(t);if(n){let a=h$(n);if(a==="can")return"cannot";if(a==="can be")return"cannot be";if(a==="is"||a.startsWith("is "))return`is not${a.slice(2)}`;let[l,...c]=a.split(" ");return["does not",m$(l),...c].join(" ")}let s=/^mgx:([a-z]+(?:-[a-z]+)*)-than$/i.exec(t);if(s)return`is ${s[1].replace(/-/g," ")} than`;let o=new RegExp(`^mgx:(${rp})-([a-z]+)$`,"i").exec(t);if(o)return`is ${o[1].toLowerCase()} ${o[2].toLowerCase()}`;let r=/^mgx:same-([a-z]+)-as$/i.exec(t);if(r)return`has the same ${r[1].toLowerCase()} as`;let i=/^mgx:([a-z]+)(?:-([a-z]+))?$/i.exec(t);return i?`${YI(i[1])}${i[2]?` ${i[2]}`:""}`:e}function qd(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function JI(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of XI)if(n!==s&&n.endsWith(` ${s}`)){let r=t.slice(0,t.length-s.length).trim();if(r)return{subject:r,predicate:o}}return{subject:t,predicate:null}}function zn(e){return e.replace(/#node:[0-9a-f]+/g,"")}function oe(e){let t=e.provenance?` (source: ${zn(e.provenance)})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Dt(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Dt(e)}${t}`:e.provenance.includes("corpus:")?`${Dt(e)}${t}`:e.provenance.includes("reference:")?`${Dt(e)}${t}`:`i learned: ${Dt(e)}${t}`}function Vy(e,t,n){let s=oe(e);if(!ms.has(e.predicate)||!n.has(e.subject))return s;let o=ec(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(QI);return i?s.slice(0,i.index)+r+i[0]:s+r}function Hy(e,t,n,{indent:s=""}={}){let o=t.filter(_=>_.predicate===wi).map(_=>[_.subject,_.object]),r=pi(o),i=e.map(_=>`${s}${Vy(_,r,n)}`),a=e.filter(_=>ms.has(_.predicate)&&n.has(_.subject)),l=[...new Set(a.map(_=>_.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(_=>_.predicate==="owl:disjointWith").map(_=>[_.subject,_.object]),{split:u,clusters:d}=tc(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let _ of d)for(let $ of _.objects)p.set($,_);let m=e.filter(_=>!(ms.has(_.predicate)&&n.has(_.subject))),h=[],g=[],b=0,y=_=>{let $=Vy(_,r,n);return b<je?(b+=1,`${s}${$}`):(g.push($),null)};for(let _ of d){let $=a.filter(x=>p.get(x.object)===_).map(y).filter(Boolean);$.length&&h.push(`${s}${f}, the ${_.label}:
|
|
171
171
|
${$.join(`
|
|
172
172
|
`)}`)}if(m.length){let _=m.map(y).filter(Boolean);_.length&&h.push(`${s}also about ${f}:
|
|
173
173
|
${_.join(`
|
|
174
174
|
`)}`)}let w=g.length?`
|
|
175
175
|
${s}\u2026and ${g.length} more \u2014 say 'more' to see them.`:"",v={text:h.join(`
|
|
176
|
-
`)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:v}}async function
|
|
176
|
+
`)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:v}}async function eC(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(zy(),Dy)))}catch{return null}let r;try{r=o(e,t,n)}catch{return null}if(!r||!r.paragraphs.length)return null;let i=[...new Set((r.sources||[]).map(u=>u.provenance).filter(Boolean))],a=i.length?`(sources: ${i.join("; ")})
|
|
177
177
|
`:"",l=`Say 'show the facts' for all ${s.length} stored facts.`;return{text:`${r.paragraphs.join(`
|
|
178
178
|
|
|
179
179
|
`)}
|
|
180
180
|
|
|
181
|
-
${a}${l}`,pending:{items:s,noun:"facts"}}}function br(e){let t=
|
|
181
|
+
${a}${l}`,pending:{items:s,noun:"facts"}}}function br(e){let t=hd().find(n=>n.kind==="article");return t&&yw(String(e||""),t)?"an":"a"}function g$(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${oe(e)}; ${oe(t)}. To settle it, say "forget that ${e.subject} is ${br(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${oe(t)}`,replace:!0}:e?{text:`yes \u2014 ${oe(e)}`,replace:!0}:null}function tC(e,t){let n=s=>`${Dt(s)}${s.provenance?` (source: ${zn(s.provenance)})`:""}`;return{text:`you've told me both ${n(e)} and ${n(t)} \u2014 together those contradict, and I won't derive an answer from an inconsistency. To settle it, say "forget that ${e.subject} is ${br(e.object)} ${e.object}".`,replace:!0}}function pc(e){let t=o=>`${Dt(o)}${o.provenance?` (source: ${zn(o.provenance)})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function Vd(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(qe(),Os)),n=await t(e),s=[];for(let o of n.individuals||[]){if(o?.class!=="Fact")continue;let r=i=>(o.attributes||[]).find(a=>a.key===i)?.value||"";s.push({subject:r("subject"),predicate:r("predicate"),object:r("object"),provenance:r("provenance")})}return s}catch{return[]}}async function it(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(qe(),Os)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function nC(e){if(!fc)try{fc=Ns().nounPlurals}catch{fc=new Map}return fc.get(e)??null}function hc(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return di(Ns(),t)?.lemma||t}catch{return t}}function sC(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return hc(e);let n=hc(op(t[1]));return`${br(n)} ${n}`}function X(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(oC,"").trim();r&&r!==n&&o.add(r);for(let i of o){s.add(i),i.endsWith("es")&&s.add(i.slice(0,-2)),i.endsWith("s")&&s.add(i.slice(0,-1));let a=nC(i);a&&s.add(e(a))}return s}function Ky(e,t,n){for(let s of e)for(let o of t){let r=n(s,o);if(r)return r}return null}function y$(e,t=null){let n=gc(e),s=n.match(rC);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(aC);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function Jd(e){let t=String(e||"").replace(uC,"");if(t!==e){let s=t.match(Fs);if(s)return s}let n=String(e||"").match(dC);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Fs):null}function Zd(e){return String(e||"").replace(/^(?:can't|cannot|can not|cant)\s+/i,"can ").replace(/^(?:doesn't|does not)\s+/i,"does ").replace(/^(?:don't|do not)\s+/i,"do ").replace(/^(?:didn't|did not)\s+/i,"did ").replace(/\s+(?:not|never)\s+/i," ").replace(/\s+/g," ").trim()}function Xy(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function jC(e,t){let n=(e||[]).map(s=>t.find(o=>o.predicate===s.predicate&&o.subject===s.subject&&o.object===s.object));return!n.length||!n.every(Boolean)?null:n.map(s=>`${Dt(s)}${s.provenance?` (source: ${zn(s.provenance)})`:""}`).join("; ")}function Qy(e,t,n,{maxHops:s=3}={}){let o=X(J,e),r=X(J,t),i=ua(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?jC(l,n):null;return c?` \u2014 via: ${c}`:""};if(i.verdict==="both")return{text:`I have both, at the same level of detail \u2014 my sources disagree, so I won't pick:
|
|
182
182
|
${[...i.negative,...i.positive].map(oe).join(`
|
|
183
|
-
`)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let l=i.verdict==="no"?i.negative[0]:i.positive[0],c=`${i.verdict} \u2014 ${oe(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${oe(i.overrides.fact)}`),{text:c,replace:!0}}return null}function
|
|
183
|
+
`)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let l=i.verdict==="no"?i.negative[0]:i.positive[0],c=`${i.verdict} \u2014 ${oe(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${oe(i.overrides.fact)}`),{text:c,replace:!0}}return null}function Zy(e,t,n,{maxHops:s=3}={}){let o=X(J,e),r=X(J,t),i=Jl(o,r,n,{maxHops:s});if(!i)return null;let a=`${e} is a kind of ${i.klass}`,l=`I don't know if ${e} can ${t}.`;if(i.positive.length||i.negative.length){let u=[`${i.positive.length} can ${t}`,`${i.negative.length} cannot`,`${i.unknown.length} I have nothing on`].join(", "),d=[...i.positive,...i.negative].slice(0,Xl).map(f=>oe(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
|
|
184
184
|
${d.join(`
|
|
185
|
-
`)}`,replace:!0,miss:!0}}let c=
|
|
185
|
+
`)}`,replace:!0,miss:!0}}let c=Ql(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,Xl),d=c.slice(u.length);return{text:`${l} ${a}, and nothing I know about ${i.klass} says whether one can ${t}. I do know ${c.length} thing${c.length===1?"":"s"} that can ${t}${d.length?` (first ${u.length} shown)`:""}:
|
|
186
186
|
${u.map(oe).join(`
|
|
187
|
-
`)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(oe),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function
|
|
187
|
+
`)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(oe),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function TC(e){let t=String(e||"").toLowerCase().trim().replace(/\s+/g," ");if(t==="best")return"better";if(t==="worst")return"worse";let n=t.match(/^(most|least)\s+([a-z][\w-]*)$/);return n?`${n[1]==="most"?"more":"less"} ${n[2]}`:/[a-z]est$/.test(t)&&t.length>4?`${t.slice(0,-3)}er`:null}function hn(e){let t=new Set,n=[];for(let s of e){let o=`${s.subject}|${s.predicate}|${s.object}`;t.has(o)||(t.add(o),n.push(s))}return n}async function v$(e,t,n,s,o={},r=null,i=null){return x$(await NC(e,t,n,s,o,r,i),n,t)}function x$(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=Yd(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Uy),!o){let r=s.match(Xd),i=r?null:gc(s).match(w$)||y$(s),a=r?r[2]:i?i[1]:null;a&&!Qd.has(a.toLowerCase())&&(o=Uy)}if(!o){let r=s.match(S$);r&&(o=Yd({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function NC(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(qe(),Os)))}catch{return null}let c=String(t).trim(),u=c.match(bC);if(u){let D=X(a,u[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgx:usedFor"&&D.has(G.object));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
|
|
188
188
|
\u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
|
|
189
|
-
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}for(let{predicate:D,re:U}of
|
|
189
|
+
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}for(let{predicate:D,re:U}of IC){let G=c.match(U);if(!G)continue;let I=X(a,G[1]),L=(await it(e,r)).filter(ie=>ie.predicate===D&&I.has(ie.object));if(!L.length)continue;let P=Ze(hn(L),o).map(oe),N=P.slice(0,je),W=P.slice(je),V=W.length?`
|
|
190
190
|
\u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
|
|
191
|
-
`)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}let d=c.match(
|
|
191
|
+
`)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}let d=c.match(_C),f=d?null:c.match(RC),p=d?d[1]:f?.[2],m=d?d[2]:f?.[1],h=p&&m?TC(m):null;if(h){let D=`mgx:${h.replace(/\s+/g,"-")}-than`,U=await it(e,r),G=X(a,p),I=[...G].sort((P,N)=>P.length-N.length)[0],L=P=>G.has(P)||P.startsWith(`${I}-`)||P.startsWith(`${I} `)||U.some(N=>ms.has(N.predicate)&&N.subject===P&&G.has(N.object)),C=hn(U.filter(P=>P.predicate===D&&$o(P))).filter(P=>P.subject!==P.object&&L(P.subject)&&L(P.object));if(C.length){let P=new Set,N=new Map;for(let K of C)P.add(K.subject),P.add(K.object),N.set(K.object,(N.get(K.object)||0)+1),N.has(K.subject)||N.set(K.subject,N.get(K.subject)||0);let W=new Map(N),V=[],ie=null;for(;W.size;){let K=[...W.keys()].filter(q=>W.get(q)===0);if(K.length!==1){ie=K.length===0?{text:`I can't order the ${I}s \u2014 the "${h} than" facts I have loop back on themselves, so no ${m} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${m} ${I} from what I know \u2014 nothing compares ${K[0]} and ${K[1]}. Teach me, e.g. "${K[0]} is ${h} than ${K[1]}".`,replace:!0,miss:!0};break}let ee=K[0];V.push(ee),W.delete(ee);for(let q of C)q.subject===ee&&W.has(q.object)&&W.set(q.object,W.get(q.object)-1)}if(ie)return ie;let ce=V.slice(0,-1).map((K,ee)=>C.find(q=>q.subject===K&&q.object===V[ee+1]));if(ce.every(Boolean)){let K=ce.map(ee=>`${Dt(ee)}${ee.provenance?` (source: ${zn(ee.provenance)})`:""}`).join("; ");return{text:`${V[0]} \u2014 ${K}; so ${V[0]} is the ${m} ${I}`,replace:!0}}}}let g=s?c.match(wC)||c.match(yC):null;if(g){let D=X(a,g[1]),U=(await it(e,r)).filter(G=>ko(G.predicate)!==null&&D.has(G.subject));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
|
|
192
192
|
\u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
|
|
193
|
-
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let b=c.match(
|
|
193
|
+
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let b=c.match($C);if(b){let D=b[1].toLowerCase(),U=X(a,b[2].replace(/^(?:an?|the)\s+/i,"").trim()),G=(await it(e,r)).filter(I=>ko(I.predicate)===D&&U.has(I.object));if(G.length){let L=Ze(hn(G),o).map(oe),C=L.slice(0,je),P=L.slice(je),N=P.length?`
|
|
194
194
|
\u2026and ${P.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
|
|
195
|
-
`)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}}}let y=c.match(
|
|
195
|
+
`)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}}}let y=c.match(vC);if(y){let D=y[3].toLowerCase(),U=X(a,y[2]),G=new Set([...X(a,y[1])].map(L=>l(`mgx:${D}-${L.replace(/\s+/g,"-")}`))),I=(await it(e,r)).filter(L=>G.has(l(L.predicate))&&U.has(a(L.subject)));if(I.length){let C=Ze(hn(I),o).map(oe),P=C.slice(0,je),N=C.slice(je),W=N.length?`
|
|
196
196
|
\u2026and ${N.length} more \u2014 say 'more' to see them.`:"";return{text:P.join(`
|
|
197
|
-
`)+W,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,v=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!v&&!
|
|
197
|
+
`)+W,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,v=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!v&&!e$.test(c)){let D=c.match(S$)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);D&&(w=Ws(D[1]))}if(!w&&n?.ambiguous&&Array.isArray(n.candidateParses)){let D=n.candidateParses.find(U=>U?.shape==="meta"&&U.object);D&&(w=Ws(String(D.object)))}if(w){let D=JI(w),{predicate:U}=D,G=D.subject.replace(/^(?:the|an?)\s+/i,"").trim()||D.subject,I=!1;if(U&&fs.test(G)){if(!i){let q=String(vo[U]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${G.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${q?` ${q}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}G=i,I=!0}let L=X(a,G),C=(await it(e,r)).filter(q=>L.has(q.subject)&&!qy.has(q.predicate)),P=U?C.filter(q=>l(q.predicate)===U):C;if(!U&&P.length&&!P.some(Hd)&&(P=[]),!P.length){if(U&&(C.length||I))return{text:`I don't have any "${vo[U]}" facts about ${G}.`,replace:s,...C.length?{}:{miss:!0}};if(!U){let q=Ze((await it(e,r)).filter(ne=>L.has(ne.object)),o);if(q.length&&!q.some(Hd)&&(q=[]),q.length){let ne=q.map(oe),te=ne.slice(0,je),xe=ne.slice(je),Ae=xe.length?`
|
|
198
198
|
\u2026and ${xe.length} more \u2014 say 'more' to see them.`:"";return{text:te.join(`
|
|
199
|
-
`)+Ae,replace:s,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}return null}P=Ze(P,o);let N=await it(e,r),{lines:W,grouped:V}=
|
|
199
|
+
`)+Ae,replace:s,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}return null}P=Ze(P,o);let N=await it(e,r),{lines:W,grouped:V}=Hy(P,N,L),ie=!U&&W.length>ZI?await eC(G,P,N,W):null;if(ie)return{...ie,replace:s};if(V)return{...V,replace:s};let ce=W.slice(0,je),K=W.slice(je),ee=K.length?`
|
|
200
200
|
\u2026and ${K.length} more \u2014 say 'more' to see them.`:"";return{text:ce.join(`
|
|
201
|
-
`)+ee,replace:s,...K.length?{pending:{items:K,noun:"facts"}}:{}}}if(!s)return null;let _=c.match(
|
|
201
|
+
`)+ee,replace:s,...K.length?{pending:{items:K,noun:"facts"}}:{}}}if(!s)return null;let _=c.match(NI);if(_){let U=`mgx:${_[2].toLowerCase().replace(/\s+/g,"-")}-than`,G=await Vd(e),I=ce=>{let K=ce.replace(/^(?:an?|the)\s+/i,"").trim();return i&&fs.test(K)?i:K},L=I(_[1]),C=I(_[3]),P=X(a,L),N=X(a,C),W=G.find(ce=>ce.predicate===U&&P.has(ce.subject)&&N.has(ce.object));if(W){let ce=G.find(ee=>ee.predicate===U&&P.has(ee.object)&&N.has(ee.subject)),K=ce?` \u2014 though you also told me the opposite: ${oe(ce)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${oe(W)}${K}`,replace:!0}}let V=G.filter(ce=>ce.predicate===U&&(P.has(ce.subject)||P.has(ce.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${V.length?` I do know: ${V.slice(0,3).map(oe).join("; ")}.`:""} If it's true, teach me: "${L} is ${_[2].toLowerCase()} than ${C}".`,replace:!0,miss:!0}}for(let{predicate:D,phrase:U,re:G}of OC){let I=c.match(G);if(!I)continue;let L=await Vd(e),C=X(a,I[1]),P=X(a,I[2]),N=L.find(V=>V.predicate===D&&C.has(V.subject)&&P.has(V.object));if(N)return{text:`yes \u2014 ${oe(N)}`,replace:!0};let W=L.filter(V=>V.predicate===D&&C.has(V.subject));if(W.length){let V=W.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}. I do know: ${V}.`,replace:!0,miss:!0}}if(!n?.parsed&&L.some(V=>C.has(V.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${I[1]} ${U} ${I[2]}.`,replace:!0,miss:!0};break}let $=c.match(Fs)||Jd(c);if($){let D=X(a,$[1]),U=X(a,$[2]),G=await it(e,r),I=N=>D.has(N.subject)&&U.has(N.object),{DISJOINT_PREDICATE:L}=await Promise.resolve().then(()=>(Ht(),un)),C=N=>D.has(N.subject)||D.has(N.object)||U.has(N.subject)||U.has(N.object);return G.some(N=>N.predicate===L&&$o(N)&&C(N))?null:g$(G.find(N=>ms.has(N.predicate)&&I(N)),G.find(N=>N.predicate===ca&&I(N)))}let x=Zd(c),S=x.match(fC);if(S){let D=await it(e,r),U=S[1],G=Qy(S[2],S[3],D);if(G&&x!==Jy(c)&&(G=Xy(G)),G&&U)return{text:`I can't speak for ${U.trim()} ${S[2]} \u2014 what I remember is generic, not universal. ${G.text}.`,replace:!0};if(G)return G;let I=X(a,S[2]),L=D.filter(C=>C.predicate==="mgx:capableOf"&&I.has(C.subject));if(L.length){let C=L.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${S[2]} can ${S[3]}. I do know: ${C}. If it's true, teach me: "a ${L[0].subject} can ${S[3]}".`,replace:!0,miss:!0}}return Zy(S[2],S[3],D)}let E=c.match(mC);if(E){let D=X(a,E[1]),U=X(a,E[2]),G=new Set(["mgx:hasA","tmct:has"]),I=await Vd(e),L=W=>I.find(V=>G.has(V.predicate)&&W.has(V.subject)&&U.has(V.object)),C=L(D);if(C)return{text:`yes \u2014 ${oe(C)}`,replace:!0};let P=[{terms:D,chain:[]}],N=new Set;for(let W=0;W<4;W+=1){let V=[];for(let{terms:ie,chain:ce}of P){let K=I.filter(ee=>ms.has(ee.predicate)&&ie.has(ee.subject)&&!N.has(ee.object));for(let ee of K){if(N.has(ee.object))continue;N.add(ee.object);let q=[...ce,ee],ne=L(X(a,ee.object));if(ne)return{text:`yes \u2014 ${[...q.map(oe),oe(ne)].join("; ")}`,replace:!0};V.push({terms:X(a,ee.object),chain:q})}}if(!V.length)break;P=V}return null}let R=Zd(c),j=R.match(xC);if(j){let D=await it(e,r),U=!!j[1],G=X(a,j[2]),I=X(a,j[3]),L=Qy(j[2],j[3],D);if(L&&R!==Jy(c)&&(L=Xy(L)),L&&U)return{text:`I can't speak for ${j[1].trim()} ${j[2]} \u2014 what I remember is generic, not universal. ${L.text}.`,replace:!0};if(L)return L;if(s){let C=D.filter(N=>N.predicate==="mgx:capableOf"&&G.has(N.subject));if(C.length){let N=C.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${j[2]} can ${j[3]}. I do know: ${N}. If it's true, teach me: "a ${C[0].subject} can ${j[3]}".`,replace:!0,miss:!0}}let P=Zy(j[2],j[3],D);if(P)return P;if(!/\s/.test(j[2].trim())&&!D.some(N=>G.has(N.subject)||G.has(N.object))){let N=op(hc(j[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${j[2]}" yet. Teach me "a ${N} can ${j[3]}" (or "a ${N} cannot ${j[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let A=c.match(hC);if(A){let D=X(a,A[1]),U=(await it(e,r)).filter(N=>(N.predicate==="mgx:capableOf"||N.predicate===Jo)&&D.has(N.subject));if(!U.length)return null;let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
|
|
202
202
|
\u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
|
|
203
|
-
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let F=c.match(
|
|
203
|
+
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let F=c.match(kC);if(F){let D=X(a,F[1]),U=X(a,F[2]),G=await it(e,r),I=hn(G.filter(L=>L.predicate==="mgx:capableOf"&&U.has(L.object))).filter(L=>ua(new Set([L.subject]),U,G).verdict==="yes");if(I.length){let{findIsaChain:L,SUBCLASS_PREDICATE:C,TYPE_PREDICATE:P}=await Promise.resolve().then(()=>(Ht(),un)),N=G.filter(re=>re.predicate===C),W=G.filter(re=>re.predicate===P),V=N.map(re=>[re.subject,re.object]),ie=W.map(re=>[re.subject,re.object]),ce=re=>(re.predicate===C?N:W).find(fe=>fe.subject===re.subject&&fe.object===re.object),K=new Map,ee=I.filter(re=>D.has(re.subject)?!0:(K.has(re.subject)||K.set(re.subject,L(re.subject,D,ie,V,{maxHops:3})),!!K.get(re.subject))),ne=Ze(ee.length?ee:I,o).map(re=>{let fe=ee.length?K.get(re.subject):null;if(!fe||fe.length<2)return oe(re);let be=fe.map(ce);if(!be.every(Boolean))return oe(re);let Ie=be.map(ue=>`${Dt(ue)}${ue.provenance?` (source: ${zn(ue.provenance)})`:""}`).join("; ");return`${oe(re)} \u2014 via: ${Ie}`}),te=ne.slice(0,je),xe=ne.slice(je),Ae=xe.length?`
|
|
204
204
|
\u2026and ${xe.length} more \u2014 say 'more' to see them.`:"";return{text:(ee.length?"":`nothing I remember ties these to "${F[1]}", but:
|
|
205
205
|
`)+te.join(`
|
|
206
|
-
`)+Ae,replace:!0,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}let T=c.match(
|
|
206
|
+
`)+Ae,replace:!0,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}let T=c.match(SC);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=X(a,T[1]),U=(await it(e,r)).filter(G=>G.predicate==="mgxneg:capableOf"&&D.has(G.object));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
|
|
207
207
|
\u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
|
|
208
|
-
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${T[1].trim()}.`,replace:!0,miss:!0}}let M=c.match(
|
|
208
|
+
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${T[1].trim()}.`,replace:!0,miss:!0}}let M=c.match(EC);if(M&&M[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=X(a,M[1]),U=Ql(D,await it(e,r));if(U.length){let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
|
|
209
209
|
\u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
|
|
210
|
-
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let z=c.match(
|
|
210
|
+
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}}let z=c.match(gC);if(z&&!LC.has(z[1].trim().split(/\s+/)[0]?.toLowerCase())){let D=X(a,z[1]),U=(await it(e,r)).filter(N=>N.predicate==="mgx:hasA"&&D.has(N.object));if(!U.length)return null;let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
|
|
211
211
|
\u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
|
|
212
|
-
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let Y=c.match(
|
|
212
|
+
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let Y=c.match(e$),ae=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:Y?.[1];if(ae){let D=X(a,ae),U=(await it(e,r)).filter(N=>ms.has(N.predicate)&&D.has(N.object));if(!U.length)return null;let I=Ze(hn(U),o).map(oe),L=I.slice(0,je),C=I.slice(je),P=C.length?`
|
|
213
213
|
\u2026and ${C.length} more \u2014 say 'more' to see them.`:"";return{text:L.join(`
|
|
214
|
-
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let Z=c.match(
|
|
214
|
+
`)+P,replace:!0,...C.length?{pending:{items:C,noun:"facts"}}:{}}}let Z=c.match(pC);if(Z){let D=X(a,Z[1]),U=await it(e,r),G=H=>!String(H.provenance||"").includes("corpus:")&&!String(H.provenance||"").includes("web:"),I=U.filter(H=>ms.has(H.predicate)&&G(H)),L=new Set,C=D;for(let H=0;H<8&&C.size;H+=1){let se=new Set;for(let De of I)C.has(De.object)&&!L.has(De.subject)&&se.add(De.subject);if(!se.size)break;for(let De of se)L.add(De);let et=new Set;for(let De of se)for(let Ve of X(a,De))et.add(Ve);C=et}let P=U.filter(H=>D.has(H.subject)||D.has(H.object)||L.has(H.subject));if(!P.length){let H=a(Z[1]).split(/\s+/).filter(se=>se.length>=4&&!b$.has(se));if(H.length){let se=De=>new Set(String(De||"").split(/\s+/)),et=De=>{let Ve=se(De);return H.some(on=>Ve.has(on))};P=U.filter(De=>et(De.subject)||et(De.object))}}P=P.filter(H=>!qy.has(H.predicate));let N=P.length>0&&!P.some(Hd);if(!P.length)return null;let{findConsistencyViolations:W,TYPE_PREDICATE:V,SUBCLASS_PREDICATE:ie,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Ht(),un)),K=H=>!H.provenance?.includes("corpus:")&&!H.provenance?.includes("web:"),ee=U.filter(H=>H.predicate===V&&K(H)).map(H=>[H.subject,H.object]),q=U.filter(H=>H.predicate===ie&&K(H)).map(H=>[H.subject,H.object]),ne=U.filter(H=>H.predicate===ce&&K(H)).map(H=>[H.subject,H.object]);if(ne.length){let se=W(ee,q,ne,{focus:D,budget:5}).find(et=>D.has(et.subject));if(se)return{text:`I can't answer that \u2014 what I've been told about ${se.subject} is inconsistent: it's taught to be both ${se.classA} and ${se.classB}, but ${se.viaA} and ${se.viaB} are disjoint (${se.viaA} owl:disjointWith ${se.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let te=P.find(H=>D.has(H.subject)||D.has(H.object)),xe=te?D.has(te.subject)?te.subject:te.object:Z[1].trim(),Ae=P.some(H=>L.has(H.subject)&&!D.has(H.subject)&&!D.has(H.object));P=Ze(P,o);let pe=`${P.length} remembered fact${P.length===1?"":"s"} about ${xe}${Ae?" (including its known subtypes)":""}:`,{lines:re,grouped:fe}=Hy(P,U,D,{indent:" "});if(fe)return{...fe,text:`${pe}
|
|
215
215
|
${fe.text}`,...N?{weakOnly:!0}:{}};let be=re.slice(0,je),Ie=re.slice(je),ue=Ie.length?`
|
|
216
216
|
\u2026and ${Ie.length} more \u2014 say 'more' to see them.`:"";return{text:`${pe}
|
|
217
217
|
${be.join(`
|
|
218
|
-
`)}${ue}`,replace:!0,...Ie.length?{pending:{items:Ie.map(H=>H.trim()),noun:"facts"}}:{},...N?{weakOnly:!0}:{}}}return null}async function
|
|
218
|
+
`)}${ue}`,replace:!0,...Ie.length?{pending:{items:Ie.map(H=>H.trim()),noun:"facts"}}:{},...N?{weakOnly:!0}:{}}}return null}async function VC(e,t){let n=await bi(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&By[s]?By[s][0]:null}function mc(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<KC;r+=1){let i=null;for(let a of e.relations||[])if(HC.test(`${a?.prop||""} ${a?.predicate||""}`)&&(i=(a.edges||[]).find(l=>l?.subject===o)||null,i))break;if(!i||s.has(i.object))break;s.add(i.object),n.push({id:i.object,label:i.objectLabel||i.object}),o=i.object}return n}async function E$(e,t,n,s,o=null,r=null,i={},a=null){return x$(await YC(e,t,n,s,o,r,i,a),n,t)}async function YC(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(qe(),Os)))}catch{return null}let c=String(t).trim();if(o){let I=c.match(Fs);if(I){let L=await bi(o,I[1]);if(L){let C=X(l,an(I[2])),P=mc(o,L.id).find(W=>[...X(l,W.label)].some(V=>C.has(V)));if(P)return{text:`yes \u2014 the code graph says ${L.label} inherits ${P.label}.`,replace:!0};let N=await bi(o,an(I[2]));if(N&&mc(o,N.id).some(W=>W.id===L.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${N.label} inherits ${L.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=c.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await it(e,a);if(!d.length){if(!Fs.test(u)&&!Xd.test(u)){let L=u.match(n$);if(L){let C=L[1].trim(),P=fs.test(C)?r||null:C;if(P&&!/^there\b/i.test(P)&&!n?.parsed&&!o$.test(C)&&!s$.test(C)&&!Gy.test(L[2].trim()))return r$(P,L[2].trim().toLowerCase())}}let I=u.match(Fs)||Jd(c);if(!(I&&!/^there\b/i.test(I[1].trim())||Yy.test(c)))return null}let f=d.filter(I=>ms.has(I.predicate)),p=(I,L)=>L.trust-I.trust,m=I=>{let L=I.map(oe),C=L.slice(0,je),P=L.slice(je),N=P.length?`
|
|
219
219
|
\u2026and ${P.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
|
|
220
|
-
`)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}};if(
|
|
221
|
-
`),replace:!0}:W(I).length>0||!!ie(K,I)?{text:/^what\b/i.test(
|
|
220
|
+
`)+N,replace:!0,...P.length?{pending:{items:P,noun:"facts"}}:{}}};if(qC.test(c)){let I=Ze(f.length?f:d,i);return I.length?m(I):null}let h=u.match(Xd);if(h){let I=h[1].trim(),L=fs.test(I)?r||null:I,C=h[2].trim().toLowerCase(),P=h[3].trim();if(L&&!Qd.has(C)){let N=Dd(d),{findIsaChain:W}=await Promise.resolve().then(()=>(Ht(),un)),V=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),re=[];for(let fe of d){let be=qd(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ie=zd(W,be,new Set([pe]),N,{maxHops:2});if(!Ie)continue;let ue=Ie.map(H=>d.find(se=>se.predicate===wi&&se.subject===H.subject&&se.object===H.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:ie,findRuleByName:ce,resolveRelationChase:K}=await Promise.resolve().then(()=>(qe(),Os)),{findActionPath:ee}=await Promise.resolve().then(()=>(Js(),Ii)),q=await ie(e),te=await K(q,C,L,P,{relationFactsFor:V,renderFactLine:oe,factPhrase:Dt,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Fd,findActionPath:ee});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:V(C).length>0||!!ce(q,C)?{text:`I know the '${C}' relation, but I can't confirm ${L} is the ${C} of ${P} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}let g=gc(u).match(w$)||y$(u,I=>{let L=X(l,I);return d.some(C=>L.has(C.subject)||L.has(C.object))});if(g){let I=g[1].trim().toLowerCase(),L=g[2].trim(),C=fs.test(L)?r||null:L;if(C&&!Qd.has(I)){let P=Dd(d),{findIsaChain:N}=await Promise.resolve().then(()=>(Ht(),un)),W=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),re=[];for(let fe of d){let be=qd(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ie=zd(N,be,new Set([pe]),P,{maxHops:2});if(!Ie)continue;let ue=Ie.map(H=>d.find(se=>se.predicate===wi&&se.subject===H.subject&&se.object===H.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:V,findRuleByName:ie,resolveRelationChaseReverse:ce}=await Promise.resolve().then(()=>(qe(),Os)),K=await V(e),{findReachableSet:ee}=await Promise.resolve().then(()=>(Js(),Ii)),ne=await ce(K,I,C,{relationFactsFor:W,renderFactLine:oe,factPhrase:Dt,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Fd,findReachableSet:ee});return ne.length?{text:ne.map(pe=>`${pe.subject} \u2014 ${pe.citation.join("; ")}`).join(`
|
|
221
|
+
`),replace:!0}:W(I).length>0||!!ie(K,I)?{text:/^what\b/i.test(gc(u))?`I don't know what the ${I} of ${C} is from what you've told me.`:`I don't know anyone who is the ${I} of ${C} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${I}' yet.`,replace:!0}}}{let I=u.match(XC);if(I){let L=X(l,I[1]),C=Ze(d.filter(P=>L.has(P.subject)||L.has(P.object)),i);if(C.length){let P=C.map(oe),N=P.slice(0,je),W=P.slice(je),V=W.length?`
|
|
222
222
|
\u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
|
|
223
|
-
`)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}}}let b=u.match(
|
|
224
|
-
`),replace:!0}}}return null}}let y=c.match(Fy),w=c.match(Fs)||Vd(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Fs);if(w){let I=X(l,rn(w[2])),L=r&&us.test(w[1].trim())?r:w[1],C=new Set(X(l,L));if([...C].some(B=>I.has(B))){let B=rn(w[2]).trim();return{text:`yes \u2014 ${br(B)} ${B} is ${br(B)} ${B}, trivially: every kind is a kind of itself.`,replace:!0}}let P=await jC(o,L);if(P)for(let B of X(l,P))C.add(B);let{findIsaChain:N,deriveDisjointViolations:W,SUBCLASS_PREDICATE:V,TYPE_PREDICATE:ie,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(qt(),ln)),K=$o,ee=f.filter(B=>B.predicate===V&&K(B)),q=f.filter(B=>B.predicate===ie&&K(B)),ne=ee.map(B=>[B.subject,B.object]),te=q.map(B=>[B.subject,B.object]),xe=f.filter(B=>B.predicate===V),Ae=f.filter(B=>B.predicate===ie),pe=Ae.map(B=>[B.subject,B.object]),re=xe.map(B=>[B.subject,B.object]),fe=d.filter(B=>B.predicate===ce&&K(B)),be=fe.map(B=>[B.subject,B.object]),Ie=fe.length?W(pe.concat(re),re,be,{budget:20,focus:new Set([...C,...I])}):[],ue=B=>{let we=Ie.find(Ne=>Ne.subject===B&&I.has(Ne.object));if(!we)return null;let ye=f.filter(Ne=>I.has(Ne.object)&&(Ne.subject===we.viaClass||Ne.subject===we.subject)).sort(p)[0],_e=fe.find(Ne=>Ne.subject===we.viaClass&&Ne.object===we.object||Ne.subject===we.object&&Ne.object===we.viaClass);return!ye||!_e?null:NI(ye,_e)},H=f.filter(B=>C.has(B.subject)&&I.has(B.object)).sort(p)[0],se=d.filter(B=>B.predicate===aa&&C.has(B.subject)&&I.has(B.object)).sort(p)[0],et=fe.find(B=>C.has(B.subject)&&I.has(B.object)||C.has(B.object)&&I.has(B.subject));if(H&&!se){let B=ue(H.subject);if(B)return B}let De=r$(H,se||et);if(De)return De;if(fe.length){let B=_e=>{let Ne=new Set(_e),Ct=new Set(_e);for(let Ce=0;Ce<8&&Ct.size;Ce+=1){let $e=new Set;for(let[at,zs]of re)Ct.has(at)&&!Ne.has(zs)&&$e.add(zs);if(!$e.size)break;for(let at of $e)Ne.add(at);Ct=$e}return Ne},we=B(I),ye=Ie.find(_e=>C.has(_e.subject)&&we.has(_e.object)&&!B([_e.viaClass]).has(_e.object)&&!B([_e.object]).has(_e.viaClass));if(ye){let _e=f.filter($e=>C.has($e.subject)&&$e.object===ye.viaClass).sort(p)[0],Ne=fe.find($e=>$e.subject===ye.viaClass&&$e.object===ye.object||$e.subject===ye.object&&$e.object===ye.viaClass),Ct=!I.has(ye.object),Ce=Ct?f.filter($e=>I.has($e.subject)&&$e.object===ye.object).sort(p)[0]:null;if(_e&&Ne&&(!Ct||Ce)){let $e=rn(w[2]).trim();return{text:`no \u2014 ${[_e,...Ce?[Ce]:[]].map(oe).join("; ")}; and ${Mt(Ne)}${Ne.provenance?` (source: ${Dn(Ne.provenance)})`:""} \u2014 so ${L} can never be ${br($e)} ${$e}.`,replace:!0}}}}let Ve=await gi(o,L);if(Ve){let B=new Map;for(let ye of pc(o,Ve.id))for(let _e of X(l,ye.label))!C.has(_e)&&!B.has(_e)&&B.set(_e,ye.label);let we=f.filter(ye=>B.has(ye.subject)&&I.has(ye.object)).sort(p)[0];if(we)return{text:`yes \u2014 the code graph says ${Ve.label} inherits ${B.get(we.subject)}, and ${oe(we)}`,replace:!0}}let sn=B=>(B.predicate===V?ee:q).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,te,ne,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(sn);if(_e.every(Boolean))return{text:`yes \u2014 ${uc(_e)}`,replace:!0}}let on=B=>(B.predicate===V?xe:Ae).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,pe,re,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(on);if(_e.every(Boolean)&&_e.some(K))return{text:`yes \u2014 ${uc(_e)}`,replace:!0}}let Xt=L.match(/^(.*\S)\s+not$/i),Ft=Xt&&[Xt[0],r&&us.test(Xt[1].trim())?r:Xt[1]];if(Ft){let B=X(l,Ft[1]),we=I,ye=f.filter(Ce=>B.has(Ce.subject)&&we.has(Ce.object)).sort(p)[0];if(ye)return{text:`no \u2014 ${oe(ye)}`,replace:!0};let _e=fe.find(Ce=>B.has(Ce.subject)&&we.has(Ce.object)||B.has(Ce.object)&&we.has(Ce.subject));if(_e)return{text:`yes \u2014 ${oe(_e)}`,replace:!0};let Ne=Ft[1].trim(),Ct=rn(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Ct}. If no ${Ne} is a ${Ct}, teach me: "no ${Ne} is a ${Ct}".`,replace:!0,miss:!0}}if(fe.length){let B=W(te.concat(ne),ne,be,{budget:10});for(let we of C){let ye=B.find(Ce=>Ce.subject===we&&I.has(Ce.object));if(!ye)continue;let _e=q.concat(ee).find(Ce=>Ce.subject===ye.subject&&Ce.object===ye.viaType),Ne=fe.find(Ce=>Ce.subject===ye.viaClass&&Ce.object===ye.object||Ce.subject===ye.object&&Ce.object===ye.viaClass),Ct=[_e,Ne].filter(Boolean).map(oe);return{text:`no \u2014 ${Ct.length?Ct.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:wi,ON_PROPERTY_PREDICATE:k,SOME_VALUES_FROM_PREDICATE:le,deriveSomeValuesFromSubsumption:Te,ENTAILED_SCM_SVF_PROVENANCE:zn,SCM_SVF_RULE_CONFIDENCE:So,entailedTrustFrom:sp}=await Promise.resolve().then(()=>(qt(),ln)),op=d.filter(B=>B.predicate===k&&K(B)),rp=d.filter(B=>B.predicate===le&&K(B));if(op.length&&rp.length){let B=new Map(rp.map($e=>[$e.subject,$e.object])),we=op.map($e=>({restriction:$e.subject,property:$e.object,target:B.get($e.subject)})).filter($e=>$e.target),ye=new Set([V,ie,ce,k,le,"owl:intersectionOf"]),_e=d.filter($e=>K($e)&&!ye.has($e.predicate)),Ne=_e.map($e=>[$e.subject,$e.predicate,$e.object]),Ct=wi(Ne,te,ne,we,{budget:10});for(let $e of C){let at=Ct.find(gn=>gn.subject===$e&&I.has(gn.object));if(!at)continue;let zs=_e.find(gn=>gn.subject===at.subject&&gn.predicate===at.viaProperty&&gn.object===at.viaValue),Us=q.find(gn=>gn.subject===at.viaValue&&gn.object===at.viaType),yr=[zs,Us].filter(Boolean).map(oe);return{text:`yes \u2014 ${yr.length?yr.join("; "):`${at.subject} ${at.viaProperty} ${at.viaValue}, and ${at.viaValue} is a ${at.viaType}.`}`,replace:!0}}let Ce=we.length>1?Te(we,ne,{budget:10}):[];if(Ce.length){let $e=ne.concat(Ce.map(Se=>[Se.subject,Se.object])),at=new Map(we.map(Se=>[Se.restriction,Se])),zs=new Map;for(let Se of d)zs.set(`${Se.subject}\0${Se.predicate}\0${Se.object}`,Se.trust);let Us=(Se,Sn,Dt)=>zs.get(`${Se}\0${Sn}\0${Dt}`),yr=new Map;for(let Se of Ce){let Sn=at.get(Se.subject),Dt=at.get(Se.object),Jt=[Sn&&Us(Se.subject,k,Sn.property),Us(Se.subject,le,Se.viaY1),Dt&&Us(Se.object,k,Dt.property),Us(Se.object,le,Se.viaY2),Us(Se.viaY1,V,Se.viaY2)].filter(O$=>typeof O$=="number"),$i=sp(Jt,So);$i!==null&&yr.set(`${Se.subject}\0${Se.object}`,$i)}let gn=Se=>{if(Se.predicate!==V)return q.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);let Sn=ee.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);if(Sn)return Sn;let Dt=Ce.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);return Dt?{subject:Dt.subject,predicate:V,object:Dt.object,provenance:zn,trust:yr.get(`${Dt.subject}\0${Dt.object}`)}:void 0};for(let Se of C){let Sn=N(Se,I,te,$e,{maxHops:3});if(!Sn)continue;let Dt=Sn.map(gn);if(Dt.every(Boolean)){let Jt=sp(Dt.map($i=>$i.trust),1);return{text:`yes \u2014 ${uc(Dt)}`,replace:!0,...Jt!==null?{trust:Jt}:{}}}}}}let I$=X(l,L),ip=f.filter(B=>I$.has(B.subject)).sort(p),Ds=L.trim(),yi=rn(w[2]).trim(),C$=[...C].some(B=>N(B,I,te,ne,{maxHops:WI}));if(ip.length){let B=ip.slice(0,3).map(oe).join("; "),we=C$?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${Ds}", then ask me again.`:`If it's true, teach me: "${Ds} is a kind of ${yi}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${Ds} is a ${yi}. I do know: ${B}. ${we}`,replace:!0,miss:!0}}let ap=f.filter(B=>C.has(B.object)&&I.has(B.subject)).sort(p)[0];return ap?{text:`I can't confirm that \u2014 what I know runs the other way: ${oe(ap)}. A kind doesn't reverse. If it's true, teach me: "every ${Ds} is a ${yi}".`,replace:!0,miss:!0}:!Ve&&!P&&!pI(Ds)&&!d.some(B=>C.has(B.subject)||C.has(B.object))?{text:`I can't confirm that \u2014 I don't know "${Ds}" at all yet. If it's true, teach me: "${Ds} is a kind of ${yi}".`,replace:!0,miss:!0}:null}let v=c.match(wC);if(v){let[,I,L,C]=v,{SUBCLASS_PREDICATE:P,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:W,proveCardinalityAtLeast:V,CARDINALITY_RULE_CONFIDENCE:ie,entailedTrustFrom:ce}=await Promise.resolve().then(()=>(qt(),ln)),K=$o,ee=f.filter(te=>te.predicate===P&&K(te)).map(te=>[te.subject,te.object]),q=d.filter(te=>(te.predicate===N||Gy.has(te.predicate))&&K(te)),ne=W(q);if(ne.length){let te=X(l,I.trim()),xe=X(l,C.trim()),Ae=Number(L),pe=My(te,xe,(re,fe)=>V(ee,ne,re,fe,Ae,{}));if(pe){let re=d.find(se=>se.predicate===P&&se.subject===pe.viaClass&&se.object===pe.viaRestriction),fe=re?.provenance?` (source: ${Dn(re.provenance)})`:"",be=pe.kind==="exactly"?"exactly":"at least",Ie=(se,et)=>`${se}${et===1?"":"s"}`,ue=[re?.trust,...q.filter(se=>se.subject===pe.viaRestriction).map(se=>se.trust),...pe.viaClass!==pe.subject?[f.find(se=>se.predicate===P&&se.subject===pe.subject&&se.object===pe.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),H=ce(ue,ie);return{text:`yes \u2014 every ${pe.viaClass} has ${be} ${pe.n} ${Ie(pe.object,pe.n)}${fe}, so at least ${Ae} follows.`,replace:!0,...H!==null?{trust:H}:{}}}}}let _=c.match(yC);if(_){let[,I,L]=_,{SUBCLASS_PREDICATE:C,ON_PROPERTY_PREDICATE:P,buildCardinalityRestrictions:N,proveMaxCardinalityZeroDenial:W,CAX_MAXC0_RULE_CONFIDENCE:V,entailedTrustFrom:ie}=await Promise.resolve().then(()=>(qt(),ln)),ce=$o,K=f.filter(ne=>ne.predicate===C&&ce(ne)).map(ne=>[ne.subject,ne.object]),ee=d.filter(ne=>(ne.predicate===P||Gy.has(ne.predicate))&&ce(ne)),q=N(ee);if(q.length){let ne=X(l,I.trim()),te=X(l,L.trim()),xe=My(ne,te,(Ae,pe)=>W(K,q,Ae,pe,{}));if(xe){let Ae=d.find(be=>be.predicate===C&&be.subject===xe.viaClass&&be.object===xe.viaRestriction),pe=Ae?.provenance?` (source: ${Dn(Ae.provenance)})`:"",re=[Ae?.trust,...ee.filter(be=>be.subject===xe.viaRestriction).map(be=>be.trust),...xe.viaClass!==xe.subject?[f.find(be=>be.predicate===C&&be.subject===xe.subject&&be.object===xe.viaClass)?.trust]:[]].filter(be=>typeof be=="number"),fe=ie(re,V);return{text:`no \u2014 every ${xe.viaClass} has at most 0 ${xe.object}${pe}.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let $=c.match($C);if($){let I=X(l,$[1]),L=d.filter(C=>C.predicate===Cd&&I.has(C.subject)).sort(p);return L.length?m(L):null}let x=u.match(vC);if(x){let[,I,L]=x,C=X(l,I.trim()),P=X(l,L.replace(/^an?\s+/i,"").trim()),N=d.filter(W=>W.predicate===Cd&&P.has(W.subject)&&C.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${L.trim()}.`,replace:!0}}let S=u.match(xC);if(S){let[,I,L]=S,C=X(l,I.replace(/^an?\s+/i,"").trim()),P=X(l,L.trim()),N=d.filter(W=>W.predicate===Cd&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${L.trim()}.`,replace:!0}}let E=u.match(EC);if(E){let[,I,L]=E,C=X(l,I.trim()),P=X(l,`${L.trim()} method`),N=d.filter(W=>W.predicate===dr&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:null}let R=u.match(SC);if(R){let I=X(l,R[1].trim()),L=d.filter(C=>C.predicate===dr&&I.has(C.subject)&&/ method$/.test(C.object)).sort(p);return L.length?m(L):null}let j=u.match(qy);if(j){let I=j[1].trim(),L=Hy.test(I)||Vy.test(I)?null:us.test(I)?r||null:I,C=j[2].trim().toLowerCase();if(L){let P=X(l,L),N=new Map,W=null;if(o){let q=await gi(o,L);if(W=q,q)for(let ne of pc(o,q.id))for(let te of X(l,ne.label))!P.has(te)&&!N.has(te)&&N.set(te,ne.label),P.add(te)}let V=q=>q.predicate===Od&&l(q.object)===C||q.predicate===`tmct:${C}`&&q.object==="true",ie=l(L).split(/\s+/).filter(q=>q.length>=4&&!i$.has(q)),ce=q=>ie.some(ne=>new Set(String(q.subject||"").split(/\s+/)).has(ne)),K=q=>P.has(q.subject)||ie.length&&ce(q),ee=d.filter(q=>K(q)&&V(q)).sort(p)[0];if(ee){let q=N.get(ee.subject);return{text:q?`yes \u2014 the code graph says ${W.label} inherits ${q}, and ${oe(ee)}`:`yes \u2014 ${oe(ee)}`,replace:!0}}{let{findIsaChain:q,SUBCLASS_PREDICATE:ne,TYPE_PREDICATE:te}=await Promise.resolve().then(()=>(qt(),ln)),xe=$o,Ae=d.filter(ue=>ue.predicate===ne&&xe(ue)),pe=d.filter(ue=>ue.predicate===te&&xe(ue)),re=Ae.map(ue=>[ue.subject,ue.object]),fe=pe.map(ue=>[ue.subject,ue.object]),be=ue=>(ue.predicate===ne?Ae:pe).find(H=>H.subject===ue.subject&&H.object===ue.object),Ie=X(l,C);for(let ue of P){let H=q(ue,Ie,fe,re,{maxHops:2});if(!H)continue;let se=H.map(be);if(se.every(Boolean))return{text:`yes \u2014 ${uc(se)}`,replace:!0}}}if(d.some(K)&&!n?.parsed)return{text:`I don't have a fact saying ${MI(L)} is ${C}.`,replace:!0};if(!n?.parsed&&!Oy.test(C))return Ky(L,C)}}let A=Kd(c).match(xI);if(A&&!Md.test(c)){let[,I,L,C]=A,P=L.toLowerCase();if(!Pd.test(P)&&!Dd.test(P)){let N=I.trim(),W=kI(await Fd(P),C),V=W.object.replace(/^an?\s+/i,"").trim();if(N&&V){let ie=W.predicate,ce=X(l,N),K=X(l,V),ee=[ie,Zo(ie)],q=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject)&&K.has(te.object)).sort(p)[0];if(q)return{text:`${Ah(q.predicate)?"no":"yes"} \u2014 ${oe(q)}`,replace:!0,generalVerbQuery:!0};let ne=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject));if(ne.length){let te=ne.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Mt({subject:N,predicate:ie,object:V})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let F=c.match(EI);if(F&&!Md.test(c)){let[,I,L]=F,[C,P]=L.toLowerCase().split(/\s+/);if(!Pd.test(C)&&!Dd.test(C)){let N=I.trim();if(N){let W=await Fd(C);P&&/^mgx:[a-z]+$/.test(W)&&(W=`${W}-${P}`);let V=X(l,N),ie=[W,Zo(W)],ce=Ze(d.filter(K=>ie.includes(K.predicate)&&V.has(K.subject)),i);if(ce.length)return{...m(ce),generalVerbQuery:!0}}}}let T=c.match(/^(?:what|who)\s+([a-z]+)\s+(on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside)\s+(.+?)[?.!\s]*$/i);if(T&&!Md.test(c)){let[,I,L,C]=T,P=I.toLowerCase();if(!Pd.test(P)&&!Dd.test(P)&&!vI.test(P)){let N=await Fd(P);/^mgx:[a-z]+$/.test(N)&&(N=`${N}-${L.toLowerCase()}`);let W=X(l,C.replace(/^(?:an?|the)\s+/i,"").trim()),V=Ze(d.filter(ie=>ie.predicate===N&&W.has(ie.object)),i);if(V.length)return{...m(V),generalVerbQuery:!0}}}let M=c.match(gC);if(M){let I=X(l,M[1]),L=Ze(d.filter(ie=>I.has(ie.subject)||I.has(ie.object)),i);if(!L.length)return null;let C=I.has(L[0].subject)?L[0].subject:L[0].object,P=L.map(ie=>` ${oe(ie)}`),N=P.slice(0,je),W=P.slice(je),V=W.length?`
|
|
223
|
+
`)+V,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}}}let b=u.match(cC);if(b){let I=op(b[1].trim().toLowerCase()),L=b[2].trim(),C=fs.test(L)?r||null:L;if(C){let{loadMemory:P,findRuleByName:N,RULE_KIND_PROP:W,RULE_KIND_RECURSIVE:V}=await Promise.resolve().then(()=>(qe(),Os)),ie=await P(e),ce=N(ie,I),K=ce?.attributes?.find(ee=>ee.prop===W)?.value;if(ce&&K===V){let ee=ce.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,q=ce.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,ne=l(C);if(ee&&q&&ne){let te=Dd(d),{findIsaChain:xe}=await Promise.resolve().then(()=>(Ht(),un)),Ae=Ie=>{let ue=String(Ie||"").trim().toLowerCase(),H=[];for(let se of d){let et=qd(se.predicate);if(!et)continue;if(et===ue){H.push({fact:se,aliasFacts:[]});continue}let De=zd(xe,et,new Set([ue]),te,{maxHops:2});if(!De)continue;let Ve=De.map(on=>d.find(rn=>rn.predicate===wi&&rn.subject===on.subject&&rn.object===on.object));Ve.every(Boolean)&&H.push({fact:se,aliasFacts:Ve})}return H},{findReachableSet:pe}=await Promise.resolve().then(()=>(Js(),Ii)),be=pe({entity:ne,hop:0},Ie=>{let ue=Ie.hop===0?ee:q;return Ae(ue).filter(H=>H.fact.subject===Ie.entity).map(H=>({action:H,nextState:{entity:H.fact.object,hop:Ie.hop+1}}))},{maxDepth:20,stateKey:Ie=>Ie.entity});if(be.length)return{text:be.map(({node:ue,path:H})=>{let se=new Set,et=[];for(let De of H.actions){et.push(oe(De.fact));for(let Ve of De.aliasFacts){let on=Ve.id||`${Ve.subject}|${Ve.predicate}|${Ve.object}`;se.has(on)||(se.add(on),et.push(`${Dt(Ve)}${Ve.provenance?` (source: ${zn(Ve.provenance)})`:""}`))}}return`${ue.entity} \u2014 ${et.join("; ")}`}).join(`
|
|
224
|
+
`),replace:!0}}}return null}}let y=c.match(Yy),w=c.match(Fs)||Jd(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Fs);if(w){let I=X(l,an(w[2])),L=r&&fs.test(w[1].trim())?r:w[1],C=new Set(X(l,L));if([...C].some(B=>I.has(B))){let B=an(w[2]).trim();return{text:`yes \u2014 ${br(B)} ${B} is ${br(B)} ${B}, trivially: every kind is a kind of itself.`,replace:!0}}let P=await VC(o,L);if(P)for(let B of X(l,P))C.add(B);let{findIsaChain:N,deriveDisjointViolations:W,SUBCLASS_PREDICATE:V,TYPE_PREDICATE:ie,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Ht(),un)),K=$o,ee=f.filter(B=>B.predicate===V&&K(B)),q=f.filter(B=>B.predicate===ie&&K(B)),ne=ee.map(B=>[B.subject,B.object]),te=q.map(B=>[B.subject,B.object]),xe=f.filter(B=>B.predicate===V),Ae=f.filter(B=>B.predicate===ie),pe=Ae.map(B=>[B.subject,B.object]),re=xe.map(B=>[B.subject,B.object]),fe=d.filter(B=>B.predicate===ce&&K(B)),be=fe.map(B=>[B.subject,B.object]),Ie=fe.length?W(pe.concat(re),re,be,{budget:20,focus:new Set([...C,...I])}):[],ue=B=>{let we=Ie.find(Ne=>Ne.subject===B&&I.has(Ne.object));if(!we)return null;let ye=f.filter(Ne=>I.has(Ne.object)&&(Ne.subject===we.viaClass||Ne.subject===we.subject)).sort(p)[0],_e=fe.find(Ne=>Ne.subject===we.viaClass&&Ne.object===we.object||Ne.subject===we.object&&Ne.object===we.viaClass);return!ye||!_e?null:tC(ye,_e)},H=f.filter(B=>C.has(B.subject)&&I.has(B.object)).sort(p)[0],se=d.filter(B=>B.predicate===ca&&C.has(B.subject)&&I.has(B.object)).sort(p)[0],et=fe.find(B=>C.has(B.subject)&&I.has(B.object)||C.has(B.object)&&I.has(B.subject));if(H&&!se){let B=ue(H.subject);if(B)return B}let De=g$(H,se||et);if(De)return De;if(fe.length){let B=_e=>{let Ne=new Set(_e),Ct=new Set(_e);for(let Ce=0;Ce<8&&Ct.size;Ce+=1){let $e=new Set;for(let[at,zs]of re)Ct.has(at)&&!Ne.has(zs)&&$e.add(zs);if(!$e.size)break;for(let at of $e)Ne.add(at);Ct=$e}return Ne},we=B(I),ye=Ie.find(_e=>C.has(_e.subject)&&we.has(_e.object)&&!B([_e.viaClass]).has(_e.object)&&!B([_e.object]).has(_e.viaClass));if(ye){let _e=f.filter($e=>C.has($e.subject)&&$e.object===ye.viaClass).sort(p)[0],Ne=fe.find($e=>$e.subject===ye.viaClass&&$e.object===ye.object||$e.subject===ye.object&&$e.object===ye.viaClass),Ct=!I.has(ye.object),Ce=Ct?f.filter($e=>I.has($e.subject)&&$e.object===ye.object).sort(p)[0]:null;if(_e&&Ne&&(!Ct||Ce)){let $e=an(w[2]).trim();return{text:`no \u2014 ${[_e,...Ce?[Ce]:[]].map(oe).join("; ")}; and ${Dt(Ne)}${Ne.provenance?` (source: ${zn(Ne.provenance)})`:""} \u2014 so ${L} can never be ${br($e)} ${$e}.`,replace:!0}}}}let Ve=await bi(o,L);if(Ve){let B=new Map;for(let ye of mc(o,Ve.id))for(let _e of X(l,ye.label))!C.has(_e)&&!B.has(_e)&&B.set(_e,ye.label);let we=f.filter(ye=>B.has(ye.subject)&&I.has(ye.object)).sort(p)[0];if(we)return{text:`yes \u2014 the code graph says ${Ve.label} inherits ${B.get(we.subject)}, and ${oe(we)}`,replace:!0}}let on=B=>(B.predicate===V?ee:q).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,te,ne,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(on);if(_e.every(Boolean))return{text:`yes \u2014 ${pc(_e)}`,replace:!0}}let rn=B=>(B.predicate===V?xe:Ae).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of C){let we=N(B,I,pe,re,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(rn);if(_e.every(Boolean)&&_e.some(K))return{text:`yes \u2014 ${pc(_e)}`,replace:!0}}let Xt=L.match(/^(.*\S)\s+not$/i),zt=Xt&&[Xt[0],r&&fs.test(Xt[1].trim())?r:Xt[1]];if(zt){let B=X(l,zt[1]),we=I,ye=f.filter(Ce=>B.has(Ce.subject)&&we.has(Ce.object)).sort(p)[0];if(ye)return{text:`no \u2014 ${oe(ye)}`,replace:!0};let _e=fe.find(Ce=>B.has(Ce.subject)&&we.has(Ce.object)||B.has(Ce.object)&&we.has(Ce.subject));if(_e)return{text:`yes \u2014 ${oe(_e)}`,replace:!0};let Ne=zt[1].trim(),Ct=an(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Ct}. If no ${Ne} is a ${Ct}, teach me: "no ${Ne} is a ${Ct}".`,replace:!0,miss:!0}}if(fe.length){let B=W(te.concat(ne),ne,be,{budget:10});for(let we of C){let ye=B.find(Ce=>Ce.subject===we&&I.has(Ce.object));if(!ye)continue;let _e=q.concat(ee).find(Ce=>Ce.subject===ye.subject&&Ce.object===ye.viaType),Ne=fe.find(Ce=>Ce.subject===ye.viaClass&&Ce.object===ye.object||Ce.subject===ye.object&&Ce.object===ye.viaClass),Ct=[_e,Ne].filter(Boolean).map(oe);return{text:`no \u2014 ${Ct.length?Ct.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:yi,ON_PROPERTY_PREDICATE:k,SOME_VALUES_FROM_PREDICATE:le,deriveSomeValuesFromSubsumption:Te,ENTAILED_SCM_SVF_PROVENANCE:Un,SCM_SVF_RULE_CONFIDENCE:So,entailedTrustFrom:cp}=await Promise.resolve().then(()=>(Ht(),un)),lp=d.filter(B=>B.predicate===k&&K(B)),up=d.filter(B=>B.predicate===le&&K(B));if(lp.length&&up.length){let B=new Map(up.map($e=>[$e.subject,$e.object])),we=lp.map($e=>({restriction:$e.subject,property:$e.object,target:B.get($e.subject)})).filter($e=>$e.target),ye=new Set([V,ie,ce,k,le,"owl:intersectionOf"]),_e=d.filter($e=>K($e)&&!ye.has($e.predicate)),Ne=_e.map($e=>[$e.subject,$e.predicate,$e.object]),Ct=yi(Ne,te,ne,we,{budget:10});for(let $e of C){let at=Ct.find(bn=>bn.subject===$e&&I.has(bn.object));if(!at)continue;let zs=_e.find(bn=>bn.subject===at.subject&&bn.predicate===at.viaProperty&&bn.object===at.viaValue),Us=q.find(bn=>bn.subject===at.viaValue&&bn.object===at.viaType),yr=[zs,Us].filter(Boolean).map(oe);return{text:`yes \u2014 ${yr.length?yr.join("; "):`${at.subject} ${at.viaProperty} ${at.viaValue}, and ${at.viaValue} is a ${at.viaType}.`}`,replace:!0}}let Ce=we.length>1?Te(we,ne,{budget:10}):[];if(Ce.length){let $e=ne.concat(Ce.map(Se=>[Se.subject,Se.object])),at=new Map(we.map(Se=>[Se.restriction,Se])),zs=new Map;for(let Se of d)zs.set(`${Se.subject}\0${Se.predicate}\0${Se.object}`,Se.trust);let Us=(Se,kn,Ut)=>zs.get(`${Se}\0${kn}\0${Ut}`),yr=new Map;for(let Se of Ce){let kn=at.get(Se.subject),Ut=at.get(Se.object),Jt=[kn&&Us(Se.subject,k,kn.property),Us(Se.subject,le,Se.viaY1),Ut&&Us(Se.object,k,Ut.property),Us(Se.object,le,Se.viaY2),Us(Se.viaY1,V,Se.viaY2)].filter(G$=>typeof G$=="number"),vi=cp(Jt,So);vi!==null&&yr.set(`${Se.subject}\0${Se.object}`,vi)}let bn=Se=>{if(Se.predicate!==V)return q.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);let kn=ee.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);if(kn)return kn;let Ut=Ce.find(Jt=>Jt.subject===Se.subject&&Jt.object===Se.object);return Ut?{subject:Ut.subject,predicate:V,object:Ut.object,provenance:Un,trust:yr.get(`${Ut.subject}\0${Ut.object}`)}:void 0};for(let Se of C){let kn=N(Se,I,te,$e,{maxHops:3});if(!kn)continue;let Ut=kn.map(bn);if(Ut.every(Boolean)){let Jt=cp(Ut.map(vi=>vi.trust),1);return{text:`yes \u2014 ${pc(Ut)}`,replace:!0,...Jt!==null?{trust:Jt}:{}}}}}}let B$=X(l,L),dp=f.filter(B=>B$.has(B.subject)).sort(p),Ds=L.trim(),$i=an(w[2]).trim(),W$=[...C].some(B=>N(B,I,te,ne,{maxHops:lC}));if(dp.length){let B=dp.slice(0,3).map(oe).join("; "),we=W$?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${Ds}", then ask me again.`:`If it's true, teach me: "${Ds} is a kind of ${$i}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${Ds} is a ${$i}. I do know: ${B}. ${we}`,replace:!0,miss:!0}}let pp=f.filter(B=>C.has(B.object)&&I.has(B.subject)).sort(p)[0];return pp?{text:`I can't confirm that \u2014 what I know runs the other way: ${oe(pp)}. A kind doesn't reverse. If it's true, teach me: "every ${Ds} is a ${$i}".`,replace:!0,miss:!0}:!Ve&&!P&&!CI(Ds)&&!d.some(B=>C.has(B.subject)||C.has(B.object))?{text:`I can't confirm that \u2014 I don't know "${Ds}" at all yet. If it's true, teach me: "${Ds} is a kind of ${$i}".`,replace:!0,miss:!0}:null}let v=c.match(FC);if(v){let[,I,L,C]=v,{SUBCLASS_PREDICATE:P,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:W,proveCardinalityAtLeast:V,CARDINALITY_RULE_CONFIDENCE:ie,entailedTrustFrom:ce}=await Promise.resolve().then(()=>(Ht(),un)),K=$o,ee=f.filter(te=>te.predicate===P&&K(te)).map(te=>[te.subject,te.object]),q=d.filter(te=>(te.predicate===N||t$.has(te.predicate))&&K(te)),ne=W(q);if(ne.length){let te=X(l,I.trim()),xe=X(l,C.trim()),Ae=Number(L),pe=Ky(te,xe,(re,fe)=>V(ee,ne,re,fe,Ae,{}));if(pe){let re=d.find(se=>se.predicate===P&&se.subject===pe.viaClass&&se.object===pe.viaRestriction),fe=re?.provenance?` (source: ${zn(re.provenance)})`:"",be=pe.kind==="exactly"?"exactly":"at least",Ie=(se,et)=>`${se}${et===1?"":"s"}`,ue=[re?.trust,...q.filter(se=>se.subject===pe.viaRestriction).map(se=>se.trust),...pe.viaClass!==pe.subject?[f.find(se=>se.predicate===P&&se.subject===pe.subject&&se.object===pe.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),H=ce(ue,ie);return{text:`yes \u2014 every ${pe.viaClass} has ${be} ${pe.n} ${Ie(pe.object,pe.n)}${fe}, so at least ${Ae} follows.`,replace:!0,...H!==null?{trust:H}:{}}}}}let _=c.match(DC);if(_){let[,I,L]=_,{SUBCLASS_PREDICATE:C,ON_PROPERTY_PREDICATE:P,buildCardinalityRestrictions:N,proveMaxCardinalityZeroDenial:W,CAX_MAXC0_RULE_CONFIDENCE:V,entailedTrustFrom:ie}=await Promise.resolve().then(()=>(Ht(),un)),ce=$o,K=f.filter(ne=>ne.predicate===C&&ce(ne)).map(ne=>[ne.subject,ne.object]),ee=d.filter(ne=>(ne.predicate===P||t$.has(ne.predicate))&&ce(ne)),q=N(ee);if(q.length){let ne=X(l,I.trim()),te=X(l,L.trim()),xe=Ky(ne,te,(Ae,pe)=>W(K,q,Ae,pe,{}));if(xe){let Ae=d.find(be=>be.predicate===C&&be.subject===xe.viaClass&&be.object===xe.viaRestriction),pe=Ae?.provenance?` (source: ${zn(Ae.provenance)})`:"",re=[Ae?.trust,...ee.filter(be=>be.subject===xe.viaRestriction).map(be=>be.trust),...xe.viaClass!==xe.subject?[f.find(be=>be.predicate===C&&be.subject===xe.subject&&be.object===xe.viaClass)?.trust]:[]].filter(be=>typeof be=="number"),fe=ie(re,V);return{text:`no \u2014 every ${xe.viaClass} has at most 0 ${xe.object}${pe}.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let $=c.match(zC);if($){let I=X(l,$[1]),L=d.filter(C=>C.predicate===Md&&I.has(C.subject)).sort(p);return L.length?m(L):null}let x=u.match(UC);if(x){let[,I,L]=x,C=X(l,I.trim()),P=X(l,L.replace(/^an?\s+/i,"").trim()),N=d.filter(W=>W.predicate===Md&&P.has(W.subject)&&C.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${L.trim()}.`,replace:!0}}let S=u.match(BC);if(S){let[,I,L]=S,C=X(l,I.replace(/^an?\s+/i,"").trim()),P=X(l,L.trim()),N=d.filter(W=>W.predicate===Md&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${L.trim()}.`,replace:!0}}let E=u.match(WC);if(E){let[,I,L]=E,C=X(l,I.trim()),P=X(l,`${L.trim()} method`),N=d.filter(W=>W.predicate===dr&&C.has(W.subject)&&P.has(W.object)).sort(p)[0];return N?{text:`yes \u2014 ${oe(N)}`,replace:!0}:null}let R=u.match(GC);if(R){let I=X(l,R[1].trim()),L=d.filter(C=>C.predicate===dr&&I.has(C.subject)&&/ method$/.test(C.object)).sort(p);return L.length?m(L):null}let j=u.match(n$);if(j){let I=j[1].trim(),L=o$.test(I)||s$.test(I)?null:fs.test(I)?r||null:I,C=j[2].trim().toLowerCase();if(L){let P=X(l,L),N=new Map,W=null;if(o){let q=await bi(o,L);if(W=q,q)for(let ne of mc(o,q.id))for(let te of X(l,ne.label))!P.has(te)&&!N.has(te)&&N.set(te,ne.label),P.add(te)}let V=q=>q.predicate===Fd&&l(q.object)===C||q.predicate===`tmct:${C}`&&q.object==="true",ie=l(L).split(/\s+/).filter(q=>q.length>=4&&!b$.has(q)),ce=q=>ie.some(ne=>new Set(String(q.subject||"").split(/\s+/)).has(ne)),K=q=>P.has(q.subject)||ie.length&&ce(q),ee=d.filter(q=>K(q)&&V(q)).sort(p)[0];if(ee){let q=N.get(ee.subject);return{text:q?`yes \u2014 the code graph says ${W.label} inherits ${q}, and ${oe(ee)}`:`yes \u2014 ${oe(ee)}`,replace:!0}}{let{findIsaChain:q,SUBCLASS_PREDICATE:ne,TYPE_PREDICATE:te}=await Promise.resolve().then(()=>(Ht(),un)),xe=$o,Ae=d.filter(ue=>ue.predicate===ne&&xe(ue)),pe=d.filter(ue=>ue.predicate===te&&xe(ue)),re=Ae.map(ue=>[ue.subject,ue.object]),fe=pe.map(ue=>[ue.subject,ue.object]),be=ue=>(ue.predicate===ne?Ae:pe).find(H=>H.subject===ue.subject&&H.object===ue.object),Ie=X(l,C);for(let ue of P){let H=q(ue,Ie,fe,re,{maxHops:2});if(!H)continue;let se=H.map(be);if(se.every(Boolean))return{text:`yes \u2014 ${pc(se)}`,replace:!0}}}if(d.some(K)&&!n?.parsed)return{text:`I don't have a fact saying ${sC(L)} is ${C}.`,replace:!0};if(!n?.parsed&&!Gy.test(C))return r$(L,C)}}let A=Zd(c).match(BI);if(A&&!Bd.test(c)){let[,I,L,C]=A,P=L.toLowerCase();if(!Ud.test(P)&&!Gd.test(P)){let N=I.trim(),W=qI(await Wd(P),C),V=W.object.replace(/^an?\s+/i,"").trim();if(N&&V){let ie=W.predicate,ce=X(l,N),K=X(l,V),ee=[ie,Zo(ie)],q=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject)&&K.has(te.object)).sort(p)[0];if(q)return{text:`${Nh(q.predicate)?"no":"yes"} \u2014 ${oe(q)}`,replace:!0,generalVerbQuery:!0};let ne=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject));if(ne.length){let te=ne.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Dt({subject:N,predicate:ie,object:V})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let F=c.match(WI);if(F&&!Bd.test(c)){let[,I,L]=F,[C,P]=L.toLowerCase().split(/\s+/);if(!Ud.test(C)&&!Gd.test(C)){let N=I.trim();if(N){let W=await Wd(C);P&&/^mgx:[a-z]+$/.test(W)&&(W=`${W}-${P}`);let V=X(l,N),ie=[W,Zo(W)],ce=Ze(d.filter(K=>ie.includes(K.predicate)&&V.has(K.subject)),i);if(ce.length)return{...m(ce),generalVerbQuery:!0}}}}let T=c.match(/^(?:what|who)\s+([a-z]+)\s+(on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside)\s+(.+?)[?.!\s]*$/i);if(T&&!Bd.test(c)){let[,I,L,C]=T,P=I.toLowerCase();if(!Ud.test(P)&&!Gd.test(P)&&!UI.test(P)){let N=await Wd(P);/^mgx:[a-z]+$/.test(N)&&(N=`${N}-${L.toLowerCase()}`);let W=X(l,C.replace(/^(?:an?|the)\s+/i,"").trim()),V=Ze(d.filter(ie=>ie.predicate===N&&W.has(ie.object)),i);if(V.length)return{...m(V),generalVerbQuery:!0}}}let M=c.match(PC);if(M){let I=X(l,M[1]),L=Ze(d.filter(ie=>I.has(ie.subject)||I.has(ie.object)),i);if(!L.length)return null;let C=I.has(L[0].subject)?L[0].subject:L[0].object,P=L.map(ie=>` ${oe(ie)}`),N=P.slice(0,je),W=P.slice(je),V=W.length?`
|
|
225
225
|
\u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:`${L.length} remembered fact${L.length===1?"":"s"} about ${C}:
|
|
226
226
|
${N.join(`
|
|
227
|
-
`)}${V}`,replace:!0,...W.length?{pending:{items:W.map(ie=>ie.trim()),noun:"facts"}}:{}}}let z=n?.parsed?.shape==="meta"?n.parsed.object:null,Y=!1,ae=c.match(bC);if(ae)z=ae[1],Y=!0;else if(!z&&!n?.parsed){let I=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(z=I[1])}if(!z)return null;let Z=X(l,z),D=Ze(f.filter(I=>Z.has(I.subject)),i),U=Ze(f.filter(I=>Z.has(I.object)),i),G=Y?D.length?D:U:U.length?U:D;return G.length?m(G):null}function Bd(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var Xd,pI,hn,lc,Ay,Yy,SH,Iy,fI,kH,jH,Xy,Jy,Qy,mI,Cy,_H,RH,TH,AH,IH,Qd,CH,hI,Ye,Cd,Od,bi,gI,$o,OH,LH,NH,PH,MH,FH,DH,zH,UH,BH,WH,GH,qH,VH,HH,Oy,yI,hc,$I,KH,YH,ep,Zy,XH,JH,QH,Pd,Md,vI,ZH,xI,EI,Dd,SI,jI,eK,e$,t$,_I,tK,nK,sK,oK,wr,rK,iK,aK,n$,cK,lK,RI,uK,dK,pK,vo,Ly,tp,Mt,AI,CI,OI,dc,FI,i$,fK,qd,a$,DI,zI,mc,UI,BI,Fs,ds,WI,GI,qI,Hd,Fy,VI,je,HI,KI,YI,XI,JI,QI,ZI,eC,tC,nC,sC,oC,rC,zy,l$,aC,cC,uC,dC,pC,fC,Wy,mC,gC,bC,wC,yC,Gy,$C,vC,xC,EC,SC,qy,us,Vy,Hy,Ky,kC,_C,RC,mK,f$,AC,hK,Wd,Yd,IC,gK,bK,m$,wK,yK,$K,vK,xK,gc,EK,SK,kK,jK,CC,_K,RK,cc=O(()=>{Ue();lw();zt();Oe();Ss();qa();Va();_r();ld();pw();qe();ua();dd();hw();Gn();Tn();zo();Gi();id();ad();Mo();ho();Zc();Ka();$w();vw();hd();xw();gd();Ew();Sw();Za();Ju();oc();ly();uy();Ms();ky();qi(void 0);Wi(Ga);Xd=new Set(["it","this","that","here"]),pI=e=>Xd.has(String(e||"").trim().toLowerCase()),hn={imports:"understand a dependency/import relationship",uses:"understand a dependency/usage relationship (imports and/or calls)",calls:"understand a call relationship",callsSymbol:"understand a call relationship",defines:"locate what a module/class defines",contains:"understand class membership (methods/attributes)",tests:"assess test coverage",inherits:"understand a class hierarchy/inheritance relationship",touches:"understand commit/change history",touchesSymbol:"understand commit/change history",cochange:"understand change-coupling between modules",reexports:"understand a module's public exports/API surface",serves:"understand which component provides or backs another",denotes:"understand which vocabulary term names a code entity"},lc=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Ay="look up a taught fact about a subject/verb/object";Yy={find:{tool:"tmct_search",arg:"query",help:"lexical search across the graph"},search:{tool:"tmct_search",arg:"query",help:"alias of /find"},context:{tool:"tmct_context",arg:"symbol",help:"the sized edit bundle for a symbol (start here to change code)"},snippet:{tool:"tmct_snippet",arg:"symbol",help:"exact source of one function/class/method"},describe:{tool:"tmct_describe",arg:"symbol",help:"a symbol's definition, kind and relations"},signature:{tool:"tmct_signature",arg:"symbol",help:"a symbol's signature only"},members:{tool:"tmct_members",arg:"class",help:"the methods/attributes of a class"},subclasses:{tool:"tmct_subclasses",arg:"class",help:"the subclasses of a class"},impact:{tool:"tmct_impact",arg:"module",help:"what a change to this module or symbol reaches (impact closure)"},callers:{tool:"tmct_callers",arg:"symbol",help:"functions that call this symbol"},callees:{tool:"tmct_callees",arg:"symbol",help:"functions this symbol calls"},tests:{tool:"tmct_tests_for",arg:"symbol",help:"the tests covering this symbol"},untested:{tool:"tmct_untested",arg:null,help:"symbols with no covering test"},history:{tool:"tmct_history",arg:"symbol",help:"the commit history of this symbol"},exports:{tool:"tmct_exports",arg:"module",help:"a module's public exports"},arch:{tool:"tmct_architecture",arg:"package",help:"the architecture overview (optional package filter)",optional:!0}},SH=new Set(["stats","memory","focus",...Object.keys(Yy)]),Iy={Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},fI=new Set(["have","has","holds","hold"]),kH=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(fs)].filter(e=>!fI.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),jH=new Set([...cw.map(e=>e.name),...Object.values(Yy).map(e=>e.tool)]),Xy=new Set(["hi","hello","hey","yo","hiya","howdy","sup","greetings","g'day","gday","hey there","hi there","hello there","good morning","good afternoon","good evening","morning","alright","you alright","alright mate","morning all","yeah nah","hey y'all","howdy there","hiya there","good day","good day to you","salutations","good to meet you","pleased to meet you","yo yo","ayy","wassup","sup fam","heya","hiya!","gm","ge"]),Jy=new Set(["thanks","thank you","thankyou","thx","ty","ta","cheers","nice one","much appreciated","cool thanks","many thanks","much obliged","ta very much","cheers mate","cheers for that","tks","sweet thanks","nice","brilliant","ta for that","cheers, that's everything for now, thanks","that's everything for now, thanks","that's all for now, thanks"]),Qy=new Set(["bye","goodbye","quit","exit","see ya","see you","cya","later","farewell","peace","peace out","im off","i'm off","gtg","gotta go","catch you later","farewell then"]),mI=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Cy=e=>e.replace(/(.)\1+/g,"$1");_H=Jd(Xy),RH=Jd(Jy),TH=Jd(Qy),AH=new RegExp(`^(?:${[...mI].map(Qe).join("|")})\\s+(.+)$`,"i"),IH=[...Xy,...Jy,...Qy,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],Qd="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",CH=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${Qd})\\s+than\\s+(.+)$`,"i"),hI=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${Qd})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Cd="mgx:ownedBy",Od="mgx:hasProperty",bi="rdfs:subClassOf",gI=new Set(["operator","teach","entailed"]),$o=e=>!!e.sourceTypes?.some(t=>gI.has(t));OH=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),LH=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),NH=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),PH=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${Qd})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),MH=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),FH=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+may\\s+not\\s+be\\s+with\\s+the\\s+([a-z][\\w-]*)\\s+without\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i");DH=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),zH=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),UH=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),BH=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),WH=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),GH=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),qH=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),VH=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),HH=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),Oy=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,yI=new Set(["bus","gas","plus","minus","surplus","lens","bias","atlas","canvas","virus","bonus","campus","census","chorus","circus","focus","status","iris","genius","sinus","walrus","cactus","fungus","radius","nucleus","alias","crocus","abacus","syllabus","octopus","platypus"]);hc="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",$I="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",KH=new RegExp(`^(.+?)\\s+(${$I})\\s+(.+)$`,"i"),YH=new RegExp(`^([\\w'-]+)\\s+${hc}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),ep="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",Zy="with|to|from|by|of|in|on|for|as|about|into",XH=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${hc}(${ep})\\s+(${Zy})\\s+(.+)$`,"i"),JH=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${ep})\\s+(${Zy})\\s+(.+)$`,"i"),QH=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Pd=/^(?:is|are|am|owns|maintains)$/i,Md=/\b(?:is|are|am|owns|maintains)\b/i,vI=new RegExp("^(?:i|me|you|he|him|she|her|it|we|us|they|them|my|your|his|its|our|their|mine|yours|hers|ours|theirs|this|that|these|those|a|an|the|every|each|all|some|any|no|both|either|neither|in|on|at|to|from|by|with|for|of|about|into|onto|over|under|near|before|after|during|through|up|down|off|out|above|below|between|among|against|without|within|along|across|behind|beyond|upon|toward|towards|per|and|but|or|if|because|although|though|while|when|since|unless|until|whether|so|nor|than|as|what|who|whom|whose|which|where|why|how)$","i"),ZH=new RegExp(`^(?:${Hs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");xI=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${hc}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),EI=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${hc}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Dd=/^(?:be|own|maintain)$/i,SI=new RegExp(`^(${Ye})\\s+(.+)$`,"i");jI=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],eK=new RegExp(`^(?:${jI.join("|")})\\b\\s*,?\\s+`,"i"),e$=Object.freeze(["you","i","it","they","he","she","we"]),t$=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),_I=Object.freeze([...t$,...e$]),tK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${_I.join("|")})\\s+\\S+`,"i"),nK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${e$.join("|")})\\s+(?:is|are|am|was|were)|(${t$.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),sK=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),oK=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),wr="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",rK=new RegExp(`^what\\s+does\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),iK=new RegExp(`^what\\s+(.+?)${wr}\\s+does${wr}\\??$`,"i"),aK=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),n$="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",cK=new RegExp(`^who\\s+(?:is|was)\\s+${n$}$`,"i"),lK=new RegExp(`^what\\s+(?:did|has)\\s+${n$}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),RI="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",uK=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${RI}\\b`,"i"),dK=new RegExp("^(?:what\\s+time\\s+is\\s+it(?:\\s+(?:now|right\\s+now))?|what(?:'s|s|\\s+is)\\s+the\\s+time(?:\\s+(?:now|right\\s+now))?|what\\s+day\\s+is\\s+it(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+(?:the\\s+)?(?:day|date)(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+today'?s\\s+date|what(?:'s|s|\\s+is)\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?|how'?s\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?)\\??$","i");pK=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Zt,...bn,"owns","maintains"].filter(e=>e.length>=3)),vo={"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","mgx:partOf":"is part of","mgx:hasA":"has","mgx:usedFor":"is used for","mgx:capableOf":"can","mgx:atLocation":"is found in","mgx:causes":"causes","mgx:hasProperty":"is","mgx:madeOf":"is made of","mgx:receivesAction":"can be","mgx:createdBy":"is created by","mgx:mannerOf":"is a way to","mgx:desires":"wants","mgx:locatedNear":"is typically near","mgx:motivatedByGoal":"is motivated by","mgx:obstructedBy":"can be prevented by","mgx:causesDesire":"makes you want to","mgx:hasSubevent":"involves","mgx:hasFirstSubevent":"begins with","mgx:hasLastSubevent":"ends with","mgx:hasPrerequisite":"requires","mgx:ownedBy":"is owned by","mgx:rendersAs":"renders as","mgx:synonym":"means the same as","mgx:antonym":"is the opposite of","mgx:similarTo":"is similar to","mgx:relatedTo":"is related to","mgx:symbolOf":"is a symbol of","mgx:currently-in":"is in","mgx:located-in":"is in","mgx:fixed-in":"is fixed in","mgx:stands-locked-in":"stands locked in","mgx:works-in":"works in"},Ly=new Set(["mgx:hidden-in","mgx:is-objective","mgx:unlocks-with","mgx:is-npc","mgx:acts-on-turn","mgx:acts-toward","mgx:is-container","mgx:is-open"]),tp=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Mt=e=>`${e.subject} ${o$(e.predicate)} ${e.object}`;AI=Object.entries(vo).filter(([e])=>!tp.has(e)).map(([e,t])=>{let n=/^(?:is|are)\s+(.+)$/i.exec(t);return n?{predicate:e,marker:n[1].trim().toLowerCase()}:null}).filter(e=>e&&e.marker.length>1).sort((e,t)=>t.marker.length-e.marker.length);CI=/ \(source: [^)]*\)$/;OI=8;dc=null;FI=/^(?:every|each|all|any)\s+/i;i$=new Set(["module","modules","class","classes","function","functions","method","methods","handler","handlers","controller","controllers","service","services","component","components","flow","flows","thing","things","item","items","object","objects","commit","commits"]),fK=new Set([["interpreter","compiler"],["string","thread"],["heart","kernel"],["battalion","heap"],["bash","sock"],["command","skill"],["docker","longshoreman"],["name","list"],["list","number"]].map(([e,t])=>[e,t].sort().join("|"))),qd=/^(?:is|are|was|were)\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,a$=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,DI=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,zI=/^(who|what)'?s\s+/i,mc=e=>String(e).replace(zI,(t,n)=>`${n} is `),UI=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;BI=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Fs=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,ds=new Set(["rdfs:subClassOf","rdf:type"]),WI=6,GI=/^why\s+(?=(?:is|are)\b)/i,qI=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Hd=new Set(["kind","sort","type","subclass","superclass"]),Fy=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,VI=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,je=32,HI=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,KI=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,YI=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,XI=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,JI=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,QI=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,ZI=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,eC=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),tC=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,nC=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,sC=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,oC=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,rC=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;zy=e=>String(e||"").replace(/\s+/g," ").trim();l$="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",aC=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${l$})[?.!\\s]*$`,"i"),cC=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${l$})\\s+([\\w'-]+)[?.!\\s]*$`,"i");uC=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),dC=Object.entries(vo).filter(([e])=>!uC.has(e)&&!tp.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Qe(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),pC=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),fC=Object.entries(vo).filter(([e])=>!pC.has(e)&&!tp.has(e)).map(([e,t])=>{let n;if(t==="can be")n=new RegExp("^can\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+be\\s+(.+?)[?.!\\s]*$","i");else if(t.startsWith("is ")){let s=Qe(t.slice(3));n=new RegExp(`^(?:is|are)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${s}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}else{let[s,...o]=t.split(" "),r=[s$(s),...o].map(Qe).join("\\s+");n=new RegExp(`^(?:does|do)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${r}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}return{predicate:e,phrase:t,re:n}}).sort((e,t)=>t.re.source.length-e.re.source.length),Wy=/^what\s+(?:inherits?\s+(?:from\s+)?(?:an?\s+)?|is\s+(?:an?\s+)?(?:kind|sort|type)\s+of\s+|is\s+(?:an?\s+)?subclass\s+of\s+)(.+?)[?.!\s]*$/i,mC=new Set(["changed","change","changes","updated","modified","happened","occurred"]);gC=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,bC=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,wC=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,yC=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,Gy=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),$C=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,vC=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,xC=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,EC=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,SC=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,qy=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,us=/^(?:it|this|that)$/i,Vy=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,Hy=/^(?:you|i|they|he|she|we)\b/i,Ky=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${fc(e)} is ${t}".`,replace:!0}),kC=/^(?:what\s+(?:did|have)\s+(?:i|we)\s+(?:told?|tell|said?|say)\s+(?:you|me|us)?(?:\s+(?:last\s+time|before|earlier|previously|already))?|what\s+facts?\s+do\s+you\s+(?:know|have|remember)|what\s+do\s+you\s+(?:know|remember)|what\s+have\s+you\s+(?:learned|learnt|remembered))[?.!\s]*$/i;_C=/inherit|supertype|subclass|extend|specializ/i,RC=8;mK=new RegExp(`\\b(?:${[...Xd].join("|")})\\b`,"i"),f$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,AC=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i;hK=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),Wd="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",Yd="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",IC=`(?:\\s+${Yd})?`,gK=[new RegExp(`^${Wd}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${IC}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Wd}architecture\\s+(?:${Yd}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Wd}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${Yd}(?:\\s+here)?\\??$`,"i")],bK={find:"locate a specific named entity",search:"locate a specific named entity",context:"gather the sized edit bundle for a symbol before changing code",snippet:"view a symbol's exact source",describe:"look up a symbol's definition and relations",signature:"view a symbol's signature",members:hn.contains,subclasses:hn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:hn.calls,callees:hn.calls,tests:hn.tests,untested:hn.tests,history:hn.touches,exports:hn.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",syllogise:"materialize the entailed facts that follow from what's remembered about one term",wiki:"toggle the live Wikipedia supplement for questions nothing local can answer",export:"write the memory store to a file, in the standard JSONL shape",ingest:"read a local text file and store every fact the recognizer grounds from it"},m$="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",wK=new RegExp(`^what\\s+(?:would|will|might|could|does|do)?\\s*(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|is\\s+impacted|be\\s+impacted)\\s+if\\s+(?:i|we|you|one|someone)\\s+${m$}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),yK=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${m$}\\s+(?:the\\s+)?(.+?),?\\s+what\\s+(?:would\\s+|will\\s+|might\\s+|could\\s+|does\\s+|do\\s+)?(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|would\\s+break|will\\s+break)[?.!\\s]*$`,"i"),$K=new RegExp("^what\\s+(?:is|are|gets?|would\\s+be|will\\s+be)\\s+(?:affected|impacted|broken)\\s+(?:by|when|if)\\s+(?:i\\s+|we\\s+|you\\s+)?(?:chang(?:e|es|ing)|edit(?:s|ing)?|modif(?:y|ies|ying)|touch(?:es|ing)?|updat(?:e|es|ing)|delet(?:e|es|ing)|remov(?:e|es|ing)|a\\s+change\\s+to)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),vK=new RegExp("^(?:(?:can|could)\\s+(?:i|we|you|one|someone)\\s+safely|is\\s+it\\s+safe\\s+to)\\s+(?:change|edit|modify|touch|update|alter|delete|remove|drop)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),xK=new RegExp("^(?:what(?:'s|\\s+is)\\s+the\\s+)?(?:blast\\s+radius|impact)\\s+(?:of|for)\\s+(?:chang(?:ing|es)\\s+|editing\\s+|modifying\\s+|touching\\s+|updating\\s+|deleting\\s+|removing\\s+)?(?:the\\s+)?(.+?)[?.!\\s]*$","i"),gc="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",EK=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${gc}\\s*\\??$`,"i"),SK=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${gc}\\s*\\??$`,"i"),kK=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${gc}\\s*\\??$`,"i"),jK=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${gc}\\s*[.!]*$`,"i"),CC=Object.freeze([...Xd].filter(e=>e!=="here").concat("they")),_K=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${CC.join("|")})\\b(\\s+\\S.*)?$`,"i"),RK=Q(".tmct","memory","corpus-seed.json")});cc();qe();ws();Za();var bc={uninformativeClassMaxShare:.35,uninformativeClassMinSubjects:12,entailedDepthPenalty:.2,minoritySensePenalty:.5,minScore:.05,groupSplitThreshold:4,openerConceptCount:2,maxObjectsPerBodySentence:4,maxBodySentences:4,closerRootCount:2,budget:{chatReply:5,researchPanel:10,cliDigest:12,ledgerTerm:8}};var b$=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),xo=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),wc=e=>b$[e]||"other",LC=e=>Math.max(0,Math.min(1,e));function h$(e){let t=(e.sourceTypes||[]).map(n=>Ys[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Ys.entailed}function NC(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function g$(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function w$(e,t,n={},s={}){let o={...bc,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter($=>$&&$.object&&$.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let $ of i){if(wc($.predicate)==="isa"){let x=g$($.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:$,family:"isa",reason:"uninformative-class",share:x});continue}}c.push($)}let u=c.filter($=>wc($.predicate)==="isa").map($=>$.object),d=Qa(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let $ of d.clusters){let x=0;for(let S of $.objects){p.set(S,$.label);let E=c.find(R=>R.object===S&&wc(R.predicate)==="isa");x+=E?h$(E):0}f.set($.label,x)}let m=null,h=-1;for(let[$,x]of[...f].sort((S,E)=>S[0].localeCompare(E[0])))x>h&&(h=x,m=$);let g=[];for(let $ of c){let x=wc($.predicate),S=h$($),E={provenance:S};if(NC($)&&(S-=o.entailedDepthPenalty,E.entailed=!0),x==="isa"){let j=.6+.4*(1-g$($.object,n));S*=j,E.informativeness=j;let A=p.get($.object);m&&A&&A!==m&&(S-=o.minoritySensePenalty,E.minoritySense=A)}S=LC(S),g.push({row:$,family:x,score:S,reasons:E})}let b=[];for(let $ of g)$.score<o.minScore?a.push({row:$.row,family:$.family,reason:"below-floor",score:$.score}):b.push($);let y=new Map;for(let $ of b)y.has($.family)||y.set($.family,[]),y.get($.family).push($);for(let $ of y.values())$.sort((x,S)=>S.score-x.score||x.row.object.localeCompare(S.row.object));let w=xo.filter($=>y.has($)).concat([...y.keys()].filter($=>!xo.includes($)).sort()),v=[],_=!1;for(;v.length<r&&!_;){_=!0;for(let $ of w){let x=y.get($);if(x&&x.length&&(v.push(x.shift()),_=!1,v.length>=r))break}}for(let $ of w)for(let x of y.get($)||[])a.push({row:x.row,family:x.family,reason:"over-budget",score:x.score});return v.sort(($,x)=>{let S=xo.indexOf($.family),E=xo.indexOf(x.family);return S-E||x.score-$.score||$.row.object.localeCompare(x.row.object)}),{term:e,selected:v,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}Ki();nn();var PC=new Set(["isa","location","partOf","capableOf","usedFor"]),MC=new Set(["single","several","chained","group","closer"]),y$=(e,t)=>`${e}:${t}`;function np(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!PC.has(n.family)||typeof n.form!="string"||!MC.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=y$(n.family,n.form);t.has(s)||t.set(s,{family:n.family,form:n.form,templates:[]});let o=t.get(s);o.templates.includes(n.template)||o.templates.push(n.template)}return t}var Eo=e=>`${Uo(e)} ${e}`;function FC(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Eo(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Or(s.map(Eo))}`:n}function DC(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(l=>String(l||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Bo(o),A_TERM:Eo(o),A_TERM_CAP:Bo(Eo(o)),TERMS:Hi(o),TERMS_CAP:Bo(Hi(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Eo(a):"",OBJECT:i,A_OBJECT:i?Eo(i):"",OBJECTS_A:Or(r.map(Eo)),OBJECTS_PLURAL:Or(r.map(Hi)),OBJECTS_RAW:Or(r),CHAIN:FC(n&&n.length?n:r.slice(0,1))}}function zC(e,t){return String(e).replace(/\{([A-Z_]+)\}/g,(n,s)=>s in t?t[s]:"").replace(/\s+/g," ").replace(/\s+([.,;])/g,"$1").trim()}function ps(e,t,n,s={}){let o=(n||[]).filter(Boolean);if(!o.length)return null;let r=s.term??o[0].subject??"",i=s.form||(o.length>1?"several":"single"),a=e instanceof Map?e.get(y$(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=ra(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=zC(l[u],DC(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}Ki();var UC=xo.filter(e=>e!=="isa"&&e!=="other");function BC(e){let t=new Map;for(let n of e||[])t.has(n.family)||t.set(n.family,[]),t.get(n.family).push(n.row);return t}function $$(e,t){let n=Math.max(1,Math.trunc(t)||1),s=[];for(let o=0;o<(e||[]).length;o+=n)s.push(e.slice(o,o+n));return s}function WC(e,t){let n=l=>(t?.[l.object]||[])[1]||null,s=new Map;for(let l of e||[]){let c=n(l);c&&s.set(c,(s.get(c)||0)+1)}let o=new Map,r=[],i=[];for(let l of e||[]){let c=n(l);c&&s.get(c)>=2?(o.has(c)||(o.set(c,[]),r.push(c)),o.get(c).push(l)):i.push(l)}let a=r.map(l=>({parent:l,rows:o.get(l)}));return i.length&&a.push({parent:null,rows:i}),a}function GC(e,t,n){let s=new Map,o=new Map;for(let l of t||[]){let c=e?.[l.object];if(!Array.isArray(c)||c.length<2)continue;let u=c[c.length-1];!u||u===l.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(l))}let r=[...s.keys()].sort((l,c)=>s.get(c)-s.get(l)||l.localeCompare(c)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let l of r)for(let c of o.get(l)||[])a.has(c.id)||(a.add(c.id),i.push(c));return{roots:r,rows:i}}function qC(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let f=t[e[0].object],p=f&&f.length>1?"chained":"single",m=ps(s,"isa",e,{term:n,form:p,chain:f});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=ps(s,"isa",e,{term:n,form:"several"});return f&&r.push({...f,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),l=ps(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});l&&r.push({...l,role:"names-term",paragraph:"definition"});let c=[];for(let f of WC(a,t))for(let p of $$(f.rows,o.maxObjectsPerBodySentence))c.push({parent:f.parent,rows:p});if(c.length>o.maxBodySentences){let f=c.slice(0,o.maxBodySentences),p=f[f.length-1];for(let m of c.slice(o.maxBodySentences))p.rows=p.rows.concat(m.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?ps(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):ps(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=GC(t,e,o.closerRootCount);if(u.length){let f=ps(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});f&&r.push({...f,role:"closes-isa",paragraph:"definition"})}return r}function VC(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Bo(`${Uo(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function HC(e,t){let n=[],s=null,o=null;for(let r of e)(!s||r.paragraph!==o||s.length>=t)&&(s=[],o=r.paragraph,n.push(s)),s.push(r);return n.map(r=>({sentences:r,text:r.map(i=>i.text).join(" ")}))}function v$(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...bc,...n.config||{}},a=BC(e?.selected||[]),l=[];for(let u of qC(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of UC){let d=a.get(u);if(!(!d||!d.length))for(let f of $$(d,i.maxObjectsPerBodySentence)){let p=ps(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}VC(l,s);let c=new Map;for(let u of l)for(let d of u.rows)c.has(d.id)||c.set(d.id,d);return{term:s,sentences:l,paragraphs:HC(l,o),provenanceRows:[...c.values()]}}var KC=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function YC(e){let t=new Set,n=[];for(let s of e||[]){let o=s.provenance||(s.sourceTypes||[]).join(",");!o||t.has(o)||(t.add(o),n.push({provenance:s.provenance||"",sourceTypes:s.sourceTypes||[]}))}return n}var XC=Object.freeze({facts:"show the facts",chains:"show the chains"});function JC(e,t){let n=[...(e?.selected||[]).map(o=>o.row),...(e?.cut||[]).map(o=>o.row)].filter(Boolean),s=Object.entries(t||{}).filter(([,o])=>Array.isArray(o)&&o.length>1).map(([o,r])=>({object:o,chain:r}));return{escapes:XC,facts:n.map(KC),factCount:n.length,chains:s}}function x$(e,t,n={}){let s=t?.term||e?.term||"";return{kind:"term-article",term:s,headline:s,paragraphs:(t?.paragraphs||[]).map(o=>o.text).filter(Boolean),body:t?.paragraphs||[],sources:YC(t?.provenanceRows||[]),detail:JC(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function E$(e,t,n={},s=new Map,o={}){let r=w$(e,t,n,o),i=v$(r,s,o);return x$(r,i,o)}Za();var S$=new Set(["rdfs:subClassOf","rdf:type"]);function k$(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(S$.has(i.predicate)?(n.add(i.subject),t.has(i.object)||t.set(i.object,new Set),t.get(i.object).add(i.subject),s.push([i.subject,i.object])):i.predicate==="owl:disjointWith"&&o.push([i.subject,i.object]));let r={};for(let[i,a]of t)r[i]=a.size;return{classSubjectCounts:r,totalSubjects:n.size,subClassEdges:s,disjointEdges:o}}function j$(e,t,n=6){let s=pi(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Ja(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function _$(e){let t=[],n=new Set;for(let s of e||[])!s||!S$.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}qe();cc();function QC(e,t,n,s,o={}){let r=np(s||[]);if(!r||r.size===0)return null;let i=t||[],a=k$(n||i),l=j$(a.subClassEdges,_$(i));return E$(e,i,a,r,{...o,chains:l})}function R$(e,t,n,s={}){let o=St(e||{individuals:[],objectProperties:[]}),r=X(J,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=QC(t,i,o,n,s);return ZC(a)}function ZC(e){if(!e||!Array.isArray(e.paragraphs)||!e.paragraphs.length)return null;let t=e.detail&&Array.isArray(e.detail.facts)?e.detail.facts:[];return{term:e.term||"",paragraphs:e.paragraphs.slice(),sources:[...new Set((e.sources||[]).map(n=>n.provenance).filter(Boolean))],facts:t,factCount:e.detail&&Number.isInteger(e.detail.factCount)?e.detail.factCount:t.length}}var eO="no session is open on this page yet \u2014 await tmct.open() first",T$=Symbol.for("tmct.surface.fallback");function A$({open:e,ask:t=null,plan:n=null,turn:s=null,page:o={},fallback:r=!1,target:i=globalThis}={}){if(typeof e!="function")throw new Error("publishTmctSurface: `open` must be this page's session factory");let a=i.tmct;if(r&&a&&!a[T$])return a;let l=null,c=()=>{if(!l)throw new Error(eO);return l},u={async open(...d){return l=await e(...d),l},get session(){return l},async turn(d,f){let p=c();return s?s(d,f,p):typeof p.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:p.turn(d,f)},async ask(d,f){return t?t(d,f,c()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,f){return n?n(d,f,c()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[T$]=r,i.tmct=u,u}function tO({payload:e=null}={}){let t=La();return e&&(t.payload=e),{memoryDir:t}}async function nO(e,t,n){let s=null;try{s=await u$(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await p$(n.memoryDir,e,null,!0,null)}catch{s=null}return s&&s.text?{answer:s.text,data:s,miss:!1}:{answer:null,data:null,miss:!0}}A$({open:tO,ask:nO,page:{normFactTerm:J,digestTermFromPayloadBrowser:R$},fallback:!0});})();
|
|
227
|
+
`)}${V}`,replace:!0,...W.length?{pending:{items:W.map(ie=>ie.trim()),noun:"facts"}}:{}}}let z=n?.parsed?.shape==="meta"?n.parsed.object:null,Y=!1,ae=c.match(MC);if(ae)z=ae[1],Y=!0;else if(!z&&!n?.parsed){let I=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(z=I[1])}if(!z)return null;let Z=X(l,z),D=Ze(f.filter(I=>Z.has(I.subject)),i),U=Ze(f.filter(I=>Z.has(I.object)),i),G=Y?D.length?D:U:U.length?U:D;return G.length?m(G):null}function Hd(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var tp,CI,gn,dc,Uy,i$,sK,By,OI,oK,rK,a$,c$,l$,LI,Wy,iK,aK,cK,lK,uK,sp,dK,NI,Ye,Md,Fd,wi,PI,$o,pK,fK,mK,hK,gK,bK,wK,yK,$K,vK,xK,EK,SK,kK,jK,Gy,DI,bc,zI,_K,RK,rp,u$,TK,AK,IK,Ud,Bd,UI,CK,BI,WI,Gd,GI,VI,OK,d$,p$,HI,LK,NK,PK,MK,wr,FK,DK,zK,f$,UK,BK,KI,WK,GK,qK,vo,qy,ip,Dt,XI,QI,ZI,fc,oC,b$,VK,Xd,w$,rC,iC,gc,aC,cC,Fs,ms,lC,uC,dC,Qd,Yy,pC,je,fC,mC,hC,gC,bC,wC,yC,$C,vC,xC,EC,SC,kC,Jy,$$,_C,RC,AC,IC,CC,OC,e$,LC,PC,MC,FC,DC,t$,zC,UC,BC,WC,GC,n$,fs,s$,o$,r$,qC,HC,KC,HK,S$,XC,KK,Kd,ep,JC,YK,XK,k$,JK,QK,ZK,eY,tY,wc,nY,sY,oY,rY,QC,iY,aY,uc=O(()=>{Ue();hw();Bt();Oe();ks();Ka();Ya();_r();md();ww();qe();da();gd();vw();qn();yn();zo();qi();dd();pd();Mo();ho();tl();Ja();jw();_w();$d();Rw();vd();Tw();Aw();nc();nd();hi();wy();vy();Ms();Py();Vi(void 0);Gi(Ha);tp=new Set(["it","this","that","here"]),CI=e=>tp.has(String(e||"").trim().toLowerCase()),gn={imports:"understand a dependency/import relationship",uses:"understand a dependency/usage relationship (imports and/or calls)",calls:"understand a call relationship",callsSymbol:"understand a call relationship",defines:"locate what a module/class defines",contains:"understand class membership (methods/attributes)",tests:"assess test coverage",inherits:"understand a class hierarchy/inheritance relationship",touches:"understand commit/change history",touchesSymbol:"understand commit/change history",cochange:"understand change-coupling between modules",reexports:"understand a module's public exports/API surface",serves:"understand which component provides or backs another",denotes:"understand which vocabulary term names a code entity"},dc=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Uy="look up a taught fact about a subject/verb/object";i$={find:{tool:"tmct_search",arg:"query",help:"lexical search across the graph"},search:{tool:"tmct_search",arg:"query",help:"alias of /find"},context:{tool:"tmct_context",arg:"symbol",help:"the sized edit bundle for a symbol (start here to change code)"},snippet:{tool:"tmct_snippet",arg:"symbol",help:"exact source of one function/class/method"},describe:{tool:"tmct_describe",arg:"symbol",help:"a symbol's definition, kind and relations"},signature:{tool:"tmct_signature",arg:"symbol",help:"a symbol's signature only"},members:{tool:"tmct_members",arg:"class",help:"the methods/attributes of a class"},subclasses:{tool:"tmct_subclasses",arg:"class",help:"the subclasses of a class"},impact:{tool:"tmct_impact",arg:"module",help:"what a change to this module or symbol reaches (impact closure)"},callers:{tool:"tmct_callers",arg:"symbol",help:"functions that call this symbol"},callees:{tool:"tmct_callees",arg:"symbol",help:"functions this symbol calls"},tests:{tool:"tmct_tests_for",arg:"symbol",help:"the tests covering this symbol"},untested:{tool:"tmct_untested",arg:null,help:"symbols with no covering test"},history:{tool:"tmct_history",arg:"symbol",help:"the commit history of this symbol"},exports:{tool:"tmct_exports",arg:"module",help:"a module's public exports"},arch:{tool:"tmct_architecture",arg:"package",help:"the architecture overview (optional package filter)",optional:!0}},sK=new Set(["stats","memory","focus",...Object.keys(i$)]),By={Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},OI=new Set(["have","has","holds","hold"]),oK=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(gs)].filter(e=>!OI.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),rK=new Set([...mw.map(e=>e.name),...Object.values(i$).map(e=>e.tool)]),a$=new Set(["hi","hello","hey","yo","hiya","howdy","sup","greetings","g'day","gday","hey there","hi there","hello there","good morning","good afternoon","good evening","morning","alright","you alright","alright mate","morning all","yeah nah","hey y'all","howdy there","hiya there","good day","good day to you","salutations","good to meet you","pleased to meet you","yo yo","ayy","wassup","sup fam","heya","hiya!","gm","ge"]),c$=new Set(["thanks","thank you","thankyou","thx","ty","ta","cheers","nice one","much appreciated","cool thanks","many thanks","much obliged","ta very much","cheers mate","cheers for that","tks","sweet thanks","nice","brilliant","ta for that","cheers, that's everything for now, thanks","that's everything for now, thanks","that's all for now, thanks"]),l$=new Set(["bye","goodbye","quit","exit","see ya","see you","cya","later","farewell","peace","peace out","im off","i'm off","gtg","gotta go","catch you later","farewell then"]),LI=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Wy=e=>e.replace(/(.)\1+/g,"$1");iK=np(a$),aK=np(c$),cK=np(l$),lK=new RegExp(`^(?:${[...LI].map(Qe).join("|")})\\s+(.+)$`,"i"),uK=[...a$,...c$,...l$,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],sp="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",dK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${sp})\\s+than\\s+(.+)$`,"i"),NI=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${sp})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ye="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Md="mgx:ownedBy",Fd="mgx:hasProperty",wi="rdfs:subClassOf",PI=new Set(["operator","teach","entailed"]),$o=e=>!!e.sourceTypes?.some(t=>PI.has(t));pK=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),fK=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),mK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),hK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${sp})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),gK=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Ye})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),bK=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+may\\s+not\\s+be\\s+with\\s+the\\s+([a-z][\\w-]*)\\s+without\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i");wK=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),yK=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),$K=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ye})\\s+([\\w-]+)[.!?]*$`,"i"),vK=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ye})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),xK=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),EK=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ye})\\s+([\\w-]+)[?.!]*$`,"i"),SK=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ye})\\s+([\\w-]+)$`,"i"),kK=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ye})\\s+(.+?)[?.!\\s]*$`,"i"),jK=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ye}))?[?.!\\s]*$`,"i"),Gy=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,DI=new Set(["bus","gas","plus","minus","surplus","lens","bias","atlas","canvas","virus","bonus","campus","census","chorus","circus","focus","status","iris","genius","sinus","walrus","cactus","fungus","radius","nucleus","alias","crocus","abacus","syllabus","octopus","platypus"]);bc="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",zI="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",_K=new RegExp(`^(.+?)\\s+(${zI})\\s+(.+)$`,"i"),RK=new RegExp(`^([\\w'-]+)\\s+${bc}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),rp="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",u$="with|to|from|by|of|in|on|for|as|about|into",TK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${bc}(${rp})\\s+(${u$})\\s+(.+)$`,"i"),AK=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${rp})\\s+(${u$})\\s+(.+)$`,"i"),IK=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ye})\\s+(.+?)[.!?]*$`,"i"),Ud=/^(?:is|are|am|owns|maintains)$/i,Bd=/\b(?:is|are|am|owns|maintains)\b/i,UI=new RegExp("^(?:i|me|you|he|him|she|her|it|we|us|they|them|my|your|his|its|our|their|mine|yours|hers|ours|theirs|this|that|these|those|a|an|the|every|each|all|some|any|no|both|either|neither|in|on|at|to|from|by|with|for|of|about|into|onto|over|under|near|before|after|during|through|up|down|off|out|above|below|between|among|against|without|within|along|across|behind|beyond|upon|toward|towards|per|and|but|or|if|because|although|though|while|when|since|unless|until|whether|so|nor|than|as|what|who|whom|whose|which|where|why|how)$","i"),CK=new RegExp(`^(?:${Hs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");BI=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${bc}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),WI=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${bc}([a-z]+(?:\\s+(?:${Ye}))?)[?.!\\s]*$`,"i"),Gd=/^(?:be|own|maintain)$/i,GI=new RegExp(`^(${Ye})\\s+(.+)$`,"i");VI=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],OK=new RegExp(`^(?:${VI.join("|")})\\b\\s*,?\\s+`,"i"),d$=Object.freeze(["you","i","it","they","he","she","we"]),p$=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),HI=Object.freeze([...p$,...d$]),LK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${HI.join("|")})\\s+\\S+`,"i"),NK=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${d$.join("|")})\\s+(?:is|are|am|was|were)|(${p$.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),PK=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),MK=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ye})\\s+([\\w-]+)$`,"i"),wr="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",FK=new RegExp(`^what\\s+does\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),DK=new RegExp(`^what\\s+(.+?)${wr}\\s+does${wr}\\??$`,"i"),zK=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${wr}\\s+do${wr}\\??$`,"i"),f$="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",UK=new RegExp(`^who\\s+(?:is|was)\\s+${f$}$`,"i"),BK=new RegExp(`^what\\s+(?:did|has)\\s+${f$}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),KI="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",WK=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${KI}\\b`,"i"),GK=new RegExp("^(?:what\\s+time\\s+is\\s+it(?:\\s+(?:now|right\\s+now))?|what(?:'s|s|\\s+is)\\s+the\\s+time(?:\\s+(?:now|right\\s+now))?|what\\s+day\\s+is\\s+it(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+(?:the\\s+)?(?:day|date)(?:\\s+today)?|what(?:'s|s|\\s+is)\\s+today'?s\\s+date|what(?:'s|s|\\s+is)\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?|how'?s\\s+the\\s+weather(?:\\s+like)?(?:\\s+(?:today|outside))?)\\??$","i");qK=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Zt,...wn,"owns","maintains"].filter(e=>e.length>=3)),vo={"rdfs:subClassOf":"is a kind of","mgxneg:subClassOf":"is not a kind of","rdf:type":"is a","owl:disjointWith":"is not a","mgx:partOf":"is part of","mgx:hasA":"has","mgx:usedFor":"is used for","mgx:capableOf":"can","mgx:atLocation":"is found in","mgx:causes":"causes","mgx:hasProperty":"is","mgx:madeOf":"is made of","mgx:receivesAction":"can be","mgx:createdBy":"is created by","mgx:mannerOf":"is a way to","mgx:desires":"wants","mgx:locatedNear":"is typically near","mgx:motivatedByGoal":"is motivated by","mgx:obstructedBy":"can be prevented by","mgx:causesDesire":"makes you want to","mgx:hasSubevent":"involves","mgx:hasFirstSubevent":"begins with","mgx:hasLastSubevent":"ends with","mgx:hasPrerequisite":"requires","mgx:ownedBy":"is owned by","mgx:rendersAs":"renders as","mgx:synonym":"means the same as","mgx:antonym":"is the opposite of","mgx:similarTo":"is similar to","mgx:relatedTo":"is related to","mgx:symbolOf":"is a symbol of","mgx:currently-in":"is in","mgx:located-in":"is in","mgx:fixed-in":"is fixed in","mgx:stands-locked-in":"stands locked in","mgx:works-in":"works in"},qy=new Set(["mgx:hidden-in","mgx:is-objective","mgx:unlocks-with","mgx:is-npc","mgx:acts-on-turn","mgx:acts-toward","mgx:is-container","mgx:is-open"]),ip=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Dt=e=>`${e.subject} ${h$(e.predicate)} ${e.object}`;XI=Object.entries(vo).filter(([e])=>!ip.has(e)).map(([e,t])=>{let n=/^(?:is|are)\s+(.+)$/i.exec(t);return n?{predicate:e,marker:n[1].trim().toLowerCase()}:null}).filter(e=>e&&e.marker.length>1).sort((e,t)=>t.marker.length-e.marker.length);QI=/ \(source: [^)]*\)$/;ZI=8;fc=null;oC=/^(?:every|each|all|any)\s+/i;b$=new Set(["module","modules","class","classes","function","functions","method","methods","handler","handlers","controller","controllers","service","services","component","components","flow","flows","thing","things","item","items","object","objects","commit","commits"]),VK=new Set([["interpreter","compiler"],["string","thread"],["heart","kernel"],["battalion","heap"],["bash","sock"],["command","skill"],["docker","longshoreman"],["name","list"],["list","number"]].map(([e,t])=>[e,t].sort().join("|"))),Xd=/^(?:is|are|was|were)\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,w$=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,rC=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,iC=/^(who|what)'?s\s+/i,gc=e=>String(e).replace(iC,(t,n)=>`${n} is `),aC=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;cC=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Fs=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,ms=new Set(["rdfs:subClassOf","rdf:type"]),lC=6,uC=/^why\s+(?=(?:is|are)\b)/i,dC=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Qd=new Set(["kind","sort","type","subclass","superclass"]),Yy=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,pC=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,je=32,fC=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,mC=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,hC=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,gC=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,bC=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,wC=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,yC=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,$C=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ye})\\s+(.+?)\\s*[?.!]*$`,"i"),vC=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,xC=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,EC=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,SC=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,kC=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;Jy=e=>String(e||"").replace(/\s+/g," ").trim();$$="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",_C=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${$$})[?.!\\s]*$`,"i"),RC=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${$$})\\s+([\\w'-]+)[?.!\\s]*$`,"i");AC=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),IC=Object.entries(vo).filter(([e])=>!AC.has(e)&&!ip.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Qe(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),CC=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),OC=Object.entries(vo).filter(([e])=>!CC.has(e)&&!ip.has(e)).map(([e,t])=>{let n;if(t==="can be")n=new RegExp("^can\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+be\\s+(.+?)[?.!\\s]*$","i");else if(t.startsWith("is ")){let s=Qe(t.slice(3));n=new RegExp(`^(?:is|are)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${s}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}else{let[s,...o]=t.split(" "),r=[m$(s),...o].map(Qe).join("\\s+");n=new RegExp(`^(?:does|do)\\s+(?:an?\\s+|the\\s+)?(.+?)\\s+${r}\\s+(?:an?\\s+|the\\s+)?(.+?)[?.!\\s]*$`,"i")}return{predicate:e,phrase:t,re:n}}).sort((e,t)=>t.re.source.length-e.re.source.length),e$=/^what\s+(?:inherits?\s+(?:from\s+)?(?:an?\s+)?|is\s+(?:an?\s+)?(?:kind|sort|type)\s+of\s+|is\s+(?:an?\s+)?subclass\s+of\s+)(.+?)[?.!\s]*$/i,LC=new Set(["changed","change","changes","updated","modified","happened","occurred"]);PC=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,MC=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,FC=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,DC=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,t$=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),zC=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,UC=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,BC=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,WC=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,GC=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,n$=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,fs=/^(?:it|this|that)$/i,s$=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,o$=/^(?:you|i|they|he|she|we)\b/i,r$=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${hc(e)} is ${t}".`,replace:!0}),qC=/^(?:what\s+(?:did|have)\s+(?:i|we)\s+(?:told?|tell|said?|say)\s+(?:you|me|us)?(?:\s+(?:last\s+time|before|earlier|previously|already))?|what\s+facts?\s+do\s+you\s+(?:know|have|remember)|what\s+do\s+you\s+(?:know|remember)|what\s+have\s+you\s+(?:learned|learnt|remembered))[?.!\s]*$/i;HC=/inherit|supertype|subclass|extend|specializ/i,KC=8;HK=new RegExp(`\\b(?:${[...tp].join("|")})\\b`,"i"),S$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,XC=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i;KK=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),Kd="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",ep="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",JC=`(?:\\s+${ep})?`,YK=[new RegExp(`^${Kd}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${JC}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Kd}architecture\\s+(?:${ep}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Kd}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${ep}(?:\\s+here)?\\??$`,"i")],XK={find:"locate a specific named entity",search:"locate a specific named entity",context:"gather the sized edit bundle for a symbol before changing code",snippet:"view a symbol's exact source",describe:"look up a symbol's definition and relations",signature:"view a symbol's signature",members:gn.contains,subclasses:gn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:gn.calls,callees:gn.calls,tests:gn.tests,untested:gn.tests,history:gn.touches,exports:gn.reexports,arch:"understand the overall architecture (package/module boundaries)",capabilities:"see what /plan can plan over \u2014 built-in query tools and taught actions",syllogise:"materialize the entailed facts that follow from what's remembered about one term",wiki:"toggle the live Wikipedia supplement for questions nothing local can answer",export:"write the memory store to a file, in the standard JSONL shape",ingest:"read a local text file and store every fact the recognizer grounds from it"},k$="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",JK=new RegExp(`^what\\s+(?:would|will|might|could|does|do)?\\s*(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|is\\s+impacted|be\\s+impacted)\\s+if\\s+(?:i|we|you|one|someone)\\s+${k$}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),QK=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${k$}\\s+(?:the\\s+)?(.+?),?\\s+what\\s+(?:would\\s+|will\\s+|might\\s+|could\\s+|does\\s+|do\\s+)?(?:breaks?|fails?|happens?|stops?\\s+working|is\\s+affected|are\\s+affected|gets?\\s+affected|be\\s+affected|would\\s+break|will\\s+break)[?.!\\s]*$`,"i"),ZK=new RegExp("^what\\s+(?:is|are|gets?|would\\s+be|will\\s+be)\\s+(?:affected|impacted|broken)\\s+(?:by|when|if)\\s+(?:i\\s+|we\\s+|you\\s+)?(?:chang(?:e|es|ing)|edit(?:s|ing)?|modif(?:y|ies|ying)|touch(?:es|ing)?|updat(?:e|es|ing)|delet(?:e|es|ing)|remov(?:e|es|ing)|a\\s+change\\s+to)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),eY=new RegExp("^(?:(?:can|could)\\s+(?:i|we|you|one|someone)\\s+safely|is\\s+it\\s+safe\\s+to)\\s+(?:change|edit|modify|touch|update|alter|delete|remove|drop)\\s+(?:the\\s+)?(.+?)[?.!\\s]*$","i"),tY=new RegExp("^(?:what(?:'s|\\s+is)\\s+the\\s+)?(?:blast\\s+radius|impact)\\s+(?:of|for)\\s+(?:chang(?:ing|es)\\s+|editing\\s+|modifying\\s+|touching\\s+|updating\\s+|deleting\\s+|removing\\s+)?(?:the\\s+)?(.+?)[?.!\\s]*$","i"),wc="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",nY=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${wc}\\s*\\??$`,"i"),sY=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${wc}\\s*\\??$`,"i"),oY=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${wc}\\s*\\??$`,"i"),rY=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${wc}\\s*[.!]*$`,"i"),QC=Object.freeze([...tp].filter(e=>e!=="here").concat("they")),iY=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${QC.join("|")})\\b(\\s+\\S.*)?$`,"i"),aY=Q(".tmct","memory","corpus-seed.json")});uc();qe();Hn();nc();var yc={uninformativeClassMaxShare:.35,uninformativeClassMinSubjects:12,entailedDepthPenalty:.2,minoritySensePenalty:.5,minScore:.05,groupSplitThreshold:4,openerConceptCount:2,maxObjectsPerBodySentence:4,maxBodySentences:4,closerRootCount:2,budget:{chatReply:5,researchPanel:10,cliDigest:12,ledgerTerm:8}};var R$=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),xo=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),$c=e=>R$[e]||"other",eO=e=>Math.max(0,Math.min(1,e));function j$(e){let t=(e.sourceTypes||[]).map(n=>Ys[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Ys.entailed}function tO(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function _$(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function T$(e,t,n={},s={}){let o={...yc,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter($=>$&&$.object&&$.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let $ of i){if($c($.predicate)==="isa"){let x=_$($.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:$,family:"isa",reason:"uninformative-class",share:x});continue}}c.push($)}let u=c.filter($=>$c($.predicate)==="isa").map($=>$.object),d=tc(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let $ of d.clusters){let x=0;for(let S of $.objects){p.set(S,$.label);let E=c.find(R=>R.object===S&&$c(R.predicate)==="isa");x+=E?j$(E):0}f.set($.label,x)}let m=null,h=-1;for(let[$,x]of[...f].sort((S,E)=>S[0].localeCompare(E[0])))x>h&&(h=x,m=$);let g=[];for(let $ of c){let x=$c($.predicate),S=j$($),E={provenance:S};if(tO($)&&(S-=o.entailedDepthPenalty,E.entailed=!0),x==="isa"){let j=.6+.4*(1-_$($.object,n));S*=j,E.informativeness=j;let A=p.get($.object);m&&A&&A!==m&&(S-=o.minoritySensePenalty,E.minoritySense=A)}S=eO(S),g.push({row:$,family:x,score:S,reasons:E})}let b=[];for(let $ of g)$.score<o.minScore?a.push({row:$.row,family:$.family,reason:"below-floor",score:$.score}):b.push($);let y=new Map;for(let $ of b)y.has($.family)||y.set($.family,[]),y.get($.family).push($);for(let $ of y.values())$.sort((x,S)=>S.score-x.score||x.row.object.localeCompare(S.row.object));let w=xo.filter($=>y.has($)).concat([...y.keys()].filter($=>!xo.includes($)).sort()),v=[],_=!1;for(;v.length<r&&!_;){_=!0;for(let $ of w){let x=y.get($);if(x&&x.length&&(v.push(x.shift()),_=!1,v.length>=r))break}}for(let $ of w)for(let x of y.get($)||[])a.push({row:x.row,family:x.family,reason:"over-budget",score:x.score});return v.sort(($,x)=>{let S=xo.indexOf($.family),E=xo.indexOf(x.family);return S-E||x.score-$.score||$.row.object.localeCompare(x.row.object)}),{term:e,selected:v,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}Yi();nn();var nO=new Set(["isa","location","partOf","capableOf","usedFor"]),sO=new Set(["single","several","chained","group","closer"]),A$=(e,t)=>`${e}:${t}`;function ap(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!nO.has(n.family)||typeof n.form!="string"||!sO.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=A$(n.family,n.form);t.has(s)||t.set(s,{family:n.family,form:n.form,templates:[]});let o=t.get(s);o.templates.includes(n.template)||o.templates.push(n.template)}return t}var Eo=e=>`${Uo(e)} ${e}`;function oO(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Eo(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Or(s.map(Eo))}`:n}function rO(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(l=>String(l||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Bo(o),A_TERM:Eo(o),A_TERM_CAP:Bo(Eo(o)),TERMS:Ki(o),TERMS_CAP:Bo(Ki(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Eo(a):"",OBJECT:i,A_OBJECT:i?Eo(i):"",OBJECTS_A:Or(r.map(Eo)),OBJECTS_PLURAL:Or(r.map(Ki)),OBJECTS_RAW:Or(r),CHAIN:oO(n&&n.length?n:r.slice(0,1))}}function iO(e,t){return String(e).replace(/\{([A-Z_]+)\}/g,(n,s)=>s in t?t[s]:"").replace(/\s+/g," ").replace(/\s+([.,;])/g,"$1").trim()}function hs(e,t,n,s={}){let o=(n||[]).filter(Boolean);if(!o.length)return null;let r=s.term??o[0].subject??"",i=s.form||(o.length>1?"several":"single"),a=e instanceof Map?e.get(A$(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=ia(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=iO(l[u],rO(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}Yi();var aO=xo.filter(e=>e!=="isa"&&e!=="other");function cO(e){let t=new Map;for(let n of e||[])t.has(n.family)||t.set(n.family,[]),t.get(n.family).push(n.row);return t}function I$(e,t){let n=Math.max(1,Math.trunc(t)||1),s=[];for(let o=0;o<(e||[]).length;o+=n)s.push(e.slice(o,o+n));return s}function lO(e,t){let n=l=>(t?.[l.object]||[])[1]||null,s=new Map;for(let l of e||[]){let c=n(l);c&&s.set(c,(s.get(c)||0)+1)}let o=new Map,r=[],i=[];for(let l of e||[]){let c=n(l);c&&s.get(c)>=2?(o.has(c)||(o.set(c,[]),r.push(c)),o.get(c).push(l)):i.push(l)}let a=r.map(l=>({parent:l,rows:o.get(l)}));return i.length&&a.push({parent:null,rows:i}),a}function uO(e,t,n){let s=new Map,o=new Map;for(let l of t||[]){let c=e?.[l.object];if(!Array.isArray(c)||c.length<2)continue;let u=c[c.length-1];!u||u===l.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(l))}let r=[...s.keys()].sort((l,c)=>s.get(c)-s.get(l)||l.localeCompare(c)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let l of r)for(let c of o.get(l)||[])a.has(c.id)||(a.add(c.id),i.push(c));return{roots:r,rows:i}}function dO(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let f=t[e[0].object],p=f&&f.length>1?"chained":"single",m=hs(s,"isa",e,{term:n,form:p,chain:f});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=hs(s,"isa",e,{term:n,form:"several"});return f&&r.push({...f,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),l=hs(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});l&&r.push({...l,role:"names-term",paragraph:"definition"});let c=[];for(let f of lO(a,t))for(let p of I$(f.rows,o.maxObjectsPerBodySentence))c.push({parent:f.parent,rows:p});if(c.length>o.maxBodySentences){let f=c.slice(0,o.maxBodySentences),p=f[f.length-1];for(let m of c.slice(o.maxBodySentences))p.rows=p.rows.concat(m.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?hs(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):hs(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=uO(t,e,o.closerRootCount);if(u.length){let f=hs(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});f&&r.push({...f,role:"closes-isa",paragraph:"definition"})}return r}function pO(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Bo(`${Uo(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function fO(e,t){let n=[],s=null,o=null;for(let r of e)(!s||r.paragraph!==o||s.length>=t)&&(s=[],o=r.paragraph,n.push(s)),s.push(r);return n.map(r=>({sentences:r,text:r.map(i=>i.text).join(" ")}))}function C$(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...yc,...n.config||{}},a=cO(e?.selected||[]),l=[];for(let u of dO(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of aO){let d=a.get(u);if(!(!d||!d.length))for(let f of I$(d,i.maxObjectsPerBodySentence)){let p=hs(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}pO(l,s);let c=new Map;for(let u of l)for(let d of u.rows)c.has(d.id)||c.set(d.id,d);return{term:s,sentences:l,paragraphs:fO(l,o),provenanceRows:[...c.values()]}}var mO=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function hO(e){let t=new Set,n=[];for(let s of e||[]){let o=s.provenance||(s.sourceTypes||[]).join(",");!o||t.has(o)||(t.add(o),n.push({provenance:s.provenance||"",sourceTypes:s.sourceTypes||[]}))}return n}var gO=Object.freeze({facts:"show the facts",chains:"show the chains"});function bO(e,t){let n=[...(e?.selected||[]).map(o=>o.row),...(e?.cut||[]).map(o=>o.row)].filter(Boolean),s=Object.entries(t||{}).filter(([,o])=>Array.isArray(o)&&o.length>1).map(([o,r])=>({object:o,chain:r}));return{escapes:gO,facts:n.map(mO),factCount:n.length,chains:s}}function O$(e,t,n={}){let s=t?.term||e?.term||"";return{kind:"term-article",term:s,headline:s,paragraphs:(t?.paragraphs||[]).map(o=>o.text).filter(Boolean),body:t?.paragraphs||[],sources:hO(t?.provenanceRows||[]),detail:bO(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function L$(e,t,n={},s=new Map,o={}){let r=T$(e,t,n,o),i=C$(r,s,o);return O$(r,i,o)}nc();var N$=new Set(["rdfs:subClassOf","rdf:type"]);function P$(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(N$.has(i.predicate)?(n.add(i.subject),t.has(i.object)||t.set(i.object,new Set),t.get(i.object).add(i.subject),s.push([i.subject,i.object])):i.predicate==="owl:disjointWith"&&o.push([i.subject,i.object]));let r={};for(let[i,a]of t)r[i]=a.size;return{classSubjectCounts:r,totalSubjects:n.size,subClassEdges:s,disjointEdges:o}}function M$(e,t,n=6){let s=pi(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=ec(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function F$(e){let t=[],n=new Set;for(let s of e||[])!s||!N$.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}qe();uc();function wO(e,t,n,s,o={}){let r=ap(s||[]);if(!r||r.size===0)return null;let i=t||[],a=P$(n||i),l=M$(a.subClassEdges,F$(i));return L$(e,i,a,r,{...o,chains:l})}function D$(e,t,n,s={}){let o=vt(e||{individuals:[],objectProperties:[]}),r=X(J,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=wO(t,i,o,n,s);return yO(a)}function yO(e){if(!e||!Array.isArray(e.paragraphs)||!e.paragraphs.length)return null;let t=e.detail&&Array.isArray(e.detail.facts)?e.detail.facts:[];return{term:e.term||"",paragraphs:e.paragraphs.slice(),sources:[...new Set((e.sources||[]).map(n=>n.provenance).filter(Boolean))],facts:t,factCount:e.detail&&Number.isInteger(e.detail.factCount)?e.detail.factCount:t.length}}var $O="no session is open on this page yet \u2014 await tmct.open() first",z$=Symbol.for("tmct.surface.fallback");function U$({open:e,ask:t=null,plan:n=null,turn:s=null,page:o={},fallback:r=!1,target:i=globalThis}={}){if(typeof e!="function")throw new Error("publishTmctSurface: `open` must be this page's session factory");let a=i.tmct;if(r&&a&&!a[z$])return a;let l=null,c=()=>{if(!l)throw new Error($O);return l},u={async open(...d){return l=await e(...d),l},get session(){return l},async turn(d,f){let p=c();return s?s(d,f,p):typeof p.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:p.turn(d,f)},async ask(d,f){return t?t(d,f,c()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,f){return n?n(d,f,c()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[z$]=r,i.tmct=u,u}function vO({payload:e=null}={}){let t=Ma();return e&&(t.payload=e),{memoryDir:t}}async function xO(e,t,n){let s=null;try{s=await v$(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await E$(n.memoryDir,e,null,!0,null)}catch{s=null}return s&&s.text?{answer:s.text,data:s,miss:!1}:{answer:null,data:null,miss:!0}}U$({open:vO,ask:xO,page:{normFactTerm:J,digestTermFromPayloadBrowser:D$},fallback:!0});})();
|