@polycode-projects/the-mechanical-code-talker 3.1.3 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,41 +1,41 @@
1
- (()=>{var gb=Object.defineProperty;var L=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var En=(e,t)=>{for(var n in t)gb(e,n,{get:t[n],enumerable:!0})};var et,w_,y_,v_,$_,x_,k_,S_,E_,j_,__,R_,A_,T_,C_,I_,O_,Z,$e,qt,hu,L_,N_,M_,De=L(()=>{et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},w_=et("createRequire"),y_=et("readFileSync"),v_=et("access"),$_=et("readFile"),x_=et("writeFile"),k_=et("appendFile"),S_=et("mkdir"),E_=et("mkdtemp"),j_=et("rename"),__=et("unlink"),R_=et("rm"),A_=et("stat"),T_=et("copyFile"),C_=et("readdir"),I_=et("createReadStream"),O_=et("createWriteStream"),Z=(...e)=>e.join("/"),$e=e=>String(e).replace(/\/[^/]*$/,""),qt=(...e)=>e.join("/"),hu="/",L_=et("randomBytes"),N_=et("spawnSync"),M_=et("createInterface")});var tt,F_,D_,gu,ze,Mo,bb,jn,wb,Nr,ca,yb,vb,z_,$b,B_,U_,W_,q_,G_,vt=L(()=>{tt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},F_=tt("createRequire"),D_=tt("readFileSync"),gu=tt("access"),ze=tt("readFile"),Mo=tt("writeFile"),bb=tt("appendFile"),jn=tt("mkdir"),wb=tt("mkdtemp"),Nr=tt("rename"),ca=tt("unlink"),yb=tt("rm"),vb=tt("stat"),z_=tt("copyFile"),$b=tt("readdir"),B_=tt("createReadStream"),U_=tt("createWriteStream"),W_=tt("randomBytes"),q_=tt("spawnSync"),G_=tt("createInterface")});function gs(e){return e.replace(xb,"").trim()}function Xt(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(Sb,"").trim();if(s=s.replace(jb,"").trim(),s===t)break;t=s}return t}var bu,Po,Fo,Yt,wu,an,la,xb,kb,Sb,Eb,jb,de,Do,_b,yu,Be,Gt,Hn,vu,ua,da,pa,$u,zo,bs,xu,ku,ws,_n,Rn,Xs,Ge,Su,ys,vs,Kn,fn,Eu,Bo,Js,Mr,Qs,ju,An=L(()=>{bu=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],Po={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",...bu]},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"]}},Fo=Object.freeze([...bu,"is the superclass of","are the superclass of","is the parent class of"]),Yt=Object.freeze(["defined","declared","located","implemented"]),wu=Object.freeze(["now","currently","right now","at the moment","these days","today"]),an=Object.freeze(["mentioned","referenced"]),la=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),xb=new RegExp(`\\s+(?:${la.join("|")})\\s*[?.!]*$`,"i");kb=Object.freeze(["then","though","too"]),Sb=new RegExp(`\\s+(?:${kb.join("|")})\\s*[?.!]*$`,"i"),Eb=Object.freeze(["please explain","explain"]),jb=new RegExp(`,\\s*(?:${Eb.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(Po).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Do=Object.freeze(new Set(["has","have","holds","hold"])),_b=e=>!Fo.includes(e),yu=Object.freeze([...new Set(Object.keys(de).filter(_b).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"}),Gt=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),Hn=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"}),vu=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"}}),ua=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"}),da=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"}),pa=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"}),$u=/\b([a-z]{3,})in'/gi,zo=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"]),bs=Object.freeze(["this","it","that","here","this one","that one"]),xu=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]}`}]),ku=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`}]),ws=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),_n=Object.freeze(["that","which","who"]),Rn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),Xs=Object.freeze({"but do not":"difference","but does not":"difference","and do not":"difference","and does not":"difference","but not":"difference","and not":"difference",except:"difference",without:"difference",and:"intersection",plus:"intersection",but:"intersection",or:"union"}),Ge=Object.freeze({public:{via:"visibility",value:"public"},private:{via:"visibility",value:"private"},protected:{via:"visibility",value:"protected"},static:{via:"attr",attr:"isStatic"},abstract:{via:"attr",attr:"isAbstract"},constant:{via:"attr",attr:"isConstant"},exported:{via:"exported"},"re-exported":{via:"exported"},tested:{via:"tested",value:!0},covered:{via:"tested",value:!0},untested:{via:"tested",value:!1},uncovered:{via:"tested",value:!1}}),Su=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),ys=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"]),vs=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"]),Kn=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"}),fn=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"}}),Eu=Object.freeze({tests:"Module",test:"Module"}),Bo=Object.freeze(["those","them","these"]),Js=Object.freeze(["contains","defines"]),Mr=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"]),Qs=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),ju=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 Jt,_u,Ru,fa,Au,Y_,X_,Tu=L(()=>{An();Jt=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),_u=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Ru=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),fa=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:Yt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:Jt("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:Jt("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:_u("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:Ru("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:Ru("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_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:_u("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:Jt("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:Jt("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:Jt("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:Jt("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:Jt("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:Jt("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:Jt("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:Jt("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:Jt("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:Jt("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}}]),Au=fa.filter(e=>e.tier==="hot"),Y_=fa.filter(e=>e.tier==="cold"),X_=Object.freeze(fa.map(e=>e.name))});var Cu,Oe,Lt=L(()=>{De();Cu=Z(".tmct","graph.json"),Oe=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function Rb(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 Iu(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})=>Rb(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 Ou=L(()=>{});var eo={};En(eo,{clearCache:()=>Ab,emptyEntities:()=>ma,fetchEntities:()=>Ob,registerProvider:()=>Tb});function Ab(){Zs=null,Uo=null}function Tb(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Pr;return Pr=e??null,Zs=null,t}function ma(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function Cb(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return ma();throw new Oe(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Oe(`graph artifact ${e} is not valid JSON`)}}async function Ib(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(Uo&&Uo.key===n)return Uo.payload;let s=[];for(let r=0;r<t.length;r++){let i=await Cb(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Iu(s);return Uo={key:n,payload:o},o}async function Ob(e){if(Pr){let s;try{s=await Pr(e)}catch(o){throw o instanceof Oe?o:new Oe(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Oe("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return Ib(e);if(Zs&&Zs.file===e.graphFile)return Zs.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return ma();throw new Oe(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Oe(`graph artifact ${e.graphFile} is not valid JSON`)}return Zs={file:e.graphFile,payload:n},n}var Zs,Uo,Pr,Wo=L(()=>{vt();Lt();Ou();Zs=null,Uo=null,Pr=null});function mn(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<=Lu)}function ha(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>Lu||Lb.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=Nb))break;return t}function Fr({name:e,doc:t}={}){return[...new Set([...mn(e),...ha(t)])].sort()}function Nu(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 $s(e,t,{limit:n=10}={}){let s=[...new Set([...mn(t),...ha(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 Mu(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 Lb,Lu,Nb,Yn=L(()=>{Lb=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+/)),Lu=40,Nb=120});function Pu(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 qo(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:Pb(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];return n.startsWith("corpus-weak:")?{kind:"corpusWeak",name:n.slice(12)||"unknown"}:n.startsWith("corpus:")?{kind:"corpus",name:n.slice(7)||"unknown"}:n.startsWith("child:")?{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"}:n.startsWith("world:")?{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"}:n.startsWith("ace:")?{kind:"operator",...Pu(n.slice(4))}:n.startsWith("teach:")?{kind:"teach",...Pu(n.slice(6))}: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 zb(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Du;let n=Number(t);return Number.isFinite(n)?Math.max(ga,Math.min(zu,n)):Du}function Bb(e,t=Date.now(),n=Fb){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Fu+(1-Fu)*Math.pow(.5,o/n)}function Bu(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=Db(m);if(!h)continue;i.push(h);let g=(Go[h]??0)*zb(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=Bb(e?.createdAt,s,n.halfLifeMs),d=ba(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:ba(u)};return{score:d,inputs:f}}function Uu({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+Ub),i=(o*r+1)/2;return ba(ga+(zu-ga)*i)}var Dr,wa,Nt,xs,Mb,Pb,Go,Fb,Fu,ga,zu,Du,ba,Db,Ub,ks=L(()=>{Dr="mgx:trustScore",wa="mgx:trustInputs",Nt="mgx:createdAt",xs="mgx:updatedAt";Mb="wikipedia-live",Pb=e=>e===Mb?"referenceLive":"reference";Go=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Fb=720*60*60*1e3,Fu=.9,ga=.5,zu=1.5,Du=1,ba=(e,t=6)=>Number(e.toFixed(t)),Db=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";Ub=19});var Ss,ya=L(()=>{Ss=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function va(e,t){return Math.log(1+e/(1+t))}var Vo=L(()=>{});var Br={};En(Br,{bfsLevels:()=>zr,findActionPath:()=>$a,findReachableSet:()=>xa});function Wu(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function qu(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 $a(e,t,n,{maxDepth:s=50,stateKey:o=Wu}={}){if(t(e))return{actions:[],states:[e]};let r=qu(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 xa(e,t,{maxDepth:n=50,stateKey:s=Wu}={}){let o=qu(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*zr(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 Es=L(()=>{});function Wr(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 Ra(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function On(e){let t=String(e?.prop||"").toLowerCase();if(Gu[t])return Gu[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 Cn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function ka(e){let t=Cn(e).split("/");return t[t.length-1]}function Wb(e){return(e?.derived_from||[]).filter(od).length}function Vu(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+Wb(e)}function Vt(e,t){let n=Cn(t);if(!n)return{match:null,candidates:[]};let s=ka(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Cn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(ka(a)===s||ka(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||Vu(a.ind)-Vu(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 $t(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 qb(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 Hu(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function In(e){let t=e||"Entity",n=mn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function nt(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Aa(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${In(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(od);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}=qb(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(` ${Hu(l)} (${c.length}) \u2192 ${nt(c.map(u=>u.objectLabel||u.object),Ku)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${Hu(l)} (${c.length}) by ${nt(c.map(u=>u.subjectLabel||u.subject),Ku)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${nt(a,Gb)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${In(l.class)})`).join(", ")}`),e.truncated.length&&s.push(Vb(e)),s.join(`
2
- `)}function Vb(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=On(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=Tn(e,c.subject),d=Tn(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 zr(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 rd(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>=Hb){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,Sa)){let u=c.tests.length?`tests: ${nt(c.tests,Kb)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Sa&&o.push(` \u2026+${a.length-Sa} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=On({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 id(e){let t=new Map;for(let n of e.relations)if(On(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 Xu(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function dd(e,t,n=null){let s=n||(i=>Tn(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 Se(e,i))r(s(a.subject),s(a.object));return o}function Tw(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*vw&&f.length<n?f.push([m,h]):p.length<Yu&&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<kw&&i.length;c++){let u=new Map,d=[];for(let f of Sw){let p=dd(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*$w,m.score*xw),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,Yu).filter(([f])=>!l.has(f)))}}function Cw(e,t=[],{depth:n=cd,q:s=ud,nodeLimit:o=ld,kinds:r=Ew,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(_=>[_.ind.id,_])),d=0;for(let _ of t)d=Math.max(d,_.score);let f=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let m=dd(e,r,a),h=_=>m.get(_)?.size||0,g=[],b=(_,R)=>_.hop!==R.hop?_.hop<R.hop:_.deg!==R.deg?_.deg<R.deg:_.id<R.id,y=(_,R)=>{let E=g[_];g[_]=g[R],g[R]=E},w=_=>{g.push(_);let R=g.length-1;for(;R>0;){let E=R-1>>1;if(b(g[R],g[E]))y(R,E),R=E;else break}},$=()=>{let _=g[0],R=g.pop();if(g.length){g[0]=R;let E=0;for(;;){let A=2*E+1,N=2*E+2,T=E;if(A<g.length&&b(g[A],g[T])&&(T=A),N<g.length&&b(g[N],g[T])&&(T=N),T===E)break;y(E,T),E=T}}return _},j=new Set(p);for(let _ of p)w({id:_,hop:0,deg:h(_)});let v=null,x=0,k=[];for(;g.length&&x<o;){let _=$();if(k.push({id:_.id,hop:_.hop}),!p.has(_.id)){if(f){let A=d*jw*Math.pow(_w,_.hop-1),N=u.get(_.id);if(N)N.score+=Math.min(A*Rw,N.score*Aw);else{let T=e.byId?.get?.(_.id);if(T&&i(T)){v||(v=id(e));let P=v.get(T.id)||[],G={ind:T,score:A,defineCount:P.length,matching:[],density:0};t.push(G),u.set(_.id,G)}}}x++}if(_.hop>=n||_.hop>0&&h(_.id)>c)continue;let R=[];for(let A of m.get(_.id)||[]){if(j.has(A))continue;let N=e.byId?.get?.(A);!N||!i(N)||R.push({id:A,deg:h(A)})}if(!R.length)continue;R.sort((A,N)=>A.deg-N.deg||(A.id<N.id?-1:A.id>N.id?1:0));let E=Math.max(1,Math.floor(s*R.length));for(let A=0;A<E;A++){let N=R[A];j.add(N.id),w({id:N.id,hop:_.hop+1,deg:N.deg})}}return k}function pd(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=id(e),m=[];for(let $ of e.individuals){if(($.class||"")!=="Module")continue;let j=String($.label),v=j.toLowerCase(),x=p.get($.id)||[],k=new Set(x.map(E=>E.toLowerCase())),_=new Set;for(let E of x)for(let A of Xu(E))_.add(A);let R=u?String(($.attributes||[]).find(E=>E.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:$,label:j,labelLc:v,defines:x,symSet:k,symComps:_,dotted:R})}let h=m.length||1,g=new Map,b=$=>{let j=0;for(let v of m)(v.labelLc.includes($)||v.symComps.has($)||v.symSet.has($))&&j++;return j},y=$=>(g.has($)||g.set($,va(h,b($))),g.get($));for(let $ of t)y($);let w=[];for(let $ of m){let j=0,v=0,x=0,k=[];for(let N of t){let T=g.get(N)||0;T&&($.symSet.has(N)?(j+=T*ad,x++):$.symComps.has(N)&&(k.push(T),x++),$.labelLc.includes(N)&&(v+=T*Xb))}k.sort((N,T)=>T-N);let _=0;for(let N=0;N<Math.min(k.length,Qb);N++)_+=k[N]*Jb;let R=j+v+_;if(!R)continue;s&&(Ss($.labelLc)||nw($.labelLc))?R*=tw:Ss($.labelLc)&&(R*=.4);let E=$.defines.filter(N=>{let T=N.toLowerCase(),P=Xu(N);return t.some(G=>T===G||P.has(G))}),A=$.defines.length?x/$.defines.length:0;w.push({ind:$.ind,score:R,defineCount:$.defines.length,matching:E,density:A})}if(u&&d&&w.length){let $=String(d).toLowerCase(),j=_=>_!=null&&/[a-z0-9_./]/.test(_),v=_=>{for(let R=$.indexOf(_);R!==-1;R=$.indexOf(_,R+1))if(!j($[R-1])&&!j($[R+_.length]))return!0;return!1},x=new Map(m.map(_=>[_.ind.id,_])),k=0;for(let _ of w)k=Math.max(k,_.score);for(let _ of w){let R=x.get(_.ind.id);if(!R)continue;let E=0;for(let A of new Set([R.dotted,R.labelLc])){if(!A||A.split(/[./]+/).filter(Boolean).length<gw||!v(A))continue;let N=[...new Set(A.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((P,G)=>G-P),T=0;for(let P=0;P<Math.min(N.length,bw);P++)T+=N[P]*hw;E=Math.max(E,T)}E&&(_.score+=Math.min(E*ww,k*yw))}}if(w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of Se(e,"imports"))!$.has(v.subject)&&!$.has(v.object)||(j.has(v.subject)||j.set(v.subject,new Set),j.has(v.object)||j.set(v.object,new Set),j.get(v.subject).add(v.object),j.get(v.object).add(v.subject));for(let v of w){let x=0;for(let k of j.get(v.ind.id)||[])x=Math.max(x,$.get(k)||0);v.score+=Math.min(x*Zb,v.score*ew)}}if(o&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of["calls","callsSymbol"])for(let x of Se(e,v)){let k=Tn(e,x.subject),_=Tn(e,x.object);!k||!_||k===_||!$.has(k)&&!$.has(_)||(j.has(k)||j.set(k,new Set),j.has(_)||j.set(_,new Set),j.get(k).add(_),j.get(_).add(k))}for(let v of w){let x=0;for(let k of j.get(v.ind.id)||[])x=Math.max(x,$.get(k)||0);v.score+=Math.min(x*sw,v.score*ow)}}if(r&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of e.individuals)(v.class||"")==="Class"&&v.label&&j.set(String(v.label),v);for(let v of w){if(!aw(v.ind.label))continue;let x=0;for(let k of Se(e,"inherits")){if(Tn(e,k.subject)!==v.ind.id||!cw(k.objectLabel))continue;let R=Tn(e,k.object);if(!R){let E=j.get(String(k.objectLabel||""));E&&(R=hn(e,E))}R&&(x=Math.max(x,$.get(R)||0))}v.score+=Math.min(x*rw,v.score*iw)}}if(l&&w.length&&e.proseIndex){let $=$s(e.proseIndex,t.join(" "),{limit:dw});if($.length){let j=new Map;for(let{id:v,score:x}of $){let k=Tn(e,v);k&&j.set(k,(j.get(k)||0)+x)}for(let v of w){let x=j.get(v.ind.id)||0;x&&(v.score+=Math.min(x*lw,v.score*uw))}}}if(c&&w.length&&e.proseIndex){let $=new Map(w.map(x=>[x.ind.id,x])),j=new Map(m.map(x=>[x.ind.id,x])),v=new Map;for(let x of new Set(t)){let k=g.get(x)||0;if(!k)continue;let{ids:_}=Mu(e.proseIndex,x);if(!_.length)continue;let R=new Set;for(let E of _){let A=Tn(e,E);if(!A||R.has(A)||(R.add(A),!$.has(A)))continue;let N=j.get(A);N&&(N.symSet.has(x)||N.symComps.has(x)||N.labelLc.includes(x))||v.set(A,(v.get(A)||0)+k*mw)}}for(let x of w){let k=v.get(x.ind.id)||0;k&&(x.score+=Math.min(k*pw,x.score*fw))}}return i&&w.length>1&&Tw(e,w,f),a&&w.length&&Cw(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:cd,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:ud,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:ld}),w.sort(($,j)=>j.score-$.score||j.density-$.density||$.defineCount-j.defineCount||String($.ind.label).length-String(j.ind.label).length),w}function fd(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 pd(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function Ow(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 Ta(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Ju)return{error:`name pattern is ${n.length} characters; the limit is ${Ju}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=Ow(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>Qu)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${Qu}.`};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()+Zu;else if(t()>a)throw new Ur(`name pattern "${n}" exceeded its ${Zu}ms matching budget.`);return i.test(String(l).slice(0,Iw))}}}function md(e,t,{limit:n=qr,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=Ta(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return Fw(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof Ur)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=pd(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: ${nt([...new Set(g)],Yb)}`:"";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 Se(e,t){let n=ed.get(e);n||(n=new Map,ed.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(On(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Tn(e,t){let n=e.byId?.get?.(t);if(n)return hn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function hn(e,t){if((t?.class||"")==="Module")return t.id;let n=$t(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Ca(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function to(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function hd(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${In(t.class)} (id: ${t.id})`],o=Se(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=Ca(l?$t(l):null),u=l?to(l):"",d=`${a.objectLabel||a.object}${c}${u?` @${u}`:""}`;((l?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${nt(r,td)}`),i.length&&s.push(`attributes (${i.length}): ${nt(i,td)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
- `)}function gd(e,t,{toolNamePrefix:n="tmct_"}={}){let s=$t(t),o=[`${t.label} \u2014 ${In(t.class)}${Ca(s)}`],r=Me(t,"params"),i=Me(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Me(t,"isStatic")&&a.push("static"),Me(t,"isAbstract")&&a.push("abstract"),Me(t,"isConstant")&&a.push("constant");let l=Me(t,"visibility");l&&a.push(l),a.length&&o.push(`flags: ${a.join(", ")}`);let c=to(t);c&&o.push(`decorators: @${c.split(", ").join(", @")}`);let u=Me(t,"raises");u&&o.push(`raises: ${u}`);let d=Me(t,"catches");d&&o.push(`catches: ${d}`);let f=Me(t,"self_fields");f&&o.push(`self fields: ${f}`);let p=Me(t,"value");p&&o.push(`value: ${p}`);let m=Me(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 bd(e,t){let n=Se(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 ${In(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${nt(s,nd)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of zr(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}): ${nt(l,nd)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
- `)}function Gr(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 Vr(e,t=""){let n=Cn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Cn(s.label).startsWith(n)))}function wd(e,{pkg:t=""}={}){let n=Cn(t),s=Vr(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=Gr(s),r=new Map;for(let u of Se(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,Nw).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): ${nt(l.map(([u,d])=>`${u} (${d})`),Lw)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
- `)}function vd(e,t){let n=hn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||$t(t)?.path||n,o=[...new Set(Se(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
- ${nt(o,yd,`
1
+ (()=>{var fb=Object.defineProperty;var N=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(s){throw n=[s],s}};var Sn=(e,t)=>{for(var n in t)fb(e,n,{get:t[n],enumerable:!0})};var et,h_,g_,b_,w_,y_,v_,$_,x_,k_,S_,E_,j_,__,R_,A_,T_,Z,$e,Wt,mu,C_,I_,O_,De=N(()=>{et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},h_=et("createRequire"),g_=et("readFileSync"),b_=et("access"),w_=et("readFile"),y_=et("writeFile"),v_=et("appendFile"),$_=et("mkdir"),x_=et("mkdtemp"),k_=et("rename"),S_=et("unlink"),E_=et("rm"),j_=et("stat"),__=et("copyFile"),R_=et("readdir"),A_=et("createReadStream"),T_=et("createWriteStream"),Z=(...e)=>e.join("/"),$e=e=>String(e).replace(/\/[^/]*$/,""),Wt=(...e)=>e.join("/"),mu="/",C_=et("randomBytes"),I_=et("spawnSync"),O_=et("createInterface")});var tt,N_,M_,hu,ze,No,mb,En,hb,Lr,aa,gb,bb,P_,wb,F_,D_,z_,B_,U_,yt=N(()=>{tt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},N_=tt("createRequire"),M_=tt("readFileSync"),hu=tt("access"),ze=tt("readFile"),No=tt("writeFile"),mb=tt("appendFile"),En=tt("mkdir"),hb=tt("mkdtemp"),Lr=tt("rename"),aa=tt("unlink"),gb=tt("rm"),bb=tt("stat"),P_=tt("copyFile"),wb=tt("readdir"),F_=tt("createReadStream"),D_=tt("createWriteStream"),z_=tt("randomBytes"),B_=tt("spawnSync"),U_=tt("createInterface")});function hs(e){return e.replace(yb,"").trim()}function Yt(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace($b,"").trim();if(s=s.replace(kb,"").trim(),s===t)break;t=s}return t}var gu,Mo,Po,Kt,bu,rn,ca,yb,vb,$b,xb,kb,de,Fo,Sb,wu,Be,qt,Vn,yu,la,ua,da,vu,Do,gs,$u,xu,bs,jn,_n,Ys,Ge,ku,ws,ys,Hn,pn,Su,zo,Xs,Nr,Js,Eu,Rn=N(()=>{gu=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],Mo={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",...gu]},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"]}},Po=Object.freeze([...gu,"is the superclass of","are the superclass of","is the parent class of"]),Kt=Object.freeze(["defined","declared","located","implemented"]),bu=Object.freeze(["now","currently","right now","at the moment","these days","today"]),rn=Object.freeze(["mentioned","referenced"]),ca=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),yb=new RegExp(`\\s+(?:${ca.join("|")})\\s*[?.!]*$`,"i");vb=Object.freeze(["then","though","too"]),$b=new RegExp(`\\s+(?:${vb.join("|")})\\s*[?.!]*$`,"i"),xb=Object.freeze(["please explain","explain"]),kb=new RegExp(`,\\s*(?:${xb.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(Mo).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Fo=Object.freeze(new Set(["has","have","holds","hold"])),Sb=e=>!Po.includes(e),wu=Object.freeze([...new Set(Object.keys(de).filter(Sb).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"}),qt=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),Vn=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"}),yu=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"}}),la=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"}),ua=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"}),da=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"}),vu=/\b([a-z]{3,})in'/gi,Do=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"]),$u=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]}`}]),xu=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`}]),bs=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),jn=Object.freeze(["that","which","who"]),_n=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),Ys=Object.freeze({"but do not":"difference","but does not":"difference","and do not":"difference","and does not":"difference","but not":"difference","and not":"difference",except:"difference",without:"difference",and:"intersection",plus:"intersection",but:"intersection",or:"union"}),Ge=Object.freeze({public:{via:"visibility",value:"public"},private:{via:"visibility",value:"private"},protected:{via:"visibility",value:"protected"},static:{via:"attr",attr:"isStatic"},abstract:{via:"attr",attr:"isAbstract"},constant:{via:"attr",attr:"isConstant"},exported:{via:"exported"},"re-exported":{via:"exported"},tested:{via:"tested",value:!0},covered:{via:"tested",value:!0},untested:{via:"tested",value:!1},uncovered:{via:"tested",value:!1}}),ku=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),ws=Object.freeze(["how many","how much","how many of","number of","total number of","quantity of","tally of","sum of","total of","amount of","count","count up","count of","tot up"]),ys=Object.freeze(["list","show","show me","show us","display","print","print out","dump","enumerate","name","give me","get me","spit out","rattle off","run down","run through","ls","what are","which are"]),Hn=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"}),pn=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"}}),Su=Object.freeze({tests:"Module",test:"Module"}),zo=Object.freeze(["those","them","these"]),Xs=Object.freeze(["contains","defines"]),Nr=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"]),Js=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),Eu=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 Xt,ju,_u,pa,Ru,V_,H_,Au=N(()=>{Rn();Xt=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),ju=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),_u=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),pa=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:Kt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:Xt("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:Xt("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:ju("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:_u("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:_u("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_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:ju("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:Xt("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:Xt("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:Xt("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:Xt("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:Xt("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:Xt("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:Xt("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:Xt("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:Xt("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:Xt("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}}]),Ru=pa.filter(e=>e.tier==="hot"),V_=pa.filter(e=>e.tier==="cold"),H_=Object.freeze(pa.map(e=>e.name))});var Tu,Oe,Ot=N(()=>{De();Tu=Z(".tmct","graph.json"),Oe=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function Eb(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 Cu(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})=>Eb(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 Iu=N(()=>{});var Zs={};Sn(Zs,{clearCache:()=>jb,emptyEntities:()=>fa,fetchEntities:()=>Tb,registerProvider:()=>_b});function jb(){Qs=null,Bo=null}function _b(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Mr;return Mr=e??null,Qs=null,t}function fa(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function Rb(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return fa();throw new Oe(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Oe(`graph artifact ${e} is not valid JSON`)}}async function Ab(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(Bo&&Bo.key===n)return Bo.payload;let s=[];for(let r=0;r<t.length;r++){let i=await Rb(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Cu(s);return Bo={key:n,payload:o},o}async function Tb(e){if(Mr){let s;try{s=await Mr(e)}catch(o){throw o instanceof Oe?o:new Oe(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Oe("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return Ab(e);if(Qs&&Qs.file===e.graphFile)return Qs.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return fa();throw new Oe(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Oe(`graph artifact ${e.graphFile} is not valid JSON`)}return Qs={file:e.graphFile,payload:n},n}var Qs,Bo,Mr,Uo=N(()=>{yt();Ot();Iu();Qs=null,Bo=null,Mr=null});function fn(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<=Ou)}function ma(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>Ou||Cb.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=Ib))break;return t}function Pr({name:e,doc:t}={}){return[...new Set([...fn(e),...ma(t)])].sort()}function Lu(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 vs(e,t,{limit:n=10}={}){let s=[...new Set([...fn(t),...ma(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 Nu(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 Cb,Ou,Ib,Kn=N(()=>{Cb=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+/)),Ou=40,Ib=120});function Mu(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 Wo(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:Lb(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];return n.startsWith("corpus-weak:")?{kind:"corpusWeak",name:n.slice(12)||"unknown"}:n.startsWith("corpus:")?{kind:"corpus",name:n.slice(7)||"unknown"}:n.startsWith("child:")?{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"}:n.startsWith("world:")?{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"}:n.startsWith("ace:")?{kind:"operator",...Mu(n.slice(4))}:n.startsWith("teach:")?{kind:"teach",...Mu(n.slice(6))}: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 Pb(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Fu;let n=Number(t);return Number.isFinite(n)?Math.max(ha,Math.min(Du,n)):Fu}function Fb(e,t=Date.now(),n=Nb){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Pu+(1-Pu)*Math.pow(.5,o/n)}function zu(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=Mb(m);if(!h)continue;i.push(h);let g=(qo[h]??0)*Pb(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=Fb(e?.createdAt,s,n.halfLifeMs),d=ga(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:ga(u)};return{score:d,inputs:f}}function Bu({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+Db),i=(o*r+1)/2;return ga(ha+(Du-ha)*i)}var Fr,ba,Lt,$s,Ob,Lb,qo,Nb,Pu,ha,Du,Fu,ga,Mb,Db,xs=N(()=>{Fr="mgx:trustScore",ba="mgx:trustInputs",Lt="mgx:createdAt",$s="mgx:updatedAt";Ob="wikipedia-live",Lb=e=>e===Ob?"referenceLive":"reference";qo=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Nb=720*60*60*1e3,Pu=.9,ha=.5,Du=1.5,Fu=1,ga=(e,t=6)=>Number(e.toFixed(t)),Mb=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";Db=19});var ks,wa=N(()=>{ks=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function ya(e,t){return Math.log(1+e/(1+t))}var Go=N(()=>{});var zr={};Sn(zr,{bfsLevels:()=>Dr,findActionPath:()=>va,findReachableSet:()=>$a});function Uu(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function Wu(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 va(e,t,n,{maxDepth:s=50,stateKey:o=Uu}={}){if(t(e))return{actions:[],states:[e]};let r=Wu(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 $a(e,t,{maxDepth:n=50,stateKey:s=Uu}={}){let o=Wu(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*Dr(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 Ss=N(()=>{});function Ur(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 _a(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function In(e){let t=String(e?.prop||"").toLowerCase();if(qu[t])return qu[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 Tn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function xa(e){let t=Tn(e).split("/");return t[t.length-1]}function zb(e){return(e?.derived_from||[]).filter(sd).length}function Gu(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+zb(e)}function Gt(e,t){let n=Tn(t);if(!n)return{match:null,candidates:[]};let s=xa(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Tn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(xa(a)===s||xa(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||Gu(a.ind)-Gu(i.ind)||String(i.ind.label).length-String(a.ind.label).length),{match:r[0]?.ind||null,candidates:r.slice(1,5).map(i=>i.ind)}}function vt(e){let t=(e?.attributes||[]).find(s=>s.key==="site");if(!t)return null;let n=String(t.value).match(/^(.*):(\d+)(?:-(\d+))?$/);return n?{path:n[1],start:Number(n[2]),end:n[3]?Number(n[3]):Number(n[2])}:null}function Bb(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 Vu(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Cn(e){let t=e||"Entity",n=fn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function nt(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function Ra(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Cn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(sd);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}=Bb(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(` ${Vu(l)} (${c.length}) \u2192 ${nt(c.map(u=>u.objectLabel||u.object),Hu)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${Vu(l)} (${c.length}) by ${nt(c.map(u=>u.subjectLabel||u.subject),Hu)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${nt(a,Ub)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${Cn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(Wb(e)),s.join(`
2
+ `)}function Wb(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 to(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=In(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=An(e,c.subject),d=An(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 Dr(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 od(e,t,{maxDepth:n=8}={}){let s=to(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>=qb){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,ka)){let u=c.tests.length?`tests: ${nt(c.tests,Gb)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>ka&&o.push(` \u2026+${a.length-ka} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=In({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 rd(e){let t=new Map;for(let n of e.relations)if(In(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 Yu(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function ud(e,t,n=null){let s=n||(i=>An(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 Se(e,i))r(s(a.subject),s(a.object));return o}function _w(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*bw&&f.length<n?f.push([m,h]):p.length<Ku&&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<vw&&i.length;c++){let u=new Map,d=[];for(let f of $w){let p=ud(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*ww,m.score*yw),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,Ku).filter(([f])=>!l.has(f)))}}function Rw(e,t=[],{depth:n=ad,q:s=ld,nodeLimit:o=cd,kinds:r=xw,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(_=>[_.ind.id,_])),d=0;for(let _ of t)d=Math.max(d,_.score);let f=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let m=ud(e,r,a),h=_=>m.get(_)?.size||0,g=[],b=(_,R)=>_.hop!==R.hop?_.hop<R.hop:_.deg!==R.deg?_.deg<R.deg:_.id<R.id,y=(_,R)=>{let E=g[_];g[_]=g[R],g[R]=E},w=_=>{g.push(_);let R=g.length-1;for(;R>0;){let E=R-1>>1;if(b(g[R],g[E]))y(R,E),R=E;else break}},$=()=>{let _=g[0],R=g.pop();if(g.length){g[0]=R;let E=0;for(;;){let A=2*E+1,L=2*E+2,T=E;if(A<g.length&&b(g[A],g[T])&&(T=A),L<g.length&&b(g[L],g[T])&&(T=L),T===E)break;y(E,T),E=T}}return _},j=new Set(p);for(let _ of p)w({id:_,hop:0,deg:h(_)});let v=null,x=0,k=[];for(;g.length&&x<o;){let _=$();if(k.push({id:_.id,hop:_.hop}),!p.has(_.id)){if(f){let A=d*kw*Math.pow(Sw,_.hop-1),L=u.get(_.id);if(L)L.score+=Math.min(A*Ew,L.score*jw);else{let T=e.byId?.get?.(_.id);if(T&&i(T)){v||(v=rd(e));let P=v.get(T.id)||[],G={ind:T,score:A,defineCount:P.length,matching:[],density:0};t.push(G),u.set(_.id,G)}}}x++}if(_.hop>=n||_.hop>0&&h(_.id)>c)continue;let R=[];for(let A of m.get(_.id)||[]){if(j.has(A))continue;let L=e.byId?.get?.(A);!L||!i(L)||R.push({id:A,deg:h(A)})}if(!R.length)continue;R.sort((A,L)=>A.deg-L.deg||(A.id<L.id?-1:A.id>L.id?1:0));let E=Math.max(1,Math.floor(s*R.length));for(let A=0;A<E;A++){let L=R[A];j.add(L.id),w({id:L.id,hop:_.hop+1,deg:L.deg})}}return k}function dd(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=rd(e),m=[];for(let $ of e.individuals){if(($.class||"")!=="Module")continue;let j=String($.label),v=j.toLowerCase(),x=p.get($.id)||[],k=new Set(x.map(E=>E.toLowerCase())),_=new Set;for(let E of x)for(let A of Yu(E))_.add(A);let R=u?String(($.attributes||[]).find(E=>E.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:$,label:j,labelLc:v,defines:x,symSet:k,symComps:_,dotted:R})}let h=m.length||1,g=new Map,b=$=>{let j=0;for(let v of m)(v.labelLc.includes($)||v.symComps.has($)||v.symSet.has($))&&j++;return j},y=$=>(g.has($)||g.set($,ya(h,b($))),g.get($));for(let $ of t)y($);let w=[];for(let $ of m){let j=0,v=0,x=0,k=[];for(let L of t){let T=g.get(L)||0;T&&($.symSet.has(L)?(j+=T*id,x++):$.symComps.has(L)&&(k.push(T),x++),$.labelLc.includes(L)&&(v+=T*Hb))}k.sort((L,T)=>T-L);let _=0;for(let L=0;L<Math.min(k.length,Yb);L++)_+=k[L]*Kb;let R=j+v+_;if(!R)continue;s&&(ks($.labelLc)||Zb($.labelLc))?R*=Qb:ks($.labelLc)&&(R*=.4);let E=$.defines.filter(L=>{let T=L.toLowerCase(),P=Yu(L);return t.some(G=>T===G||P.has(G))}),A=$.defines.length?x/$.defines.length:0;w.push({ind:$.ind,score:R,defineCount:$.defines.length,matching:E,density:A})}if(u&&d&&w.length){let $=String(d).toLowerCase(),j=_=>_!=null&&/[a-z0-9_./]/.test(_),v=_=>{for(let R=$.indexOf(_);R!==-1;R=$.indexOf(_,R+1))if(!j($[R-1])&&!j($[R+_.length]))return!0;return!1},x=new Map(m.map(_=>[_.ind.id,_])),k=0;for(let _ of w)k=Math.max(k,_.score);for(let _ of w){let R=x.get(_.ind.id);if(!R)continue;let E=0;for(let A of new Set([R.dotted,R.labelLc])){if(!A||A.split(/[./]+/).filter(Boolean).length<fw||!v(A))continue;let L=[...new Set(A.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((P,G)=>G-P),T=0;for(let P=0;P<Math.min(L.length,mw);P++)T+=L[P]*pw;E=Math.max(E,T)}E&&(_.score+=Math.min(E*hw,k*gw))}}if(w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of Se(e,"imports"))!$.has(v.subject)&&!$.has(v.object)||(j.has(v.subject)||j.set(v.subject,new Set),j.has(v.object)||j.set(v.object,new Set),j.get(v.subject).add(v.object),j.get(v.object).add(v.subject));for(let v of w){let x=0;for(let k of j.get(v.ind.id)||[])x=Math.max(x,$.get(k)||0);v.score+=Math.min(x*Xb,v.score*Jb)}}if(o&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of["calls","callsSymbol"])for(let x of Se(e,v)){let k=An(e,x.subject),_=An(e,x.object);!k||!_||k===_||!$.has(k)&&!$.has(_)||(j.has(k)||j.set(k,new Set),j.has(_)||j.set(_,new Set),j.get(k).add(_),j.get(_).add(k))}for(let v of w){let x=0;for(let k of j.get(v.ind.id)||[])x=Math.max(x,$.get(k)||0);v.score+=Math.min(x*ew,v.score*tw)}}if(r&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of e.individuals)(v.class||"")==="Class"&&v.label&&j.set(String(v.label),v);for(let v of w){if(!ow(v.ind.label))continue;let x=0;for(let k of Se(e,"inherits")){if(An(e,k.subject)!==v.ind.id||!rw(k.objectLabel))continue;let R=An(e,k.object);if(!R){let E=j.get(String(k.objectLabel||""));E&&(R=mn(e,E))}R&&(x=Math.max(x,$.get(R)||0))}v.score+=Math.min(x*nw,v.score*sw)}}if(l&&w.length&&e.proseIndex){let $=vs(e.proseIndex,t.join(" "),{limit:cw});if($.length){let j=new Map;for(let{id:v,score:x}of $){let k=An(e,v);k&&j.set(k,(j.get(k)||0)+x)}for(let v of w){let x=j.get(v.ind.id)||0;x&&(v.score+=Math.min(x*iw,v.score*aw))}}}if(c&&w.length&&e.proseIndex){let $=new Map(w.map(x=>[x.ind.id,x])),j=new Map(m.map(x=>[x.ind.id,x])),v=new Map;for(let x of new Set(t)){let k=g.get(x)||0;if(!k)continue;let{ids:_}=Nu(e.proseIndex,x);if(!_.length)continue;let R=new Set;for(let E of _){let A=An(e,E);if(!A||R.has(A)||(R.add(A),!$.has(A)))continue;let L=j.get(A);L&&(L.symSet.has(x)||L.symComps.has(x)||L.labelLc.includes(x))||v.set(A,(v.get(A)||0)+k*dw)}}for(let x of w){let k=v.get(x.ind.id)||0;k&&(x.score+=Math.min(k*lw,x.score*uw))}}return i&&w.length>1&&_w(e,w,f),a&&w.length&&Rw(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:ad,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:ld,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:cd}),w.sort(($,j)=>j.score-$.score||j.density-$.density||$.defineCount-j.defineCount||String($.ind.label).length-String(j.ind.label).length),w}function pd(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 dd(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function Tw(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 Aa(e,{now:t=Date.now}={}){let n=String(e);if(n.length>Xu)return{error:`name pattern is ${n.length} characters; the limit is ${Xu}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=Tw(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>Ju)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${Ju}.`};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()+Qu;else if(t()>a)throw new Br(`name pattern "${n}" exceeded its ${Qu}ms matching budget.`);return i.test(String(l).slice(0,Aw))}}}function fd(e,t,{limit:n=Wr,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=Aa(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return Nw(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof Br)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=dd(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: ${nt([...new Set(g)],Vb)}`:"";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 Se(e,t){let n=Zu.get(e);n||(n=new Map,Zu.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(In(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function An(e,t){let n=e.byId?.get?.(t);if(n)return mn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function mn(e,t){if((t?.class||"")==="Module")return t.id;let n=vt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Ta(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function eo(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function md(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Cn(t.class)} (id: ${t.id})`],o=Se(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=Ta(l?vt(l):null),u=l?eo(l):"",d=`${a.objectLabel||a.object}${c}${u?` @${u}`:""}`;((l?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${nt(r,ed)}`),i.length&&s.push(`attributes (${i.length}): ${nt(i,ed)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
+ `)}function hd(e,t,{toolNamePrefix:n="tmct_"}={}){let s=vt(t),o=[`${t.label} \u2014 ${Cn(t.class)}${Ta(s)}`],r=Me(t,"params"),i=Me(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Me(t,"isStatic")&&a.push("static"),Me(t,"isAbstract")&&a.push("abstract"),Me(t,"isConstant")&&a.push("constant");let l=Me(t,"visibility");l&&a.push(l),a.length&&o.push(`flags: ${a.join(", ")}`);let c=eo(t);c&&o.push(`decorators: @${c.split(", ").join(", @")}`);let u=Me(t,"raises");u&&o.push(`raises: ${u}`);let d=Me(t,"catches");d&&o.push(`catches: ${d}`);let f=Me(t,"self_fields");f&&o.push(`self fields: ${f}`);let p=Me(t,"value");p&&o.push(`value: ${p}`);let m=Me(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 gd(e,t){let n=Se(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 ${Cn(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${nt(s,td)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Dr(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}): ${nt(l,td)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
+ `)}function qr(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 Gr(e,t=""){let n=Tn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Tn(s.label).startsWith(n)))}function bd(e,{pkg:t=""}={}){let n=Tn(t),s=Gr(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=qr(s),r=new Map;for(let u of Se(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,Iw).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): ${nt(l.map(([u,d])=>`${u} (${d})`),Cw)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
+ `)}function yd(e,t){let n=mn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||vt(t)?.path||n,o=[...new Set(Se(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
+ ${nt(o,wd,`
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
- ${Mw}`}function $d(e){let t=new Set,n=new Set;for(let o of Se(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!Ss(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
- ${nt(s,yd,`
14
- `)}`:"every source module has at least one covering test module."}function xd(e,t){let n=hn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${nt(o,Mt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Sd(e,t,{toolNamePrefix:n="tmct_"}={}){if(kd.has(t.class)){let i=[...new Set(Se(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
- ${nt(i,Ho,`
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=hn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Se(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
- ${nt(r,Ho,`
18
- `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function Ed(e,t){if(kd.has(t.class)){let r=[...new Set(Se(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
- ${nt(r,Ho,`
20
- `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=hn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Se(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
- ${nt(o,Ho,`
22
- `)}`:`${s}: no recorded callees.`}function jd(e,t){let n=e.byId.get(t.object),s=n?$t(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function Ia(e,t){if(!t?.id)return"";let n=Se(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${nt(n.map(s=>jd(e,s)),Pw)}`:""}function _d(e,t){let n=Se(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${In(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=>jd(e,o));return`${t.label} \u2014 ${In(t.class)} calls ${n.length} in-repo symbol(s):
23
- ${nt(s,Ho,`
24
- `)}`}function Rd(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Me(s,"commitDate")||Me(s,"date"),i=Me(s,"commitAuthor")||Me(s,"author"),a=Me(s,"commitMessage")||Me(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Ad(e,t){let n=hn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(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,Mt).map(a=>` ${Rd(e,a.subject,a.subjectLabel)}`),i=o.length>Mt?`
25
- \u2026+${o.length-Mt} more`:"";return`${s}: touched by ${o.length} recent commit(s):
12
+ ${Ow}`}function vd(e){let t=new Set,n=new Set;for(let o of Se(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!ks(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
+ ${nt(s,wd,`
14
+ `)}`:"every source module has at least one covering test module."}function $d(e,t){let n=mn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${nt(o,Nt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function kd(e,t,{toolNamePrefix:n="tmct_"}={}){if(xd.has(t.class)){let i=[...new Set(Se(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
+ ${nt(i,Vo,`
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=mn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Se(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
+ ${nt(r,Vo,`
18
+ `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function Sd(e,t){if(xd.has(t.class)){let r=[...new Set(Se(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
+ ${nt(r,Vo,`
20
+ `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=mn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Se(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
+ ${nt(o,Vo,`
22
+ `)}`:`${s}: no recorded callees.`}function Ed(e,t){let n=e.byId.get(t.object),s=n?vt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function Ca(e,t){if(!t?.id)return"";let n=Se(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${nt(n.map(s=>Ed(e,s)),Lw)}`:""}function jd(e,t){let n=Se(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Cn(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=>Ed(e,o));return`${t.label} \u2014 ${Cn(t.class)} calls ${n.length} in-repo symbol(s):
23
+ ${nt(s,Vo,`
24
+ `)}`}function _d(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Me(s,"commitDate")||Me(s,"date"),i=Me(s,"commitAuthor")||Me(s,"author"),a=Me(s,"commitMessage")||Me(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Rd(e,t){let n=mn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(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,Nt).map(a=>` ${_d(e,a.subject,a.subjectLabel)}`),i=o.length>Nt?`
25
+ \u2026+${o.length-Nt} more`:"";return`${s}: touched by ${o.length} recent commit(s):
26
26
  ${r.join(`
27
- `)}${i}`}function Td(e,t){let n=Se(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${In(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,Mt).map(r=>` ${Rd(e,r.subject,r.subjectLabel)}`),o=n.length>Mt?`
28
- \u2026+${n.length-Mt} more`:"";return`${t.label} \u2014 ${In(t.class)}: touched by ${n.length} commit(s):
27
+ `)}${i}`}function Ad(e,t){let n=Se(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Cn(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,Nt).map(r=>` ${_d(e,r.subject,r.subjectLabel)}`),o=n.length>Nt?`
28
+ \u2026+${n.length-Nt} more`:"";return`${t.label} \u2014 ${Cn(t.class)}: touched by ${n.length} commit(s):
29
29
  ${s.join(`
30
- `)}${o}`}function Cd(e,t){return Td(e,t)}function Id(e,t){return Td(e,t)}function Oa(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Od[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!to(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 Fw(e,t,{limit:n=qr,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Od[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=Oa(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}${Ca($t(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
- `)}function Kw(e){return{paramCount:Hr(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function Yw(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Hr(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:Hw(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function Xw(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Hr(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 Jw(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Ea(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(Ea(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(sd(n)),d=s?.start??null;for(let f of e){let p=Ea(f.decorators).some(b=>c.has(b))?1:0,m=sd(f.label).filter(b=>u.has(b)).length,h=Xw(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 so(e,t){let n=hn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Se(e,"defines").filter(E=>E.subject===n),r=new Map;for(let E of Se(e,"callsSymbol"))r.has(E.subject)||r.set(E.subject,new Set),r.get(E.subject).add(E.object);let i=[],a=[],l=0;for(let E of o){let A=e.byId.get(E.object);if(!A)continue;let N=A.class||"",T=$t(A);N==="GlobalVariable"?(a.push({label:A.label,value:(A.attributes||[]).find(P=>P.key==="value")?.value||"",site:T}),T&&(l=Math.max(l,T.end))):(N==="Function"||N==="Class")&&(i.push({id:A.id,label:A.label,class:N,site:T,decorators:to(A),raises:Me(A,"raises"),doc:Me(A,"doc"),params:Me(A,"params"),returns:Me(A,"returns"),callees:r.get(A.id)||new Set}),T&&(l=Math.max(l,T.end)))}let c=$t(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:to(t),raises:Me(t,"raises"),params:Me(t,"params"),returns:Me(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?Kw(u):Yw(i);i=Jw(i,u||{label:t.label},f);let p=u?null:i.find(E=>E.site&&E.label!==t.label)||null,m=[...new Set(Se(e,"tests").filter(E=>E.object===n).map(E=>E.subjectLabel||E.subject))].slice(0,Uw),h=Pd(e,n).slice(0,Bw),g=Se(e,"reexports").filter(E=>E.subject===n).map(E=>E.objectLabel||E.object).slice(0,20),b=Me(e.byId.get(n),"all"),y=Se(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(E=>E.object===t.id)?.subject||null);let $=null;if(w){let E=e.byId.get(w),A=y.filter(N=>N.subject===w).map(N=>{let T=e.byId.get(N.object);return{label:N.objectLabel||T?.label||N.object,class:T?.class||"",site:T?$t(T):null,decorators:T?to(T):"",params:T?Me(T,"params"):"",returns:T?Me(T,"returns"):"",raises:T?Me(T,"raises"):""}}).slice(0,zw);$={className:E?.label||String(w).replace(/^fn:.*#/,""),members:A,total:y.filter(N=>N.subject===w).length}}let j=null;for(let E of[...i,...a])E.site&&(!j||E.site.start>j.start)&&(j=E.site);let v=j?{start:j.start,end:j.end}:null,x=u||p,k=x?.id?e.byId.get(x.id):null,_=k?Ia(e,k):"",R=[];if(x?.callees)for(let E of x.callees){let A=e.byId.get(E),N=A?$t(A):null;if(N&&R.push({label:A.label,site:N}),R.length>=Vw)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:$,insertion:l,insertionRegion:v,calleeBodies:R,callHint:_,siblingCap:Dw}}function js(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 Ld(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 Kr(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=Hr(s.params);(i>Ww||a>qw||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?$t(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)>=Gw;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:js(o),topup:o!=="TINY"}}function Nd(e){let t=[`Additional context for ${e.moduleLabel} (sections omitted from the lean bundle):`];if(e.classMembers&&e.classMembers.members.length){t.push(`
30
+ `)}${o}`}function Td(e,t){return Ad(e,t)}function Cd(e,t){return Ad(e,t)}function Ia(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Id[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!eo(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 Nw(e,t,{limit:n=Wr,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Id[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=Ia(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}${Ta(vt(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
+ `)}function Gw(e){return{paramCount:Vr(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function Vw(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Vr(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:qw(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function Hw(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Vr(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 Kw(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Sa(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(Sa(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(nd(n)),d=s?.start??null;for(let f of e){let p=Sa(f.decorators).some(b=>c.has(b))?1:0,m=nd(f.label).filter(b=>u.has(b)).length,h=Hw(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 no(e,t){let n=mn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Se(e,"defines").filter(E=>E.subject===n),r=new Map;for(let E of Se(e,"callsSymbol"))r.has(E.subject)||r.set(E.subject,new Set),r.get(E.subject).add(E.object);let i=[],a=[],l=0;for(let E of o){let A=e.byId.get(E.object);if(!A)continue;let L=A.class||"",T=vt(A);L==="GlobalVariable"?(a.push({label:A.label,value:(A.attributes||[]).find(P=>P.key==="value")?.value||"",site:T}),T&&(l=Math.max(l,T.end))):(L==="Function"||L==="Class")&&(i.push({id:A.id,label:A.label,class:L,site:T,decorators:eo(A),raises:Me(A,"raises"),doc:Me(A,"doc"),params:Me(A,"params"),returns:Me(A,"returns"),callees:r.get(A.id)||new Set}),T&&(l=Math.max(l,T.end)))}let c=vt(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:eo(t),raises:Me(t,"raises"),params:Me(t,"params"),returns:Me(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?Gw(u):Vw(i);i=Kw(i,u||{label:t.label},f);let p=u?null:i.find(E=>E.site&&E.label!==t.label)||null,m=[...new Set(Se(e,"tests").filter(E=>E.object===n).map(E=>E.subjectLabel||E.subject))].slice(0,Dw),h=Md(e,n).slice(0,Fw),g=Se(e,"reexports").filter(E=>E.subject===n).map(E=>E.objectLabel||E.object).slice(0,20),b=Me(e.byId.get(n),"all"),y=Se(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(E=>E.object===t.id)?.subject||null);let $=null;if(w){let E=e.byId.get(w),A=y.filter(L=>L.subject===w).map(L=>{let T=e.byId.get(L.object);return{label:L.objectLabel||T?.label||L.object,class:T?.class||"",site:T?vt(T):null,decorators:T?eo(T):"",params:T?Me(T,"params"):"",returns:T?Me(T,"returns"):"",raises:T?Me(T,"raises"):""}}).slice(0,Pw);$={className:E?.label||String(w).replace(/^fn:.*#/,""),members:A,total:y.filter(L=>L.subject===w).length}}let j=null;for(let E of[...i,...a])E.site&&(!j||E.site.start>j.start)&&(j=E.site);let v=j?{start:j.start,end:j.end}:null,x=u||p,k=x?.id?e.byId.get(x.id):null,_=k?Ca(e,k):"",R=[];if(x?.callees)for(let E of x.callees){let A=e.byId.get(E),L=A?vt(A):null;if(L&&R.push({label:A.label,site:L}),R.length>=Ww)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:$,insertion:l,insertionRegion:v,calleeBodies:R,callHint:_,siblingCap:Mw}}function Es(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 Od(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 Hr(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=Vr(s.params);(i>zw||a>Bw||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?vt(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)>=Uw;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:Es(o),topup:o!=="TINY"}}function Ld(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 Md(e,t){let n=[`Edit context for ${e.moduleLabel} (graph-only bundle \u2014 siblings/registration/tests are real graph truth; no source body without a source-capable provider).`];if(t.registration&&e.globals.length){n.push(`
38
+ `)}function Nd(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 Pd(e,t){let n=[];for(let s of Se(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 Fd(e,t){let n=hn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Pd(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,ja).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
48
+ `)}function Md(e,t){let n=[];for(let s of Se(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 Pd(e,t){let n=mn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Md(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,Ea).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>ja?`
51
- \u2026+${o.length-ja} more`:"")}function Dd(e,t){let n=hn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(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,_a).map(i=>{let a=e.byId.get(i.object),l=a?$t(a):null,c=l?` \u2190 ${l.path}`:"";return`${i.objectLabel||i.object}${c}`});return`${s} \u2014 public API (${o.length} export(s)):
50
+ `)}`+(o.length>Ea?`
51
+ \u2026+${o.length-Ea} more`:"")}function Fd(e,t){let n=mn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(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,ja).map(i=>{let a=e.byId.get(i.object),l=a?vt(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>_a?`
54
- \u2026+${o.length-_a} more`:"")}var Gu,od,Ku,Gb,Hb,Sa,Kb,qr,Yb,Xb,Jb,ad,Qb,Zb,ew,tw,nw,sw,ow,rw,iw,aw,cw,lw,uw,dw,pw,fw,mw,hw,gw,bw,ww,yw,vw,$w,xw,Yu,kw,Sw,cd,ld,ud,Ew,jw,_w,Rw,Aw,Ju,Qu,Iw,Zu,Ur,ed,td,nd,Ho,Me,Lw,Nw,yd,Mw,Mt,kd,Pw,Od,Dw,zw,Bw,Uw,Ww,qw,Gw,Vw,Ea,sd,Hr,Hw,ja,_a,Ce=L(()=>{Yn();ks();ya();Vo();Es();Gu={"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"};od=e=>/^(git|turn):/.test(String(e||""));Ku=30,Gb=8;Hb=2,Sa=25,Kb=3;qr=10,Yb=8,Xb=3,Jb=2,ad=5,Qb=4,Zb=.2,ew=.35,tw=.15,nw=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),sw=.2,ow=.35,rw=.2,iw=.35,aw=e=>/\.cs$/i.test(e),cw=e=>/^I[A-Z]/.test(String(e||"")),lw=.2,uw=.35,dw=50,pw=.2,fw=.35,mw=.5,hw=ad,gw=3,bw=4,ww=1,yw=.9,vw=.5,$w=.2,xw=.35,Yu=4,kw=2,Sw=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],cd=3,ld=12,ud=.9,Ew=["imports","calls","callsSymbol","inherits"],jw=.5,_w=.6,Rw=.2,Aw=.35;Ju=128,Qu=4,Iw=64,Zu=250,Ur=class extends Error{};ed=new WeakMap;td=40,nd=40,Ho=30;Me=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";Lw=25,Nw=15;yd=40,Mw="tests edges are recorded module to module, so this is module-grain coverage.";Mt=15;kd=new Set(["Function","Method"]);Pw=8;Od={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};Dw=8,zw=16,Bw=4,Uw=6,Ww=12,qw=2,Gw=8,Vw=3,Ea=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),sd=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Hr=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},Hw=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};ja=20;_a=40});function He(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Vd(e){let t=String(e||"");return zd&&(t=t.replace(zd," ")),t.replace(/\s+/g," ").trim()}function Hd(e){let t=String(e||"");t=t.replace(my," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(dy);if(o&&(t=o[1].trim()),o=t.match(py),o&&(t=o[1].trim()),o=t.match(Bd),o&&(t=o[1].trim()),o=t.match(Ud),o&&(t=o[1].trim()),o=t.match(Wd),o&&(t=o[1].trim()),o=t.match(fy),o&&(t=o[1].trim()),o=t.match(qd),o&&(t=o[1].trim()),o=t.match(hy),o&&(t=o[1].trim()),o=t.match(gy),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(by),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(wy),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(yy),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(vy),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match($y),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(xy),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(ky),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(Sy),o){let r=o[1].trim();uy(r)||(t=!Ey.test(r)&&(ay.test(r)||Xn.test(r))?r:`describe ${r}`)}if(o=t.match(jy),o){let r=o[1].trim();(Xn.test(r)||_y.test(r)||qd.test(r)||Bd.test(r)||Wd.test(r)||Ud.test(r)||Ry.test(r))&&(t=r)}if(t===s)break}return t}function Cy(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(Ay);if(o&&(t=o[1].trim()),o=t.match(Ty),o&&(t=o[1].trim()),t===s)break}return t}function Oy(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(Iy);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function My(e){let t=String(e||""),n=t.match(Ny);if(n){let o=Yd[n[1].toLowerCase()],r=Kd[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(Xd);return s?`which modules transitively import ${s[1].trim()}`:t}function Yr(e){return String(e||"").replace(Zw,t=>ua[t.toLowerCase()])}function _s(e){let t=Yr(e);return t=t.replace(ey,n=>da[n.toLowerCase()]),t=t.replace(ty,n=>pa[n.toLowerCase()]),t=t.replace(ny,"with"),t=t.replace(sy,(n,s)=>`${s} for`),t=t.replace(oy,(n,s)=>`for ${s}`),t=t.replace(ry,(n,s)=>s),t=t.replace(Py,"$1$2"),t=t.replace($u,"$1ing"),t=Hd(t),t=Oy(t),t=Cy(t),t=My(t),t=Vd(t),t=Xt(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ko(e){for(let t of[...ku,...xu]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function La(e){for(let t of Fy){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Jd(e){let t=String(e||"").match(Dy);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var Qw,Zw,Gd,ey,ty,ny,sy,oy,ry,iy,zd,ay,Xn,cy,ly,uy,dy,py,Bd,Ud,Wd,fy,my,hy,gy,by,wy,yy,vy,$y,xy,ky,Sy,Ey,jy,_y,Ry,qd,Ay,Ty,Iy,Kd,Yd,Ly,Ny,Xd,Py,Fy,Dy,st,Qt,me,Jn=L(()=>{An();Qw=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(He).join("|")+")\\b","gi"),Zw=Qw(ua),Gd=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(He).join("|")+")\\b(?!\\.[a-z0-9])","gi"),ey=Gd(da),ty=Gd(pa),ny=/(?<=^|\s)w\/(?=\s|$)/gi,sy=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,oy=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,ry=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,iy=Object.keys(de).sort((e,t)=>t.length-e.length).map(He).join("|"),zd=zo.length?new RegExp("\\b("+[...zo].sort((e,t)=>t.length-e.length).map(He).join("|")+")\\b\\s*,?","gi"):null;ay=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(He).join("|")+")\\b","i"),Xn=/^(?:which|what|who|whose|where|when|why|how)\b/i,cy=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),ly=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,uy=e=>{if(ly.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return cy.has((t[t.length-1]||"").toLowerCase())},dy=/^(?: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,py=/^(?: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,Bd=/^(?:(?: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,Ud=/^(?: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,Wd=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,fy=/^(?:please[\s,]+)+(.+)$/i,my=/,?\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,hy=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,gy=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,by=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,wy=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,yy=/^do\s+you\s+know\s+(.+?)\??$/i,vy=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,$y=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,xy=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,ky=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,Sy=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,Ey=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,jy=/^(?:and|also|so|then|now|but)\s+(.+)$/i,_y=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,Ry=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,qd=/^(?:(?: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;Ay=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,Ty=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;Iy=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;Kd=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),Yd=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),Ly="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",Ny=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(Yd).join("|")+")\\s+("+Object.keys(Kd).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+Ly+")\\??$","i"),Xd=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;Py=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${wu.map(He).join("|")})(\\s*[?.!]*)$`,"i");Fy=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+(?:${la.map(He).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+(${iy})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);Dy=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");st=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"]),Qt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),me=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var Zd,Qd=L(()=>{Zd={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 Ln(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 Ma(e){return/^[a-z]+$/.test(e)&&!st.has(e)&&!Na.has(e)}function ep(e){return Gy(e)?null:Pa(e,Wy,Qn(e))}function Pa(e,t,n=Qn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Ln(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 By,Qn,Na,Uy,Wy,qy,Gy,Yo=L(()=>{An();Qd();Jn();By=["used"];Qn=e=>e.length<=5?1:2,Na=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(Gt),...By].flatMap(e=>e.split(" "))),Uy=4,Wy=[...new Set([...Object.keys(de),...Object.keys(Gt)].flatMap(e=>e.split(" ")).filter(e=>e.length>=Uy))],qy=new Set(Zd.words),Gy=e=>qy.has(e)});function oo(e){for(let t of Yy){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Xr,Vy,Hy,Ky,Fa,Yy,tp,Jr=L(()=>{An();Jn();Xr=Object.keys(de).sort((e,t)=>t.length-e.length).map(He).join("|"),Vy=Object.keys(Be).sort((e,t)=>t.length-e.length).map(He).join("|"),Hy=Object.keys(Gt).sort((e,t)=>t.length-e.length).map(He).join("|"),Ky=ws.slice().sort((e,t)=>t.length-e.length).map(He).join("|"),Fa=(e,t)=>e==="defines"&&Do.has(t),Yy=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Xr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Fa(n,t))return null;let s=e[1].trim(),o=e[3].trim();return Fo.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+(${Vy})\\s+(?:(${Hy})\\s+)?(${Xr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Fa(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?Gt[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Xr})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Fa(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+(?:${Ky})\\??$`,"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=Xt(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"&&yu.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:gs(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${an.map(He).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+(?:${Yt.map(He).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+)?(${Xr})\\??$`,"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()})}];tp={id:"grammar",class:"graph-query",run(e){let t=oo(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function xt(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 Jo(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(k=>k.toLowerCase());if(s.includes("where")&&!xt(s,de)){let k=s.some(E=>an.includes(E)),_=new Set([...Yt,...an]),R=n.filter((E,A)=>!st.has(s[A])&&!_.has(s[A])).join(" ").trim();if(R){let E=k?"mentions":"where";return{shape:E,entityType:null,modifier:"direct",kind:E,object:R}}}if(new Set(["has","have","had"]).has(s[0])){let k=s.length;for(;k>1&&(s[k-1]==="ever"||s[k-1]==="been");)k-=1;if((k>1?de[s[k-1]]:null)==="touches"){let R=n.slice(1,k-1).filter((E,A)=>!st.has(s[1+A])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=xt(s,de);if(!i&&t){let k=s.map(_=>{if(!Ma(_))return _;let R=t.lemma(_);return Na.has(R)?R:_});i=xt(k,de),i&&(r=k)}let a=null;if(!i){let k=s.map(_=>_.length>=4&&Ma(_)&&ep(_)||_);if(i=xt(k,de),i){r=k;let _=s.slice(i.start,i.end).findIndex((E,A)=>E!==k[i.start+A]),R=i.start+Math.max(_,0);a={from:s[R],to:k[R]}}}let l=!1;if(!i)for(let k=0;k<s.length;k+=1){let _=Hn[s[k]];if(!(_&&s[k]==="used"&&s[k+1]==="for")&&_&&s.slice(0,k).some(R=>Xo.has(R))){i={kind:_,start:k,end:k+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&Hn[s[i.start]]&&s.slice(0,i.start).some(k=>Xo.has(k))&&(l=!0);let c=k=>a?{...k,fuzzyVerb:a}:k;if(t&&i.end-i.start===1){let k=i.start,_=s[k-1];if((_==="the"||_==="these"||_==="those")&&s[k+1]==="of"&&t.posTags(n)[k]==="NOUN"){let E=n.slice(k+2).filter((A,N)=>!st.has(s[k+2+N])).join(" ").trim();if(E)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:E})}}let u=new Set,d=k=>{if(k)for(let _=k.start;_<k.end;_+=1)u.add(_)};d(i);for(let[k,_]of Object.entries(de)){if(_!==i.kind)continue;let R=k.split(" "),E=i.end;if(R.every((A,N)=>r[E+N]===A)){d({start:E,end:E+R.length});break}}let f=xt(r,Be,u);d(f);let p=xt(r,Gt,u);d(p);let m=(k,_)=>n.slice(k,_).filter((R,E)=>!u.has(k+E)&&!st.has(s[k+E])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&Qy.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?Gt[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let k=h||g;if(k)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:k})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let k=h||g;if(k)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:k})}let $=s.indexOf("by"),j=s.slice(0,i.start).findIndex(k=>Xo.has(k)),v=j>=0,x=v&&j>$;if($>=0&&!u.has($)&&v){let k=(E,A)=>n.slice(E,A).filter((N,T)=>{let P=E+T,G=s[P];return!u.has(P)&&!st.has(G)&&G!=="by"&&!Xo.has(G)&&!Xy.has(G)&&!Jy.has(G)}).join(" ").trim(),[_,R]=x?[k(j+1,n.length),k($+1,j)]:[k(0,$),k($+1,n.length)];if(_&&R)return b==="defines"&&Do.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:_});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(_)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:_})}if(l&&$<0&&g&&s[i.start]==="called")return null;if(h&&g){let k=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Do.has(k))return null;let _=h,R=g;return Fo.includes(k)&&([_,R]=[R,_]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:_,object:R})}if(g){let k=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:k,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&f&&f.start===i.end){let k=r.slice(f.start,f.end).join(" ");if(k)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:k})}if(h&&!g&&v&&i.end-i.start===1&&Hn[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 k=Xo.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...k?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var Xo,Xy,Jy,Qy,np,Qr=L(()=>{An();Jn();Yo();Xo=new Set(["is","are","was","were","be","been","being","get","gets","got"]),Xy=new Set(["which","what","who","whom","whose"]),Jy=new Set(Rn.map(e=>e.toLowerCase())),Qy=new Set(["recently","lately","yet","already","ever","again"]);np={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Jo(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function ev(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)||sp.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function tv(e,t=null){let n=Qt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!sp.has(a)&&(Zy.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=ev(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var sp,Zy,op,rp=L(()=>{An();Jn();Jr();Qr();sp=new Set([...st,...me(bs),...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(Gt)),...me(Object.keys(Ge)),...me(ys),...me(vs),...me(Object.keys(Kn)),...me(Object.keys(fn)),...me(Object.keys(Xs)),...me(Rn),...me(Bo),...me(ws),...me(Yt),...me(an),...me(_n),...me(Object.keys(Qs))]),Zy=new Set([...me(zo),...me(Mr)]);op={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(oo(e))return null;let{text:n,dropped:s,maybeNoise:o}=tv(e,t.nlp||null);if(!s.length||!n)return null;let r=oo(n)||Jo(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 ip=L(()=>{});var Zr,ei=L(()=>{Zr=()=>{}});function cp(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?ro(e.subject)===ro(t.subject)&&ro(e.object)===ro(t.object):ro(e.object)===ro(t.object)}function Da(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=>!lp(c))&&(n=n.filter(c=>!lp(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=>cp(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),ap(f.parsed)<ap(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=>cp(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function ov(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 up(e,{describe:t=ov,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 ro,nv,ap,sv,lp,za=L(()=>{ro=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),nv=/^\s*(?:the|a|an)\s+/i,ap=e=>[e?.subject,e?.object].filter(t=>nv.test(String(t||""))).length;sv=new Set(["fuzzy","lemma","spell"]),lp=e=>sv.has(e.via)});function ti(e){Ba=e}function ni(){return typeof Ba=="function"?Ba():null}var Ba,io=L(()=>{Ba=null});function fp(e,t={},n=iv){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 rv,iv,mp=L(()=>{Jn();Jr();Qr();rp();ip();ei();za();io();rv=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],iv=[tp,np,op,...rv]});function ao(e){return av.test(String(e||"").trim())?"an":"a"}function si(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 co(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Qo(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 av,oi=L(()=>{av=/^[aeiou]/i});var Zo,Ua=L(()=>{Zo=(e,t,n)=>n});var nf={};En(nf,{DYNAMIC_TAIL_OK_RE:()=>fc,applyNegationFrames:()=>Ko,ask:()=>ss,classDisplayName:()=>es,degreeMetric:()=>Hp,metaFallbackEntityAnswer:()=>zp,normalizeQuery:()=>_s,parseQuery:()=>sr,parseQueryFull:()=>tc,render:()=>bn,rephraseHint:()=>cc,resolveObject:()=>cn,traverse:()=>Ht});function We(e,t){let n=hp.get(e);n||(n=new Map,hp.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(On(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Pe(e,t){let[n,s]=Ap[e]||["result","results"];return t===1?n:s}function rr(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Pe(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 mn=="function"){let n=mn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function Rs(e){return lv[e]||e}function mv(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||fv.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return me(ws).includes(o)?t:e}function sr(e,{nlp:t=void 0}={}){return tc(e,{nlp:t}).parsed}function tc(e,{nlp:t=void 0}={}){let n=t===void 0?ni():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=La(Ko(_s(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=gv(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=Da(fp(o,{nlp:n,raw:s}));return i?{parsed:mv(i.parsed),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function Ka(e,t){return t.length&&Cp.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function po(e,t){return oo(e)||Jo(e,t)}function gv(e,t){let n=Qt(e),s=n.map(o=>o.toLowerCase());return Mv(n,s)||Fv(n,s)||vv(n,s,t)||Op(e,t,0)||Dv(n,s,t)||xv(n,s,t)||Av(n,s,t,0)||Cv(n,s)||Lv(n,s,t)||zv(n,s,t)||qv(n,s,t)||Vv(n,s,t,0)||Wv(n,s,t,0)||sc(n,s,t,0)||Sv(n,s,t)||wv(n,s)||Fp(n,s,t,0)}function wv(e,t){let n=0;bv.has(t[n])&&(n+=1);let s=kt(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?vu[`${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 ii(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function vv(e,t,n){if(!["do","does","did"].includes(t[0])||!yv.has(t[1]))return null;let s=kt(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=xt(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)&&!st.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=fo(`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:ii(o,{op:"difference",kind:"set",ast:d})}}function Op(e,t,n=0){let s=Jd(e);if(!s)return null;let o=kt(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=Qt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ge[d]))return ii(r,{op:"difference",kind:"qual",filters:a});let l=xt(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)&&!st.has(a[f])&&a[f]!=="from").length)return ii(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=fo(`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"}:ii(r,{op:"difference",kind:"set",ast:u})}function xv(e,t,n){let s=0;for(;s<t.length&&$v.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=xt(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!st.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function Lp(e,t){let n=new Set;for(let s of t)for(let o of We(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Np(e,t){let n=Rt(t),s=n.filter(r=>!Rp.has(r)),o=Lp(e,s.length?s:n);return o.size===1?[...o][0]:null}function fo(e,t,n){if(n>Tp)return{node:"miss",reason:"too deep to resolve"};let s=Op(e,t,n);if(s)return s;let o=Qt(e),r=o.map(c=>c.toLowerCase()),i=sc(o,r,t,n);if(i)return i;let a=Fp(o,r,t,n);if(a)return a;let l=po(e,t);return l?{node:"clause",clause:l}:null}function sc(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=_n.includes(t[o]),i=!r&&Ip(t[o]);if(!r&&!i||r&&o+1>=t.length||!kt(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Ge[f.toLowerCase()]))continue;let c=po([...l,Ha].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=fo(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 Sv(e,t,n){for(let s=0;s<t.length;s+=1){if(!kv.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),Ha,...e.slice(s+1)],a=po(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===Ha&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function Av(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!Ev.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(jv.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&&_v.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&Rv.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>_n.includes(d)))return null;let l=nc.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=fo(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=kt(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function Cv(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!Tv.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 Ov(e){let t=new Set,n=[];for(let s of e){if(!s||!Iv.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function Lv(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(!Bo.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&&(ys.includes(f)||vs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=ys.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=Nv(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=Ov(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function Nv(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&hv.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ge[a]))return{type:"qual",filters:r};if(o.length===1){let a=kt(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=po(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function Mv(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?kt(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 Pv(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=gs(n).slice(e.length).trim(),o=Qt(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 Fv(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(Ge[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&&Hn[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&&!Su.has(u))return null}let r=Pv(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 Dv(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=po(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function zv(e,t,n){let s=ys.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&Ge[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?kt(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=>!st.has(d)&&!Mp.has(d)),u;if(c){let d=fo(`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 Wv(e,t,n,s){let o=0,r=!1,i=null;for(let y of Bv){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&&oc.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ge[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?kt(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]]&&!Rn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Pp}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!st.has(y)&&!Mp.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&&Uv.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=fo(`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 qv(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(Kn[h]){s=Kn[h],o=m;break}if(Kn[t[m]]){s=Kn[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(fn[t[m]]){r=fn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(fn[t[m]]){r=fn[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=fn.connections,i="connections");let u,d=null;for(let m of t){let h=kt(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?Eu[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 Vv(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&oc.has(t[o]);)o+=1;if(o>=t.length)return null;let r=kt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&Gv.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=kt(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=>_n.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Rn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Pp}`}:null}function Hv(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&oc.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(_n.includes(t[i])){s=i;break}if(s<0)return null;let o=kt(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 Kv(e,t,n,s,o,r){let{branches:i,ops:a}=ai(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=Ka(d,f);if(m.blc.length&&m.blc.every(y=>Ge[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=xt(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=Dp(`${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 Fp(e,t,n,s){let o=Hv(e,t);if(o){let{entityType:R,term:E,relIdx:A}=o,N=t.slice(A+1),T=e.slice(A+1);if(!N.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[A]}"`};let P=Kv(R,`which ${t[A-1]}`,N,T,n,s+1);if(P.miss)return{node:"miss",reason:P.miss};let G=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:E}},...P.atoms];return G.length===1?G[0].ast:{node:"boolean",entityType:R,atoms:G}}let r=0;for(;r<t.length&&nc.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ge[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?kt(t[r]):null;if(!l){let R=r+1<t.length?kt(t[r+1]):null;if(gp.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Cp.has(t[r])){let E=r+1;E<t.length&&(t[E]==="the"||t[E]==="a"||t[E]==="an")&&(E+=1);let A=E+1<t.length?kt(t[E+1]):null;if(gp.has(t[E])&&A&&A.entityType==="Commit"&&E+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!st.has(t[r])&&!pc.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&&_n.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&&Ip(d[0]),g=f.length>0&&ai(d,f).branches.some(R=>{let{blc:E}=Ka(R,R.map(A=>A.toLowerCase()));return E.length&&E.every(A=>Ge[A])}),b=f.length>0?ai(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),E=xt(R,de);E&&E.start===0&&(y=b.slice(1).every(A=>{let N=A.map(P=>P.toLowerCase()),T=xt(N,de);return T&&T.start===0?T.kind===E.kind:!T}))}let w=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),E=xt(R,de);E&&E.start===0&&(w=b.slice(1).every(A=>{let N=A.map(P=>P.toLowerCase()),T=xt(N,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 $=l.placeholder?"what":`which ${u}`,{branches:j,ops:v}=ai(d,f),x=null,k=[];for(let R=0;R<j.length;R+=1){let E=j[R],A=E.map(te=>te.toLowerCase()),N=R===0?"seed":v[R-1],T=Ka(E,A);if(T.blc.length&&T.blc.every(te=>Ge[te])){k.push({op:N,kind:"qual",filters:T.blc});continue}if(A[0]==="of"||A[0]==="in"){k.push({op:N,kind:"set",ast:{node:"membership",entityType:c,term:E.slice(1).join(" ")}});continue}let P=E,G=xt(A,de);G?x=E.slice(G.start,G.end):x&&(P=[...x,...E]);let Y=Dp(`${$} ${P.join(" ")}`,n,s+1);if(!Y||Y.node==="miss")return{node:"miss",reason:Y&&Y.reason||"a clause in the combination didn't parse"};k.push({op:N,kind:"set",ast:Y})}if(k[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let _;return k.length===1?_=k[0].ast:_={node:"boolean",entityType:c,atoms:k},a.length&&(_={node:"qualifier",filters:a,inner:_,entityType:c}),_}function Dp(e,t,n){if(n>Tp)return{node:"miss",reason:"too deep to resolve"};let s=Qt(e),o=s.map(a=>a.toLowerCase()),r=sc(s,o,t,n);if(r)return r;let i=po(e,t);return i?{node:"clause",clause:i}:null}function ai(e,t){let n=Object.keys(Xs).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(Xs[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 rc(e,t,n,s){let o=lo[t];if(o&&ns.has(n)){let u=We(e,o).filter(d=>s.has(d.object));return Mn(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>ns.has(e.byId.get(u)?.class))?[...Rt(t),o]:Rt(t)).flatMap(u=>We(e,u)).filter(u=>s.has(u.object)),l=Mn(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")?lc(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function Xv(e,t){let n=new Set(rc(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=Yv.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function nr(e,t,n){let s=Rt(t).flatMap(o=>We(e,o)).filter(o=>n.has(o.subject));return Mn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Mn(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 Jv(e,t){let n=Cn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Cn(o.label).startsWith(s))}function Ya(e){let t=bp.get(e);if(t)return t;let n=new Set;for(let i of We(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 We(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of We(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},bp.set(e,t),t}function uo(e,t){return t?t.class==="Module"?t.id:Ya(e).moduleOfSymbol.get(t.id)||null:null}function zp(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>Qv.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=uo(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Pe(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Zo("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 Xa(e,t,n){let s=Mn(Js.flatMap(o=>nr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function ic(e,t,n=null){let s=Nn(e,t,n);if(!(s.match&&s.tier===1)){let o=Jv(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 Bp(e,t,n,s,o){let r=o||(()=>!0),i=Xa(e,t,s).filter(r);if(i.length||!Wp(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Up(e,t)){let l=e.byId.get(a);if(!l)continue;let c=Xa(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 As(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=Ya(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=uo(e,t),o=Ya(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Ss(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function ac(e){return We(e,"inherits")}function Ja(e,t){return ac(e).filter(n=>n.object===t).map(n=>n.subject)}function wp(e,t){return ac(e).filter(n=>n.subject===t).map(n=>n.object)}function Zv(e,t){let n=new Set,s=[...Ja(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Ja(e,o))n.has(r)||s.push(r)}}return n}function Up(e,t){let n=new Set,s=[...wp(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of wp(e,o))n.has(r)||s.push(r)}}return n}function Wp(e,t){let n=yp.get(e);if(n||(n=new Map,yp.set(e,n)),n.has(t))return n.get(t);let s=ac(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 vp(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 xp(e){return e.slice().sort((t,n)=>$p[n.via]-$p[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function kp(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Qn(n);if(Ln(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of Ts(e.label))if(Ln(o,n,s)<=s)return!0;return!1}function qp(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...Ts(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Wp(e,t),i=[];for(let l of s){let c=vp(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...Zv(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!vp(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:xp(i),broad:[]};let a=new Map;for(let l of s)for(let c of Up(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&kp(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of Ja(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&kp(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:xp([...a.values()])}}function e$(e){return[...Gr(Vr(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function Zt(e,t,n){switch(t.node){case"clause":return Ht(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?e$(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=qp(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Rt(t.kind).flatMap(o=>We(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=Nn(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Np(e,t.kind);if(!o)return[];let r=new Set(nr(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(Zt(e,t.inner,n).map(o=>o.id));return rc(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(Zt(e,t.inner,n).map(o=>o.id));return nr(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=ic(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 Mn(Js.flatMap(l=>nr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=Bp(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?Kp(e,t,n).matches:Zt(e,t.inner,n).filter(o=>t.filters.every(r=>As(e,o,Ge[r])));case"boolean":return Gp(e,t,n);case"anaphora":return Vp(e,t,n).matches;default:return[]}}function Gp(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=Zt(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>As(e,l,Ge[c])),a=l=>o.filters.every(c=>{let u=t$(Ge[c]);return u?As(e,l,u):!As(e,l,Ge[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(Zt(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 Zt(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function n$(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=cn(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 Vp(e,t,n){let o=n$(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=>As(e,d,Ge[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=cn(e,i.clause.object);if(!d.match)r=[];else{let f=lo[i.clause.kind],p=[...Rt(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>We(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=rr(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function Hp(e,t,n){let s=n.kind==="*"?s$:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of We(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 o$(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 i$(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(r$.test(s))r=s;else{let{match:u,ambiguous:d}=cn(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 a$(e,t,n){let s=Zt(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=rc(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 c$(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(We(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!Ss(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:Hp(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?rr(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 Kp(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=>As(e,m,Ge[h])):null,a=m=>rr(r,m,"membership"),l=ic(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=Mn(Js.flatMap(g=>nr(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}=Bp(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 l$(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=cn(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=cn(e,s,{expectedClass:n}),l=!r||a.match&&uo(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?lc(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 u$(e,t,n){let s=uo(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||Xa(e,n.id).some(o=>o.id===t.id)}function d$(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Nn(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=ic(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!u$(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=As(e,a.match,Ge[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 p$(e,t,n){let s=cn(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=Zt(e,{node:"allOfClass",entityType:t.entityType},n),r=Gp(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 f$(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(Zt(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}=Ht(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function m$(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return l$(e,t);if(t.node==="qualCheck")return d$(e,t,n);if(t.node==="universal")return p$(e,t,n);if(t.node==="count"){let i=f$(e,t.base,n);return i?{compositeKind:"count",count:Xv(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:Zt(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:Zt(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="superlative")return c$(e,t);if(t.node==="temporal")return a$(e,t,n);if(t.node==="recentCommits")return o$(e);if(t.node==="commitFilter")return i$(e,t);if(t.node==="anaphora")return Vp(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return Kp(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=qp(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=Zt(e,t,n),o=t.entityType||null,r=rr(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function Yp(){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 h$(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=or(e);return n?`${t} in ${n}`:t}function Qa(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(Qa):Array.isArray(e.filters)&&e.filters.some(t=>Ge[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(Qa)}function g$(e,t){return!["Function","Method"].includes(t)||!Qa(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 b$(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})`:""}. ${Yp()}.`,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=Pe(t.entityType,1),o=Pe(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=or(i),l=i.class==="Module"?"":a?`, ${Zo("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 ${Zn(t.matches)}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 no ${o} found${r}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="qualCheck"){if(t.qualCheckMiss==="pronoun")return{content:`"${t.term}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="unresolved")return{content:`couldn't find "${t.term}" in the index to check.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="scope")return{content:`couldn't find "${t.scope}" in the index to check inside.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="outsideScope")return{content:`No \u2014 ${t.subjectLabel} isn't in ${t.scopeLabel}.`,miss:!0,ambiguous:!1};let s=t.subject.label,o=t.negated?`not ${t.qualifier}`:t.qualifier,r=t.negated?t.qualifier:`not ${t.qualifier}`;return{content:`${t.holds?"Yes":"No"} \u2014 ${s} is ${t.holds?o:r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="universal"){if(t.universalMiss==="unresolved")return{content:`couldn't find "${t.object}" in the index to check.`,miss:!0,ambiguous:!1,matches:[]};let s=Pe(t.entityType,t.total),o=dv(t.kind);return t.holds?{content:`Yes \u2014 all ${t.total} ${s} ${o} ${t.object}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 ${t.counter.length} of ${t.total} ${s} do not ${o} ${t.object}: ${Zn(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Pe(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 ${Pe(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>Ue?` \u2014 narrow with "${Pe(t.entityType,2)} in <module>"`:"";return{content:`${Zn(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="membership"){if(!t.matches.length)return{content:`nothing in the index matches that${t.entityType?` (${Pe(t.entityType,2)})`:""}. ${ts(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Pe(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Pe(t.entityType,1);if(!t.matches.length)return{content:`no ${Pe(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?h$(t.matches[0]):Zn(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Pe(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,Mt).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>Mt?` \u2026+${t.matches.length-Mt} 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,Mt).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>Mt?` \u2026+${t.matches.length-Mt} 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 ${Pe(t.entityType,2)} to rank in this index.`,miss:!0,ambiguous:!1};let s=t.extreme==="most"?"the most":"the fewest",o=t.matches.length>1?` (${t.matches.length}-way tie)`:"";return{content:`${Zn(t.matches)} \u2014 ${s} ${t.metricNoun} (${t.score})${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="temporal"){let s=t.innerCount||0,o=t.entityType?Pe(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. ${ts(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. ${ts(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=g$(e,t.entityType)||ts(n);return{content:`nothing in the index matches that${t.entityType?` (${Pe(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function cc(){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). `+Yp()}function ts(e=null){return e&&Ra(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 Ts(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function li(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 Xp(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function w$(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function er(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=er(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=[...Ts(s)],b=o.split(/\s+/).find(v=>v.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,$=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,j=$?w$(s):null;for(let v of r){let x=String(v.label||"").toLowerCase(),k=x.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(k===o){d.push({ind:v,score:5e3});continue}if(o.length>=4&&(k.startsWith(o)||k.endsWith(o))){d.push({ind:v,score:4e3-Math.abs(k.length-o.length)});continue}if($){let E=Xp(v.label);if(E&&E===j){d.push({ind:v,score:5e3});continue}let A=/[/_-]/.test(v.label)||/\.[a-z0-9]+$/i.test(String(v.label||""));if(E&&A&&j.length>=4&&E.includes(j)){d.push({ind:v,score:2e3-Math.abs(E.length-j.length)});continue}}if(v.class==="Module"){let E=li(o);if(E!==o&&E===li(k)){let A=Qn(o);if(Ln(k,o,A)>A){d.push({ind:v,score:3e3-Math.abs(k.length-o.length)});continue}}}if(o.length>=4&&x.includes(o)){d.push({ind:v,score:1e3-Math.abs(x.length-o.length)});continue}let _=Ts(v.label),R=g.filter(E=>_.has(E)).length;R>0&&(!y||_.has(y))&&d.push({ind:v,score:R/g.length*qa})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter($=>$.score===g.score),w=g.score>=qa?b.filter($=>$.score>=qa):b;return{match:g.ind,candidates:w.slice(0,4).map($=>$.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),m=null,h=!p&&typeof $s=="function"?$s(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($=>$.score===g.score);if(m={match:y,candidates:b.slice(0,4).map($=>e.byId.get($.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=Qn(o),b=g+1,y=[];for(let w of r){let $=Ln(String(w.label||"").toLowerCase(),o,g);if($>0)for(let j of Ts(w.label)){if($<=0)break;$=Math.min($,Ln(j,o,g))}$<b?(b=$,y=[w]):$===b&&$<=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,...$]=y;return{match:w,candidates:$.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function Ga(e,t){let n=Xp(t),s=[...Ts(t)],o=[];for(let r of Ts(e))n.includes(r)||s.some(i=>li(i)===li(r))||ci.has(r)||Zp.has(r)||o.push(r);return o}function ri(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(Ga(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),Ga(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:gn(s.slice(0,4).map(r=>r.label))}:e}let n=Ga(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function cn(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(y$,"").trim(),i=r.match(v$);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=ri(er(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=ri(er(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return ri(er(e,t,n),t)}return ri(er(e,t,n),t)}function Nn(e,t,n){if(bs.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 cn(e,t)}function lc(e,t,n){let s=[];for(let o of We(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 $$(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||ns.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>We(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&ns.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 E$(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&uc.has(Sp(s.label))).map(s=>({ind:s,named:n.has(Sp(s.label))?1:0,depth:String(s.label).split("/").length,fixture:S$(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 j$(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function dc(e){return(e?.attributes||[]).find(t=>t.prop===_$)?.value||null}function R$(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${ao(e)} ${e} in this graph's vocabulary`}function Ht(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 m$(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(P=>{let G=Ht(e,P,{contextId:n,prev:s});return{parsed:P,result:G,rendered:bn(P,G,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:T}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let T=String(t.object||"").trim(),P=T.toLowerCase(),G=(e.individuals||[]).find(Y=>{if(!dc(Y))return!1;if(String(Y.label).toLowerCase()===P)return!0;let te=(Y.attributes||[]).find(F=>F.key==="token")?.value;return te&&String(te).toLowerCase()===P});if(!G){let Y=zp(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:[G],objMatch:G,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}if(r==="mentions"){let T=String(t.object||"").trim();return{matches:(typeof $s=="function"?$s(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"&&x$.test(String(t.object||"").trim())){let T=E$(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 (${[...uc].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!j$(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=Nn(e,t.subject,n),P=Nn(e,t.object,n);if(!T.match||!P.match||T.ambiguous||P.ambiguous)return{matches:[],objMatch:P.match,candidates:P.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(T.unresolvedPronoun||P.unresolvedPronoun)};let[G,Y]=[T.match,P.match];i==="touches"&&Y.class==="Commit"&&G.class!=="Commit"&&([G,Y]=[Y,G]);let te=lo[i],F=[...new Set(te?[...Rt(i),te]:Rt(i))],D=F.flatMap(B=>We(e,B)).filter(B=>B.subject===G.id&&B.object===Y.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:P.match,subjMatch:T.match,candidates:[],traversal:`${F.join("+")} edge from ${G.label} to ${Y.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=Nn(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=Nn(e,t.altObject,n),P=!!l.match&&!l.ambiguous,G=!!T.match&&!T.ambiguous;!P&&G?l=T:P&&G&&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)(?=\.[^.]+$)/,""),P=T(String(t.object||"").trim().toLowerCase()),G=(e.individuals||[]).find(Y=>{if(Y.class!=="Module"||Y.id===l.match.id)return!1;let te=String(Y.label||"").toLowerCase().split("/").pop();return te!==T(te)&&T(te)===P});G&&(l={...l,ambiguous:!0,candidates:[G,...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 P=Mn([c,...u||[]]).slice(0,Ue).map(G=>{let Y=Ht(e,t,{contextId:n,prev:s,pinnedObjMatch:G});return{candidate:G,result:Y,rendered:bn(t,Y,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:P}}if(r==="where"){let T=(c.attributes||[]).find(P=>P.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:T,traversal:T?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let T=Y=>String((Y.attributes||[]).find(te=>te.key==="date")?.value||""),P;if(c.class==="Commit")P=[c];else{let Y=["touches","touchesSymbol"].flatMap(F=>We(e,F)).filter(F=>F.object===c.id),te=new Set;P=[];for(let F of Y){if(te.has(F.subject))continue;te.add(F.subject);let D=e.byId.get(F.subject);D&&D.class==="Commit"&&P.push(D)}P.sort((F,D)=>T(D).localeCompare(T(F)))}let G=P.length&&T(P[0])?[{kind:"event",class:"Commit",label:P[0].label,ids:[P[0].id],attrs:{date:T(P[0]).slice(0,10)},lane:"when"}]:[];return{matches:P,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:G,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let T=F=>String((F.attributes||[]).find(D=>D.key==="date")?.value||""),P=["touches","touchesSymbol"].flatMap(F=>We(e,F)).filter(F=>F.object===c.id),G=new Set,Y=[];for(let F of P){if(G.has(F.subject))continue;G.add(F.subject);let D=e.byId.get(F.subject);D&&D.class==="Commit"&&Y.push(D)}Y.sort((F,D)=>T(D).localeCompare(T(F)));let te=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:te,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return $$(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=lo[i],G=!!(T&&c.class&&ns.has(c.class))?[...new Set([...Rt(i),T])]:Rt(i);if(a&&a!=="Change"){let W=Lp(e,G),C=Wa[a];if(W.size&&!W.has(a)&&!(C&&W.has(C)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...W],traversal:`${G.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${es(a)})`}}let te=G.flatMap(W=>We(e,W)).filter(W=>W.subject===c.id).map(W=>e.byId.get(W.object)).filter(Boolean),F=Mn(te),D=F,B="";if(a&&a!=="Change"){D=F.filter(C=>C.class===a);let W=Wa[a];if(!D.length&&W){let C=F.filter(I=>I.class===W);C.length&&(D=C,B=`, widened to ${W} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${G.join("+")} edges where subject = ${c.label}${B}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:no(e,c,{maxDepth:Ep}).flat().map(G=>e.byId.get(G.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Ep})`};let g=lo[i]||Rt(i).find(T=>Rp.has(T))||null,b=!!(c.class&&ns.has(c.class));if(g&&(ns.has(a)||b)){let T=We(e,g).filter(B=>B.object===c.id),P=Mn(T.map(B=>e.byId.get(B.subject)).filter(Boolean)),G=!a||a==="Change"?P:P.filter(B=>B.class===a),Y="",te=Wa[a];if(!G.length&&te){let B=P.filter(W=>W.class===te);B.length&&(G=B,Y=`, widened to ${te} subjects (no ${a} recorded)`)}let F=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!We(e,"contains").some(B=>B.subject===c.id),D=F?e.byId.get(uo(e,c)||""):null;if(G.length||!(F&&D))return{matches:G,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${Y}`,ambiguous:d,matchedVia:p}}let y=c,w=u,$=d,j=p,v="",x=Np(e,i);if(x&&y.class&&y.class!==x){let T=cn(e,t.object,{expectedClass:x});if(T.match&&!T.ambiguous)y=T.match,w=T.candidates,$=T.ambiguous,j=T.matchedVia;else if(x==="Module"){let P=uo(e,y),G=P&&e.byId.get(P);if(G)v=`, refined from ${y.label} to its containing module`,y=G;else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:j,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:$,matchedVia:j,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${es(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${es(x)})`}}let k=Rt(i).flatMap(T=>We(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(k=k.concat(Rt(i).flatMap(T=>We(e,T)).filter(T=>T.subject===y.id).map(T=>({...T,subject:T.object,object:T.subject}))));let _="";if(!k.length&&y.class){let T=`ext:${String(y.label).toLowerCase()}`;k=Rt(i).flatMap(P=>We(e,P)).filter(P=>String(P.object).toLowerCase()===T),k.length&&(_=` (by name, via unresolved ${T} references)`)}let R=[],E=new Set;for(let T of k){let P=e.byId.get(T.subject);P&&!E.has(P.id)&&(E.add(P.id),R.push(P))}let A,N="";if(!a||a==="Change")A=R;else{let T=R.filter(P=>P.class===a);if(T.length)A=T;else if(a!=="Module"&&R.some(P=>P.class==="Module")){let P=new Set(R.filter(G=>G.class==="Module").map(G=>G.id));A=lc(e,P,a),N=`, then ${es(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Rt(i).join("+")} edges where object = ${y.label}${_}${N}${v}`,ambiguous:$,matchedVia:j}}function or(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 Va(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function A$(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function gn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function tr(e){let t=e.object??e.subject??"?";return`${e.entityType?Pe(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function Za(e){return Po[e]?.bare||e}function T$(e){let t=Za(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function C$(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=Pe(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 ${Za(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 ${Za(o.kind)} ${JSON.stringify(String(r))}`}function Jp(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(tr).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>Jp(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?C$(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 ":""}${Rs(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?Pe(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${Rs(e.kind)}`:`${r}${Rs(e.kind)} "${e.object}"`}return{english:o,machine:s}}function bn(e,t,n=null){let s=Qp(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function Qp(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${cc()}`,miss:!0,ambiguous:!1};if(e.node)return b$(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
55
- ${t.branches.map((l,c)=>`${c+1}) as ${tr(l.parsed)}: ${l.rendered.content}`).join(`
53
+ `)}`+(o.length>ja?`
54
+ \u2026+${o.length-ja} more`:"")}var qu,sd,Hu,Ub,qb,ka,Gb,Wr,Vb,Hb,Kb,id,Yb,Xb,Jb,Qb,Zb,ew,tw,nw,sw,ow,rw,iw,aw,cw,lw,uw,dw,pw,fw,mw,hw,gw,bw,ww,yw,Ku,vw,$w,ad,cd,ld,xw,kw,Sw,Ew,jw,Xu,Ju,Aw,Qu,Br,Zu,ed,td,Vo,Me,Cw,Iw,wd,Ow,Nt,xd,Lw,Id,Mw,Pw,Fw,Dw,zw,Bw,Uw,Ww,Sa,nd,Vr,qw,Ea,ja,Ce=N(()=>{Kn();xs();wa();Go();Ss();qu={"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"};sd=e=>/^(git|turn):/.test(String(e||""));Hu=30,Ub=8;qb=2,ka=25,Gb=3;Wr=10,Vb=8,Hb=3,Kb=2,id=5,Yb=4,Xb=.2,Jb=.35,Qb=.15,Zb=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),ew=.2,tw=.35,nw=.2,sw=.35,ow=e=>/\.cs$/i.test(e),rw=e=>/^I[A-Z]/.test(String(e||"")),iw=.2,aw=.35,cw=50,lw=.2,uw=.35,dw=.5,pw=id,fw=3,mw=4,hw=1,gw=.9,bw=.5,ww=.2,yw=.35,Ku=4,vw=2,$w=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],ad=3,cd=12,ld=.9,xw=["imports","calls","callsSymbol","inherits"],kw=.5,Sw=.6,Ew=.2,jw=.35;Xu=128,Ju=4,Aw=64,Qu=250,Br=class extends Error{};Zu=new WeakMap;ed=40,td=40,Vo=30;Me=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";Cw=25,Iw=15;wd=40,Ow="tests edges are recorded module to module, so this is module-grain coverage.";Nt=15;xd=new Set(["Function","Method"]);Lw=8;Id={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};Mw=8,Pw=16,Fw=4,Dw=6,zw=12,Bw=2,Uw=8,Ww=3,Sa=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),nd=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Vr=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},qw=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};Ea=20;ja=40});function He(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Gd(e){let t=String(e||"");return Dd&&(t=t.replace(Dd," ")),t.replace(/\s+/g," ").trim()}function Vd(e){let t=String(e||"");t=t.replace(dy," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(cy);if(o&&(t=o[1].trim()),o=t.match(ly),o&&(t=o[1].trim()),o=t.match(zd),o&&(t=o[1].trim()),o=t.match(Bd),o&&(t=o[1].trim()),o=t.match(Ud),o&&(t=o[1].trim()),o=t.match(uy),o&&(t=o[1].trim()),o=t.match(Wd),o&&(t=o[1].trim()),o=t.match(py),o&&(t=o[1].trim()),o=t.match(fy),o&&Yn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(my),o&&Yn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(hy),o&&Yn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(gy),o&&Yn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(by),o&&Yn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(wy),o&&Yn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(yy),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(vy),o&&(t=`what does ${o[1].trim()} mean`),o=t.match($y),o){let r=o[1].trim();ay(r)||(t=!xy.test(r)&&(oy.test(r)||Yn.test(r))?r:`describe ${r}`)}if(o=t.match(ky),o){let r=o[1].trim();(Yn.test(r)||Sy.test(r)||Wd.test(r)||zd.test(r)||Ud.test(r)||Bd.test(r)||Ey.test(r))&&(t=r)}if(t===s)break}return t}function Ry(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(jy);if(o&&(t=o[1].trim()),o=t.match(_y),o&&(t=o[1].trim()),t===s)break}return t}function Ty(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(Ay);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function Oy(e){let t=String(e||""),n=t.match(Iy);if(n){let o=Kd[n[1].toLowerCase()],r=Hd[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(Yd);return s?`which modules transitively import ${s[1].trim()}`:t}function Kr(e){return String(e||"").replace(Xw,t=>la[t.toLowerCase()])}function js(e){let t=Kr(e);return t=t.replace(Jw,n=>ua[n.toLowerCase()]),t=t.replace(Qw,n=>da[n.toLowerCase()]),t=t.replace(Zw,"with"),t=t.replace(ey,(n,s)=>`${s} for`),t=t.replace(ty,(n,s)=>`for ${s}`),t=t.replace(ny,(n,s)=>s),t=t.replace(Ly,"$1$2"),t=t.replace(vu,"$1ing"),t=Vd(t),t=Ty(t),t=Ry(t),t=Oy(t),t=Gd(t),t=Yt(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Ho(e){for(let t of[...xu,...$u]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Oa(e){for(let t of Ny){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Xd(e){let t=String(e||"").match(My);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var Yw,Xw,qd,Jw,Qw,Zw,ey,ty,ny,sy,Dd,oy,Yn,ry,iy,ay,cy,ly,zd,Bd,Ud,uy,dy,py,fy,my,hy,gy,by,wy,yy,vy,$y,xy,ky,Sy,Ey,Wd,jy,_y,Ay,Hd,Kd,Cy,Iy,Yd,Ly,Ny,My,st,Jt,me,Xn=N(()=>{Rn();Yw=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(He).join("|")+")\\b","gi"),Xw=Yw(la),qd=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(He).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Jw=qd(ua),Qw=qd(da),Zw=/(?<=^|\s)w\/(?=\s|$)/gi,ey=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,ty=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,ny=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,sy=Object.keys(de).sort((e,t)=>t.length-e.length).map(He).join("|"),Dd=Do.length?new RegExp("\\b("+[...Do].sort((e,t)=>t.length-e.length).map(He).join("|")+")\\b\\s*,?","gi"):null;oy=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(He).join("|")+")\\b","i"),Yn=/^(?:which|what|who|whose|where|when|why|how)\b/i,ry=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),iy=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,ay=e=>{if(iy.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return ry.has((t[t.length-1]||"").toLowerCase())},cy=/^(?: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,ly=/^(?: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,zd=/^(?:(?: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,Bd=/^(?: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,Ud=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,uy=/^(?:please[\s,]+)+(.+)$/i,dy=/,?\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,py=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,fy=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,my=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,hy=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,gy=/^do\s+you\s+know\s+(.+?)\??$/i,by=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,wy=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,yy=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,vy=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,$y=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,xy=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,ky=/^(?:and|also|so|then|now|but)\s+(.+)$/i,Sy=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,Ey=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,Wd=/^(?:(?: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;jy=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,_y=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;Ay=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;Hd=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),Kd=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),Cy="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",Iy=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(Kd).join("|")+")\\s+("+Object.keys(Hd).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+Cy+")\\??$","i"),Yd=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;Ly=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${bu.map(He).join("|")})(\\s*[?.!]*)$`,"i");Ny=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+(?:${ca.map(He).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+(${sy})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);My=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");st=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"]),Jt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),me=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var Qd,Jd=N(()=>{Qd={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 On(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 Na(e){return/^[a-z]+$/.test(e)&&!st.has(e)&&!La.has(e)}function Zd(e){return Uy(e)?null:Ma(e,zy,Jn(e))}function Ma(e,t,n=Jn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=On(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 Fy,Jn,La,Dy,zy,By,Uy,Ko=N(()=>{Rn();Jd();Xn();Fy=["used"];Jn=e=>e.length<=5?1:2,La=new Set([...Object.keys(de),...Object.keys(Be),...Object.keys(qt),...Fy].flatMap(e=>e.split(" "))),Dy=4,zy=[...new Set([...Object.keys(de),...Object.keys(qt)].flatMap(e=>e.split(" ")).filter(e=>e.length>=Dy))],By=new Set(Qd.words),Uy=e=>By.has(e)});function so(e){for(let t of Vy){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Yr,Wy,qy,Gy,Pa,Vy,ep,Xr=N(()=>{Rn();Xn();Yr=Object.keys(de).sort((e,t)=>t.length-e.length).map(He).join("|"),Wy=Object.keys(Be).sort((e,t)=>t.length-e.length).map(He).join("|"),qy=Object.keys(qt).sort((e,t)=>t.length-e.length).map(He).join("|"),Gy=bs.slice().sort((e,t)=>t.length-e.length).map(He).join("|"),Pa=(e,t)=>e==="defines"&&Fo.has(t),Vy=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Yr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Pa(n,t))return null;let s=e[1].trim(),o=e[3].trim();return Po.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+(${Wy})\\s+(?:(${qy})\\s+)?(${Yr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Pa(n,t)?null:{shape:"reverse",entityType:Be[e[1].toLowerCase()],modifier:e[2]?qt[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Yr})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Pa(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+(?:${Gy})\\??$`,"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=Yt(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"&&wu.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:hs(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${rn.map(He).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+(?:${Kt.map(He).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+)?(${Yr})\\??$`,"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()})}];ep={id:"grammar",class:"graph-query",run(e){let t=so(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function $t(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 Xo(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(k=>k.toLowerCase());if(s.includes("where")&&!$t(s,de)){let k=s.some(E=>rn.includes(E)),_=new Set([...Kt,...rn]),R=n.filter((E,A)=>!st.has(s[A])&&!_.has(s[A])).join(" ").trim();if(R){let E=k?"mentions":"where";return{shape:E,entityType:null,modifier:"direct",kind:E,object:R}}}if(new Set(["has","have","had"]).has(s[0])){let k=s.length;for(;k>1&&(s[k-1]==="ever"||s[k-1]==="been");)k-=1;if((k>1?de[s[k-1]]:null)==="touches"){let R=n.slice(1,k-1).filter((E,A)=>!st.has(s[1+A])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=$t(s,de);if(!i&&t){let k=s.map(_=>{if(!Na(_))return _;let R=t.lemma(_);return La.has(R)?R:_});i=$t(k,de),i&&(r=k)}let a=null;if(!i){let k=s.map(_=>_.length>=4&&Na(_)&&Zd(_)||_);if(i=$t(k,de),i){r=k;let _=s.slice(i.start,i.end).findIndex((E,A)=>E!==k[i.start+A]),R=i.start+Math.max(_,0);a={from:s[R],to:k[R]}}}let l=!1;if(!i)for(let k=0;k<s.length;k+=1){let _=Vn[s[k]];if(!(_&&s[k]==="used"&&s[k+1]==="for")&&_&&s.slice(0,k).some(R=>Yo.has(R))){i={kind:_,start:k,end:k+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&Vn[s[i.start]]&&s.slice(0,i.start).some(k=>Yo.has(k))&&(l=!0);let c=k=>a?{...k,fuzzyVerb:a}:k;if(t&&i.end-i.start===1){let k=i.start,_=s[k-1];if((_==="the"||_==="these"||_==="those")&&s[k+1]==="of"&&t.posTags(n)[k]==="NOUN"){let E=n.slice(k+2).filter((A,L)=>!st.has(s[k+2+L])).join(" ").trim();if(E)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:E})}}let u=new Set,d=k=>{if(k)for(let _=k.start;_<k.end;_+=1)u.add(_)};d(i);for(let[k,_]of Object.entries(de)){if(_!==i.kind)continue;let R=k.split(" "),E=i.end;if(R.every((A,L)=>r[E+L]===A)){d({start:E,end:E+R.length});break}}let f=$t(r,Be,u);d(f);let p=$t(r,qt,u);d(p);let m=(k,_)=>n.slice(k,_).filter((R,E)=>!u.has(k+E)&&!st.has(s[k+E])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&Yy.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Be[r.slice(f.start,f.end).join(" ")]:null,w=p?qt[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let k=h||g;if(k)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:k})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let k=h||g;if(k)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:k})}let $=s.indexOf("by"),j=s.slice(0,i.start).findIndex(k=>Yo.has(k)),v=j>=0,x=v&&j>$;if($>=0&&!u.has($)&&v){let k=(E,A)=>n.slice(E,A).filter((L,T)=>{let P=E+T,G=s[P];return!u.has(P)&&!st.has(G)&&G!=="by"&&!Yo.has(G)&&!Hy.has(G)&&!Ky.has(G)}).join(" ").trim(),[_,R]=x?[k(j+1,n.length),k($+1,j)]:[k(0,$),k($+1,n.length)];if(_&&R)return b==="defines"&&Fo.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:_});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(_)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:_})}if(l&&$<0&&g&&s[i.start]==="called")return null;if(h&&g){let k=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Fo.has(k))return null;let _=h,R=g;return Po.includes(k)&&([_,R]=[R,_]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:_,object:R})}if(g){let k=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:k,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&f&&f.start===i.end){let k=r.slice(f.start,f.end).join(" ");if(k)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:k})}if(h&&!g&&v&&i.end-i.start===1&&Vn[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 k=Yo.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...k?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var Yo,Hy,Ky,Yy,tp,Jr=N(()=>{Rn();Xn();Ko();Yo=new Set(["is","are","was","were","be","been","being","get","gets","got"]),Hy=new Set(["which","what","who","whom","whose"]),Ky=new Set(_n.map(e=>e.toLowerCase())),Yy=new Set(["recently","lately","yet","already","ever","again"]);tp={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Xo(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function Jy(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)||np.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function Qy(e,t=null){let n=Jt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!np.has(a)&&(Xy.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=Jy(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var np,Xy,sp,op=N(()=>{Rn();Xn();Xr();Jr();np=new Set([...st,...me(gs),...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(qt)),...me(Object.keys(Ge)),...me(ws),...me(ys),...me(Object.keys(Hn)),...me(Object.keys(pn)),...me(Object.keys(Ys)),...me(_n),...me(zo),...me(bs),...me(Kt),...me(rn),...me(jn),...me(Object.keys(Js))]),Xy=new Set([...me(Do),...me(Nr)]);sp={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(so(e))return null;let{text:n,dropped:s,maybeNoise:o}=Qy(e,t.nlp||null);if(!s.length||!n)return null;let r=so(n)||Xo(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 rp=N(()=>{});var Qr,Zr=N(()=>{Qr=()=>{}});function ap(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?oo(e.subject)===oo(t.subject)&&oo(e.object)===oo(t.object):oo(e.object)===oo(t.object)}function Fa(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=>!cp(c))&&(n=n.filter(c=>!cp(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=>ap(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),ip(f.parsed)<ip(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=>ap(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function tv(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 lp(e,{describe:t=tv,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 oo,Zy,ip,ev,cp,Da=N(()=>{oo=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),Zy=/^\s*(?:the|a|an)\s+/i,ip=e=>[e?.subject,e?.object].filter(t=>Zy.test(String(t||""))).length;ev=new Set(["fuzzy","lemma","spell"]),cp=e=>ev.has(e.via)});function ei(e){za=e}function ti(){return typeof za=="function"?za():null}var za,ro=N(()=>{za=null});function pp(e,t={},n=sv){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 nv,sv,fp=N(()=>{Xn();Xr();Jr();op();rp();Zr();Da();ro();nv=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],sv=[ep,tp,sp,...nv]});function io(e){return ov.test(String(e||"").trim())?"an":"a"}function ni(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 ao(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Jo(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 ov,si=N(()=>{ov=/^[aeiou]/i});var Qo,Ba=N(()=>{Qo=(e,t,n)=>n});var tf={};Sn(tf,{DYNAMIC_TAIL_OK_RE:()=>pc,applyNegationFrames:()=>Ho,ask:()=>ns,classDisplayName:()=>Zn,degreeMetric:()=>Vp,metaFallbackEntityAnswer:()=>Dp,normalizeQuery:()=>js,parseQuery:()=>nr,parseQueryFull:()=>ec,render:()=>gn,rephraseHint:()=>ac,resolveObject:()=>an,traverse:()=>Vt});function We(e,t){let n=mp.get(e);n||(n=new Map,mp.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(In(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Pe(e,t){let[n,s]=Rp[e]||["result","results"];return t===1?n:s}function or(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Pe(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function Zn(e){let t=String(e||"");if(typeof fn=="function"){let n=fn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function _s(e){return iv[e]||e}function dv(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||uv.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return me(bs).includes(o)?t:e}function nr(e,{nlp:t=void 0}={}){return ec(e,{nlp:t}).parsed}function ec(e,{nlp:t=void 0}={}){let n=t===void 0?ti():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Oa(Ho(js(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=fv(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=Fa(pp(o,{nlp:n,raw:s}));return i?{parsed:dv(i.parsed),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function Ha(e,t){return t.length&&Tp.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function uo(e,t){return so(e)||Xo(e,t)}function fv(e,t){let n=Jt(e),s=n.map(o=>o.toLowerCase());return Ov(n,s)||Nv(n,s)||bv(n,s,t)||Ip(e,t,0)||Mv(n,s,t)||yv(n,s,t)||jv(n,s,t,0)||Rv(n,s)||Cv(n,s,t)||Pv(n,s,t)||Bv(n,s,t)||Wv(n,s,t,0)||zv(n,s,t,0)||nc(n,s,t,0)||$v(n,s,t)||hv(n,s)||Pp(n,s,t,0)}function hv(e,t){let n=0;mv.has(t[n])&&(n+=1);let s=xt(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?yu[`${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 ri(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function bv(e,t,n){if(!["do","does","did"].includes(t[0])||!gv.has(t[1]))return null;let s=xt(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=$t(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)&&!st.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=po(`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:ri(o,{op:"difference",kind:"set",ast:d})}}function Ip(e,t,n=0){let s=Xd(e);if(!s)return null;let o=xt(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=Jt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ge[d]))return ri(r,{op:"difference",kind:"qual",filters:a});let l=$t(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)&&!st.has(a[f])&&a[f]!=="from").length)return ri(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=po(`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"}:ri(r,{op:"difference",kind:"set",ast:u})}function yv(e,t,n){let s=0;for(;s<t.length&&wv.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=$t(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!st.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function Op(e,t){let n=new Set;for(let s of t)for(let o of We(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Lp(e,t){let n=_t(t),s=n.filter(r=>!_p.has(r)),o=Op(e,s.length?s:n);return o.size===1?[...o][0]:null}function po(e,t,n){if(n>Ap)return{node:"miss",reason:"too deep to resolve"};let s=Ip(e,t,n);if(s)return s;let o=Jt(e),r=o.map(c=>c.toLowerCase()),i=nc(o,r,t,n);if(i)return i;let a=Pp(o,r,t,n);if(a)return a;let l=uo(e,t);return l?{node:"clause",clause:l}:null}function nc(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=jn.includes(t[o]),i=!r&&Cp(t[o]);if(!r&&!i||r&&o+1>=t.length||!xt(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Ge[f.toLowerCase()]))continue;let c=uo([...l,Va].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=po(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 $v(e,t,n){for(let s=0;s<t.length;s+=1){if(!vv.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),Va,...e.slice(s+1)],a=uo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===Va&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function jv(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!xv.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(kv.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&&Sv.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&Ev.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>jn.includes(d)))return null;let l=tc.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=po(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=xt(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function Rv(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!_v.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 Tv(e){let t=new Set,n=[];for(let s of e){if(!s||!Av.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function Cv(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(!zo.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&&(ws.includes(f)||ys.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=ws.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=Iv(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=Tv(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function Iv(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&pv.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ge[a]))return{type:"qual",filters:r};if(o.length===1){let a=xt(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=uo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function Ov(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?xt(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 Lv(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=hs(n).slice(e.length).trim(),o=Jt(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 Nv(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(Ge[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&&Vn[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&&!ku.has(u))return null}let r=Lv(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 Mv(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=uo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function Pv(e,t,n){let s=ws.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&Ge[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?xt(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=>!st.has(d)&&!Np.has(d)),u;if(c){let d=po(`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 zv(e,t,n,s){let o=0,r=!1,i=null;for(let y of Fv){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&&sc.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ge[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?xt(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]]&&!_n.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Mp}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!st.has(y)&&!Np.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&&Dv.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=po(`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 Bv(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(Hn[h]){s=Hn[h],o=m;break}if(Hn[t[m]]){s=Hn[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(pn[t[m]]){r=pn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(pn[t[m]]){r=pn[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=pn.connections,i="connections");let u,d=null;for(let m of t){let h=xt(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?Su[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 Wv(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&sc.has(t[o]);)o+=1;if(o>=t.length)return null;let r=xt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&Uv.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=xt(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=>jn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!_n.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Mp}`}:null}function qv(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&sc.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(jn.includes(t[i])){s=i;break}if(s<0)return null;let o=xt(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 Gv(e,t,n,s,o,r){let{branches:i,ops:a}=ii(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=Ha(d,f);if(m.blc.length&&m.blc.every(y=>Ge[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=$t(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=Fp(`${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 Pp(e,t,n,s){let o=qv(e,t);if(o){let{entityType:R,term:E,relIdx:A}=o,L=t.slice(A+1),T=e.slice(A+1);if(!L.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[A]}"`};let P=Gv(R,`which ${t[A-1]}`,L,T,n,s+1);if(P.miss)return{node:"miss",reason:P.miss};let G=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:E}},...P.atoms];return G.length===1?G[0].ast:{node:"boolean",entityType:R,atoms:G}}let r=0;for(;r<t.length&&tc.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ge[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?xt(t[r]):null;if(!l){let R=r+1<t.length?xt(t[r+1]):null;if(hp.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Tp.has(t[r])){let E=r+1;E<t.length&&(t[E]==="the"||t[E]==="a"||t[E]==="an")&&(E+=1);let A=E+1<t.length?xt(t[E+1]):null;if(hp.has(t[E])&&A&&A.entityType==="Commit"&&E+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!st.has(t[r])&&!dc.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&&jn.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&&Cp(d[0]),g=f.length>0&&ii(d,f).branches.some(R=>{let{blc:E}=Ha(R,R.map(A=>A.toLowerCase()));return E.length&&E.every(A=>Ge[A])}),b=f.length>0?ii(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),E=$t(R,de);E&&E.start===0&&(y=b.slice(1).every(A=>{let L=A.map(P=>P.toLowerCase()),T=$t(L,de);return T&&T.start===0?T.kind===E.kind:!T}))}let w=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),E=$t(R,de);E&&E.start===0&&(w=b.slice(1).every(A=>{let L=A.map(P=>P.toLowerCase()),T=$t(L,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 $=l.placeholder?"what":`which ${u}`,{branches:j,ops:v}=ii(d,f),x=null,k=[];for(let R=0;R<j.length;R+=1){let E=j[R],A=E.map(te=>te.toLowerCase()),L=R===0?"seed":v[R-1],T=Ha(E,A);if(T.blc.length&&T.blc.every(te=>Ge[te])){k.push({op:L,kind:"qual",filters:T.blc});continue}if(A[0]==="of"||A[0]==="in"){k.push({op:L,kind:"set",ast:{node:"membership",entityType:c,term:E.slice(1).join(" ")}});continue}let P=E,G=$t(A,de);G?x=E.slice(G.start,G.end):x&&(P=[...x,...E]);let Y=Fp(`${$} ${P.join(" ")}`,n,s+1);if(!Y||Y.node==="miss")return{node:"miss",reason:Y&&Y.reason||"a clause in the combination didn't parse"};k.push({op:L,kind:"set",ast:Y})}if(k[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let _;return k.length===1?_=k[0].ast:_={node:"boolean",entityType:c,atoms:k},a.length&&(_={node:"qualifier",filters:a,inner:_,entityType:c}),_}function Fp(e,t,n){if(n>Ap)return{node:"miss",reason:"too deep to resolve"};let s=Jt(e),o=s.map(a=>a.toLowerCase()),r=nc(s,o,t,n);if(r)return r;let i=uo(e,t);return i?{node:"clause",clause:i}:null}function ii(e,t){let n=Object.keys(Ys).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(Ys[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 oc(e,t,n,s){let o=co[t];if(o&&ts.has(n)){let u=We(e,o).filter(d=>s.has(d.object));return Nn(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>ts.has(e.byId.get(u)?.class))?[..._t(t),o]:_t(t)).flatMap(u=>We(e,u)).filter(u=>s.has(u.object)),l=Nn(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")?cc(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function Hv(e,t){let n=new Set(oc(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=Vv.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function tr(e,t,n){let s=_t(t).flatMap(o=>We(e,o)).filter(o=>n.has(o.subject));return Nn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Nn(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 Kv(e,t){let n=Tn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Tn(o.label).startsWith(s))}function Ka(e){let t=gp.get(e);if(t)return t;let n=new Set;for(let i of We(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 We(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of We(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},gp.set(e,t),t}function lo(e,t){return t?t.class==="Module"?t.id:Ka(e).moduleOfSymbol.get(t.id)||null:null}function Dp(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>Yv.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=lo(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Pe(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Qo("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 Ya(e,t,n){let s=Nn(Xs.flatMap(o=>tr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function rc(e,t,n=null){let s=Ln(e,t,n);if(!(s.match&&s.tier===1)){let o=Kv(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 zp(e,t,n,s,o){let r=o||(()=>!0),i=Ya(e,t,s).filter(r);if(i.length||!Up(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of Bp(e,t)){let l=e.byId.get(a);if(!l)continue;let c=Ya(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 Rs(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=Ka(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=lo(e,t),o=Ka(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&ks(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function ic(e){return We(e,"inherits")}function Xa(e,t){return ic(e).filter(n=>n.object===t).map(n=>n.subject)}function bp(e,t){return ic(e).filter(n=>n.subject===t).map(n=>n.object)}function Xv(e,t){let n=new Set,s=[...Xa(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Xa(e,o))n.has(r)||s.push(r)}}return n}function Bp(e,t){let n=new Set,s=[...bp(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of bp(e,o))n.has(r)||s.push(r)}}return n}function Up(e,t){let n=wp.get(e);if(n||(n=new Map,wp.set(e,n)),n.has(t))return n.get(t);let s=ic(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 yp(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 $p(e){return e.slice().sort((t,n)=>vp[n.via]-vp[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function xp(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Jn(n);if(On(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of As(e.label))if(On(o,n,s)<=s)return!0;return!1}function Wp(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...As(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=Up(e,t),i=[];for(let l of s){let c=yp(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...Xv(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!yp(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:$p(i),broad:[]};let a=new Map;for(let l of s)for(let c of Bp(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&xp(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of Xa(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&xp(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:$p([...a.values()])}}function Jv(e){return[...qr(Gr(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function Qt(e,t,n){switch(t.node){case"clause":return Vt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?Jv(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=Wp(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(_t(t.kind).flatMap(o=>We(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=Ln(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Lp(e,t.kind);if(!o)return[];let r=new Set(tr(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(Qt(e,t.inner,n).map(o=>o.id));return oc(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(Qt(e,t.inner,n).map(o=>o.id));return tr(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=rc(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 Nn(Xs.flatMap(l=>tr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=zp(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?Hp(e,t,n).matches:Qt(e,t.inner,n).filter(o=>t.filters.every(r=>Rs(e,o,Ge[r])));case"boolean":return qp(e,t,n);case"anaphora":return Gp(e,t,n).matches;default:return[]}}function qp(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=Qt(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>Rs(e,l,Ge[c])),a=l=>o.filters.every(c=>{let u=Qv(Ge[c]);return u?Rs(e,l,u):!Rs(e,l,Ge[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(Qt(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 Qt(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function Zv(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=an(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 Gp(e,t,n){let o=Zv(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=>Rs(e,d,Ge[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=an(e,i.clause.object);if(!d.match)r=[];else{let f=co[i.clause.kind],p=[..._t(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>We(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=or(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function Vp(e,t,n){let s=n.kind==="*"?e$:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of We(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 t$(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 s$(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(n$.test(s))r=s;else{let{match:u,ambiguous:d}=an(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 o$(e,t,n){let s=Qt(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=oc(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 r$(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(We(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!ks(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:Vp(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?or(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 Hp(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=>Rs(e,m,Ge[h])):null,a=m=>or(r,m,"membership"),l=rc(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=Nn(Xs.flatMap(g=>tr(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}=zp(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 i$(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=an(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=an(e,s,{expectedClass:n}),l=!r||a.match&&lo(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?cc(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 a$(e,t,n){let s=lo(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||Ya(e,n.id).some(o=>o.id===t.id)}function c$(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Ln(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=rc(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!a$(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=Rs(e,a.match,Ge[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 l$(e,t,n){let s=an(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=Qt(e,{node:"allOfClass",entityType:t.entityType},n),r=qp(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 u$(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(Qt(e,t.inner,n).map(s=>s.id));if(t.node==="clause"&&t.clause?.shape==="reverse"&&t.clause.kind==="touches"&&t.clause.entityType==="Commit"){let{objMatch:s,ambiguous:o}=Vt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function d$(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return i$(e,t);if(t.node==="qualCheck")return c$(e,t,n);if(t.node==="universal")return l$(e,t,n);if(t.node==="count"){let i=u$(e,t.base,n);return i?{compositeKind:"count",count:Hv(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:Qt(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:Qt(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="superlative")return r$(e,t);if(t.node==="temporal")return o$(e,t,n);if(t.node==="recentCommits")return t$(e);if(t.node==="commitFilter")return s$(e,t);if(t.node==="anaphora")return Gp(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return Hp(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=Wp(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=Qt(e,t,n),o=t.entityType||null,r=or(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function Kp(){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 p$(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=sr(e);return n?`${t} in ${n}`:t}function Ja(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(Ja):Array.isArray(e.filters)&&e.filters.some(t=>Ge[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(Ja)}function f$(e,t){return!["Function","Method"].includes(t)||!Ja(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 m$(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})`:""}. ${Kp()}.`,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=Pe(t.entityType,1),o=Pe(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=sr(i),l=i.class==="Module"?"":a?`, ${Qo("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 ${Qn(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=Pe(t.entityType,t.total),o=cv(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}: ${Qn(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Pe(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 ${Pe(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>Ue?` \u2014 narrow with "${Pe(t.entityType,2)} in <module>"`:"";return{content:`${Qn(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="membership"){if(!t.matches.length)return{content:`nothing in the index matches that${t.entityType?` (${Pe(t.entityType,2)})`:""}. ${es(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Pe(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Qn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Qn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Pe(t.entityType,1);if(!t.matches.length)return{content:`no ${Pe(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?p$(t.matches[0]):Qn(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Pe(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,Nt).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>Nt?` \u2026+${t.matches.length-Nt} 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,Nt).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>Nt?` \u2026+${t.matches.length-Nt} 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 ${Pe(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:`${Qn(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?Pe(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. ${es(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. ${es(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=f$(e,t.entityType)||es(n);return{content:`nothing in the index matches that${t.entityType?` (${Pe(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${Qn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function ac(){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). `+Kp()}function es(e=null){return e&&_a(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 As(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function ci(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 Yp(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function h$(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Zo(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=Zo(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=[...As(s)],b=o.split(/\s+/).find(v=>v.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,$=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,j=$?h$(s):null;for(let v of r){let x=String(v.label||"").toLowerCase(),k=x.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(k===o){d.push({ind:v,score:5e3});continue}if(o.length>=4&&(k.startsWith(o)||k.endsWith(o))){d.push({ind:v,score:4e3-Math.abs(k.length-o.length)});continue}if($){let E=Yp(v.label);if(E&&E===j){d.push({ind:v,score:5e3});continue}let A=/[/_-]/.test(v.label)||/\.[a-z0-9]+$/i.test(String(v.label||""));if(E&&A&&j.length>=4&&E.includes(j)){d.push({ind:v,score:2e3-Math.abs(E.length-j.length)});continue}}if(v.class==="Module"){let E=ci(o);if(E!==o&&E===ci(k)){let A=Jn(o);if(On(k,o,A)>A){d.push({ind:v,score:3e3-Math.abs(k.length-o.length)});continue}}}if(o.length>=4&&x.includes(o)){d.push({ind:v,score:1e3-Math.abs(x.length-o.length)});continue}let _=As(v.label),R=g.filter(E=>_.has(E)).length;R>0&&(!y||_.has(y))&&d.push({ind:v,score:R/g.length*Wa})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter($=>$.score===g.score),w=g.score>=Wa?b.filter($=>$.score>=Wa):b;return{match:g.ind,candidates:w.slice(0,4).map($=>$.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),m=null,h=!p&&typeof vs=="function"?vs(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($=>$.score===g.score);if(m={match:y,candidates:b.slice(0,4).map($=>e.byId.get($.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=Jn(o),b=g+1,y=[];for(let w of r){let $=On(String(w.label||"").toLowerCase(),o,g);if($>0)for(let j of As(w.label)){if($<=0)break;$=Math.min($,On(j,o,g))}$<b?(b=$,y=[w]):$===b&&$<=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,...$]=y;return{match:w,candidates:$.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function qa(e,t){let n=Yp(t),s=[...As(t)],o=[];for(let r of As(e))n.includes(r)||s.some(i=>ci(i)===ci(r))||ai.has(r)||Qp.has(r)||o.push(r);return o}function oi(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(qa(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),qa(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:hn(s.slice(0,4).map(r=>r.label))}:e}let n=qa(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function an(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(g$,"").trim(),i=r.match(b$);if(i){let a=r.slice(0,i.index).trim(),l=Be[i[1].toLowerCase()];if(a&&l){let c=oi(Zo(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=oi(Zo(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return oi(Zo(e,t,n),t)}return oi(Zo(e,t,n),t)}function Ln(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 an(e,t)}function cc(e,t,n){let s=[];for(let o of We(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 w$(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||ts.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>We(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&ts.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 x$(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&lc.has(kp(s.label))).map(s=>({ind:s,named:n.has(kp(s.label))?1:0,depth:String(s.label).split("/").length,fixture:$$(s.label)?1:0})).sort((s,o)=>o.named-s.named||s.depth-o.depth||s.fixture-o.fixture||String(s.ind.label).localeCompare(String(o.ind.label))).map(s=>s.ind)}function k$(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function uc(e){return(e?.attributes||[]).find(t=>t.prop===S$)?.value||null}function E$(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${io(e)} ${e} in this graph's vocabulary`}function Vt(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 d$(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(P=>{let G=Vt(e,P,{contextId:n,prev:s});return{parsed:P,result:G,rendered:gn(P,G,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:T}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let T=String(t.object||"").trim(),P=T.toLowerCase(),G=(e.individuals||[]).find(Y=>{if(!uc(Y))return!1;if(String(Y.label).toLowerCase()===P)return!0;let te=(Y.attributes||[]).find(F=>F.key==="token")?.value;return te&&String(te).toLowerCase()===P});if(!G){let Y=Dp(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:[G],objMatch:G,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}if(r==="mentions"){let T=String(t.object||"").trim();return{matches:(typeof vs=="function"?vs(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"&&y$.test(String(t.object||"").trim())){let T=x$(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 (${[...lc].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!k$(r,i,a))return{matches:[],objMatch:null,candidates:[],ambiguous:!1,unsupportedModifier:!0,traversal:`modifier "${t.modifier}" requested for a "${i}" query \u2014 no closure traversal exists for this combination yet`};if(r==="ask"){let T=Ln(e,t.subject,n),P=Ln(e,t.object,n);if(!T.match||!P.match||T.ambiguous||P.ambiguous)return{matches:[],objMatch:P.match,candidates:P.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(T.unresolvedPronoun||P.unresolvedPronoun)};let[G,Y]=[T.match,P.match];i==="touches"&&Y.class==="Commit"&&G.class!=="Commit"&&([G,Y]=[Y,G]);let te=co[i],F=[...new Set(te?[..._t(i),te]:_t(i))],D=F.flatMap(B=>We(e,B)).filter(B=>B.subject===G.id&&B.object===Y.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:P.match,subjMatch:T.match,candidates:[],traversal:`${F.join("+")} edge from ${G.label} to ${Y.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=Ln(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=Ln(e,t.altObject,n),P=!!l.match&&!l.ambiguous,G=!!T.match&&!T.ambiguous;!P&&G?l=T:P&&G&&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)(?=\.[^.]+$)/,""),P=T(String(t.object||"").trim().toLowerCase()),G=(e.individuals||[]).find(Y=>{if(Y.class!=="Module"||Y.id===l.match.id)return!1;let te=String(Y.label||"").toLowerCase().split("/").pop();return te!==T(te)&&T(te)===P});G&&(l={...l,ambiguous:!0,candidates:[G,...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 P=Nn([c,...u||[]]).slice(0,Ue).map(G=>{let Y=Vt(e,t,{contextId:n,prev:s,pinnedObjMatch:G});return{candidate:G,result:Y,rendered:gn(t,Y,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:P}}if(r==="where"){let T=(c.attributes||[]).find(P=>P.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:T,traversal:T?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let T=Y=>String((Y.attributes||[]).find(te=>te.key==="date")?.value||""),P;if(c.class==="Commit")P=[c];else{let Y=["touches","touchesSymbol"].flatMap(F=>We(e,F)).filter(F=>F.object===c.id),te=new Set;P=[];for(let F of Y){if(te.has(F.subject))continue;te.add(F.subject);let D=e.byId.get(F.subject);D&&D.class==="Commit"&&P.push(D)}P.sort((F,D)=>T(D).localeCompare(T(F)))}let G=P.length&&T(P[0])?[{kind:"event",class:"Commit",label:P[0].label,ids:[P[0].id],attrs:{date:T(P[0]).slice(0,10)},lane:"when"}]:[];return{matches:P,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:G,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let T=F=>String((F.attributes||[]).find(D=>D.key==="date")?.value||""),P=["touches","touchesSymbol"].flatMap(F=>We(e,F)).filter(F=>F.object===c.id),G=new Set,Y=[];for(let F of P){if(G.has(F.subject))continue;G.add(F.subject);let D=e.byId.get(F.subject);D&&D.class==="Commit"&&Y.push(D)}Y.sort((F,D)=>T(D).localeCompare(T(F)));let te=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:te,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return w$(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=co[i],G=!!(T&&c.class&&ts.has(c.class))?[...new Set([..._t(i),T])]:_t(i);if(a&&a!=="Change"){let W=Op(e,G),C=Ua[a];if(W.size&&!W.has(a)&&!(C&&W.has(C)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...W],traversal:`${G.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${Zn(a)})`}}let te=G.flatMap(W=>We(e,W)).filter(W=>W.subject===c.id).map(W=>e.byId.get(W.object)).filter(Boolean),F=Nn(te),D=F,B="";if(a&&a!=="Change"){D=F.filter(C=>C.class===a);let W=Ua[a];if(!D.length&&W){let C=F.filter(I=>I.class===W);C.length&&(D=C,B=`, widened to ${W} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${G.join("+")} edges where subject = ${c.label}${B}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:to(e,c,{maxDepth:Sp}).flat().map(G=>e.byId.get(G.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Sp})`};let g=co[i]||_t(i).find(T=>_p.has(T))||null,b=!!(c.class&&ts.has(c.class));if(g&&(ts.has(a)||b)){let T=We(e,g).filter(B=>B.object===c.id),P=Nn(T.map(B=>e.byId.get(B.subject)).filter(Boolean)),G=!a||a==="Change"?P:P.filter(B=>B.class===a),Y="",te=Ua[a];if(!G.length&&te){let B=P.filter(W=>W.class===te);B.length&&(G=B,Y=`, widened to ${te} subjects (no ${a} recorded)`)}let F=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!We(e,"contains").some(B=>B.subject===c.id),D=F?e.byId.get(lo(e,c)||""):null;if(G.length||!(F&&D))return{matches:G,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${Y}`,ambiguous:d,matchedVia:p}}let y=c,w=u,$=d,j=p,v="",x=Lp(e,i);if(x&&y.class&&y.class!==x){let T=an(e,t.object,{expectedClass:x});if(T.match&&!T.ambiguous)y=T.match,w=T.candidates,$=T.ambiguous,j=T.matchedVia;else if(x==="Module"){let P=lo(e,y),G=P&&e.byId.get(P);if(G)v=`, refined from ${y.label} to its containing module`,y=G;else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:j,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${Zn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Zn(x)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:j,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${Zn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Zn(x)})`}}let k=_t(i).flatMap(T=>We(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(k=k.concat(_t(i).flatMap(T=>We(e,T)).filter(T=>T.subject===y.id).map(T=>({...T,subject:T.object,object:T.subject}))));let _="";if(!k.length&&y.class){let T=`ext:${String(y.label).toLowerCase()}`;k=_t(i).flatMap(P=>We(e,P)).filter(P=>String(P.object).toLowerCase()===T),k.length&&(_=` (by name, via unresolved ${T} references)`)}let R=[],E=new Set;for(let T of k){let P=e.byId.get(T.subject);P&&!E.has(P.id)&&(E.add(P.id),R.push(P))}let A,L="";if(!a||a==="Change")A=R;else{let T=R.filter(P=>P.class===a);if(T.length)A=T;else if(a!=="Module"&&R.some(P=>P.class==="Module")){let P=new Set(R.filter(G=>G.class==="Module").map(G=>G.id));A=cc(e,P,a),L=`, then ${Zn(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${_t(i).join("+")} edges where object = ${y.label}${_}${L}${v}`,ambiguous:$,matchedVia:j}}function sr(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 Ga(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function j$(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function hn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function er(e){let t=e.object??e.subject??"?";return`${e.entityType?Pe(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function Qa(e){return Mo[e]?.bare||e}function _$(e){let t=Qa(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function R$(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=Pe(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 ${Qa(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 ${Qa(o.kind)} ${JSON.stringify(String(r))}`}function Xp(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(er).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>Xp(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?R$(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 ":""}${_s(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?Pe(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${_s(e.kind)}`:`${r}${_s(e.kind)} "${e.object}"`}return{english:o,machine:s}}function gn(e,t,n=null){let s=Jp(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function Jp(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${ac()}`,miss:!0,ambiguous:!1};if(e.node)return m$(e,t,n);if(e.ambiguousParse)return t.branches&&t.branches.length?{content:`this could mean more than one thing:
55
+ ${t.branches.map((l,c)=>`${c+1}) as ${er(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(tr),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${tr(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(tr),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?Pe(t.objMatch.class,1):"term",a=Pe(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=>Pe(a,2));return{content:`${t.objMatch.label}'s "${Rs(e.kind)}" relation in this index never produces ${Pe(e.entityType,2)} \u2014 only ${gn(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=dc(t.objMatch)||"";return{content:`${t.objMatch.label} is ${R$(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,Ue).map(l=>`${l.label} (${Pe(l.class,1)})`),a=t.matches.length>Ue?`, \u2026and ${t.matches.length-Ue} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${gn(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 ${gn([...uc])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,Ue).map(d=>d.label),c=a.length>Ue?`, \u2026and ${a.length-Ue} more`:"",u=a.length?` \u2014 also matched: ${gn(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&&Ap[e.entityType]?Pe(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=gn(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. ${ts(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(g=>g.class==="Commit")){let g=y=>!["Commit","Session","Source","Utterance"].includes(y?.class),b=i.filter(g);b.length&&(i=b,a?.length&&(a=a.filter(y=>g(y.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let g=String(e.object||"").toLowerCase(),b=new Set(mn(String(e.object||"")).filter(v=>v.length>=3)),y=new Set(i.map(v=>v.id)),w=null,$=0,j=1/0;if(b.size)for(let v of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(v.class)||y.has(v.id))continue;let x=mn(String(v.label)).filter(_=>b.has(_)).length;if(!x||x<$)continue;let k=Ln(String(v.label).toLowerCase(),g,8);(x>$||k<j)&&(w=v,$=x,j=k)}if(w&&(i=[...i,w],a)){let v=Ht(n,e,{pinnedObjMatch:w});a=[...a,{candidate:w,result:v,rendered:bn(e,v,n)}]}}let l=i.length&&i.every(g=>g.class==="Commit")?"commit":"module",c=i.slice(0,Ue).map(g=>g.label),u=i.length>Ue?`, \u2026and ${i.length-Ue} more`:"",d=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${gn(c)}${u}? Try one of those. If you're not sure, narrow it to one name.`,f=String(e.object||""),p=f?new RegExp(`\\b${He(f)}\\b`,"gi"):null,m=g=>p?g.rendered.content.replace(p,g.candidate.label):g.rendered.content;return{content:a&&a.length?`${d}
57
+ (ask one of these directly, or try rephrasing more specifically, to get just that reading)`,miss:!1,ambiguous:!0,candidates:e.candidates.map(er),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${er(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(er),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?Pe(t.objMatch.class,1):"term",a=Pe(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=>Pe(a,2));return{content:`${t.objMatch.label}'s "${_s(e.kind)}" relation in this index never produces ${Pe(e.entityType,2)} \u2014 only ${hn(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=uc(t.objMatch)||"";return{content:`${t.objMatch.label} is ${E$(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,Ue).map(l=>`${l.label} (${Pe(l.class,1)})`),a=t.matches.length>Ue?`, \u2026and ${t.matches.length-Ue} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${hn(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 ${hn([...lc])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,Ue).map(d=>d.label),c=a.length>Ue?`, \u2026and ${a.length-Ue} more`:"",u=a.length?` \u2014 also matched: ${hn(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&&Rp[e.entityType]?Pe(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=hn(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. ${es(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(g=>g.class==="Commit")){let g=y=>!["Commit","Session","Source","Utterance"].includes(y?.class),b=i.filter(g);b.length&&(i=b,a?.length&&(a=a.filter(y=>g(y.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let g=String(e.object||"").toLowerCase(),b=new Set(fn(String(e.object||"")).filter(v=>v.length>=3)),y=new Set(i.map(v=>v.id)),w=null,$=0,j=1/0;if(b.size)for(let v of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(v.class)||y.has(v.id))continue;let x=fn(String(v.label)).filter(_=>b.has(_)).length;if(!x||x<$)continue;let k=On(String(v.label).toLowerCase(),g,8);(x>$||k<j)&&(w=v,$=x,j=k)}if(w&&(i=[...i,w],a)){let v=Vt(n,e,{pinnedObjMatch:w});a=[...a,{candidate:w,result:v,rendered:gn(e,v,n)}]}}let l=i.length&&i.every(g=>g.class==="Commit")?"commit":"module",c=i.slice(0,Ue).map(g=>g.label),u=i.length>Ue?`, \u2026and ${i.length-Ue} more`:"",d=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${hn(c)}${u}? Try one of those. If you're not sure, narrow it to one name.`,f=String(e.object||""),p=f?new RegExp(`\\b${He(f)}\\b`,"gi"):null,m=g=>p?g.rendered.content.replace(p,g.candidate.label):g.rendered.content;return{content:a&&a.length?`${d}
58
58
  ${a.map((g,b)=>`${b+1}) ${g.candidate.label}: ${m(g)}`).join(`
59
- `)}`:d,miss:!1,ambiguous:!0,candidates:i.map(g=>g.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=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:`${Va(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=or(i);return l?{content:`${Va(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. ${ts(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} ${Zo("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. ${ts(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,Ue)){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])=>`${Pe(u,d.length)} ${gn(d)}`),c=t.matches.length>Ue?`; \u2026and ${t.matches.length-Ue} 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(Js.includes(e.kind)&&n&&t.objMatch)for(let l of Js){if(l===e.kind)continue;let c={...e,kind:l},u=Ht(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return Qp(c,u,n)}return{content:`${t.objMatch.label} has no ${Rs(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(pv,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Pe(e.entityType||"Module",2),a=t.objMatch&&bs.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${Rs(e.kind)} ${a}. ${ts(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${T$(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=>!ns.has(i.class))){let i=t.matches.slice(0,Ue).map(l=>l.class==="Commit"?A$(l):l.label),a=t.matches.length>Ue?`, \u2026and ${t.matches.length-Ue} 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,Ue)){let a=or(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(Va(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=gn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>Ue?` \u2026and ${t.matches.length-Ue} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function ef(e){if(e.length<4||L$.has(e))return null;let t=Qn(e),n=t+1,s=null,o=!1;for(let r of O$){let i=Ln(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 jp(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!dc(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=ef(n);return!!s&&s!==n&&!!Be[s]}function tf(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=Nn(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||jp(s,t.object))return!1;if(t.shape==="ask"){let o=Nn(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!jp(o,t.subject))}return!0}function N$(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return ju.includes(t)}function M$(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ko(_s(String(t||""))),i=Qt(r);if(!i.length)return null;let a=[],l=[],c=E=>{let A=cn(e,E);return!!A.match&&A.tier!=null&&A.tier<=2},u=E=>{let A=cn(e,E);return!!A.match&&A.tier!=null&&A.tier<=3},d=E=>{let A=String(E||"").trim().toLowerCase();return bs.includes(A)?!0:Qt(A).some(N=>{let T=N.toLowerCase();return!ci.has(T)&&!ec.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=E=>{let A=E.join(" "),N=sr(A,{nlp:n});return tf(e,N,s)!==!0||N&&!N.node&&f.has(N.shape)&&(N.object!=null&&!d(N.object)||N.shape==="ask"&&N.subject!=null&&!d(N.subject))||bn(N,Ht(e,N,{contextId:s,prev:o}),e).miss?null:{parsed:N,text:A}},m=E=>({parsed:E.parsed,from:r,to:E.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let E=-1;for(let T=0;T<i.length;T+=1){let P=i[T].toLowerCase();if(pc.has(P)&&!ci.has(P)&&!c(i[T])){E=T;break}}if(E<0)break;let A=i[E];i=i.filter((T,P)=>P!==E),a.push(A),l.push(`strip noise "${A}" \u2192 "${i.join(" ")}"`);let N=p(i);if(N)return m(N)}let b=sr(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let E of[b.object,b.subject])for(let A of Qt(String(E||"").toLowerCase()))y.add(A);let w=[],$=[],j=[];for(let E of i){let A=E.toLowerCase();if(!/^[a-z]+$/.test(A)||ci.has(A)||ec.has(A)||u(E)){w.push(E);continue}let T=ef(A);if(T&&T!==A){w.push(T),j.push(`${E}\u2192${T}`);continue}if(y.has(A)){w.push(E);continue}$.push(E)}if((j.length||$.length)&&w.length){i=w,a.push(...$),j.length&&l.push(`fuzzy-correct ${JSON.stringify(j)} \u2192 "${i.join(" ")}"`),$.length&&l.push(`drop unmatched ${JSON.stringify($)} \u2192 "${i.join(" ")}"`);let E=p(i);if(E)return m(E)}let v=!1,x=i.map(E=>{let A=E.toLowerCase();return Qs[A]&&!u(E)?(v=!0,Qs[A]):E});if(v){l.push(`normalise synonyms \u2192 "${x.join(" ")}"`);let E=p(x);if(E)return m(E)}let k=Qt(r).map(E=>E.toLowerCase()),_=[],R=[];for(let E of k){if(Zp.has(E))continue;let A=Be[E];A&&A!=="Change"?_.push(E):R.push(E)}if(_.length===1&&R.length===0){let E=p(["count",_[0]]);if(E)return l.push(`bare kind "${_[0]}" \u2192 count`),m(E)}return null}function F$(e,t){let n=String(t||"");if(!e||!_p.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(_p,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return P$.test(a)?`${a} touched`:i}function D$(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 z$(e,t){let n=D$(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function W$(e,t){let n=String(t||"").trim(),s=n.match(B$),o=s?null:n.match(U$),r=s||o;if(!r||!fc.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=z$(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 ss(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(N$(t))return{content:cc(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=F$(e,t);let r=tc(t,{nlp:s}),i=r.parsed,a=i,l=null;if(tf(e,i,n)===!1){let f=M$(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=Ht(e,a,{contextId:n,prev:o}),u=bn(a,c,e);if(u.miss&&!u.ambiguous){let f=W$(e,t);if(f){let p=Ht(e,f,{contextId:n,prev:o}),m=bn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Yr(String(t||"")).trim().match(q$)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=sr(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=Ht(e,m,{contextId:n,prev:o}),u=bn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=_s(String(t||"")).match(G$)?.[1]?.trim();if(p){let m=sr(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=Ht(e,m,{contextId:n,prev:o}),g=bn(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=Ht(e,p.parsed,{contextId:n,prev:o}),h=bn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=up(f.map(m=>m.a),{answerFor:m=>f.find(h=>h.a===m)?.text||null});d=`${d}
59
+ `)}`:d,miss:!1,ambiguous:!0,candidates:i.map(g=>g.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=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:`${Ga(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=sr(i);return l?{content:`${Ga(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. ${es(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} ${Qo("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. ${es(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,Ue)){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])=>`${Pe(u,d.length)} ${hn(d)}`),c=t.matches.length>Ue?`; \u2026and ${t.matches.length-Ue} 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(Xs.includes(e.kind)&&n&&t.objMatch)for(let l of Xs){if(l===e.kind)continue;let c={...e,kind:l},u=Vt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return Jp(c,u,n)}return{content:`${t.objMatch.label} has no ${_s(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(lv,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Pe(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 ${_s(e.kind)} ${a}. ${es(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${_$(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=>!ts.has(i.class))){let i=t.matches.slice(0,Ue).map(l=>l.class==="Commit"?j$(l):l.label),a=t.matches.length>Ue?`, \u2026and ${t.matches.length-Ue} 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,Ue)){let a=sr(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(Ga(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=hn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>Ue?` \u2026and ${t.matches.length-Ue} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function Zp(e){if(e.length<4||C$.has(e))return null;let t=Jn(e),n=t+1,s=null,o=!1;for(let r of T$){let i=On(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 Ep(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!uc(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=Zp(n);return!!s&&s!==n&&!!Be[s]}function ef(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=Ln(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Ep(s,t.object))return!1;if(t.shape==="ask"){let o=Ln(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Ep(o,t.subject))}return!0}function I$(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return Eu.includes(t)}function O$(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Ho(js(String(t||""))),i=Jt(r);if(!i.length)return null;let a=[],l=[],c=E=>{let A=an(e,E);return!!A.match&&A.tier!=null&&A.tier<=2},u=E=>{let A=an(e,E);return!!A.match&&A.tier!=null&&A.tier<=3},d=E=>{let A=String(E||"").trim().toLowerCase();return gs.includes(A)?!0:Jt(A).some(L=>{let T=L.toLowerCase();return!ai.has(T)&&!Za.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=E=>{let A=E.join(" "),L=nr(A,{nlp:n});return ef(e,L,s)!==!0||L&&!L.node&&f.has(L.shape)&&(L.object!=null&&!d(L.object)||L.shape==="ask"&&L.subject!=null&&!d(L.subject))||gn(L,Vt(e,L,{contextId:s,prev:o}),e).miss?null:{parsed:L,text:A}},m=E=>({parsed:E.parsed,from:r,to:E.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let E=-1;for(let T=0;T<i.length;T+=1){let P=i[T].toLowerCase();if(dc.has(P)&&!ai.has(P)&&!c(i[T])){E=T;break}}if(E<0)break;let A=i[E];i=i.filter((T,P)=>P!==E),a.push(A),l.push(`strip noise "${A}" \u2192 "${i.join(" ")}"`);let L=p(i);if(L)return m(L)}let b=nr(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let E of[b.object,b.subject])for(let A of Jt(String(E||"").toLowerCase()))y.add(A);let w=[],$=[],j=[];for(let E of i){let A=E.toLowerCase();if(!/^[a-z]+$/.test(A)||ai.has(A)||Za.has(A)||u(E)){w.push(E);continue}let T=Zp(A);if(T&&T!==A){w.push(T),j.push(`${E}\u2192${T}`);continue}if(y.has(A)){w.push(E);continue}$.push(E)}if((j.length||$.length)&&w.length){i=w,a.push(...$),j.length&&l.push(`fuzzy-correct ${JSON.stringify(j)} \u2192 "${i.join(" ")}"`),$.length&&l.push(`drop unmatched ${JSON.stringify($)} \u2192 "${i.join(" ")}"`);let E=p(i);if(E)return m(E)}let v=!1,x=i.map(E=>{let A=E.toLowerCase();return Js[A]&&!u(E)?(v=!0,Js[A]):E});if(v){l.push(`normalise synonyms \u2192 "${x.join(" ")}"`);let E=p(x);if(E)return m(E)}let k=Jt(r).map(E=>E.toLowerCase()),_=[],R=[];for(let E of k){if(Qp.has(E))continue;let A=Be[E];A&&A!=="Change"?_.push(E):R.push(E)}if(_.length===1&&R.length===0){let E=p(["count",_[0]]);if(E)return l.push(`bare kind "${_[0]}" \u2192 count`),m(E)}return null}function N$(e,t){let n=String(t||"");if(!e||!jp.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(jp,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return L$.test(a)?`${a} touched`:i}function M$(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 P$(e,t){let n=M$(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function z$(e,t){let n=String(t||"").trim(),s=n.match(F$),o=s?null:n.match(D$),r=s||o;if(!r||!pc.test(r[2]||"")||Be[r[1].toLowerCase()])return null;let i=P$(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 ns(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(I$(t))return{content:ac(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=N$(e,t);let r=ec(t,{nlp:s}),i=r.parsed,a=i,l=null;if(ef(e,i,n)===!1){let f=O$(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=Vt(e,a,{contextId:n,prev:o}),u=gn(a,c,e);if(u.miss&&!u.ambiguous){let f=z$(e,t);if(f){let p=Vt(e,f,{contextId:n,prev:o}),m=gn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Kr(String(t||"")).trim().match(B$)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=nr(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=Vt(e,m,{contextId:n,prev:o}),u=gn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=js(String(t||"")).match(U$)?.[1]?.trim();if(p){let m=nr(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=Vt(e,m,{contextId:n,prev:o}),g=gn(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=Vt(e,p.parsed,{contextId:n,prev:o}),h=gn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=lp(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:rr(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:Jp(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?or(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 hp,lo,ns,Wa,cv,Rt,Rp,Ue,Ap,lv,uv,dv,pv,fv,Tp,Ha,hv,nc,Cp,kt,Ip,bv,yv,$v,kv,Ev,jv,_v,Rv,Tv,Iv,Mp,oc,Bv,Pp,Uv,Gv,gp,Yv,bp,Qv,yp,$p,t$,s$,r$,Zn,qa,y$,v$,x$,uc,k$,Sp,S$,Ep,_$,ci,ec,pc,Zp,I$,O$,L$,_p,P$,B$,U$,fc,q$,G$,os=L(()=>{Ce();ya();An();Jn();Yo();Jr();Qr();mp();za();Yn();oi();Ua();io();hp=new WeakMap;lo={calls:"callsSymbol",touches:"touchesSymbol"},ns=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),Wa={Function:"Method",Method:"Function"},cv={uses:["imports","calls","callsSymbol"]},Rt=e=>cv[e]||[e],Rp=new Set(Object.values(lo)),Ue=12,Ap={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"]};lv={cochange:"cochanges",reexports:"export"};uv={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"},dv=e=>uv[e]||Rs(e),pv=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),fv=new Set(["imports"]);Tp=4,Ha="zzinnerset",hv=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),nc=new Set(["which","what","who","list","show","find","give","me","us","all"]),Cp=new Set(["are","is","was","were"]);kt=e=>Be[e]?{entityType:Be[e],placeholder:!1}:Rn.includes(e)?{entityType:null,placeholder:!0}:null,Ip=e=>!!de[e]&&e.endsWith("ing");bv=new Set(["which","the","all"]);yv=new Set(["all","every","each"]);$v=new Set(["what","which","thing","things","one","ones","stuff"]);kv=new Set(["those","them"]);Ev=new Set(["did","was","were","do","does","has","have","had"]),jv=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),_v=new Set(["last","recently","ever","get","got","been","then","now","already"]),Rv=new Set(["the","a","an","all","those","these","any"]);Tv=new Set(["since","before","after","on"]);Iv=/\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/;Mp=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);oc=new Set(["the","a","an","all","me","us"]),Bv=[...vs].sort((e,t)=>t.split(" ").length-e.split(" ").length),Pp="functions, classes, methods, modules, packages, attributes, variables, or commits",Uv=new Set(["in","inside","under"]);Gv=new Set(["called","named","about","like","containing","matching","with"]);gp=new Set(["recent","latest","newest"]);Yv=/^git:(.+)$/i;bp=new WeakMap;Qv=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);yp=new WeakMap;$p={label:3,chain:2,attr:1};t$=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;s$=["imports","calls","callsSymbol","inherits","contains","tests"];r$=/^\d{4}-\d{2}-\d{2}$/;Zn=e=>gn(e.slice(0,Ue).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>Ue?`, \u2026and ${e.length-Ue} more`:"");qa=10;y$=/^(?:the|a|an)\s+/i,v$=new RegExp(`\\s+(${Object.keys(Be).join("|")})$`,"i");x$=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,uc=new Set(["index","main","app","server","cli","__main__"]),k$=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Sp=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),S$=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>k$.has(t));Ep=8,_$="mgx:schemaDoc";ci=new Set([...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(Gt)),...me(Object.keys(Ge)),...me(ys),...me(Object.keys(Kn)),...me(Object.keys(fn)),...me(Object.keys(Xs)),...me(Rn),...me(Bo),...me(ws),...me(Yt),...me(an),...me(_n),...me(Object.keys(Qs))]),ec=new Set([...st,...nc,...bs]),pc=new Set(me(Mr)),Zp=new Set([...pc,...ec]),I$=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],O$=[...new Set([...me(Object.keys(de)),...Object.keys(Be),...I$])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!st.has(e)),L$=new Set(["impact","impacts","impacted"]);_p=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,P$=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;B$=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,U$=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,fc=/^(?: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;q$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,G$=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i});function rs(e,t,n,s){let o=Math.max(1,t),r=Math.min(e.length,n),i=!1;s!=null&&r-o+1>s&&(r=o+s-1,i=!0);let a=e.slice(o-1,r).map((l,c)=>`${o+c} ${l}`).join(`
63
- `);return{start:o,end:r,text:a,truncated:i}}async function Pn({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+hu))throw new Oe(`refusing to read outside the repository root: ${n}`);let c=(await e(a,"utf8")).split(`
64
- `);return s==null||o==null?{lines:c}:{lines:c,...rs(c,s,o,r)}}var ui=L(()=>{De();Lt()});function ht(e){return{ok:!0,value:e}}function gt(e,{detail:t="",term:n=null}={}){if(!Xe[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function wn(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 di(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 hc,V$,Xe,gc,pA,sf,bc,H$,ln,mc,St,fA,of=L(()=>{hc="1.1.0",V$="urn:tmct:core",Xe=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),gc=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),pA=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"}),sf=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),bc=Object.freeze(Object.values(sf).flat()),H$=Object.freeze(new Set(sf.source));ln="Individual",mc="Edge",St="concurrent-safe: reads immutable graph truth; no shared mutable state",fA=Object.freeze({version:hc,ontology:V$,missReasons:Object.values(Xe),edgeKinds:[...gc],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: ${ln}, candidates: ${ln}[] }`,misses:["UNRESOLVED_TERM"],concurrency:St,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: ${ln}, out: ${mc}[], incoming: ${mc}[] }`,misses:["UNRESOLVED_TERM"],concurrency:St,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${ln}[], attributes: ${ln}[] }`,misses:["UNRESOLVED_TERM"],concurrency:St,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${ln}[], subclasses: ${ln}[], levels: Array<${ln}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:St,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: ${ln}[] }`,misses:["UNRESOLVED_TERM"],concurrency:St,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:St,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: ${mc}[] }`,misses:["UNRESOLVED_TERM"],concurrency:St,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:St,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:St,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:St,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:St,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${ln}[] }`,misses:[],concurrency:St,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:St,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:St,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: ${ln}[] }`,misses:[],concurrency:St,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:St,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function K$(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(di(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(di(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function Y$(e,t){for(let n of e.relations)if(On(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function J$(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Pn({readFile:n,repoRoot:s,path:e.moduleLabel}))}catch{o=null}if(!o)return"";let r=[];if(t.anchor&&e.anchor?.site){let{start:i,end:a}=e.anchor.site;r.push(`
65
- ## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(rs(o,i,a,wc).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,l=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
66
- ## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${l} @ ${e.moduleLabel}:${i}-${a}`),r.push(rs(o,i,a,wc).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=X$;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 Pn({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=rs(u,l,a.site.end,i);r.push(`
62
+ (answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${g})`}}return!Array.isArray(c.referents)&&!u.miss&&!u.ambiguous&&(a?.shape==="reverse"||a?.shape==="forward")&&a.entityType&&Array.isArray(c.matches)&&c.matches.length&&c.matches.every(f=>f&&f.class===a.entityType)&&(c={...c,referents:or(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:Xp(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?sr(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 mp,co,ts,Ua,rv,_t,_p,Ue,Rp,iv,av,cv,lv,uv,Ap,Va,pv,tc,Tp,xt,Cp,mv,gv,wv,vv,xv,kv,Sv,Ev,_v,Av,Np,sc,Fv,Mp,Dv,Uv,hp,Vv,gp,Yv,wp,vp,Qv,e$,n$,Qn,Wa,g$,b$,y$,lc,v$,kp,$$,Sp,S$,ai,Za,dc,Qp,A$,T$,C$,jp,L$,F$,D$,pc,B$,U$,ss=N(()=>{Ce();wa();Rn();Xn();Ko();Xr();Jr();fp();Da();Kn();si();Ba();ro();mp=new WeakMap;co={calls:"callsSymbol",touches:"touchesSymbol"},ts=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),Ua={Function:"Method",Method:"Function"},rv={uses:["imports","calls","callsSymbol"]},_t=e=>rv[e]||[e],_p=new Set(Object.values(co)),Ue=12,Rp={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"]};iv={cochange:"cochanges",reexports:"export"};av={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"},cv=e=>av[e]||_s(e),lv=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),uv=new Set(["imports"]);Ap=4,Va="zzinnerset",pv=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),tc=new Set(["which","what","who","list","show","find","give","me","us","all"]),Tp=new Set(["are","is","was","were"]);xt=e=>Be[e]?{entityType:Be[e],placeholder:!1}:_n.includes(e)?{entityType:null,placeholder:!0}:null,Cp=e=>!!de[e]&&e.endsWith("ing");mv=new Set(["which","the","all"]);gv=new Set(["all","every","each"]);wv=new Set(["what","which","thing","things","one","ones","stuff"]);vv=new Set(["those","them"]);xv=new Set(["did","was","were","do","does","has","have","had"]),kv=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),Sv=new Set(["last","recently","ever","get","got","been","then","now","already"]),Ev=new Set(["the","a","an","all","those","these","any"]);_v=new Set(["since","before","after","on"]);Av=/\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/;Np=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);sc=new Set(["the","a","an","all","me","us"]),Fv=[...ys].sort((e,t)=>t.split(" ").length-e.split(" ").length),Mp="functions, classes, methods, modules, packages, attributes, variables, or commits",Dv=new Set(["in","inside","under"]);Uv=new Set(["called","named","about","like","containing","matching","with"]);hp=new Set(["recent","latest","newest"]);Vv=/^git:(.+)$/i;gp=new WeakMap;Yv=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);wp=new WeakMap;vp={label:3,chain:2,attr:1};Qv=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;e$=["imports","calls","callsSymbol","inherits","contains","tests"];n$=/^\d{4}-\d{2}-\d{2}$/;Qn=e=>hn(e.slice(0,Ue).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>Ue?`, \u2026and ${e.length-Ue} more`:"");Wa=10;g$=/^(?:the|a|an)\s+/i,b$=new RegExp(`\\s+(${Object.keys(Be).join("|")})$`,"i");y$=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,lc=new Set(["index","main","app","server","cli","__main__"]),v$=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),kp=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),$$=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>v$.has(t));Sp=8,S$="mgx:schemaDoc";ai=new Set([...me(Object.keys(de)),...me(Object.keys(Be)),...me(Object.keys(qt)),...me(Object.keys(Ge)),...me(ws),...me(Object.keys(Hn)),...me(Object.keys(pn)),...me(Object.keys(Ys)),...me(_n),...me(zo),...me(bs),...me(Kt),...me(rn),...me(jn),...me(Object.keys(Js))]),Za=new Set([...st,...tc,...gs]),dc=new Set(me(Nr)),Qp=new Set([...dc,...Za]),A$=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],T$=[...new Set([...me(Object.keys(de)),...Object.keys(Be),...A$])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!st.has(e)),C$=new Set(["impact","impacts","impacted"]);jp=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,L$=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;F$=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,D$=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,pc=/^(?: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;B$=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,U$=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i});function os(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 Mn({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Wt(t),a=Wt(i,n);if(a!==i&&!a.startsWith(i+mu))throw new Oe(`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,...os(c,s,o,r)}}var li=N(()=>{De();Ot()});function mt(e){return{ok:!0,value:e}}function ht(e,{detail:t="",term:n=null}={}){if(!Xe[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function bn(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 ui(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 mc,W$,Xe,hc,lA,nf,gc,q$,cn,fc,kt,uA,sf=N(()=>{mc="1.1.0",W$="urn:tmct:core",Xe=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),hc=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),lA=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"}),nf=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),gc=Object.freeze(Object.values(nf).flat()),q$=Object.freeze(new Set(nf.source));cn="Individual",fc="Edge",kt="concurrent-safe: reads immutable graph truth; no shared mutable state",uA=Object.freeze({version:mc,ontology:W$,missReasons:Object.values(Xe),edgeKinds:[...hc],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: ${cn}, candidates: ${cn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"The resolveSymbol seam: map a free term to an individual + runner-up candidates. Every id-taking service consumes a resolved id."},describe:{group:"resolution",args:{id:"string"},result:`{ individual: ${cn}, out: ${fc}[], incoming: ${fc}[] }`,misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${cn}[], attributes: ${cn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${cn}[], subclasses: ${cn}[], levels: Array<${cn}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"Forward bases + the transitive reverse inheritance closure (who extends this). `subclasses` is the flat closure; `levels` groups the same individuals by inheritance depth (direct children first), mirroring `impact`'s leveled shape."},exports:{group:"resolution",args:{moduleId:"string"},result:`{ exports: ${cn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"A module's curated public API (resolved __all__ / re-exports)."},signature:{group:"resolution",args:{id:"string"},result:"{ id, label, class, params, returns, raises, decorators, doc, selfFields, flags }",misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"The compact API surface of a symbol without its body."},edges:{group:"traversal",args:{id:"string",kind:"EDGE_KINDS member"},result:`{ kind: string, edges: ${fc}[] }`,misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"Outgoing edges of one closed kind from an individual (an honest empty array is not a miss).",note:"An unknown kind (outside EDGE_KINDS) is a programming error and throws TypeError, not a miss."},impact:{group:"traversal",args:{moduleId:"string"},result:"{ total: number, levels: Array<Array<{ id, label, via, tests }>> }",misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"The transitive dependent closure the interpreter cannot compute without provider truth."},snippet:{group:"source",args:{id:"string"},result:"{ path: string, span: { start, end }, body: string|null } \u2014 Promise<Result>",misses:["UNRESOLVED_TERM","NO_SOURCE"],concurrency:kt,purpose:"The exact source span of a symbol. A provider with no working tree returns miss(NO_SOURCE) honestly \u2014 snippet has nothing useful without fs.",note:"ASYNC (returns Promise<Result>) \u2014 a real body read is inherently fs I/O; callers should always await it. A graph-only provider still resolves synchronously-in-spirit (the promise settles on the same tick) but the return type is uniformly a Promise regardless of sourceAccess."},context:{group:"source",args:{symbol:"string",depth:"min|auto|full?"},result:"{ text: string, tier: string } (a sized edit bundle) \u2014 Promise<Result>",misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"The composed edit bundle (exemplar, siblings, registration, insertion region). A graph-only provider returns the graph-only sections as a real hit; a source-capable provider (sourceAccess:true, repoRoot, readFile) additionally includes the anchor/exemplar/inlined-callee body text.",note:"ASYNC (returns Promise<Result>) \u2014 see snippet's note; source-capable rendering is fs I/O."},architecture:{group:"aggregate",args:{package:"string?"},result:"{ modules: number, packages: Array<[dir, count]>, hubs: Array<{ id, label, importers }> }",misses:[],concurrency:kt,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${cn}[] }`,misses:[],concurrency:kt,purpose:"Modules with no covering test module (via the tests relation)."},stats:{group:"aggregate",args:{},result:"{ total: number, classes: Array<{ class: string, count: number }>, truncated: boolean }",misses:[],concurrency:kt,purpose:"Per-tmct:class individual counts, read straight from the payload."},history:{group:"temporal",args:{id:"string"},result:"{ commits: Array<{ id, label, author, date, message }> }",misses:["UNRESOLVED_TERM"],concurrency:kt,purpose:"The commits that touched an individual (tmct:commit individuals via tmct:touches)."},search:{group:"search",args:{query:"string",kind:"string?",name:"string?",decorator:"string?"},result:`{ results: ${cn}[] }`,misses:[],concurrency:kt,purpose:"Lexical, provider-local locate. An empty result set is honest, not a miss."},ask:{group:"search",args:{query:"string"},result:"{ content: string, tmct_ask: object } (the composed NL round-trip envelope)",misses:[],concurrency:kt,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function G$(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(ui(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(ui(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function V$(e,t){for(let n of e.relations)if(In(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function K$(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Mn({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(os(o,i,a,bc).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(os(o,i,a,bc).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=H$;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 Mn({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=os(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 pi(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:hc,capabilities:[...bc],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=Vt(e,String(c??""));return u?ht({match:wn(u),candidates:d.map(wn)}):gt(Xe.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return gt(Xe.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=K$(e,c);return ht({individual:wn(u),out:d,incoming:f})},members(c){if(!a(c))return gt(Xe.UNRESOLVED_TERM,{term:c});let d=Se(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let h=i.get(m.object),g=h?wn(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.class||"")==="Attribute"?p.push(g):f.push(g)}return ht({methods:f,attributes:p})},subclasses(c){if(!a(c))return gt(Xe.UNRESOLVED_TERM,{term:c});let d=Se(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?wn(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=[],$=[];for(let j of b)for(let v of p.get(j)||[]){if(m.has(v))continue;m.add(v);let x=i.get(v),k=x?wn(x):{id:v,label:v,class:"Class",attributes:[]};h.push(k),$.push(k),w.push(v)}$.length&&g.push($),b=w}return ht({bases:f,subclasses:h,levels:g})},exports(c){if(!a(c))return gt(Xe.UNRESOLVED_TERM,{term:c});let f=Se(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?wn(i.get(p.object)):{id:p.object,label:p.objectLabel||p.object,class:"Entity",attributes:[]});return ht({exports:f})},signature(c){let u=a(c);if(!u)return gt(Xe.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Pt(u,p)&&d.push(m);let f=Pt(u,"visibility");return f&&d.push(f),ht({id:u.id,label:u.label,class:u.class||"Entity",params:Pt(u,"params"),returns:Pt(u,"returns"),raises:Pt(u,"raises"),decorators:Pt(u,"decorators"),doc:Pt(u,"doc"),selfFields:Pt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!gc.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return gt(Xe.UNRESOLVED_TERM,{term:c});let m=Y$(e,u),h=Se(e,u).filter(g=>g.subject===c).map(g=>di(g,m));return h=d==null?h.slice(f):h.slice(f,f+d),ht({kind:u,edges:h})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return gt(Xe.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 ht({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return gt(Xe.UNRESOLVED_TERM,{term:c});let d=$t(u);if(!l.sourceAccess)return gt(Xe.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 gt(Xe.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await Pn({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:wc});return ht({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return gt(Xe.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${f?.message||f}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=Vt(e,String(c??""));if(!d)return gt(Xe.UNRESOLVED_TERM,{term:String(c??"")});let f=so(e,d),p=String(u||"auto").trim().toLowerCase(),m,h;p==="min"?(m="TINY",h=js("TINY")):p==="full"?(m="FULL",h=js("FULL")):{tier:m,mask:h}=Kr(f,e,{});let g=Md(f,h);if(!l.sourceAccess)return ht({text:g,tier:m});let b=await J$(f,h,{readFile:s,repoRoot:n});return ht({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 Se(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 ht({modules:d.length,packages:g,hubs:h})},untested(){let c=new Set(Se(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(wn);return ht({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 ht({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return gt(Xe.UNRESOLVED_TERM,{term:c});let d=[...Se(e,"touches"),...Se(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?Pt(h,"author")??Pt(h,"commitAuthor"):null,date:h?Pt(h,"date")??Pt(h,"commitDate"):null,message:h?Pt(h,"message")??Pt(h,"commitMessage"):null})}return ht({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=qr,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 j=null;if(b){let x=Ta(b);if(x.error)return gt(Xe.UNRESOLVED_TERM,{term:b,detail:x.error});j=x}let v=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=Oa(e,v,{kind:g,decFilter:y,nameRe:j}).map(x=>x.ind)}catch(x){return gt(Xe.UNRESOLVED_TERM,{term:b,detail:String(x?.message||x)})}}else{let j=new Map;for(let v of e.individuals)(v.class||"")==="Module"&&j.set(v.label,v);w=fd(e,h).map(({path:v})=>j.get(v)).filter(Boolean)}let $=w.slice(m,m+p).map(wn);return ht({results:$})},ask(c){if(typeof r!="function")return gt(Xe.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return ht({content:u,tmct_ask:d})}};if(o)for(let c of bc){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=>(rf(o,c,performance.now()-f,m),m)):(rf(o,c,performance.now()-f,p),p)})}return l}function rf(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:Q$(s)})}catch{}}function Q$(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 Pt,wc,X$,fi=L(()=>{Ce();ui();of();Pt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;wc=200,X$=120});async function ir(e,t){let n=await t.fetchEntities(e),s=Wr(n);if(!s.individuals.length){let o=new Oe(`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 mi=L(()=>{Lt();Ce()});function ot(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Oe(`${t} is required`);return n}function yt(e,t,n){let{match:s,candidates:o}=Vt(e.graph,t);if(!s)throw new Oe(`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 ar,Je,Ke=L(()=>{Lt();Ce();ar=200;Je=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=yt(s,ot(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function af(e,{config:t,source:n=eo,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Oe("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 ir(t,n),f=$e($e(t.graphFile)),p=pi(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:ss}),{match:m}=yt(p,r,"symbol"),h=so(d,m),g,b,y=!1;a||i==="min"?(g="TINY",b=js("TINY")):c||i==="full"?(g="FULL",b=js("FULL"),y=!0):{tier:g,mask:b,topup:y}=Kr(h,d,{untuned:l}),s&&!c&&(b=Ld(b));let w=null;if(h.moduleLabel)try{({lines:w}=await Pn({readFile:ze,repoRoot:f,path:h.moduleLabel}))}catch{w=null}let $=x=>w&&w[x-1]!=null?w[x-1].trim():"",j=(x,k)=>rs(w,x,k,ar).text,v=[`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:k}=h.anchor.site;v.push(`
68
+ `)}function di(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:mc,capabilities:[...gc],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=Gt(e,String(c??""));return u?mt({match:bn(u),candidates:d.map(bn)}):ht(Xe.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return ht(Xe.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=G$(e,c);return mt({individual:bn(u),out:d,incoming:f})},members(c){if(!a(c))return ht(Xe.UNRESOLVED_TERM,{term:c});let d=Se(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let h=i.get(m.object),g=h?bn(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.class||"")==="Attribute"?p.push(g):f.push(g)}return mt({methods:f,attributes:p})},subclasses(c){if(!a(c))return ht(Xe.UNRESOLVED_TERM,{term:c});let d=Se(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?bn(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=[],$=[];for(let j of b)for(let v of p.get(j)||[]){if(m.has(v))continue;m.add(v);let x=i.get(v),k=x?bn(x):{id:v,label:v,class:"Class",attributes:[]};h.push(k),$.push(k),w.push(v)}$.length&&g.push($),b=w}return mt({bases:f,subclasses:h,levels:g})},exports(c){if(!a(c))return ht(Xe.UNRESOLVED_TERM,{term:c});let f=Se(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?bn(i.get(p.object)):{id:p.object,label:p.objectLabel||p.object,class:"Entity",attributes:[]});return mt({exports:f})},signature(c){let u=a(c);if(!u)return ht(Xe.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Mt(u,p)&&d.push(m);let f=Mt(u,"visibility");return f&&d.push(f),mt({id:u.id,label:u.label,class:u.class||"Entity",params:Mt(u,"params"),returns:Mt(u,"returns"),raises:Mt(u,"raises"),decorators:Mt(u,"decorators"),doc:Mt(u,"doc"),selfFields:Mt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!hc.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return ht(Xe.UNRESOLVED_TERM,{term:c});let m=V$(e,u),h=Se(e,u).filter(g=>g.subject===c).map(g=>ui(g,m));return h=d==null?h.slice(f):h.slice(f,f+d),mt({kind:u,edges:h})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return ht(Xe.UNRESOLVED_TERM,{term:c});let f=u==null?to(e,d):to(e,d,{maxDepth:u}),p=f.reduce((m,h)=>m+h.length,0);return mt({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return ht(Xe.UNRESOLVED_TERM,{term:c});let d=vt(u);if(!l.sourceAccess)return ht(Xe.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 ht(Xe.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await Mn({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:bc});return mt({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return ht(Xe.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${f?.message||f}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=Gt(e,String(c??""));if(!d)return ht(Xe.UNRESOLVED_TERM,{term:String(c??"")});let f=no(e,d),p=String(u||"auto").trim().toLowerCase(),m,h;p==="min"?(m="TINY",h=Es("TINY")):p==="full"?(m="FULL",h=Es("FULL")):{tier:m,mask:h}=Hr(f,e,{});let g=Nd(f,h);if(!l.sourceAccess)return mt({text:g,tier:m});let b=await K$(f,h,{readFile:s,repoRoot:n});return mt({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 Se(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 mt({modules:d.length,packages:g,hubs:h})},untested(){let c=new Set(Se(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(bn);return mt({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 mt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return ht(Xe.UNRESOLVED_TERM,{term:c});let d=[...Se(e,"touches"),...Se(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?Mt(h,"author")??Mt(h,"commitAuthor"):null,date:h?Mt(h,"date")??Mt(h,"commitDate"):null,message:h?Mt(h,"message")??Mt(h,"commitMessage"):null})}return mt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Wr,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 j=null;if(b){let x=Aa(b);if(x.error)return ht(Xe.UNRESOLVED_TERM,{term:b,detail:x.error});j=x}let v=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=Ia(e,v,{kind:g,decFilter:y,nameRe:j}).map(x=>x.ind)}catch(x){return ht(Xe.UNRESOLVED_TERM,{term:b,detail:String(x?.message||x)})}}else{let j=new Map;for(let v of e.individuals)(v.class||"")==="Module"&&j.set(v.label,v);w=pd(e,h).map(({path:v})=>j.get(v)).filter(Boolean)}let $=w.slice(m,m+p).map(bn);return mt({results:$})},ask(c){if(typeof r!="function")return ht(Xe.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return mt({content:u,tmct_ask:d})}};if(o)for(let c of gc){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=>(of(o,c,performance.now()-f,m),m)):(of(o,c,performance.now()-f,p),p)})}return l}function of(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:Y$(s)})}catch{}}function Y$(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 Mt,bc,H$,pi=N(()=>{Ce();li();sf();Mt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;bc=200,H$=120});async function rr(e,t){let n=await t.fetchEntities(e),s=Ur(n);if(!s.individuals.length){let o=new Oe(`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 fi=N(()=>{Ot();Ce()});function ot(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Oe(`${t} is required`);return n}function wt(e,t,n){let{match:s,candidates:o}=Gt(e.graph,t);if(!s)throw new Oe(`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 ir,Je,Ke=N(()=>{Ot();Ce();ir=200;Je=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=wt(s,ot(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function rf(e,{config:t,source:n=Zs,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Oe("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 rr(t,n),f=$e($e(t.graphFile)),p=di(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:ns}),{match:m}=wt(p,r,"symbol"),h=no(d,m),g,b,y=!1;a||i==="min"?(g="TINY",b=Es("TINY")):c||i==="full"?(g="FULL",b=Es("FULL"),y=!0):{tier:g,mask:b,topup:y}=Hr(h,d,{untuned:l}),s&&!c&&(b=Od(b));let w=null;if(h.moduleLabel)try{({lines:w}=await Mn({readFile:ze,repoRoot:f,path:h.moduleLabel}))}catch{w=null}let $=x=>w&&w[x-1]!=null?w[x-1].trim():"",j=(x,k)=>os(w,x,k,ir).text,v=[`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:k}=h.anchor.site;v.push(`
70
70
  ## anchor: ${h.anchor.label} (${h.anchor.class}) @ ${h.moduleLabel}:${x}-${k}`),v.push(j(x,k)),h.callHint&&v.push(h.callHint)}if(b.registration&&h.globals.length){v.push(`
71
71
  ## registration / module globals (replicate this pattern):`);for(let x of h.globals)v.push(` ${x.label} = ${x.value}${x.site?` [:${x.site.start}]`:""}`)}if(b.exemplar&&h.exemplar?.site&&w){let{start:x,end:k}=h.exemplar.site,_=h.exemplar.decorators?` @${h.exemplar.decorators}`:"";v.push(`
72
- ## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${_} @ ${h.moduleLabel}:${x}-${k}`),v.push(j(x,k)),h.callHint&&v.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let x=120;for(let k of h.calleeBodies){if(x<=0)break;let _=k.site.start,E=k.site.path===h.moduleLabel&&w?w:await Pn({readFile:ze,repoRoot:f,path:k.site.path}).then(N=>N.lines).catch(()=>null);if(!E)continue;let A=rs(E,_,k.site.end,x);v.push(`
72
+ ## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${_} @ ${h.moduleLabel}:${x}-${k}`),v.push(j(x,k)),h.callHint&&v.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let x=120;for(let k of h.calleeBodies){if(x<=0)break;let _=k.site.start,E=k.site.path===h.moduleLabel&&w?w:await Mn({readFile:ze,repoRoot:f,path:k.site.path}).then(L=>L.lines).catch(()=>null);if(!E)continue;let A=os(E,_,k.site.end,x);v.push(`
73
73
  ## inlined callee body (depth-1 in-repo call): ${k.label} @ ${k.site.path}:${_}-${k.site.end}`),v.push(A.text),x-=A.end-_+1}}if(b.classMembers&&h.classMembers&&h.classMembers.members.length){v.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 k=String(x.label).split(".").pop(),_=x.params!=null&&x.params!==""?`(${x.params})${x.returns?` -> ${x.returns}`:""}`:"",R=x.decorators?`@${x.decorators} `:"",E=x.raises?` raises=${x.raises}`:"";v.push(` ${x.class} ${k}${x.site?` :${x.site.start}`:""} ${R}${k}${_}${E}`)}}if(b.siblings&&h.siblings.length){v.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 k=x.site?$(x.site.start):"",_=x.decorators?`@${x.decorators} `:"",R=x.raises?` raises=${x.raises}`:"";v.push(` ${x.class} ${x.label}${x.site?` :${x.site.start}`:""} ${_}${k}${R}`)}h.siblings.length>h.siblingCap&&v.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&&v.push(`
@@ -82,105 +82,105 @@ ${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&&v.push(`
83
83
  ## usually changed together (consider editing these too): ${h.cochange.map(x=>`${x.label} (\xD7${x.weight})`).join(", ")}`),v.push(`
84
84
  You now have the snippet, the sibling style, the registration anchor and the tests. Write the new code with Edit/Write \u2014 do NOT Read ${h.moduleLabel}.`),g!=="FULL"&&v.push(`(bundle tier ${g}; for any omitted sections run ${u}context_more {"symbol":"${r}"}, or ${u}context with depth="full".)`),{text:v.join(`
85
- `),tier:g,topup:y}}async function yc(e,{config:t,source:n,tel:s}){return(await af(e,{config:t,source:n,tel:s})).text}var vc=L(()=>{vt();De();Lt();ui();Wo();Ce();os();fi();mi();Ke();yc.ownsGraphLoad=!0});function cf(e,{graph:t,svc:n}){let{match:s}=yt(n,ot(e,"symbol"),"symbol");return Nd(so(t,s))}var lf=L(()=>{Ce();Ke()});function hi(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 cr(e){return hi(e).toString(16).padStart(8,"0")}function ex(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 $=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,j=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+$+i[w-7]+j>>>0}let[d,f,p,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let $=a(h,6)^a(h,11)^a(h,25),j=h&g^~h&b,v=y+$+j+Z$[w]+i[w]>>>0,x=a(d,2)^a(d,13)^a(d,22),k=d&f^d&p^f&p,_=x+k>>>0;y=b,b=g,g=h,h=m+v>>>0,m=p,p=f,f=d,d=v+_>>>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 tx(e,t){let n=ex(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function ee(e){let t=Fn(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 Dn(e){let t=Fn(e);return sx.get(t)??t}function he(e,t,n){return lr(ee(e),Dn(t),ee(n))}var Z$,nx,Fn,sx,lr,en=L(()=>{Z$=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]);nx=2e3,Fn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,nx);sx=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"]]);lr=(e,t,n)=>`fact:${tx(`${e}\0${t}\0${n}`,8)}`});var tn={};En(tn,{CARDINALITY_RULE_CONFIDENCE:()=>ux,CAX_DW_RULE:()=>xc,CAX_DW_RULE_CONFIDENCE:()=>Sc,CAX_MAXC0_RULE_CONFIDENCE:()=>px,CLS_SVF1_RULE:()=>Ec,CLS_SVF1_RULE_CONFIDENCE:()=>_c,DEFAULT_MAX_ENVIRONMENTS:()=>gi,DISJOINT_PREDICATE:()=>mo,ENTAILED_DISJOINT_PROVENANCE:()=>kc,ENTAILED_PROVENANCE:()=>pf,ENTAILED_SCM_SVF_PROVENANCE:()=>Tc,ENTAILED_SVF1_PROVENANCE:()=>jc,ENTAILED_TYPE_PROVENANCE:()=>mf,ON_PROPERTY_PREDICATE:()=>yn,SCM_SVF_RULE:()=>Ac,SCM_SVF_RULE_CONFIDENCE:()=>Cc,SOME_VALUES_FROM_PREDICATE:()=>vn,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>At,buildCardinalityRestrictions:()=>lx,buildRelevanceFrontier:()=>$c,deriveDisjointViolations:()=>wf,deriveSomeValuesFromApplication:()=>yf,deriveSomeValuesFromSubsumption:()=>vf,deriveSubClassClosure:()=>hf,deriveSubClassClosureDelta:()=>gf,deriveTypePropagation:()=>bf,entailedTrustFrom:()=>rx,findConsistencyViolations:()=>mx,findIsaChain:()=>Ic,proveCardinalityAtLeast:()=>dx,proveMaxCardinalityZeroDenial:()=>fx,retractSubClassOf:()=>yx,syllogise:()=>hx});function uf(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 rx(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 zn(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=ee(s);o&&n.add(o)}return n.size?n:null}function hf(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}${Ie}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:zn(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}${Ie}${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 gf(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}${Ie}${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}${Ie}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:zn(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,$,j)=>{if(w===j)return;let v=`${w}${Ie}${j}`;r.has(v)||p.has(v)||d(w,$,j)&&h.push([w,$,j,v])};for(let[w,$]of l){for(let j of i.get($)||[])g(w,$,j);for(let j of a.get(w)||[])g(j,w,$)}if(!h.length)break;h.sort((w,$)=>w[0].localeCompare($[0])||w[2].localeCompare($[2])||w[1].localeCompare($[1]));let b=!1,y=[];for(let[w,$,j,v]of h)if(!p.has(v)){if(f.length>=s)break;p.add(v),f.push({subject:w,object:j,via:$}),i.has(w)||i.set(w,new Set),i.get(w).add(j),a.has(j)||a.set(j,new Set),a.get(j).add(w),y.push([w,j]),b=!0}if(f.length>=s||!b)break;l=y}return f}function $n(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 ix(e){return $n((e||[]).map(([t,n])=>[n,t]))}function $c(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(is(c.predicate)?n.push([c.subject,c.object]):Is(c.predicate)?s.push([c.subject,c.object]):ho(c.predicate)?o.set(c.subject,c.object):dr(c.predicate)&&r.set(c.subject,c.object));let i=ix(n),a=new Set;for(let c of t||[]){let u=ee(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 bf(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=$n(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Ie}${m}`);let l=s instanceof Set?s.size?s:null:zn(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}${Ie}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Ie}${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 wf(e,t,n,{budget:s=50,focus:o=null}={}){let r=$n(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Ie}${h}`),a.add(`${h}${Ie}${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:zn(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}${Ie}${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 $=`${m}${Ie}${w}`;a.has($)||u(m,h,w)&&d.push([m,h,b,w,$])}}}}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 yf(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=$n(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Ie}${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}${Ie}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:zn(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=ee(b),$=`${g}${Ie}${w}${Ie}${y}`;if(f.has($))continue;f.add($);let j=c.get(y);if(j)for(let v of j)for(let x of[v,...i(v)]){let k=a.get(`${w}${Ie}${x}`);if(k)for(let _ of k){if(g===_)continue;let R=`${g}${Ie}${_}`;l.has(R)||d(g,y,_)&&p.push([g,b,w,y,v,x,_,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,$,j,v,x]of p)if(!h.has(x)){if(m.length>=o)break;h.add(x),m.push({subject:g,object:v,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:$,viaTarget:j})}return m}function lx(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(ho(r.predicate))t.set(r.subject,r.object);else if(ox(r.predicate))s.set(r.subject,r.object);else{let i=cx[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)!==ax)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 vf(e,t,{budget:n=50,focus:s=null}={}){let o=$n(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=ee(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}${Ie}${p}`);let a=s instanceof Set?s.size?s:null:zn(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}${Ie}${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 $f(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=$n(e),a=r instanceof Set?r.size?r:null:zn(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 dx(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=$f(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 fx(e,t,n,s,o={}){if(!s)return null;let r=$f(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 mx(e,t,n,{budget:s=50,focus:o=null}={}){let r=$n(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:zn(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]],$=[y,...r(y)],j=[w,...r(w)],v=null;for(let k of $){let _=i.get(k);if(_){for(let R of j)if(_.has(R)){v=[k,R];break}if(v)break}}if(!v)continue;let x=`${p}${Ie}${y}${Ie}${w}`;d.has(x)||(d.add(x),u.push([p,y,w,v[0],v[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 hx(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=gi,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=uf(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(S=>is(S.predicate)).map(S=>[S.subject,S.object]),h=p.filter(S=>Is(S.predicate)).map(S=>[S.subject,S.object]),g=p.filter(S=>Cs(S.predicate)).map(S=>[S.subject,S.object]),b=new Map,y=new Map,w=[];for(let S of p){let ue=String(S.predicate||"").trim().toLowerCase();ho(S.predicate)?b.set(S.subject,S.object):dr(S.predicate)?y.set(S.subject,S.object):Rc.has(ue)||w.push([S.subject,S.predicate,S.object])}let $=[];for(let[S,ue]of b){let Re=y.get(S);Re&&$.push({restriction:S,property:ue,target:Re})}let j=zn(s),v=o&&j?$c(p,[...j]):j,x=v===null&&d?await a.loadSyllogiseState(e):null,k=new Set(p.map(S=>S.id)),_=Array.isArray(x?.factIds)?x.factIds.filter(S=>!k.has(S)):[],R=x&&Array.isArray(x.factIds)&&!_.length&&!i?"delta":"full",E=R==="delta"?new Set(x.factIds):null,A=R==="delta"?p.filter(S=>!E.has(S.id)):p,N=A.length,T=new Map;for(let S of p)T.set(`${S.subject}${Ie}${S.predicate}${Ie}${S.object}`,S.trust);let P=(S,ue,Re)=>T.get(`${S}${Ie}${ue}${Ie}${Re}`),G=(S,ue,Re)=>T.has(`${S}${Ie}${ue}${Ie}${Re}`),Y=S=>S.filter(ue=>typeof ue=="number"),te=R==="delta"&&!A.length,F=R==="delta"?A.filter(S=>is(S.predicate)).map(S=>[S.subject,S.object]):[],D=R==="delta"?F.length?gf(m,F,{depth:t,budget:n,focus:v}):[]:hf(m,{depth:t,budget:n,focus:v}),B=m.concat(D.map(S=>[S.subject,S.object])),W=v,C=null;if(R==="delta"&&!te){let S=p.concat(D.map(Re=>({subject:Re.subject,predicate:Fe,object:Re.object}))),ue=[];for(let Re of A)ue.push(Re.subject,Re.object);C=$c(S,ue),W=C}let I=S=>!C||C.has(S),O=C?h.filter(([S,ue])=>I(S)||I(ue)):h,M=new Set;if(C)for(let S of A)Cs(S.predicate)&&(M.add(S.subject),M.add(S.object));let q=C&&M.size?$n(B):null,U=C?h.filter(([S,ue])=>I(S)||I(ue)||q&&[...q(ue)].some(Re=>M.has(Re))):h,ie=new Set;if(C){for(let S of A)if(ho(S.predicate)||dr(S.predicate)){let ue=b.get(S.subject);ue&&ie.add(ee(ue))}}let se=C?w.filter(([S,ue,Re])=>I(S)||I(Re)||ie.has(ee(ue))):w,X=Math.max(0,n-D.length),J=X>0&&!te?bf(O,B,{budget:X,focus:W,presentTypeEdges:h}):[],oe=Math.max(0,n-D.length-J.length),H=oe>0&&!te?wf(U,B,g,{budget:oe,focus:W}):[],le=Math.max(0,n-D.length-J.length-H.length),ne=le>0&&$.length&&!te?yf(se,h,B,$,{budget:le,focus:W}):[],_e=Math.max(0,n-D.length-J.length-H.length-ne.length),Le=_e>0&&$.length>1&&!te?vf($,B,{budget:_e,focus:W}):[],Q=new Map($.map(S=>[S.restriction,S])),xe=[...D.map(S=>({subject:S.subject,predicate:Fe,object:S.object,provenance:pf,justification:[[he(S.subject,Fe,S.via),he(S.via,Fe,S.object)]]})),...J.map(S=>({subject:S.subject,predicate:At,object:S.object,provenance:mf,justification:[[he(S.subject,At,S.via),he(S.via,Fe,S.object)]]})),...H.map(S=>{let ue=G(S.viaClass,mo,S.object),[Re,Sn]=ue?[S.viaClass,S.object]:[S.object,S.viaClass],Ys=Y([P(S.subject,At,S.viaType),P(Re,mo,Sn),...S.viaClass!==S.viaType?[P(S.viaType,Fe,S.viaClass)]:[]]);return{subject:S.subject,predicate:mo,object:S.object,provenance:kc,justification:[[he(S.subject,At,S.viaType),he(Re,mo,Sn),...S.viaClass!==S.viaType?[he(S.viaType,Fe,S.viaClass)]:[]]],...Ys.length?{premiseTrusts:Ys,ruleConfidence:Sc}:{}}}),...ne.map(S=>{let ue=Y([P(S.subject,S.viaProperty,S.viaValue),P(S.viaValue,At,S.viaType),P(S.object,yn,S.viaPropertyKey),P(S.object,vn,S.viaTarget),...S.viaType!==S.viaTarget?[P(S.viaType,Fe,S.viaTarget)]:[]]);return{subject:S.subject,predicate:At,object:S.object,provenance:jc,justification:[[he(S.subject,S.viaProperty,S.viaValue),he(S.viaValue,At,S.viaType),he(S.object,yn,S.viaPropertyKey),he(S.object,vn,S.viaTarget),...S.viaType!==S.viaTarget?[he(S.viaType,Fe,S.viaTarget)]:[]]],...ue.length?{premiseTrusts:ue,ruleConfidence:_c}:{}}}),...Le.map(S=>{let ue=Q.get(S.subject),Re=Q.get(S.object),Sn=Y([ue&&P(S.subject,yn,ue.property),P(S.subject,vn,S.viaY1),Re&&P(S.object,yn,Re.property),P(S.object,vn,S.viaY2),P(S.viaY1,Fe,S.viaY2)]);return{subject:S.subject,predicate:Fe,object:S.object,provenance:Tc,justification:[[...ue?[he(S.subject,yn,ue.property)]:[],he(S.subject,vn,S.viaY1),...Re?[he(S.object,yn,Re.property)]:[],he(S.object,vn,S.viaY2),he(S.viaY1,Fe,S.viaY2)]],...Sn.length?{premiseTrusts:Sn,ruleConfidence:Cc}:{}}})],ge=xe.map(S=>({id:he(S.subject,S.predicate,S.object),subject:S.subject,predicate:S.predicate,object:S.object,environments:S.justification,write:S})),ve=kf(p.concat(ge.map(S=>({id:S.id,subject:S.subject,predicate:S.predicate,object:S.object})))),V=new Map(p.map(S=>[S.id,S])),re=S=>is(S)||Is(S)||Cs(S),fe=S=>R!=="delta"||C!==null&&(C.has(S.subject)||C.has(S.object)),ce=p.filter(S=>re(S.predicate)&&xf(S.provenance)&&ur(S).length<r&&fe(S)).map(S=>({id:S.id,subject:S.subject,predicate:S.predicate,object:S.object,environments:ur(S),provenance:S.provenance})),wt=[...ge,...ce].sort((S,ue)=>S.subject.localeCompare(ue.subject)||S.predicate.localeCompare(ue.predicate)||S.object.localeCompare(ue.object)),Bt=0,Qe=!1,dn=0;for(let S of wt){if(dn>=n){Qe=!0;break}dn+=1;let ue=ve(S,{maxEnvironments:r+1}),{kept:Re,truncated:Sn}=bx(S.environments,ue,r);if(Sn&&(Qe=!0),!(Re.length<=S.environments.length)){if(Bt+=Re.length-S.environments.length,S.write){S.write.justification=Re;continue}xe.push({subject:S.subject,predicate:S.predicate,object:S.object,justification:Re,...Sf(S.provenance,Re,Ys=>V.get(Ys)?.trust)||{}})}}let{ids:Kt}=await u(e,xe),Ut=[],It=0;for(let S of D)Ut.push({id:Kt[It],subject:S.subject,object:S.object,via:S.via,rule:df}),It+=1;for(let S of J)Ut.push({id:Kt[It],subject:S.subject,object:S.object,via:S.via,rule:ff}),It+=1;for(let S of H)Ut.push({id:Kt[It],subject:S.subject,object:S.object,via:S.viaClass,rule:xc}),It+=1;for(let S of ne)Ut.push({id:Kt[It],subject:S.subject,object:S.object,via:S.viaValue,rule:Ec}),It+=1;for(let S of Le)Ut.push({id:Kt[It],subject:S.subject,object:S.object,via:S.viaY1,rule:Ac}),It+=1;let Ir=Ut.length>=n;if(v===null&&d&&!Ir){let S=new Set(k);for(let ue of Kt)S.add(ue);await a.saveSyllogiseState(e,{version:1,factIds:[...S].sort(),completedAt:new Date().toISOString()})}return{derived:Ut,count:Ut.length,budget:n,depth:t,truncated:Ir,mode:R,deltaSize:N,environmentsAdded:Bt,alternatesTruncated:Qe}}function xf(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function gx(e){let t=[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map;for(let u of e){let d=String(u.predicate||"").trim().toLowerCase();is(u.predicate)?t.push([u.subject,u.object]):Is(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):Cs(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)):ho(u.predicate)?o.set(u.subject,u.object):dr(u.predicate)?r.set(u.subject,u.object):Rc.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([ee(u.predicate),u.object]))}let a=$n(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:ee(d),target:f}:null};return u=>{if(is(u.predicate)){if(l(u.subject,u.object))return!0;let d=c(u.subject),f=c(u.object);return!!(d&&f&&d.property===f.property&&l(d.target,f.target))}if(Is(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(Cs(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 kf(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();is(p.predicate)?(n.push([p.subject,p.object]),s.has(p.subject)||s.set(p.subject,new Set),s.get(p.subject).add(p.object)):Is(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):Cs(p.predicate)?(r.add(`${p.subject}${Ie}${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)):ho(p.predicate)?a.set(p.subject,p.object):dr(p.predicate)?l.set(p.subject,p.object):Rc.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=$n(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:ee(m),target:h}:null};return(p,{maxEnvironments:m=gi}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every($=>t.has($)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),h.push(y))};if(is(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([he(p.subject,Fe,y),he(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([he(p.subject,yn,y.property),he(p.subject,vn,y.target),he(p.object,yn,w.property),he(p.object,vn,w.target),he(y.target,Fe,w.target)])}return h}if(Is(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([he(p.subject,At,w),he(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([$])=>ee($)===y.propertyKey).sort(($,j)=>$[0].localeCompare(j[0])||$[1].localeCompare(j[1]));for(let[$,j]of w){if(h.length>=m)break;for(let v of[...o.get(j)||[]].sort()){if(h.length>=m)break;v!==y.target&&!d(v).has(y.target)||b([he(p.subject,$,j),he(j,At,v),he(p.object,yn,y.propertyKey),he(p.object,vn,y.target),...v!==y.target?[he(v,Fe,y.target)]:[]])}}}return h}if(Cs(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let $ of[w,...u(w)])(i.get($)||new Set).has(p.object)&&y.push([w,$]);y.sort((w,$)=>w[0].localeCompare($[0])||w[1].localeCompare($[1]));for(let[w,$]of y){if(h.length>=m)break;let j=r.has(`${$}${Ie}${p.object}`),[v,x]=j?[$,p.object]:[p.object,$];b([he(p.subject,At,w),he(v,mo,x),...$!==w?[he(w,Fe,$)]:[]])}return h}return h}}function bx(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 Sf(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=wx.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 yx(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=gi,store:i}={}){let{loadMemory:a,readFactRows:l,removeFacts:c}=uf(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),u=typeof i?.appendFacts=="function"?i.appendFacts:null,d=ee(t),f=ee(n),p=he(d,Fe,f),m=await a(e),h=l(m),g=new Map(h.map(R=>[R.id,R]));if(!g.has(p))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let b=h.filter(R=>ur(R).length&&xf(R.provenance)),y=new Map;for(let R of b)for(let E of ur(R))for(let A of E)y.has(A)||y.set(A,new Set),y.get(A).add(R.id);let w=new Set([p]),$=[p],j=new Map,v=!1,x=0,k=[p];for(;x<o;x+=1){let R=new Set;for(let te of k)for(let F of y.get(te)||[])w.has(F)||R.add(F);let E=[...R].map(te=>g.get(te)).sort((te,F)=>te.subject.localeCompare(F.subject)||te.predicate.localeCompare(F.predicate)||te.object.localeCompare(F.object));if(!E.length)break;let A=h.filter(te=>!w.has(te.id)&&!R.has(te.id)),N=new Set(A.map(te=>te.id)),T=kf(A),P=gx(A),G=!1,Y=!1;k=[];for(let te of E){if(w.size>=s){Y=!0;break}let F=ur(te),D=F.filter(W=>W.every(C=>N.has(C)));if(D.length){D.length!==F.length&&j.set(te.id,D);continue}let B=T(te,{maxEnvironments:r});if(B.length){j.set(te.id,B);continue}P(te)||(w.add(te.id),$.push(te.id),k.push(te.id),G=!0)}if(Y){v=!0;break}if(!G)break}!v&&x>=o&&(v=b.some(R=>!w.has(R.id)&&R.justification.some(E=>w.has(E))));let{removed:_}=await c(e,$);if(u){let R=[...j.entries()].filter(([E])=>!w.has(E)).sort((E,A)=>E[0].localeCompare(A[0])).map(([E,A])=>{let N=g.get(E);return{subject:N.subject,predicate:N.predicate,object:N.object,justification:A,...Sf(N.provenance,A,T=>g.get(T)?.trust)||{}}});R.length&&await u(e,R)}return{retracted:_,count:_.length,budget:s,depth:o,truncated:v,found:!0}}function Ic(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:At,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,df,pf,At,ff,mf,mo,xc,kc,Sc,yn,vn,Ec,jc,_c,gi,Ie,is,Is,Cs,ho,dr,ox,Rc,ax,cx,Ac,Tc,Cc,ux,px,ur,wx,Ft=L(()=>{en();Fe="rdfs:subClassOf",df="subClassOf",pf=`entailed:${df}`,At="rdf:type",ff="type",mf=`entailed:${ff}`,mo="owl:disjointWith",xc="disjointWith",kc=`entailed:${xc}`,Sc=.95,yn="owl:onProperty",vn="owl:someValuesFrom",Ec="someValuesFrom",jc=`entailed:${Ec}`,_c=.95,gi=4,Ie="\u241F",is=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Is=e=>String(e||"").trim().toLowerCase()==="rdf:type",Cs=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",ho=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",dr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",ox=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Rc=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);ax="has",cx={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Ac="someValuesFromSubsumption",Tc=`entailed:${Ac}`,Cc=.95;ux=.95;px=.95;ur=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);wx=new Map([[kc,Sc],[jc,_c],[Tc,Cc]])});function yo(e){let t=String(e||""),n=Ef.get(t);return n||(t.startsWith(Oc)?go+t.slice(Oc.length):t)}function jf(e){let t=String(e||""),n=vx.get(t);return n||(t.startsWith(go)?Oc+t.slice(go.length):null)}function Af(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Ic(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function yi(e,t,n,{maxHops:s=3}={}){let o=wo(e),r=wo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Rf(i),c=i.filter(b=>(b.predicate===wi||b.predicate===bo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===bo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=Af(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:Nc(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 Nc(e,t,n,{maxHops:s=3}={}){let o=wo(e),r=wo(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===At),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===wi||b.predicate===bo));return g?{name:h,polarity:g.predicate===bo?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=Rf(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:Af(o,c,p,m,s)}}function Mc(e,t,{exclude:n=[],maxHops:s=3}={}){let o=wo(e),r=wo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==wi||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),yi(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort($x)}var go,Oc,bi,Ef,vx,_f,wi,bo,Lc,$x,wo,Rf,Pc=L(()=>{Ft();go="mgxneg:",Oc="mgx:",bi="mgxneg:subClassOf",Ef=new Map([[Fe,bi]]),vx=new Map([...Ef].map(([e,t])=>[t,e]));_f=e=>String(e||"").startsWith(go),wi="mgx:capableOf",bo=yo(wi),Lc=6,$x=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),wo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Rf=e=>({typeEdges:e.filter(t=>t.predicate===At).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function vo(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function Ex(e,t){(!e?.class||!xx.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function jx(e,t){for(let s of["rdf:subject","rdf:predicate","rdf:object"])vi(vo(e,s))||t.push(`a Fact needs a non-empty ${s}`);for(let s of["rdf:subject","rdf:object"]){let o=vo(e,s);o!==void 0&&Sx.test(o)&&t.push(`a Fact's ${s} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(o)})`)}let n=vo(e,"mgx:factProvenance");n!==void 0&&!vi(n)&&t.push("mgx:factProvenance, when present, must be non-empty")}function _x(e,t){vi(vo(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=vo(e,"mgx:ruleKind");if(!n||!Tf.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...Tf].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of kx[n])vi(vo(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function Rx(e){let t=[];return Ex(e,t),e?.class==="Fact"&&jx(e,t),e?.class==="Rule"&&_x(e,t),{ok:t.length===0,violations:t}}function Fc(e){let t=Rx(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 xx,Tf,kx,Sx,vi,Cf=L(()=>{xx=new Set(["Utterance","Fact","Session","Source","Rule"]),Tf=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),kx={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"]},Sx=/[.!?]\s+\w/;vi=e=>typeof e=="string"&&e.trim().length>0});var If={};En(If,{access:()=>Cx,appendFile:()=>Lx,basename:()=>Xx,copyFile:()=>Bx,createInterface:()=>tk,createReadStream:()=>Wx,createRequire:()=>Ax,createWriteStream:()=>qx,default:()=>sk,dirname:()=>Hx,existsSync:()=>Gx,fileURLToPath:()=>Qx,isAbsolute:()=>Yx,join:()=>Vx,mkdir:()=>Nx,mkdtemp:()=>Mx,randomBytes:()=>Zx,readFile:()=>Ix,readFileSync:()=>Tx,readdir:()=>Ux,rename:()=>Px,resolve:()=>Kx,rm:()=>Dx,sep:()=>Jx,spawnSync:()=>ek,stat:()=>zx,tmpdir:()=>nk,unlink:()=>Fx,writeFile:()=>Ox});var rt,Ax,Tx,Cx,Ix,Ox,Lx,Nx,Mx,Px,Fx,Dx,zx,Bx,Ux,Wx,qx,Gx,Vx,Hx,Kx,Yx,Xx,Jx,Qx,Zx,ek,tk,nk,sk,Of=L(()=>{rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Ax=rt("createRequire"),Tx=rt("readFileSync"),Cx=rt("access"),Ix=rt("readFile"),Ox=rt("writeFile"),Lx=rt("appendFile"),Nx=rt("mkdir"),Mx=rt("mkdtemp"),Px=rt("rename"),Fx=rt("unlink"),Dx=rt("rm"),zx=rt("stat"),Bx=rt("copyFile"),Ux=rt("readdir"),Wx=rt("createReadStream"),qx=rt("createWriteStream"),Gx=()=>!1,Vx=(...e)=>e.join("/"),Hx=e=>String(e).replace(/\/[^/]*$/,""),Kx=(...e)=>e.join("/"),Yx=e=>String(e).startsWith("/"),Xx=e=>String(e).split("/").pop(),Jx="/",Qx=e=>String(e),Zx=rt("randomBytes"),ek=rt("spawnSync"),tk=rt("createInterface"),nk=()=>"/tmp",sk={}});var ok,pr,Dc=L(()=>{ok=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,pr=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(ok);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 rk(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function ik(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 wc(e,{config:t,source:n,tel:s}){return(await rf(e,{config:t,source:n,tel:s})).text}var yc=N(()=>{yt();De();Ot();li();Uo();Ce();ss();pi();fi();Ke();wc.ownsGraphLoad=!0});function af(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"symbol"),"symbol");return Ld(no(t,s))}var cf=N(()=>{Ce();Ke()});function mi(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 ar(e){return mi(e).toString(16).padStart(8,"0")}function J$(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 $=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,j=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+$+i[w-7]+j>>>0}let[d,f,p,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let $=a(h,6)^a(h,11)^a(h,25),j=h&g^~h&b,v=y+$+j+X$[w]+i[w]>>>0,x=a(d,2)^a(d,13)^a(d,22),k=d&f^d&p^f&p,_=x+k>>>0;y=b,b=g,g=h,h=m+v>>>0,m=p,p=f,f=d,d=v+_>>>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 Q$(e,t){let n=J$(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function ee(e){let t=Pn(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 Fn(e){let t=Pn(e);return ex.get(t)??t}function he(e,t,n){return cr(ee(e),Fn(t),ee(n))}var X$,Z$,Pn,ex,cr,Zt=N(()=>{X$=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]);Z$=2e3,Pn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,Z$);ex=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"]]);cr=(e,t,n)=>`fact:${Q$(`${e}\0${t}\0${n}`,8)}`});var en={};Sn(en,{CARDINALITY_RULE_CONFIDENCE:()=>ax,CAX_DW_RULE:()=>$c,CAX_DW_RULE_CONFIDENCE:()=>kc,CAX_MAXC0_RULE_CONFIDENCE:()=>lx,CLS_SVF1_RULE:()=>Sc,CLS_SVF1_RULE_CONFIDENCE:()=>jc,DEFAULT_MAX_ENVIRONMENTS:()=>hi,DISJOINT_PREDICATE:()=>fo,ENTAILED_DISJOINT_PROVENANCE:()=>xc,ENTAILED_PROVENANCE:()=>df,ENTAILED_SCM_SVF_PROVENANCE:()=>Ac,ENTAILED_SVF1_PROVENANCE:()=>Ec,ENTAILED_TYPE_PROVENANCE:()=>ff,ON_PROPERTY_PREDICATE:()=>wn,SCM_SVF_RULE:()=>Rc,SCM_SVF_RULE_CONFIDENCE:()=>Tc,SOME_VALUES_FROM_PREDICATE:()=>yn,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>Rt,buildCardinalityRestrictions:()=>ix,buildRelevanceFrontier:()=>vc,deriveDisjointViolations:()=>bf,deriveSomeValuesFromApplication:()=>wf,deriveSomeValuesFromSubsumption:()=>yf,deriveSubClassClosure:()=>mf,deriveSubClassClosureDelta:()=>hf,deriveTypePropagation:()=>gf,entailedTrustFrom:()=>nx,findConsistencyViolations:()=>dx,findIsaChain:()=>Cc,proveCardinalityAtLeast:()=>cx,proveMaxCardinalityZeroDenial:()=>ux,retractSubClassOf:()=>gx,syllogise:()=>px});function lf(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 nx(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 Dn(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=ee(s);o&&n.add(o)}return n.size?n:null}function mf(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}${Ie}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:Dn(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}${Ie}${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 hf(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}${Ie}${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}${Ie}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:Dn(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,$,j)=>{if(w===j)return;let v=`${w}${Ie}${j}`;r.has(v)||p.has(v)||d(w,$,j)&&h.push([w,$,j,v])};for(let[w,$]of l){for(let j of i.get($)||[])g(w,$,j);for(let j of a.get(w)||[])g(j,w,$)}if(!h.length)break;h.sort((w,$)=>w[0].localeCompare($[0])||w[2].localeCompare($[2])||w[1].localeCompare($[1]));let b=!1,y=[];for(let[w,$,j,v]of h)if(!p.has(v)){if(f.length>=s)break;p.add(v),f.push({subject:w,object:j,via:$}),i.has(w)||i.set(w,new Set),i.get(w).add(j),a.has(j)||a.set(j,new Set),a.get(j).add(w),y.push([w,j]),b=!0}if(f.length>=s||!b)break;l=y}return f}function vn(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 sx(e){return vn((e||[]).map(([t,n])=>[n,t]))}function vc(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]):Cs(c.predicate)?s.push([c.subject,c.object]):mo(c.predicate)?o.set(c.subject,c.object):ur(c.predicate)&&r.set(c.subject,c.object));let i=sx(n),a=new Set;for(let c of t||[]){let u=ee(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 gf(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=vn(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Ie}${m}`);let l=s instanceof Set?s.size?s:null:Dn(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}${Ie}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Ie}${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 bf(e,t,n,{budget:s=50,focus:o=null}={}){let r=vn(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Ie}${h}`),a.add(`${h}${Ie}${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:Dn(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}${Ie}${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 $=`${m}${Ie}${w}`;a.has($)||u(m,h,w)&&d.push([m,h,b,w,$])}}}}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 wf(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=vn(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Ie}${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}${Ie}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:Dn(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=ee(b),$=`${g}${Ie}${w}${Ie}${y}`;if(f.has($))continue;f.add($);let j=c.get(y);if(j)for(let v of j)for(let x of[v,...i(v)]){let k=a.get(`${w}${Ie}${x}`);if(k)for(let _ of k){if(g===_)continue;let R=`${g}${Ie}${_}`;l.has(R)||d(g,y,_)&&p.push([g,b,w,y,v,x,_,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,$,j,v,x]of p)if(!h.has(x)){if(m.length>=o)break;h.add(x),m.push({subject:g,object:v,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:$,viaTarget:j})}return m}function ix(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(mo(r.predicate))t.set(r.subject,r.object);else if(tx(r.predicate))s.set(r.subject,r.object);else{let i=rx[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)!==ox)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 yf(e,t,{budget:n=50,focus:s=null}={}){let o=vn(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=ee(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}${Ie}${p}`);let a=s instanceof Set?s.size?s:null:Dn(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}${Ie}${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 vf(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=vn(e),a=r instanceof Set?r.size?r:null:Dn(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 cx(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=vf(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 ux(e,t,n,s,o={}){if(!s)return null;let r=vf(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 dx(e,t,n,{budget:s=50,focus:o=null}={}){let r=vn(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:Dn(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]],$=[y,...r(y)],j=[w,...r(w)],v=null;for(let k of $){let _=i.get(k);if(_){for(let R of j)if(_.has(R)){v=[k,R];break}if(v)break}}if(!v)continue;let x=`${p}${Ie}${y}${Ie}${w}`;d.has(x)||(d.add(x),u.push([p,y,w,v[0],v[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 px(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=hi,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=lf(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(S=>rs(S.predicate)).map(S=>[S.subject,S.object]),h=p.filter(S=>Cs(S.predicate)).map(S=>[S.subject,S.object]),g=p.filter(S=>Ts(S.predicate)).map(S=>[S.subject,S.object]),b=new Map,y=new Map,w=[];for(let S of p){let ue=String(S.predicate||"").trim().toLowerCase();mo(S.predicate)?b.set(S.subject,S.object):ur(S.predicate)?y.set(S.subject,S.object):_c.has(ue)||w.push([S.subject,S.predicate,S.object])}let $=[];for(let[S,ue]of b){let Re=y.get(S);Re&&$.push({restriction:S,property:ue,target:Re})}let j=Dn(s),v=o&&j?vc(p,[...j]):j,x=v===null&&d?await a.loadSyllogiseState(e):null,k=new Set(p.map(S=>S.id)),_=Array.isArray(x?.factIds)?x.factIds.filter(S=>!k.has(S)):[],R=x&&Array.isArray(x.factIds)&&!_.length&&!i?"delta":"full",E=R==="delta"?new Set(x.factIds):null,A=R==="delta"?p.filter(S=>!E.has(S.id)):p,L=A.length,T=new Map;for(let S of p)T.set(`${S.subject}${Ie}${S.predicate}${Ie}${S.object}`,S.trust);let P=(S,ue,Re)=>T.get(`${S}${Ie}${ue}${Ie}${Re}`),G=(S,ue,Re)=>T.has(`${S}${Ie}${ue}${Ie}${Re}`),Y=S=>S.filter(ue=>typeof ue=="number"),te=R==="delta"&&!A.length,F=R==="delta"?A.filter(S=>rs(S.predicate)).map(S=>[S.subject,S.object]):[],D=R==="delta"?F.length?hf(m,F,{depth:t,budget:n,focus:v}):[]:mf(m,{depth:t,budget:n,focus:v}),B=m.concat(D.map(S=>[S.subject,S.object])),W=v,C=null;if(R==="delta"&&!te){let S=p.concat(D.map(Re=>({subject:Re.subject,predicate:Fe,object:Re.object}))),ue=[];for(let Re of A)ue.push(Re.subject,Re.object);C=vc(S,ue),W=C}let I=S=>!C||C.has(S),O=C?h.filter(([S,ue])=>I(S)||I(ue)):h,M=new Set;if(C)for(let S of A)Ts(S.predicate)&&(M.add(S.subject),M.add(S.object));let q=C&&M.size?vn(B):null,U=C?h.filter(([S,ue])=>I(S)||I(ue)||q&&[...q(ue)].some(Re=>M.has(Re))):h,ie=new Set;if(C){for(let S of A)if(mo(S.predicate)||ur(S.predicate)){let ue=b.get(S.subject);ue&&ie.add(ee(ue))}}let se=C?w.filter(([S,ue,Re])=>I(S)||I(Re)||ie.has(ee(ue))):w,X=Math.max(0,n-D.length),J=X>0&&!te?gf(O,B,{budget:X,focus:W,presentTypeEdges:h}):[],oe=Math.max(0,n-D.length-J.length),H=oe>0&&!te?bf(U,B,g,{budget:oe,focus:W}):[],le=Math.max(0,n-D.length-J.length-H.length),ne=le>0&&$.length&&!te?wf(se,h,B,$,{budget:le,focus:W}):[],_e=Math.max(0,n-D.length-J.length-H.length-ne.length),Le=_e>0&&$.length>1&&!te?yf($,B,{budget:_e,focus:W}):[],Q=new Map($.map(S=>[S.restriction,S])),xe=[...D.map(S=>({subject:S.subject,predicate:Fe,object:S.object,provenance:df,justification:[[he(S.subject,Fe,S.via),he(S.via,Fe,S.object)]]})),...J.map(S=>({subject:S.subject,predicate:Rt,object:S.object,provenance:ff,justification:[[he(S.subject,Rt,S.via),he(S.via,Fe,S.object)]]})),...H.map(S=>{let ue=G(S.viaClass,fo,S.object),[Re,kn]=ue?[S.viaClass,S.object]:[S.object,S.viaClass],Ks=Y([P(S.subject,Rt,S.viaType),P(Re,fo,kn),...S.viaClass!==S.viaType?[P(S.viaType,Fe,S.viaClass)]:[]]);return{subject:S.subject,predicate:fo,object:S.object,provenance:xc,justification:[[he(S.subject,Rt,S.viaType),he(Re,fo,kn),...S.viaClass!==S.viaType?[he(S.viaType,Fe,S.viaClass)]:[]]],...Ks.length?{premiseTrusts:Ks,ruleConfidence:kc}:{}}}),...ne.map(S=>{let ue=Y([P(S.subject,S.viaProperty,S.viaValue),P(S.viaValue,Rt,S.viaType),P(S.object,wn,S.viaPropertyKey),P(S.object,yn,S.viaTarget),...S.viaType!==S.viaTarget?[P(S.viaType,Fe,S.viaTarget)]:[]]);return{subject:S.subject,predicate:Rt,object:S.object,provenance:Ec,justification:[[he(S.subject,S.viaProperty,S.viaValue),he(S.viaValue,Rt,S.viaType),he(S.object,wn,S.viaPropertyKey),he(S.object,yn,S.viaTarget),...S.viaType!==S.viaTarget?[he(S.viaType,Fe,S.viaTarget)]:[]]],...ue.length?{premiseTrusts:ue,ruleConfidence:jc}:{}}}),...Le.map(S=>{let ue=Q.get(S.subject),Re=Q.get(S.object),kn=Y([ue&&P(S.subject,wn,ue.property),P(S.subject,yn,S.viaY1),Re&&P(S.object,wn,Re.property),P(S.object,yn,S.viaY2),P(S.viaY1,Fe,S.viaY2)]);return{subject:S.subject,predicate:Fe,object:S.object,provenance:Ac,justification:[[...ue?[he(S.subject,wn,ue.property)]:[],he(S.subject,yn,S.viaY1),...Re?[he(S.object,wn,Re.property)]:[],he(S.object,yn,S.viaY2),he(S.viaY1,Fe,S.viaY2)]],...kn.length?{premiseTrusts:kn,ruleConfidence:Tc}:{}}})],ge=xe.map(S=>({id:he(S.subject,S.predicate,S.object),subject:S.subject,predicate:S.predicate,object:S.object,environments:S.justification,write:S})),ve=xf(p.concat(ge.map(S=>({id:S.id,subject:S.subject,predicate:S.predicate,object:S.object})))),V=new Map(p.map(S=>[S.id,S])),re=S=>rs(S)||Cs(S)||Ts(S),fe=S=>R!=="delta"||C!==null&&(C.has(S.subject)||C.has(S.object)),ce=p.filter(S=>re(S.predicate)&&$f(S.provenance)&&lr(S).length<r&&fe(S)).map(S=>({id:S.id,subject:S.subject,predicate:S.predicate,object:S.object,environments:lr(S),provenance:S.provenance})),bt=[...ge,...ce].sort((S,ue)=>S.subject.localeCompare(ue.subject)||S.predicate.localeCompare(ue.predicate)||S.object.localeCompare(ue.object)),zt=0,Qe=!1,un=0;for(let S of bt){if(un>=n){Qe=!0;break}un+=1;let ue=ve(S,{maxEnvironments:r+1}),{kept:Re,truncated:kn}=mx(S.environments,ue,r);if(kn&&(Qe=!0),!(Re.length<=S.environments.length)){if(zt+=Re.length-S.environments.length,S.write){S.write.justification=Re;continue}xe.push({subject:S.subject,predicate:S.predicate,object:S.object,justification:Re,...kf(S.provenance,Re,Ks=>V.get(Ks)?.trust)||{}})}}let{ids:Ht}=await u(e,xe),Bt=[],Ct=0;for(let S of D)Bt.push({id:Ht[Ct],subject:S.subject,object:S.object,via:S.via,rule:uf}),Ct+=1;for(let S of J)Bt.push({id:Ht[Ct],subject:S.subject,object:S.object,via:S.via,rule:pf}),Ct+=1;for(let S of H)Bt.push({id:Ht[Ct],subject:S.subject,object:S.object,via:S.viaClass,rule:$c}),Ct+=1;for(let S of ne)Bt.push({id:Ht[Ct],subject:S.subject,object:S.object,via:S.viaValue,rule:Sc}),Ct+=1;for(let S of Le)Bt.push({id:Ht[Ct],subject:S.subject,object:S.object,via:S.viaY1,rule:Rc}),Ct+=1;let Cr=Bt.length>=n;if(v===null&&d&&!Cr){let S=new Set(k);for(let ue of Ht)S.add(ue);await a.saveSyllogiseState(e,{version:1,factIds:[...S].sort(),completedAt:new Date().toISOString()})}return{derived:Bt,count:Bt.length,budget:n,depth:t,truncated:Cr,mode:R,deltaSize:L,environmentsAdded:zt,alternatesTruncated:Qe}}function $f(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function fx(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]):Cs(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):Ts(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)):mo(u.predicate)?o.set(u.subject,u.object):ur(u.predicate)?r.set(u.subject,u.object):_c.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([ee(u.predicate),u.object]))}let a=vn(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:ee(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(Cs(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(Ts(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 xf(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)):Cs(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):Ts(p.predicate)?(r.add(`${p.subject}${Ie}${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)):mo(p.predicate)?a.set(p.subject,p.object):ur(p.predicate)?l.set(p.subject,p.object):_c.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=vn(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:ee(m),target:h}:null};return(p,{maxEnvironments:m=hi}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every($=>t.has($)))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([he(p.subject,Fe,y),he(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([he(p.subject,wn,y.property),he(p.subject,yn,y.target),he(p.object,wn,w.property),he(p.object,yn,w.target),he(y.target,Fe,w.target)])}return h}if(Cs(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([he(p.subject,Rt,w),he(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([$])=>ee($)===y.propertyKey).sort(($,j)=>$[0].localeCompare(j[0])||$[1].localeCompare(j[1]));for(let[$,j]of w){if(h.length>=m)break;for(let v of[...o.get(j)||[]].sort()){if(h.length>=m)break;v!==y.target&&!d(v).has(y.target)||b([he(p.subject,$,j),he(j,Rt,v),he(p.object,wn,y.propertyKey),he(p.object,yn,y.target),...v!==y.target?[he(v,Fe,y.target)]:[]])}}}return h}if(Ts(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let $ of[w,...u(w)])(i.get($)||new Set).has(p.object)&&y.push([w,$]);y.sort((w,$)=>w[0].localeCompare($[0])||w[1].localeCompare($[1]));for(let[w,$]of y){if(h.length>=m)break;let j=r.has(`${$}${Ie}${p.object}`),[v,x]=j?[$,p.object]:[p.object,$];b([he(p.subject,Rt,w),he(v,fo,x),...$!==w?[he(w,Fe,$)]:[]])}return h}return h}}function mx(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 kf(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=hx.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 gx(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=hi,store:i}={}){let{loadMemory:a,readFactRows:l,removeFacts:c}=lf(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),u=typeof i?.appendFacts=="function"?i.appendFacts:null,d=ee(t),f=ee(n),p=he(d,Fe,f),m=await a(e),h=l(m),g=new Map(h.map(R=>[R.id,R]));if(!g.has(p))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let b=h.filter(R=>lr(R).length&&$f(R.provenance)),y=new Map;for(let R of b)for(let E of lr(R))for(let A of E)y.has(A)||y.set(A,new Set),y.get(A).add(R.id);let w=new Set([p]),$=[p],j=new Map,v=!1,x=0,k=[p];for(;x<o;x+=1){let R=new Set;for(let te of k)for(let F of y.get(te)||[])w.has(F)||R.add(F);let E=[...R].map(te=>g.get(te)).sort((te,F)=>te.subject.localeCompare(F.subject)||te.predicate.localeCompare(F.predicate)||te.object.localeCompare(F.object));if(!E.length)break;let A=h.filter(te=>!w.has(te.id)&&!R.has(te.id)),L=new Set(A.map(te=>te.id)),T=xf(A),P=fx(A),G=!1,Y=!1;k=[];for(let te of E){if(w.size>=s){Y=!0;break}let F=lr(te),D=F.filter(W=>W.every(C=>L.has(C)));if(D.length){D.length!==F.length&&j.set(te.id,D);continue}let B=T(te,{maxEnvironments:r});if(B.length){j.set(te.id,B);continue}P(te)||(w.add(te.id),$.push(te.id),k.push(te.id),G=!0)}if(Y){v=!0;break}if(!G)break}!v&&x>=o&&(v=b.some(R=>!w.has(R.id)&&R.justification.some(E=>w.has(E))));let{removed:_}=await c(e,$);if(u){let R=[...j.entries()].filter(([E])=>!w.has(E)).sort((E,A)=>E[0].localeCompare(A[0])).map(([E,A])=>{let L=g.get(E);return{subject:L.subject,predicate:L.predicate,object:L.object,justification:A,...kf(L.provenance,A,T=>g.get(T)?.trust)||{}}});R.length&&await u(e,R)}return{retracted:_,count:_.length,budget:s,depth:o,truncated:v,found:!0}}function Cc(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:Rt,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,uf,df,Rt,pf,ff,fo,$c,xc,kc,wn,yn,Sc,Ec,jc,hi,Ie,rs,Cs,Ts,mo,ur,tx,_c,ox,rx,Rc,Ac,Tc,ax,lx,lr,hx,Pt=N(()=>{Zt();Fe="rdfs:subClassOf",uf="subClassOf",df=`entailed:${uf}`,Rt="rdf:type",pf="type",ff=`entailed:${pf}`,fo="owl:disjointWith",$c="disjointWith",xc=`entailed:${$c}`,kc=.95,wn="owl:onProperty",yn="owl:someValuesFrom",Sc="someValuesFrom",Ec=`entailed:${Sc}`,jc=.95,hi=4,Ie="\u241F",rs=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Cs=e=>String(e||"").trim().toLowerCase()==="rdf:type",Ts=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",mo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",ur=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",tx=e=>String(e||"").trim().toLowerCase()==="owl:onclass",_c=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);ox="has",rx={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Rc="someValuesFromSubsumption",Ac=`entailed:${Rc}`,Tc=.95;ax=.95;lx=.95;lr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);hx=new Map([[xc,kc],[Ec,jc],[Ac,Tc]])});function wo(e){let t=String(e||""),n=Sf.get(t);return n||(t.startsWith(Ic)?ho+t.slice(Ic.length):t)}function Ef(e){let t=String(e||""),n=bx.get(t);return n||(t.startsWith(ho)?Ic+t.slice(ho.length):null)}function Rf(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Cc(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function wi(e,t,n,{maxHops:s=3}={}){let o=bo(e),r=bo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=_f(i),c=i.filter(b=>(b.predicate===bi||b.predicate===go)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===go?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=Rf(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:Lc(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 Lc(e,t,n,{maxHops:s=3}={}){let o=bo(e),r=bo(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===Rt),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===bi||b.predicate===go));return g?{name:h,polarity:g.predicate===go?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=_f(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:Rf(o,c,p,m,s)}}function Nc(e,t,{exclude:n=[],maxHops:s=3}={}){let o=bo(e),r=bo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==bi||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),wi(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(wx)}var ho,Ic,gi,Sf,bx,jf,bi,go,Oc,wx,bo,_f,Mc=N(()=>{Pt();ho="mgxneg:",Ic="mgx:",gi="mgxneg:subClassOf",Sf=new Map([[Fe,gi]]),bx=new Map([...Sf].map(([e,t])=>[t,e]));jf=e=>String(e||"").startsWith(ho),bi="mgx:capableOf",go=wo(bi),Oc=6,wx=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),bo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),_f=e=>({typeEdges:e.filter(t=>t.predicate===Rt).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function yo(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function xx(e,t){(!e?.class||!yx.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function kx(e,t){for(let s of["rdf:subject","rdf:predicate","rdf:object"])yi(yo(e,s))||t.push(`a Fact needs a non-empty ${s}`);for(let s of["rdf:subject","rdf:object"]){let o=yo(e,s);o!==void 0&&$x.test(o)&&t.push(`a Fact's ${s} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(o)})`)}let n=yo(e,"mgx:factProvenance");n!==void 0&&!yi(n)&&t.push("mgx:factProvenance, when present, must be non-empty")}function Sx(e,t){yi(yo(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=yo(e,"mgx:ruleKind");if(!n||!Af.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...Af].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of vx[n])yi(yo(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function Ex(e){let t=[];return xx(e,t),e?.class==="Fact"&&kx(e,t),e?.class==="Rule"&&Sx(e,t),{ok:t.length===0,violations:t}}function Pc(e){let t=Ex(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 yx,Af,vx,$x,yi,Tf=N(()=>{yx=new Set(["Utterance","Fact","Session","Source","Rule"]),Af=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),vx={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"]},$x=/[.!?]\s+\w/;yi=e=>typeof e=="string"&&e.trim().length>0});var Cf={};Sn(Cf,{access:()=>Rx,appendFile:()=>Cx,basename:()=>Hx,copyFile:()=>Fx,createInterface:()=>Qx,createReadStream:()=>zx,createRequire:()=>jx,createWriteStream:()=>Bx,default:()=>ek,dirname:()=>qx,existsSync:()=>Ux,fileURLToPath:()=>Yx,isAbsolute:()=>Vx,join:()=>Wx,mkdir:()=>Ix,mkdtemp:()=>Ox,randomBytes:()=>Xx,readFile:()=>Ax,readFileSync:()=>_x,readdir:()=>Dx,rename:()=>Lx,resolve:()=>Gx,rm:()=>Mx,sep:()=>Kx,spawnSync:()=>Jx,stat:()=>Px,tmpdir:()=>Zx,unlink:()=>Nx,writeFile:()=>Tx});var rt,jx,_x,Rx,Ax,Tx,Cx,Ix,Ox,Lx,Nx,Mx,Px,Fx,Dx,zx,Bx,Ux,Wx,qx,Gx,Vx,Hx,Kx,Yx,Xx,Jx,Qx,Zx,ek,If=N(()=>{rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},jx=rt("createRequire"),_x=rt("readFileSync"),Rx=rt("access"),Ax=rt("readFile"),Tx=rt("writeFile"),Cx=rt("appendFile"),Ix=rt("mkdir"),Ox=rt("mkdtemp"),Lx=rt("rename"),Nx=rt("unlink"),Mx=rt("rm"),Px=rt("stat"),Fx=rt("copyFile"),Dx=rt("readdir"),zx=rt("createReadStream"),Bx=rt("createWriteStream"),Ux=()=>!1,Wx=(...e)=>e.join("/"),qx=e=>String(e).replace(/\/[^/]*$/,""),Gx=(...e)=>e.join("/"),Vx=e=>String(e).startsWith("/"),Hx=e=>String(e).split("/").pop(),Kx="/",Yx=e=>String(e),Xx=rt("randomBytes"),Jx=rt("spawnSync"),Qx=rt("createInterface"),Zx=()=>"/tmp",ek={}});var tk,dr,Fc=N(()=>{tk=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,dr=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(tk);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 nk(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function sk(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 pe,Os=L(()=>{pe=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=rk(n.toml,n.ptr),r=ik(n.toml,s,o);super(`Invalid TOML document: ${t}
87
+ `))}return o}var pe,Is=N(()=>{pe=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=nk(n.toml,n.ptr),r=sk(n.toml,s,o);super(`Invalid TOML document: ${t}
88
88
 
89
- ${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function $i(e,t){let n=e[t++],s=n,o=n==="'",r=n===e[t]&&n===e[t+1];r&&(e[t+=2]===`
89
+ ${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function vi(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 pe("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 pe("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 pe("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 pe("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new pe("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new pe("unfinished string",{toml:e,ptr:t})}function Lf(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=ak.test(e);if(o||ck.test(e)){if(lk.test(e))throw new pe("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new pe("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new pe("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new pr(e);if(!r.isValid())throw new pe("invalid value",{toml:t,ptr:n});return r}var ak,ck,lk,zc=L(()=>{Dc();Os();ak=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,ck=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,lk=/^[+-]?0[0-9_]/});function xi(e,t=0,n=e.length){let s=e.indexOf(`
95
- `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function $o(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
94
+ `;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new pe("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new pe("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new pe("unfinished string",{toml:e,ptr:t})}function Of(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=ok.test(e);if(o||rk.test(e)){if(ik.test(e))throw new pe("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new pe("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new pe("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new dr(e);if(!r.isValid())throw new pe("invalid value",{toml:t,ptr:n});return r}var ok,rk,ik,Dc=N(()=>{Fc();Is();ok=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,rk=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,ik=/^[+-]?0[0-9_]/});function $i(e,t=0,n=e.length){let s=e.indexOf(`
95
+ `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function vo(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
96
96
  `)return n;if(s==="\r"&&e[n+1]===`
97
- `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new pe("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function xn(e,t,n,s){let o;for(;;){for(;(o=e[t])===" "||o===" "||!n&&(o===`
97
+ `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new pe("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function $n(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=$o(e,t)}return t}function Nf(e,t,n,s,o=!1){if(!s)return t=xi(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=xi(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
99
+ `);)t++;if(s||o!=="#")break;t=vo(e,t)}return t}function Lf(e,t,n,s,o=!1){if(!s)return t=$i(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=$i(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 pe("cannot find end of structure",{toml:e,ptr:t})}var ki=L(()=>{Os();});function uk(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&($o(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function fr(e,t,n,s,o){if(s===0)throw new pe("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?Pf(e,t,s,o):Mf(e,t,s,o);if(n){if(c=xn(e,c),e[c]===",")c++;else if(e[c]!==n)throw new pe("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=$i(e,t);if(n){if(c=xn(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
- `&&e[c]!=="\r")throw new pe("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=Nf(e,t,",",n),a=uk(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new pe("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=xn(e,t+a[1]),e[i]===","&&i++),[Lf(a[0],e,t,o),i]}var Bc=L(()=>{zc();Uc();ki();Os();});function Si(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new pe("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 pe("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=$i(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=xi(c);if(u>-1)throw new pe("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new pe("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new pe("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(!dk.test(a))throw new pe("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,xn(e,r+1,!0,!0)]}function Mf(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new pe("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=$o(e,t);else if(i!==" "&&i!==" "&&i!==`
103
- `&&i!=="\r"){let a,l=o,c=!1,[u,d]=Si(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 pe("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 pe("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=fr(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new pe("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function Pf(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new pe("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=$o(e,t);else if(r!==" "&&r!==" "&&r!==`
104
- `&&r!=="\r"){let i=fr(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new pe("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var dk,Uc=L(()=>{zc();Bc();ki();Os();dk=/^[a-zA-Z0-9-_]+[ \t]*$/});function Ff(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 xo(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=xn(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=Si(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new pe("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=Ff(c[0],s,o,l?2:1);if(!u)throw new pe("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=Si(e,a),c=Ff(l[0],r,i,0);if(!c)throw new pe("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=fr(e,l[1],void 0,t,n);c[1][c[0]]=u[0],a=u[1]}if(a=xn(e,a,!0),e[a]&&e[a]!==`
105
- `&&e[a]!=="\r")throw new pe("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=xn(e,a)}return s}var Df=L(()=>{Uc();Bc();ki();Os();});var zf=L(()=>{});var Ei=L(()=>{Df();zf();Dc();Os();});var Wf={};En(Wf,{CONFIG_FILE:()=>_i,loadTomlConfig:()=>Wc,mergeEffective:()=>Uf,normalizeConfig:()=>Bf});async function Wc(e,{file:t}={}){let n=t||Z(e,_i),s;try{s=await ze(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return xo(s)}catch(o){throw new Error(`Invalid ${_i} at ${n}: ${o&&o.message?o.message:o}`)}}async function pk(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 Bf(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await pk(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($=>qt(s,String($)))}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,$]of fk)n[w]&&n[w][$]!==void 0&&y.push(`${w}.${$}`);return o.unwired=y,o}function ji(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:ji(o,r,n)}return n}function Uf({args:e={},toml:t=null,defaults:n={}}={}){let s=ji(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?ji(o):{},i=ji(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 _i,fk,Ri=L(()=>{vt();De();Ei();_i="tmct.toml";fk=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var ls={};En(ls,{CANONICALISED_FROM_PROP:()=>el,CAPABLE_OF_PREDICATE:()=>im,CREATED_AT_PROP:()=>Nt,DEFAULT_RETENTION:()=>Hc,FACT_CLASS:()=>as,HAS_A_PREDICATE:()=>Fs,IN_REPLY_TO_PROP:()=>Zc,MEMORY_DIR_REL:()=>gr,MEMORY_GRAPH_REL:()=>Yc,MEMORY_MANIFEST_REL:()=>Qf,MEMORY_SESSION_CLASS:()=>Jc,MULTI_VALUED_PREDICATES:()=>am,OPERATOR_SOURCE_ID:()=>Ai,RULE_CLASS:()=>So,RULE_KIND_ACTION_CONSTRAINT:()=>al,RULE_KIND_ACTION_EFFECT:()=>kr,RULE_KIND_ACTION_PRECOND:()=>Ni,RULE_KIND_ACTION_SIGNATURE:()=>il,RULE_KIND_COMPOSE2:()=>$r,RULE_KIND_FILTER:()=>xr,RULE_KIND_PROP:()=>jo,RULE_KIND_RECURSIVE:()=>rl,SAID_IN_SESSION_PROP:()=>Qc,SOURCE_CLASS:()=>ko,SOURCE_RELIABILITY_PROP:()=>Vf,STATED_BY_PROP:()=>Un,SYLLOGISE_STATE_REL:()=>ol,UPDATED_AT_PROP:()=>xs,UTTERANCE_CLASS:()=>Xc,appendCanonicalisedFromEdges:()=>Hk,appendFact:()=>Kk,appendFacts:()=>vr,appendRule:()=>cl,appendUtterance:()=>Vk,appendUtterances:()=>sm,closeSqliteMemoryStore:()=>Yf,createInMemoryStore:()=>Ii,createSqliteMemoryStore:()=>Kf,emptyMemory:()=>br,factIdForTriple:()=>he,findContradictions:()=>cm,findRuleByName:()=>ll,findRulesByName:()=>Zk,isMemoryOrSqliteHandle:()=>nl,loadMemory:()=>nn,loadSyllogiseState:()=>Ok,normFactPredicate:()=>Dn,normFactTerm:()=>ee,openConfiguredMemoryBackend:()=>cs,openMemoryBackend:()=>Xf,provSourceClassFor:()=>Fk,provenanceTagToSource:()=>qo,readFactRows:()=>Dt,readRuleRows:()=>ul,removeFacts:()=>eS,resolveMemoryGraphFile:()=>mr,resolveRelationChase:()=>dl,resolveRelationChaseReverse:()=>rm,saveSyllogiseState:()=>Lk,snapshotMemory:()=>Tk});function br(){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:gk.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function mr(e,t=null){if(Eo(e)||Ls(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Z(e,Yc):Z(e,gr,`graph.v${t}.json`)}function Eo(e){return!!e&&typeof e=="object"&&e.backend===tl}function Ls(e){return!!e&&typeof e=="object"&&e.backend===Hf}function nl(e){return Eo(e)||Ls(e)}function Ii(){return{backend:tl,payload:br()}}function yk(){if(Gf)return;Gf=!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 Kf(e){yk();let{DatabaseSync:t}=await Promise.resolve().then(()=>(Of(),If)),n=new t(e);return n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(bk),{backend:Hf,db:n,dbPath:e}}function Yf(e){Ls(e)&&e.db.close()}async function Xf(e,t){if(t===tl)return{dir:Ii(),close:async()=>{}};let n=Z(e,".tmct","memory","graph.sqlite"),s=r=>gu(r).then(()=>!0,()=>!1);!await s(n)&&await s(Z(e,Yc))&&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($e(n),{recursive:!0});let o=await Kf(n);return{dir:o,close:async()=>Yf(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(()=>(Ri(),Wf));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Xf(e,n)}function vk(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=$k(e),e.cachedDataVersion=t),Bn(e.cachedPayload)}function $k(e){let t=e.db,n=br(),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 xk(e,t){let n=Bn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function kk(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function Sk(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 Ek(e,t,n){let s=`${t.subject}\0${t.object}`;e.examples=e.examples.filter(r=>`${r.subject}\0${r.object}`!==s);let o={subject:t.subject,object:t.object,subjectLabel:t.subjectLabel??null,objectLabel:t.objectLabel??null};n.length&&Object.assign(o,Bn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function jk(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function _k(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function Rk(e,t){let n=e.db,s=br(),o=e.cachedPayload||null;n.exec("BEGIN IMMEDIATE");try{let r=n.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)");r.run("generated_at",JSON.stringify(t.generated_at??s.generated_at)),r.run("memory",JSON.stringify(t.memory??s.memory)),r.run("prefixes",JSON.stringify(t.prefixes??s.prefixes)),r.run("vocabulary",JSON.stringify(t.vocabulary??s.vocabulary)),r.run("classes",JSON.stringify(t.classes??s.classes)),r.run("proseIndex",JSON.stringify(t.proseIndex??s.proseIndex)),o&&(o.generated_at=Bn(t.generated_at??s.generated_at),o.memory=Bn(t.memory??s.memory),o.prefixes=Bn(t.prefixes??s.prefixes),o.vocabulary=Bn(t.vocabulary??s.vocabulary),o.classes=Bn(t.classes??s.classes),o.proseIndex=Bn(t.proseIndex??s.proseIndex));let i=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=new Set;for(let $ of t.individuals||[]){u.add($.id);let j=JSON.stringify($),v=i.get($.id);if(v&&v.json===j)continue;let x=v?v.ord:l++;c.run($.id,x,$.class??null,$.label??null,j),o&&xk(o,$)}let d=n.prepare("DELETE FROM individuals WHERE id = ?");for(let $ of n.prepare("SELECT id FROM individuals").all())u.has($.id)||d.run($.id);o&&kk(o,u);let f=n.prepare("SELECT ord FROM relations WHERE prop = ?"),m=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,h=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),g=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),b=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),y=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),w=new Set;for(let $ of t.objectProperties||[]){w.add($.prop);let j=g.all($.prop),v=new Map(j.map(E=>[`${E.subject}\0${E.object}`,E])),x=new Set,k=o?Sk(o,$.prop):null;for(let E of $.examples||[]){let A=`${E.subject}\0${E.object}`;x.add(A);let N=Object.keys(E).filter(Y=>!wk.has(Y)),T=N.length?JSON.stringify(Object.fromEntries(N.map(Y=>[Y,E[Y]]))):null,P=v.get(A);P&&(P.subject_label??null)===(E.subjectLabel??null)&&(P.object_label??null)===(E.objectLabel??null)&&(P.extra??null)===(T??null)||(b.run($.prop,E.subject,E.object,E.subjectLabel??null,E.objectLabel??null,T),k&&Ek(k,E,N))}for(let E of v.keys()){if(x.has(E))continue;let[A,N]=E.split("\0");y.run($.prop,A,N)}k&&jk(k,x);let _=Number.isFinite($.count)?$.count:($.examples||[]).length,R=f.get($.prop)?.ord??m++;h.run($.prop,R,$.predicate??null,_),k&&(k.predicate=$.predicate??null,k.count=_)}for(let $ of n.prepare("SELECT prop FROM relations").all())w.has($.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run($.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run($.prop));o&&_k(o,w),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,r}}async function Jf(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await Mo(n,t),await Nr(n,e)}async function sl(e,t){await Jf(e,JSON.stringify(t))}async function Tk(e,{retentionVersions:t}={}){if(nl(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=mr(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=Ak(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Hc}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Hc);let i=r.version,a=mr(e,i);await jn($e(a),{recursive:!0}),await Jf(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await ca(mr(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await sl(o,r),{skipped:!1,version:i,prunedVersion:l}}async function nn(e){if(Eo(e))return qc(e.payload);if(Ls(e))return qc(vk(e));let t;try{t=await ze(Vc(e),"utf8")}catch(n){if(n?.code==="ENOENT")return br();throw n}return qc(JSON.parse(t))}function qc(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==as||!Ck.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=lr(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}async function Ik(e,t){if(Eo(e)){e.payload=t;return}if(Ls(e)){Rk(e,t);return}await jn($e(Vc(e)),{recursive:!0}),await sl(Vc(e),t)}async function Ok(e){if(Eo(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Ls(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Zf);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(Z(e,ol),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function Lk(e,t){if(Eo(e)){e.syllogiseState=structuredClone(t);return}if(Ls(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Zf,JSON.stringify(t));return}let n=Z(e,ol);await jn($e(n),{recursive:!0}),await sl(n,t)}function Nk(e){let t=new Map,n=new Map,s=new Map;for(let r of e.individuals||[])r?.id&&(t.set(r.id,r),r.class===ko&&n.set(r.id,r));let o=(e.objectProperties||[]).find(r=>r?.prop===Un);for(let r of o?.examples||[]){if(!r?.subject)continue;let i=s.get(r.subject);i?i.push(r.object):s.set(r.subject,[r.object])}return e[Kc]={individualsById:t,sourcesById:n,statedByBySubject:s},e[Kc]}async function Ms(e,t){let n=await nn(e);Nk(n);let s=await t(n)??n;return Uk(s),qk(s),s.proseIndex=Nu(s.individuals),await Ik(e,s),s}function wr(e,t){return e?.attributes?.find(n=>n?.prop===Nt)?.value||t||Ti()}function hr(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Mk(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Ai}:${e.sessionId}`:Ai,type:"operator"};case"teach":return{id:e.sessionId?`${Gc}:${e.sessionId}`:Gc,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:${cr(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 Fk(e){return Pk[e]||null}function Dk(e,t,n){let s=Mk(t);if(!s)return null;let o=Ns(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=wr(r,t?.createdAt||n),a={id:s.id,label:em(s.id),class:ko,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Nt,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=yr(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function zk(e){let t=Ns(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===ko&&(n[s.id]=s);return n}function Bk(e,t){let n=Ns(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===Un)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function tm(e,t,n=Date.now(),s={}){let o=Bk(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Nt)?.value||"",{score:i,inputs:a}=Bu({sourceIds:o,createdAt:r},zk(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});hr(t,Dr,"trustScore",String(i)),hr(t,wa,"trustInputs",JSON.stringify(a)),hr(t,xs,"updatedAt",new Date(n).toISOString())}function Li(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Nt)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=qo(i);if(!a)continue;let l=Dk(e,a,r);l&&Ci(e,{predicate:"statedBy",prop:Un},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:em(l)})}tm(e,t,n,s)}function Uk(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===Un),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==as||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(Li(e,r,o),s=!0);s&&Ps(e)}function qk(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=Dt(e),n=new Set;for(let a of cm(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(!Wk(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=Ns(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(hr(c,Vf,"sourceReliability",String(Uu(l))),hr(c,xs,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===Un),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&&tm(e,l)}}function yr(e,t){let n=Ns(e);if(n){let o=n.individualsById.get(t.id);return o?(Object.assign(o,t),o):(e.individuals.push(t),n.individualsById.set(t.id,t),t)}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=t,t):(e.individuals.push(t),t)}function Ci(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===Un?Ns(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||Ti()}),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||Ti();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 Ps(e){let t=[Jc,Xc,as,ko,So];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 Gk(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:Jc,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Nt,key:"createdAt",value:n||Ti()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function nm(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!hk.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=Fn(n),d=`utt:${o}#${c}#${t}`,f=Oi(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=Fr({doc:u}),m=e.individuals.find(y=>y?.id===d),h=wr(m,l||c),g={id:d,label:f,class:Xc,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:Nt,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(" ")}]:[]]};yr(e,g);let b=Gk(e,o,r);if(Ci(e,{predicate:"saidInSession",prop:Qc},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&Ci(e,{predicate:"inReplyTo",prop:Zc},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function Vk(e,t){let n;return await Ms(e,s=>{n=nm(s,t),Ps(s)}),{id:n}}async function sm(e,t){let n=[];return t?.length?(await Ms(e,s=>{for(let o of t)n.push(nm(s,o));Ps(s)}),{ids:n}):{ids:n}}async function Hk(e,t){t?.length&&await Ms(e,n=>{for(let s of t)Ci(n,{predicate:"canonicalisedFrom",prop:el},{subject:s.factId,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}async function Kk(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",quantifier:i="",premiseTrusts:a,ruleConfidence:l}={}){let c=ee(t),u=Dn(n),d=ee(s);if(!c||!u||!d)throw new Error("a fact needs subject, predicate and object");let f=lr(c,u,d),p=`${c} ${u} ${d}`,m=Fr({doc:p}),h=Fn(i);return await Ms(e,async g=>{let b=g.individuals.find(k=>k?.id===f),y=b?.attributes?.find(k=>k?.prop==="mgx:factProvenance")?.value||"",w=[...new Set([...y.split(" | "),Fn(o)].filter(Boolean))],$=wr(b,r),j=b?.attributes?.find(k=>k?.prop==="mgx:factQuantifier")?.value||"",v=h||j,x={id:f,label:Oi(p),class:as,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:c},{prop:"rdf:predicate",key:"predicate",value:u},{prop:"rdf:object",key:"object",value:d},{prop:Nt,key:"createdAt",value:$},...w.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.join(" | ")}]:[],...m.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:m.join(" ")}]:[],...v?[{prop:"mgx:factQuantifier",key:"quantifier",value:v}]:[]]};await Fc(x),yr(g,x),Li(g,g.individuals.find(k=>k?.id===f),void 0,{premiseTrusts:a,ruleConfidence:l}),Ps(g)}),{id:f}}function Yk(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 vr(e,t){let n=[],s=0;for(let r of t||[]){let i=ee(r?.subject),a=Dn(r?.predicate),l=ee(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:lr(i,a,l),s:i,p:a,o:l,text:c,tokens:Fr({doc:c}),provenance:Fn(r?.provenance),createdAt:r?.createdAt||"",quantifier:Fn(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:Yk(r?.justification)})}let o=[];return n.length?(await Ms(e,r=>{let i=Ns(r),a=i?i.individualsById:new Map(r.individuals.map(d=>[d?.id,d])),l=[],c=new Set,u=new Map;for(let d of n){let f=a.get(d.id),p=f?.attributes?.find($=>$?.prop==="mgx:factProvenance")?.value||"",m=[...new Set([...p.split(" | "),d.provenance].filter(Boolean))],h=wr(f,d.createdAt),g=f?.attributes?.find($=>$?.prop==="mgx:factQuantifier")?.value||"",b=d.quantifier||g,y={id:d.id,label:Oi(d.text),class:as,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:d.s},{prop:"rdf:predicate",key:"predicate",value:d.p},{prop:"rdf:object",key:"object",value:d.o},{prop:Nt,key:"createdAt",value:h},...m.length?[{prop:"mgx:factProvenance",key:"provenance",value:m.join(" | ")}]:[],...d.tokens.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:d.tokens.join(" ")}]:[],...b?[{prop:"mgx:factQuantifier",key:"quantifier",value:b}]:[],...d.environments?[{prop:"mgx:factJustification",key:"justification",value:d.environments.map($=>$.join(" ")).join(" | ")}]:[]]},w=yr(r,y);a.set(d.id,w),o.push(d.id),c.has(d.id)||(c.add(d.id),l.push(d.id)),(d.premiseTrusts!==void 0||d.ruleConfidence!==void 0)&&u.set(d.id,{premiseTrusts:d.premiseTrusts,ruleConfidence:d.ruleConfidence})}for(let d of l)Li(r,a.get(d),void 0,u.get(d));Ps(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function cl(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=om[n];if(!i)throw new Error(`a rule kind must be one of ${Xk.join(", ")}, got ${JSON.stringify(n)}`);let a=ee(t);if(!a)throw new Error("a rule needs a name");let l=Jk[n]||new Set,c=i.map(([p])=>ee(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===kr){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=Qk(n,a,c),f=Oi(`${a} = ${n}(${c.join(", ")})`);return await Ms(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(" | "),Fn(o)].filter(Boolean))],b=wr(m,r),y={id:d,label:f,class:So,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Mi,key:"ruleName",value:a},{prop:jo,key:"ruleKind",value:n},...i.map(([w,$],j)=>({prop:$,key:w,value:c[j],skip:!c[j]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...$})=>$),{prop:Nt,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await Fc(y),yr(p,y),Li(p,p.individuals.find(w=>w?.id===d)),Ps(p)}),{id:d}}function ll(e,t){let n=ee(t);return(e?.individuals||[]).find(s=>s?.class===So&&(s.attributes||[]).find(o=>o?.prop===Mi)?.value===n)}function Zk(e,t){let n=ee(t),s=o=>(o.attributes||[]).find(r=>r?.prop===jo)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===So&&(o.attributes||[]).find(r=>r?.prop===Mi)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function ul(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==So)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(jo),r=om[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Mi)||"",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 dl(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(ee,n),h=l(ee,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(g.length){let w=g.slice().sort(($,j)=>c($.fact,j.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map($=>`${a($)}${$.provenance?` (source: ${$.provenance})`:""}`)]}}let b=ll(e,p),y=b?.attributes?.find(w=>w.prop===jo)?.value;if(b&&y===$r){let w=b.attributes.find(N=>N.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(N=>N.prop==="mgx:ruleBase2")?.value,j=ee(n),v=ee(s);if(!w||!$||!j||!v)return null;let R=f({entity:j,hopsTaken:0},N=>N.hopsTaken===2&&N.entity===v,N=>{if(N.hopsTaken>=2)return[];let T=N.hopsTaken===0?w:$;return r(T).filter(P=>P.fact.subject===N.entity).map(P=>({action:P,nextState:{entity:P.fact.object,hopsTaken:N.hopsTaken+1}}))},{maxDepth:2,stateKey:N=>`${N.entity}#${N.hopsTaken}`});if(!R)return null;let E=new Set,A=[];for(let N of R.actions){A.push(i(N.fact));for(let T of N.aliasFacts){let P=T.id||`${T.subject}|${T.predicate}|${T.object}`;E.has(P)||(E.add(P),A.push(`${a(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{citation:A}}if(b&&y===xr){let w=b.attributes.find(_=>_.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(_=>_.prop==="mgx:ruleFilterProperty")?.value;if(!w||!$)return null;let j=await dl(e,w,n,s,o);if(!j)return null;let v=ee(n),x=ee($),k=u.find(_=>_.predicate===d&&_.subject===v&&ee(_.object)===x);return k?{citation:[...j.citation,i(k)]}:null}return null}async function rm(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(ee,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 $=w.slice().sort((j,v)=>l(j.fact,v.fact))[0];return{subject:y,citation:[r($.fact),...$.aliasFacts.map(j=>`${i(j)}${j.provenance?` (source: ${j.provenance})`:""}`)]}})}let h=ll(e,f),g=h?.attributes?.find(b=>b.prop===jo)?.value;if(h&&g===$r){let b=h.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=ee(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},x=>{if(x.hopsTaken>=2)return[];let k=x.hopsTaken===0?y:b;return o(k).filter(_=>_.fact.object===x.entity).map(_=>({action:_,nextState:{entity:_.fact.subject,hopsTaken:x.hopsTaken+1}}))},{maxDepth:2,stateKey:x=>`${x.entity}#${x.hopsTaken}`}).filter(x=>x.node.hopsTaken===2).map(({node:x,path:k})=>{let _=new Set,R=[];for(let E of k.actions.slice().reverse()){R.push(r(E.fact));for(let A of E.aliasFacts){let N=A.id||`${A.subject}|${A.predicate}|${A.object}`;_.has(N)||(_.add(N),R.push(`${i(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{subject:x.entity,citation:R}})}if(h&&g===xr){let b=h.attributes.find(v=>v.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(v=>v.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await rm(e,b,n,s),$=ee(y),j=[];for(let v of w){let x=ee(v.subject),k=c.find(_=>_.predicate===u&&_.subject===x&&ee(_.object)===$);k&&j.push({subject:v.subject,citation:[...v.citation,r(k)]})}return j}return[]}function Dt(e){let t=e?.individuals||[],n=new Map(t.filter(i=>i?.class===ko).map(i=>[i.id,i])),s=(e?.objectProperties||[]).find(i=>i?.prop===Un),o=new Map;for(let i of s?.examples||[])o.has(i.subject)||o.set(i.subject,[]),o.get(i.subject).push(i.object);let r=[];for(let i of t){if(i?.class!==as)continue;let a=m=>(i.attributes||[]).find(h=>h?.key===m)?.value||"",l=o.get(i.id)||[],c=l.map(m=>(n.get(m)?.attributes||[]).find(h=>h?.prop==="mgx:sourceType")?.value).filter(Boolean),u=a("justification"),d=[];if(u)for(let m of u.split(" | ")){let h=m.split(" ").filter(Boolean);h.length&&d.push(h)}let f=[],p=new Set;for(let m of d)for(let h of m)p.has(h)||(p.add(h),f.push(h));r.push({id:i.id,subject:a("subject"),predicate:a("predicate"),object:a("object"),provenance:a("provenance"),quantifier:a("quantifier"),sourceIds:l,sourceTypes:c,trust:Number((i.attributes||[]).find(m=>m?.prop===Dr)?.value)||0,environments:d,justification:f})}return r}async function eS(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Ms(e,o=>{if(o.individuals=(o.individuals||[]).filter(i=>i?.class===as&&n.has(i.id)?(s.push(i.id),!1):!0),!s.length)return;let r=new Set(s);for(let i of o.objectProperties||[]){let a=i.examples||[];i.examples=a.filter(l=>!r.has(l?.subject)&&!r.has(l?.object)),i.count=i.examples.length}Ps(o)}),{removed:s}):{removed:s}}function cm(e,{floor:t=tS}={}){let n=Dt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(am.has(r.predicate))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())new Set(r.map(i=>i.object)).size>1&&o.push(r.slice().sort((i,a)=>a.trust-i.trust||i.object.localeCompare(a.object)));return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var gr,Yc,Xc,as,Jc,ko,So,Qc,Zc,mk,Un,el,Vf,Ai,Gc,hk,qf,gk,Vc,tl,Hf,bk,wk,Gf,Bn,Qf,Hc,Ak,Ck,ol,Zf,Kc,Ns,Oi,Ti,em,Pk,Wk,$r,xr,rl,il,Ni,kr,al,Xk,Mi,jo,om,Jk,Qk,tS,Fs,im,am,Ve=L(()=>{vt();De();Yn();en();en();ks();ks();Pc();Cf();gr=Z(".tmct","memory"),Yc=Z(gr,"graph.json"),Xc="Utterance",as="Fact",Jc="Session",ko="Source",So="Rule",Qc="mgx:saidInSession",Zc="mgx:inReplyTo",mk="mgx:derivedFrom",Un="mgx:statedBy",el="mgx:canonicalisedFrom",Vf="mgx:sourceReliability",Ai="src:operator-chat",Gc="src:teach-chat",hk=new Set(["visitor","tmct"]),qf=48,gk=[{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:Qc,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Zc,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: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:Nt,note:"when an individual was FIRST written, ISO-8601 (first-write-wins on upsert); the audit 'when', the recency input to trust, the novelty signal"},{prop:xs,note:"an audit / last-modified stamp: when an individual's OWN attributes were last mutated in place (upsertSession, recomputeFactTrust, recomputeSourceReliability) \u2014 most individuals never carry it at all. NOT transaction time: a mutable stamp cannot record when the previous version stopped being current, so tmct is not bitemporal"},{prop:mk,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:Un,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:el,predicate:"canonicalisedFrom",note:"subPropertyOf derivedFrom: a canonical Fact cleaned from a raw Block/Source, never replacing it"},{prop:"mgx:sourceType",note:"a Source's kind: operator | teach | provider | corpus | corpusWeak | reference | referenceLive | extracted | optimisticExtract | web | entailed (the trust-prior key)"},{prop:"mgx:sourceUrl",note:"a web Source's URL"},{prop:"mgx:sourceRule",note:"an entailed Source's rule id"},{prop:"mgx:sourceReliability",note:"actor-level (session-scoped) trust nudge in [0.5,1.5], neutral 1.0 when absent \u2014 materialised by recomputeSourceReliability from a session's asserted-vs-contradicted track record (memory/trust.mjs's sessionReliabilityFrom); folds into computeTrust's per-source prior"},{prop:Dr,note:"materialised trust cache in [0,1] \u2014 pure function of a fact's Sources + createdAt (memory/trust.mjs); invalidated when a statedBy edge is added"},{prop:wa,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:go,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)"}];Vc=e=>mr(e),tl="memory",Hf="sqlite";bk=`
101
+ `))return r}}throw new pe("cannot find end of structure",{toml:e,ptr:t})}var xi=N(()=>{Is();});function ak(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(vo(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function pr(e,t,n,s,o){if(s===0)throw new pe("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?Mf(e,t,s,o):Nf(e,t,s,o);if(n){if(c=$n(e,c),e[c]===",")c++;else if(e[c]!==n)throw new pe("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=vi(e,t);if(n){if(c=$n(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
+ `&&e[c]!=="\r")throw new pe("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=Lf(e,t,",",n),a=ak(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new pe("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=$n(e,t+a[1]),e[i]===","&&i++),[Of(a[0],e,t,o),i]}var zc=N(()=>{Dc();Bc();xi();Is();});function ki(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new pe("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 pe("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=vi(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=$i(c);if(u>-1)throw new pe("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new pe("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new pe("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(!ck.test(a))throw new pe("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,$n(e,r+1,!0,!0)]}function Nf(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new pe("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=vo(e,t);else if(i!==" "&&i!==" "&&i!==`
103
+ `&&i!=="\r"){let a,l=o,c=!1,[u,d]=ki(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 pe("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 pe("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=pr(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new pe("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function Mf(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new pe("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=vo(e,t);else if(r!==" "&&r!==" "&&r!==`
104
+ `&&r!=="\r"){let i=pr(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new pe("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var ck,Bc=N(()=>{Dc();zc();xi();Is();ck=/^[a-zA-Z0-9-_]+[ \t]*$/});function Pf(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 $o(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=$n(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=ki(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new pe("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=Pf(c[0],s,o,l?2:1);if(!u)throw new pe("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=ki(e,a),c=Pf(l[0],r,i,0);if(!c)throw new pe("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=pr(e,l[1],void 0,t,n);c[1][c[0]]=u[0],a=u[1]}if(a=$n(e,a,!0),e[a]&&e[a]!==`
105
+ `&&e[a]!=="\r")throw new pe("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=$n(e,a)}return s}var Ff=N(()=>{Bc();zc();xi();Is();});var Df=N(()=>{});var Si=N(()=>{Ff();Df();Fc();Is();});var Uf={};Sn(Uf,{CONFIG_FILE:()=>ji,loadTomlConfig:()=>Uc,mergeEffective:()=>Bf,normalizeConfig:()=>zf});async function Uc(e,{file:t}={}){let n=t||Z(e,ji),s;try{s=await ze(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return $o(s)}catch(o){throw new Error(`Invalid ${ji} at ${n}: ${o&&o.message?o.message:o}`)}}async function lk(e,t){let n;if(Array.isArray(e))n=e;else{let o=Wt(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(Wt(t,r))}return s}async function zf(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await lk(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Wt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Wt(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($=>Wt(s,String($)))}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,$]of uk)n[w]&&n[w][$]!==void 0&&y.push(`${w}.${$}`);return o.unwired=y,o}function Ei(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:Ei(o,r,n)}return n}function Bf({args:e={},toml:t=null,defaults:n={}}={}){let s=Ei(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Ei(o):{},i=Ei(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 ji,uk,_i=N(()=>{yt();De();Si();ji="tmct.toml";uk=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var cs={};Sn(cs,{CANONICALISED_FROM_PROP:()=>Zc,CAPABLE_OF_PREDICATE:()=>rm,CREATED_AT_PROP:()=>Lt,DEFAULT_RETENTION:()=>Vc,FACT_CLASS:()=>is,HAS_A_PREDICATE:()=>Ps,IN_REPLY_TO_PROP:()=>Qc,MEMORY_DIR_REL:()=>hr,MEMORY_GRAPH_REL:()=>Kc,MEMORY_MANIFEST_REL:()=>Jf,MEMORY_SESSION_CLASS:()=>Xc,MULTI_VALUED_PREDICATES:()=>im,OPERATOR_SOURCE_ID:()=>Ri,RULE_CLASS:()=>ko,RULE_KIND_ACTION_CONSTRAINT:()=>il,RULE_KIND_ACTION_EFFECT:()=>xr,RULE_KIND_ACTION_PRECOND:()=>Li,RULE_KIND_ACTION_SIGNATURE:()=>rl,RULE_KIND_COMPOSE2:()=>vr,RULE_KIND_FILTER:()=>$r,RULE_KIND_PROP:()=>Eo,RULE_KIND_RECURSIVE:()=>ol,SAID_IN_SESSION_PROP:()=>Jc,SOURCE_CLASS:()=>xo,SOURCE_RELIABILITY_PROP:()=>Gf,STATED_BY_PROP:()=>Bn,SYLLOGISE_STATE_REL:()=>sl,UPDATED_AT_PROP:()=>$s,UTTERANCE_CLASS:()=>Yc,appendCanonicalisedFromEdges:()=>qk,appendFact:()=>Gk,appendFacts:()=>yr,appendRule:()=>al,appendUtterance:()=>Wk,appendUtterances:()=>nm,closeSqliteMemoryStore:()=>Kf,createInMemoryStore:()=>Ci,createSqliteMemoryStore:()=>Hf,emptyMemory:()=>gr,factIdForTriple:()=>he,findContradictions:()=>am,findRuleByName:()=>cl,findRulesByName:()=>Xk,isMemoryOrSqliteHandle:()=>tl,loadMemory:()=>tn,loadSyllogiseState:()=>Tk,normFactPredicate:()=>Fn,normFactTerm:()=>ee,openConfiguredMemoryBackend:()=>as,openMemoryBackend:()=>Yf,provSourceClassFor:()=>Nk,provenanceTagToSource:()=>Wo,readFactRows:()=>Ft,readRuleRows:()=>ll,removeFacts:()=>Jk,resolveMemoryGraphFile:()=>fr,resolveRelationChase:()=>ul,resolveRelationChaseReverse:()=>om,saveSyllogiseState:()=>Ck,snapshotMemory:()=>_k});function gr(){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:fk.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function fr(e,t=null){if(So(e)||Os(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Z(e,Kc):Z(e,hr,`graph.v${t}.json`)}function So(e){return!!e&&typeof e=="object"&&e.backend===el}function Os(e){return!!e&&typeof e=="object"&&e.backend===Vf}function tl(e){return So(e)||Os(e)}function Ci(){return{backend:el,payload:gr()}}function gk(){if(qf)return;qf=!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 Hf(e){gk();let{DatabaseSync:t}=await Promise.resolve().then(()=>(If(),Cf)),n=new t(e);return n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(mk),{backend:Vf,db:n,dbPath:e}}function Kf(e){Os(e)&&e.db.close()}async function Yf(e,t){if(t===el)return{dir:Ci(),close:async()=>{}};let n=Z(e,".tmct","memory","graph.sqlite"),s=r=>hu(r).then(()=>!0,()=>!1);!await s(n)&&await s(Z(e,Kc))&&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 En($e(n),{recursive:!0});let o=await Hf(n);return{dir:o,close:async()=>Kf(o)}}async function as(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(_i(),Uf));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Yf(e,n)}function bk(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=wk(e),e.cachedDataVersion=t),zn(e.cachedPayload)}function wk(e){let t=e.db,n=gr(),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 yk(e,t){let n=zn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function vk(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function $k(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 xk(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,zn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function kk(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function Sk(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function Ek(e,t){let n=e.db,s=gr(),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=zn(t.generated_at??s.generated_at),o.memory=zn(t.memory??s.memory),o.prefixes=zn(t.prefixes??s.prefixes),o.vocabulary=zn(t.vocabulary??s.vocabulary),o.classes=zn(t.classes??s.classes),o.proseIndex=zn(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=new Set;for(let $ of t.individuals||[]){u.add($.id);let j=JSON.stringify($),v=i.get($.id);if(v&&v.json===j)continue;let x=v?v.ord:l++;c.run($.id,x,$.class??null,$.label??null,j),o&&yk(o,$)}let d=n.prepare("DELETE FROM individuals WHERE id = ?");for(let $ of n.prepare("SELECT id FROM individuals").all())u.has($.id)||d.run($.id);o&&vk(o,u);let f=n.prepare("SELECT ord FROM relations WHERE prop = ?"),m=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,h=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),g=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),b=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),y=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),w=new Set;for(let $ of t.objectProperties||[]){w.add($.prop);let j=g.all($.prop),v=new Map(j.map(E=>[`${E.subject}\0${E.object}`,E])),x=new Set,k=o?$k(o,$.prop):null;for(let E of $.examples||[]){let A=`${E.subject}\0${E.object}`;x.add(A);let L=Object.keys(E).filter(Y=>!hk.has(Y)),T=L.length?JSON.stringify(Object.fromEntries(L.map(Y=>[Y,E[Y]]))):null,P=v.get(A);P&&(P.subject_label??null)===(E.subjectLabel??null)&&(P.object_label??null)===(E.objectLabel??null)&&(P.extra??null)===(T??null)||(b.run($.prop,E.subject,E.object,E.subjectLabel??null,E.objectLabel??null,T),k&&xk(k,E,L))}for(let E of v.keys()){if(x.has(E))continue;let[A,L]=E.split("\0");y.run($.prop,A,L)}k&&kk(k,x);let _=Number.isFinite($.count)?$.count:($.examples||[]).length,R=f.get($.prop)?.ord??m++;h.run($.prop,R,$.predicate??null,_),k&&(k.predicate=$.predicate??null,k.count=_)}for(let $ of n.prepare("SELECT prop FROM relations").all())w.has($.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run($.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run($.prop));o&&Sk(o,w),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,r}}async function Xf(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await No(n,t),await Lr(n,e)}async function nl(e,t){await Xf(e,JSON.stringify(t))}async function _k(e,{retentionVersions:t}={}){if(tl(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=fr(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=jk(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Vc}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Vc);let i=r.version,a=fr(e,i);await En($e(a),{recursive:!0}),await Xf(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await aa(fr(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await nl(o,r),{skipped:!1,version:i,prunedVersion:l}}async function tn(e){if(So(e))return Wc(e.payload);if(Os(e))return Wc(bk(e));let t;try{t=await ze(Gc(e),"utf8")}catch(n){if(n?.code==="ENOENT")return gr();throw n}return Wc(JSON.parse(t))}function Wc(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==is||!Rk.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=cr(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}async function Ak(e,t){if(So(e)){e.payload=t;return}if(Os(e)){Ek(e,t);return}await En($e(Gc(e)),{recursive:!0}),await nl(Gc(e),t)}async function Tk(e){if(So(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Os(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Qf);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(Z(e,sl),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function Ck(e,t){if(So(e)){e.syllogiseState=structuredClone(t);return}if(Os(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Qf,JSON.stringify(t));return}let n=Z(e,sl);await En($e(n),{recursive:!0}),await nl(n,t)}function Ik(e){let t=new Map,n=new Map,s=new Map;for(let r of e.individuals||[])r?.id&&(t.set(r.id,r),r.class===xo&&n.set(r.id,r));let o=(e.objectProperties||[]).find(r=>r?.prop===Bn);for(let r of o?.examples||[]){if(!r?.subject)continue;let i=s.get(r.subject);i?i.push(r.object):s.set(r.subject,[r.object])}return e[Hc]={individualsById:t,sourcesById:n,statedByBySubject:s},e[Hc]}async function Ns(e,t){let n=await tn(e);Ik(n);let s=await t(n)??n;return Dk(s),Bk(s),s.proseIndex=Lu(s.individuals),await Ak(e,s),s}function br(e,t){return e?.attributes?.find(n=>n?.prop===Lt)?.value||t||Ai()}function mr(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Ok(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Ri}:${e.sessionId}`:Ri,type:"operator"};case"teach":return{id:e.sessionId?`${qc}:${e.sessionId}`:qc,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:${ar(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 Nk(e){return Lk[e]||null}function Mk(e,t,n){let s=Ok(t);if(!s)return null;let o=Ls(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=br(r,t?.createdAt||n),a={id:s.id,label:Zf(s.id),class:xo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Lt,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=wr(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function Pk(e){let t=Ls(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===xo&&(n[s.id]=s);return n}function Fk(e,t){let n=Ls(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===Bn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function em(e,t,n=Date.now(),s={}){let o=Fk(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Lt)?.value||"",{score:i,inputs:a}=zu({sourceIds:o,createdAt:r},Pk(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});mr(t,Fr,"trustScore",String(i)),mr(t,ba,"trustInputs",JSON.stringify(a)),mr(t,$s,"updatedAt",new Date(n).toISOString())}function Oi(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Lt)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Wo(i);if(!a)continue;let l=Mk(e,a,r);l&&Ti(e,{predicate:"statedBy",prop:Bn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:Zf(l)})}em(e,t,n,s)}function Dk(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===Bn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==is||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(Oi(e,r,o),s=!0);s&&Ms(e)}function Bk(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=Ft(e),n=new Set;for(let a of am(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(!zk(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=Ls(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(mr(c,Gf,"sourceReliability",String(Bu(l))),mr(c,$s,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===Bn),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&&em(e,l)}}function wr(e,t){let n=Ls(e);if(n){let o=n.individualsById.get(t.id);return o?(Object.assign(o,t),o):(e.individuals.push(t),n.individualsById.set(t.id,t),t)}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=t,t):(e.individuals.push(t),t)}function Ti(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===Bn?Ls(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||Ai()}),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||Ai();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 Ms(e){let t=[Xc,Yc,is,xo,ko];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 Uk(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:Xc,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Lt,key:"createdAt",value:n||Ai()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function tm(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!pk.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=Pn(n),d=`utt:${o}#${c}#${t}`,f=Ii(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=Pr({doc:u}),m=e.individuals.find(y=>y?.id===d),h=br(m,l||c),g={id:d,label:f,class:Yc,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:Lt,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(" ")}]:[]]};wr(e,g);let b=Uk(e,o,r);if(Ti(e,{predicate:"saidInSession",prop:Jc},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&Ti(e,{predicate:"inReplyTo",prop:Qc},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function Wk(e,t){let n;return await Ns(e,s=>{n=tm(s,t),Ms(s)}),{id:n}}async function nm(e,t){let n=[];return t?.length?(await Ns(e,s=>{for(let o of t)n.push(tm(s,o));Ms(s)}),{ids:n}):{ids:n}}async function qk(e,t){t?.length&&await Ns(e,n=>{for(let s of t)Ti(n,{predicate:"canonicalisedFrom",prop:Zc},{subject:s.factId,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}async function Gk(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",quantifier:i="",premiseTrusts:a,ruleConfidence:l}={}){let c=ee(t),u=Fn(n),d=ee(s);if(!c||!u||!d)throw new Error("a fact needs subject, predicate and object");let f=cr(c,u,d),p=`${c} ${u} ${d}`,m=Pr({doc:p}),h=Pn(i);return await Ns(e,async g=>{let b=g.individuals.find(k=>k?.id===f),y=b?.attributes?.find(k=>k?.prop==="mgx:factProvenance")?.value||"",w=[...new Set([...y.split(" | "),Pn(o)].filter(Boolean))],$=br(b,r),j=b?.attributes?.find(k=>k?.prop==="mgx:factQuantifier")?.value||"",v=h||j,x={id:f,label:Ii(p),class:is,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:c},{prop:"rdf:predicate",key:"predicate",value:u},{prop:"rdf:object",key:"object",value:d},{prop:Lt,key:"createdAt",value:$},...w.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.join(" | ")}]:[],...m.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:m.join(" ")}]:[],...v?[{prop:"mgx:factQuantifier",key:"quantifier",value:v}]:[]]};await Pc(x),wr(g,x),Oi(g,g.individuals.find(k=>k?.id===f),void 0,{premiseTrusts:a,ruleConfidence:l}),Ms(g)}),{id:f}}function Vk(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 yr(e,t){let n=[],s=0;for(let r of t||[]){let i=ee(r?.subject),a=Fn(r?.predicate),l=ee(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:cr(i,a,l),s:i,p:a,o:l,text:c,tokens:Pr({doc:c}),provenance:Pn(r?.provenance),createdAt:r?.createdAt||"",quantifier:Pn(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:Vk(r?.justification)})}let o=[];return n.length?(await Ns(e,r=>{let i=Ls(r),a=i?i.individualsById:new Map(r.individuals.map(d=>[d?.id,d])),l=[],c=new Set,u=new Map;for(let d of n){let f=a.get(d.id),p=f?.attributes?.find($=>$?.prop==="mgx:factProvenance")?.value||"",m=[...new Set([...p.split(" | "),d.provenance].filter(Boolean))],h=br(f,d.createdAt),g=f?.attributes?.find($=>$?.prop==="mgx:factQuantifier")?.value||"",b=d.quantifier||g,y={id:d.id,label:Ii(d.text),class:is,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:d.s},{prop:"rdf:predicate",key:"predicate",value:d.p},{prop:"rdf:object",key:"object",value:d.o},{prop:Lt,key:"createdAt",value:h},...m.length?[{prop:"mgx:factProvenance",key:"provenance",value:m.join(" | ")}]:[],...d.tokens.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:d.tokens.join(" ")}]:[],...b?[{prop:"mgx:factQuantifier",key:"quantifier",value:b}]:[],...d.environments?[{prop:"mgx:factJustification",key:"justification",value:d.environments.map($=>$.join(" ")).join(" | ")}]:[]]},w=wr(r,y);a.set(d.id,w),o.push(d.id),c.has(d.id)||(c.add(d.id),l.push(d.id)),(d.premiseTrusts!==void 0||d.ruleConfidence!==void 0)&&u.set(d.id,{premiseTrusts:d.premiseTrusts,ruleConfidence:d.ruleConfidence})}for(let d of l)Oi(r,a.get(d),void 0,u.get(d));Ms(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function al(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=sm[n];if(!i)throw new Error(`a rule kind must be one of ${Hk.join(", ")}, got ${JSON.stringify(n)}`);let a=ee(t);if(!a)throw new Error("a rule needs a name");let l=Kk[n]||new Set,c=i.map(([p])=>ee(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===xr){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=Yk(n,a,c),f=Ii(`${a} = ${n}(${c.join(", ")})`);return await Ns(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(" | "),Pn(o)].filter(Boolean))],b=br(m,r),y={id:d,label:f,class:ko,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Ni,key:"ruleName",value:a},{prop:Eo,key:"ruleKind",value:n},...i.map(([w,$],j)=>({prop:$,key:w,value:c[j],skip:!c[j]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...$})=>$),{prop:Lt,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await Pc(y),wr(p,y),Oi(p,p.individuals.find(w=>w?.id===d)),Ms(p)}),{id:d}}function cl(e,t){let n=ee(t);return(e?.individuals||[]).find(s=>s?.class===ko&&(s.attributes||[]).find(o=>o?.prop===Ni)?.value===n)}function Xk(e,t){let n=ee(t),s=o=>(o.attributes||[]).find(r=>r?.prop===Eo)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===ko&&(o.attributes||[]).find(r=>r?.prop===Ni)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function ll(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==ko)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(Eo),r=sm[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Ni)||"",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 ul(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(ee,n),h=l(ee,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(g.length){let w=g.slice().sort(($,j)=>c($.fact,j.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map($=>`${a($)}${$.provenance?` (source: ${$.provenance})`:""}`)]}}let b=cl(e,p),y=b?.attributes?.find(w=>w.prop===Eo)?.value;if(b&&y===vr){let w=b.attributes.find(L=>L.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(L=>L.prop==="mgx:ruleBase2")?.value,j=ee(n),v=ee(s);if(!w||!$||!j||!v)return null;let R=f({entity:j,hopsTaken:0},L=>L.hopsTaken===2&&L.entity===v,L=>{if(L.hopsTaken>=2)return[];let T=L.hopsTaken===0?w:$;return r(T).filter(P=>P.fact.subject===L.entity).map(P=>({action:P,nextState:{entity:P.fact.object,hopsTaken:L.hopsTaken+1}}))},{maxDepth:2,stateKey:L=>`${L.entity}#${L.hopsTaken}`});if(!R)return null;let E=new Set,A=[];for(let L of R.actions){A.push(i(L.fact));for(let T of L.aliasFacts){let P=T.id||`${T.subject}|${T.predicate}|${T.object}`;E.has(P)||(E.add(P),A.push(`${a(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{citation:A}}if(b&&y===$r){let w=b.attributes.find(_=>_.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(_=>_.prop==="mgx:ruleFilterProperty")?.value;if(!w||!$)return null;let j=await ul(e,w,n,s,o);if(!j)return null;let v=ee(n),x=ee($),k=u.find(_=>_.predicate===d&&_.subject===v&&ee(_.object)===x);return k?{citation:[...j.citation,i(k)]}:null}return null}async function om(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(ee,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 $=w.slice().sort((j,v)=>l(j.fact,v.fact))[0];return{subject:y,citation:[r($.fact),...$.aliasFacts.map(j=>`${i(j)}${j.provenance?` (source: ${j.provenance})`:""}`)]}})}let h=cl(e,f),g=h?.attributes?.find(b=>b.prop===Eo)?.value;if(h&&g===vr){let b=h.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=ee(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},x=>{if(x.hopsTaken>=2)return[];let k=x.hopsTaken===0?y:b;return o(k).filter(_=>_.fact.object===x.entity).map(_=>({action:_,nextState:{entity:_.fact.subject,hopsTaken:x.hopsTaken+1}}))},{maxDepth:2,stateKey:x=>`${x.entity}#${x.hopsTaken}`}).filter(x=>x.node.hopsTaken===2).map(({node:x,path:k})=>{let _=new Set,R=[];for(let E of k.actions.slice().reverse()){R.push(r(E.fact));for(let A of E.aliasFacts){let L=A.id||`${A.subject}|${A.predicate}|${A.object}`;_.has(L)||(_.add(L),R.push(`${i(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{subject:x.entity,citation:R}})}if(h&&g===$r){let b=h.attributes.find(v=>v.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(v=>v.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await om(e,b,n,s),$=ee(y),j=[];for(let v of w){let x=ee(v.subject),k=c.find(_=>_.predicate===u&&_.subject===x&&ee(_.object)===$);k&&j.push({subject:v.subject,citation:[...v.citation,r(k)]})}return j}return[]}function Ft(e){let t=e?.individuals||[],n=new Map(t.filter(i=>i?.class===xo).map(i=>[i.id,i])),s=(e?.objectProperties||[]).find(i=>i?.prop===Bn),o=new Map;for(let i of s?.examples||[])o.has(i.subject)||o.set(i.subject,[]),o.get(i.subject).push(i.object);let r=[];for(let i of t){if(i?.class!==is)continue;let a=m=>(i.attributes||[]).find(h=>h?.key===m)?.value||"",l=o.get(i.id)||[],c=l.map(m=>(n.get(m)?.attributes||[]).find(h=>h?.prop==="mgx:sourceType")?.value).filter(Boolean),u=a("justification"),d=[];if(u)for(let m of u.split(" | ")){let h=m.split(" ").filter(Boolean);h.length&&d.push(h)}let f=[],p=new Set;for(let m of d)for(let h of m)p.has(h)||(p.add(h),f.push(h));r.push({id:i.id,subject:a("subject"),predicate:a("predicate"),object:a("object"),provenance:a("provenance"),quantifier:a("quantifier"),sourceIds:l,sourceTypes:c,trust:Number((i.attributes||[]).find(m=>m?.prop===Fr)?.value)||0,environments:d,justification:f})}return r}async function Jk(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Ns(e,o=>{if(o.individuals=(o.individuals||[]).filter(i=>i?.class===is&&n.has(i.id)?(s.push(i.id),!1):!0),!s.length)return;let r=new Set(s);for(let i of o.objectProperties||[]){let a=i.examples||[];i.examples=a.filter(l=>!r.has(l?.subject)&&!r.has(l?.object)),i.count=i.examples.length}Ms(o)}),{removed:s}):{removed:s}}function am(e,{floor:t=Qk}={}){let n=Ft(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(im.has(r.predicate))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())new Set(r.map(i=>i.object)).size>1&&o.push(r.slice().sort((i,a)=>a.trust-i.trust||i.object.localeCompare(a.object)));return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var hr,Kc,Yc,is,Xc,xo,ko,Jc,Qc,dk,Bn,Zc,Gf,Ri,qc,pk,Wf,fk,Gc,el,Vf,mk,hk,qf,zn,Jf,Vc,jk,Rk,sl,Qf,Hc,Ls,Ii,Ai,Zf,Lk,zk,vr,$r,ol,rl,Li,xr,il,Hk,Ni,Eo,sm,Kk,Yk,Qk,Ps,rm,im,Ve=N(()=>{yt();De();Kn();Zt();Zt();xs();xs();Mc();Tf();hr=Z(".tmct","memory"),Kc=Z(hr,"graph.json"),Yc="Utterance",is="Fact",Xc="Session",xo="Source",ko="Rule",Jc="mgx:saidInSession",Qc="mgx:inReplyTo",dk="mgx:derivedFrom",Bn="mgx:statedBy",Zc="mgx:canonicalisedFrom",Gf="mgx:sourceReliability",Ri="src:operator-chat",qc="src:teach-chat",pk=new Set(["visitor","tmct"]),Wf=48,fk=[{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:Jc,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:Qc,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: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:Lt,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:$s,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:dk,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:Bn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Zc,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:Fr,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:ba,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:ho,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)"}];Gc=e=>fr(e),el="memory",Vf="sqlite";mk=`
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);
111
111
  CREATE TABLE IF NOT EXISTS edges (prop TEXT NOT NULL, subject TEXT NOT NULL, object TEXT NOT NULL, subject_label TEXT, object_label TEXT, extra TEXT, PRIMARY KEY (prop, subject, object));
112
112
  CREATE INDEX IF NOT EXISTS edges_by_prop ON edges(prop);
113
- `,wk=new Set(["subject","object","subjectLabel","objectLabel"]),Gf=!1;Bn=e=>e===void 0?e:structuredClone(e);Qf=Z(gr,"manifest.json"),Hc=5,Ak=e=>Z(e,Qf);Ck=/^fact:[0-9a-f]{8}$/;ol=Z(gr,"syllogise-state.json"),Zf="syllogiseState";Kc=Symbol("mutateMemory lookup index");Ns=e=>e?.[Kc]||null;Oi=e=>e.length>qf?e.slice(0,qf-1)+"\u2026":e,Ti=()=>new Date().toISOString();em=e=>String(e).replace(/^src:/,""),Pk=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"}});Wk=e=>typeof e=="string"&&(e.startsWith(`${Ai}:`)||e.startsWith(`${Gc}:`));$r="compose2",xr="filter",rl="recursive",il="action-signature",Ni="action-precond",kr="action-effect",al="action-constraint",Xk=Object.freeze([$r,xr,rl,il,Ni,kr,al]),Mi="mgx:ruleName",jo="mgx:ruleKind",om={[$r]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[xr]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[rl]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[il]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Ni]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[kr]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[al]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},Jk={[Ni]:new Set(["value","negate"]),[kr]:new Set(["objectRole","value"])},Qk=(e,t,n)=>`rule:${cr([e,t,...n].join("\0"))}`;tS=.5,Fs="mgx:hasA",im="mgx:capableOf",am=new Set([Fs,im].flatMap(e=>[e,yo(e)]))});async function kn(e){try{let{dir:t,close:n}=await cs($e($e(e.graphFile)));try{return Dt(await nn(t))}finally{await n()}}catch{return[]}}function um(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 Pi(e,t){let n=ee(t),s=e.filter(a=>lm.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,Ds),i=o.length>Ds?`
114
- \u2026+${o.length-Ds} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
113
+ `,hk=new Set(["subject","object","subjectLabel","objectLabel"]),qf=!1;zn=e=>e===void 0?e:structuredClone(e);Jf=Z(hr,"manifest.json"),Vc=5,jk=e=>Z(e,Jf);Rk=/^fact:[0-9a-f]{8}$/;sl=Z(hr,"syllogise-state.json"),Qf="syllogiseState";Hc=Symbol("mutateMemory lookup index");Ls=e=>e?.[Hc]||null;Ii=e=>e.length>Wf?e.slice(0,Wf-1)+"\u2026":e,Ai=()=>new Date().toISOString();Zf=e=>String(e).replace(/^src:/,""),Lk=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"}});zk=e=>typeof e=="string"&&(e.startsWith(`${Ri}:`)||e.startsWith(`${qc}:`));vr="compose2",$r="filter",ol="recursive",rl="action-signature",Li="action-precond",xr="action-effect",il="action-constraint",Hk=Object.freeze([vr,$r,ol,rl,Li,xr,il]),Ni="mgx:ruleName",Eo="mgx:ruleKind",sm={[vr]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[$r]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[ol]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[rl]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Li]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[xr]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[il]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},Kk={[Li]:new Set(["value","negate"]),[xr]:new Set(["objectRole","value"])},Yk=(e,t,n)=>`rule:${ar([e,t,...n].join("\0"))}`;Qk=.5,Ps="mgx:hasA",rm="mgx:capableOf",im=new Set([Ps,rm].flatMap(e=>[e,wo(e)]))});async function xn(e){try{let{dir:t,close:n}=await as($e($e(e.graphFile)));try{return Ft(await tn(t))}finally{await n()}}catch{return[]}}function lm(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 Mi(e,t){let n=ee(t),s=e.filter(a=>cm.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,Fs),i=o.length>Fs?`
114
+ \u2026+${o.length-Fs} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
115
115
  ${r.join(`
116
116
  `)}${i}
117
- (${um(s)})`}function Fi(e,t){let n=ee(t),s=e.filter(a=>lm.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,Ds).join(", ")}`),r.length){let a=r.length>Ds?`, +${r.length-Ds} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,Ds).join(", ")}${a}`)}return i.push(`(${um(s)})`),i.join(`
118
- `)}var lm,Ds,_o=L(()=>{De();Ve();lm=new Set(["rdfs:subClassOf","rdf:type"]),Ds=40});async function dm(e,{graph:t,svc:n,config:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=Vt(n.graph,o);if(r)return Aa(t,r,{candidates:i});let a=Fi(await kn(s),o);if(a)return a;yt(n,o,"symbol")}var pm=L(()=>{Ce();_o();Ke()});async function fm(e,{graph:t,svc:n,repoRoot:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=yt(n,o,"symbol"),a=$t(r);if(!a)throw new Oe(`"${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 Pn({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:ar})}catch(g){throw g instanceof Oe?g:new Oe(`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?`
119
- \u2026 (truncated to ${ar} lines; full span ${d})`:"",m=i.length?`
120
- (other matches: ${i.map(g=>g.label).join(", ")})`:"",h=Ia(t,r);return`${f}
117
+ (${lm(s)})`}function Pi(e,t){let n=ee(t),s=e.filter(a=>cm.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,Fs).join(", ")}`),r.length){let a=r.length>Fs?`, +${r.length-Fs} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,Fs).join(", ")}${a}`)}return i.push(`(${lm(s)})`),i.join(`
118
+ `)}var cm,Fs,jo=N(()=>{De();Ve();cm=new Set(["rdfs:subClassOf","rdf:type"]),Fs=40});async function um(e,{graph:t,svc:n,config:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=Gt(n.graph,o);if(r)return Ra(t,r,{candidates:i});let a=Pi(await xn(s),o);if(a)return a;wt(n,o,"symbol")}var dm=N(()=>{Ce();jo();Ke()});async function pm(e,{graph:t,svc:n,repoRoot:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=wt(n,o,"symbol"),a=vt(r);if(!a)throw new Oe(`"${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 Mn({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:ir})}catch(g){throw g instanceof Oe?g:new Oe(`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?`
119
+ \u2026 (truncated to ${ir} lines; full span ${d})`:"",m=i.length?`
120
+ (other matches: ${i.map(g=>g.label).join(", ")})`:"",h=Ca(t,r);return`${f}
121
121
  ${c}${p}${h?`
122
- ${h}`:""}${m}`}var mm=L(()=>{vt();Lt();ui();Ce();Ke()});var hm,gm=L(()=>{Ce();Ke();hm=Je(gd)});function bm(e,{graph:t,svc:n}){let{match:s}=yt(n,ot(e,"module"),"module");return rd(t,s)}var wm=L(()=>{Ce();Ke()});async function ym(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Oe("query is required");let r=md(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=Fi(await kn(n),s);if(i)return i}return r}var vm=L(()=>{Lt();Ce();_o()});async function $m(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=Vt(n.graph,o);if(r)return hd(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Pi(await kn(s),o);if(i)return i;yt(n,o,"class")}var xm=L(()=>{Ce();_o();Ke()});async function km(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=Vt(n.graph,o);if(r)return bd(t,r);let i=Pi(await kn(s),o);if(i)return i;yt(n,o,"class")}var Sm=L(()=>{Ce();_o();Ke()});function oS(e,{conceptBase:t="concept:",relationMap:n=sS}={}){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=ee(g.subject),w=ee(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 $=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has($)||(p.add($),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=ee(g);return r.has(b)?u(a(b)):null},namespace:nS}}function pl(e,t,n={}){let s=oS(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=ee(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 nS,sS,fl=L(()=>{en();nS="http://www.w3.org/2004/02/skos/core#",sS={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function ml(e,{config:t}){let n=ot(e,"term"),s=pl(await kn(t),n);if(!s)throw new Oe(`no synonym or related facts for "${n}" in the memory graph. This view answers where the store holds mgx:synonym / mgx:relatedTo facts (a corpus import seeds them).`);let o=[`${s.prefLabel} [${s.conceptId}]`];return s.synonyms.length&&o.push(`synonyms (skos:altLabel): ${s.synonyms.join(", ")}`),s.related.length&&o.push(`related (skos:related): ${s.related.map(r=>r.prefLabel).join(", ")}`),o.push("(from the memory graph's mgx:synonym / mgx:relatedTo / mgx:similarTo facts)"),o.join(`
123
- `)}var Em=L(()=>{Lt();fl();_o();Ke();ml.ownsGraphLoad=!0});function jm(e,{graph:t}){return wd(t,{pkg:String(e?.package||"").trim()})}var _m=L(()=>{Ce()});function Rm(e,{graph:t,svc:n}){let{match:s}=yt(n,ot(e,"module"),"module");return Dd(t,s)}var Am=L(()=>{Ce();Ke()});function Tm(e,{graph:t}){return $d(t)}var Cm=L(()=>{Ce()});function Im(e,{graph:t}){let{content:n,tmct_ask:s}=ss(t,ot(e,"query"));return`${n}
122
+ ${h}`:""}${m}`}var fm=N(()=>{yt();Ot();li();Ce();Ke()});var mm,hm=N(()=>{Ce();Ke();mm=Je(hd)});function gm(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"module"),"module");return od(t,s)}var bm=N(()=>{Ce();Ke()});async function wm(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Oe("query is required");let r=fd(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=Pi(await xn(n),s);if(i)return i}return r}var ym=N(()=>{Ot();Ce();jo()});async function vm(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=Gt(n.graph,o);if(r)return md(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=Mi(await xn(s),o);if(i)return i;wt(n,o,"class")}var $m=N(()=>{Ce();jo();Ke()});async function xm(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=Gt(n.graph,o);if(r)return gd(t,r);let i=Mi(await xn(s),o);if(i)return i;wt(n,o,"class")}var km=N(()=>{Ce();jo();Ke()});function tS(e,{conceptBase:t="concept:",relationMap:n=eS}={}){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=ee(g.subject),w=ee(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 $=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has($)||(p.add($),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=ee(g);return r.has(b)?u(a(b)):null},namespace:Zk}}function dl(e,t,n={}){let s=tS(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=ee(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 Zk,eS,pl=N(()=>{Zt();Zk="http://www.w3.org/2004/02/skos/core#",eS={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function fl(e,{config:t}){let n=ot(e,"term"),s=dl(await xn(t),n);if(!s)throw new Oe(`no synonym or related facts for "${n}" in the memory graph. This view answers where the store holds mgx:synonym / mgx:relatedTo facts (a corpus import seeds them).`);let o=[`${s.prefLabel} [${s.conceptId}]`];return s.synonyms.length&&o.push(`synonyms (skos:altLabel): ${s.synonyms.join(", ")}`),s.related.length&&o.push(`related (skos:related): ${s.related.map(r=>r.prefLabel).join(", ")}`),o.push("(from the memory graph's mgx:synonym / mgx:relatedTo / mgx:similarTo facts)"),o.join(`
123
+ `)}var Sm=N(()=>{Ot();pl();jo();Ke();fl.ownsGraphLoad=!0});function Em(e,{graph:t}){return bd(t,{pkg:String(e?.package||"").trim()})}var jm=N(()=>{Ce()});function _m(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"module"),"module");return Fd(t,s)}var Rm=N(()=>{Ce();Ke()});function Am(e,{graph:t}){return vd(t)}var Tm=N(()=>{Ce()});function Cm(e,{graph:t}){let{content:n,tmct_ask:s}=ns(t,ot(e,"query"));return`${n}
124
124
 
125
125
  ---tmct_ask---
126
- ${JSON.stringify(s,null,2)}`}var Om=L(()=>{Lt();os();Ke()});var Lm,Nm=L(()=>{Ce();Ke();Lm=Je(vd)});var Mm,Pm=L(()=>{Ce();Ke();Mm=Je(xd)});var Fm,Dm=L(()=>{Ce();Ke();Fm=Je(Ad)});var zm,Bm=L(()=>{Ce();Ke();zm=Je(Cd)});var Um,Wm=L(()=>{Ce();Ke();Um=Je(Id)});var qm,Gm=L(()=>{Ce();Ke();qm=Je(Sd)});var Vm,Hm=L(()=>{Ce();Ke();Vm=Je(Ed)});var Km,Ym=L(()=>{Ce();Ke();Km=Je(_d)});var Xm,Jm=L(()=>{Ce();Ke();Xm=Je(Fd)});function rS(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function iS(e){let t=(e||[]).map(rS);return t.map(n=>JSON.stringify(n)).join(`
126
+ ${JSON.stringify(s,null,2)}`}var Im=N(()=>{Ot();ss();Ke()});var Om,Lm=N(()=>{Ce();Ke();Om=Je(yd)});var Nm,Mm=N(()=>{Ce();Ke();Nm=Je($d)});var Pm,Fm=N(()=>{Ce();Ke();Pm=Je(Rd)});var Dm,zm=N(()=>{Ce();Ke();Dm=Je(Td)});var Bm,Um=N(()=>{Ce();Ke();Bm=Je(Cd)});var Wm,qm=N(()=>{Ce();Ke();Wm=Je(kd)});var Gm,Vm=N(()=>{Ce();Ke();Gm=Je(Sd)});var Hm,Km=N(()=>{Ce();Ke();Hm=Je(jd)});var Ym,Xm=N(()=>{Ce();Ke();Ym=Je(Pd)});function nS(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function sS(e){let t=(e||[]).map(nS);return t.map(n=>JSON.stringify(n)).join(`
127
127
  `)+(t.length?`
128
- `:"")}function Qm(e){return iS(Dt(e))}var Zm=L(()=>{Ve()});async function hl(e,{config:t,memoryBackend:n=null}){let s=n?null:await cs($e($e(t.graphFile))),o=n||s.dir;try{return Qm(await nn(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var eh=L(()=>{Zm();De();Ve();hl.ownsGraphLoad=!0});async function gl(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($e($e(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0}),l=a.extracted.length+a.optimistic.length,c=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${l} fact(s) grounded.`;return l?`${c}
128
+ `:"")}function Jm(e){return sS(Ft(e))}var Qm=N(()=>{Ve()});async function ml(e,{config:t,memoryBackend:n=null}){let s=n?null:await as($e($e(t.graphFile))),o=n||s.dir;try{return Jm(await tn(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var Zm=N(()=>{Qm();De();Ve();ml.ownsGraphLoad=!0});async function hl(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 as($e($e(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0}),l=a.extracted.length+a.optimistic.length,c=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${l} fact(s) grounded.`;return l?`${c}
129
129
  ${a.canonical.join(`
130
- `)}`:c}finally{await i()}}var th=L(()=>{De();Ve();gl.ownsGraphLoad=!0});var aS,nh=L(()=>{vc();lf();pm();mm();gm();wm();vm();xm();Sm();Em();_m();Am();Cm();Om();Nm();Pm();Dm();Bm();Wm();Gm();Hm();Ym();Jm();eh();th();aS=Object.freeze({tmct_context:yc,tmct_context_more:cf,tmct_describe:dm,tmct_snippet:fm,tmct_signature:hm,tmct_impact:bm,tmct_search:ym,tmct_members:$m,tmct_subclasses:km,tmct_related:ml,tmct_architecture:jm,tmct_exports:Rm,tmct_untested:Tm,tmct_ask:Im,tmct_tests_for:Lm,tmct_history:Mm,tmct_file_history:Fm,tmct_method_history:zm,tmct_class_history:Um,tmct_callers:qm,tmct_callees:Vm,tmct_calls:Km,tmct_cochanges:Xm,tmct_export:hl,tmct_ingest:gl})});var bl=L(()=>{});var Di,wl=L(()=>{Di=()=>({relations:[],constructions:[]})});var sh,oh=L(()=>{vt();De();Tu();Lt();Wo();os();fi();mi();nh();io();ei();bl();wl();mi();vc();ti(void 0);Zr(Di);sh=Au.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var QI,ZI,eO,zi=L(()=>{QI=Object.freeze(["entity","set","event","measure"]),ZI=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),eO=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 it,nO,sO,oO,rO,iO,aO,cO,lO,uO,dO,pO,fO,mO,hO,gO,bO,cS,wO,yO,rh=L(()=>{it=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},nO=it("createRequire"),sO=it("readFileSync"),oO=it("access"),rO=it("readFile"),iO=it("writeFile"),aO=it("appendFile"),cO=it("mkdir"),lO=it("mkdtemp"),uO=it("rename"),dO=it("unlink"),pO=it("rm"),fO=it("stat"),mO=it("copyFile"),hO=it("readdir"),gO=it("createReadStream"),bO=it("createWriteStream"),cS=it("randomBytes"),wO=it("spawnSync"),yO=it("createInterface")});var Bi=L(()=>{rh()});var at,kO,SO,EO,jO,_O,RO,AO,TO,CO,IO,OO,LO,NO,MO,PO,FO,zt,DO,zO,BO,us=L(()=>{at=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},kO=at("createRequire"),SO=at("readFileSync"),EO=at("access"),jO=at("readFile"),_O=at("writeFile"),RO=at("appendFile"),AO=at("mkdir"),TO=at("mkdtemp"),CO=at("rename"),IO=at("unlink"),OO=at("rm"),LO=at("stat"),NO=at("copyFile"),MO=at("readdir"),PO=at("createReadStream"),FO=at("createWriteStream"),zt=e=>String(e),DO=at("randomBytes"),zO=at("spawnSync"),BO=at("createInterface")});var lS,ih,VO,HO,KO,vl=L(()=>{vt();us();De();lS={},ih=Z($e(zt(lS.url)),"..","..",".."),VO=Z(ih,"data","templates","responses.jsonl"),HO=Z(ih,"data","phrasebook","software-phrases.txt"),KO=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function dS(e,t={}){let n=uS.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function pS(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>dS(s,t))):1}function Ye(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:pS(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 uS,ah=L(()=>{uS=/^src:corpus:(.+)$/});var ct,JO,Ro,QO,ZO,eL,tL,nL,sL,oL,rL,iL,aL,cL,lL,fS,mS,uL,dL,pL,zs=L(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},JO=ct("createRequire"),Ro=ct("readFileSync"),QO=ct("access"),ZO=ct("readFile"),eL=ct("writeFile"),tL=ct("appendFile"),nL=ct("mkdir"),sL=ct("mkdtemp"),oL=ct("rename"),rL=ct("unlink"),iL=ct("rm"),aL=ct("stat"),cL=ct("copyFile"),lL=ct("readdir"),fS=ct("createReadStream"),mS=ct("createWriteStream"),uL=ct("randomBytes"),dL=ct("spawnSync"),pL=ct("createInterface")});function ch(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 wS(e=gS){let t=xo(Ro(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function $l(){if(Ui===null)try{Ui=wS()}catch{Ui=[]}return Ui}var yS,hS,gS,bS,vL,Ui,xl=L(()=>{zs();us();De();Ei();vl();yS={},hS=$e(zt(yS.url)),gS=Z(hS,"..","..","data","templates","grammar-rules.toml"),bS=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),vL=Object.freeze(new Set(bS.filter(e=>e!=="prose")));Ui=null});var lt,lh,xL,kL,SL,EL,jL,_L,RL,AL,TL,CL,IL,OL,LL,NL,ML,PL,FL,DL,uh=L(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},lh=lt("createRequire"),xL=lt("readFileSync"),kL=lt("access"),SL=lt("readFile"),EL=lt("writeFile"),jL=lt("appendFile"),_L=lt("mkdir"),RL=lt("mkdtemp"),AL=lt("rename"),TL=lt("unlink"),CL=lt("rm"),IL=lt("stat"),OL=lt("copyFile"),LL=lt("readdir"),NL=lt("createReadStream"),ML=lt("createWriteStream"),PL=lt("randomBytes"),FL=lt("spawnSync"),DL=lt("createInterface")});function vS(){if(Sr!==void 0)return Sr;try{let e=dh?dh():$S();Sr=e&&e.winkNLP&&e.model?e:null}catch{Sr=null}return Sr}function $S(){let e=lh(xS.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function kl(){if(Ao!==void 0)return Ao;let e=vS();if(!e)return Ao=null,null;try{Ao=e.winkNLP(e.model)}catch{Ao=null}return Ao}var xS,dh,Sr,Ao,Sl=L(()=>{uh();xS={}});var ph=L(()=>{Sl()});var mh,fh=L(()=>{mh={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:{},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:{}},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 ES(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 hh(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!jS.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(!_S.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 Bs(e,t=SS){if(!e&&El.has(t))return El.get(t);let n=mh,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return hh(s,n),e?(hh(s,e),s):(El.set(t,s),s)}function Er(e,t,n={}){return RS(e,t,n)[0]??null}function RS(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 ES(s))l(e.nouns.get(c));return i}var SS,HL,KL,YL,jS,_S,El,To=L(()=>{fh();SS="tmct:",HL=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),KL=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),YL=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});jS=new Set(["data","object"]),_S=new Set(["subclass","data"]);El=new Map});var ZL,eN,tN,AS,nN,sN,oN,gh=L(()=>{os();Ce();ZL=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),eN=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),tN=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`]}),AS=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"}),nN=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"]}),sN=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"}}),oN=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 Wi=L(()=>{en();To();gh()});var qi,Gi=L(()=>{qi=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var CS,bN,bh=L(()=>{zs();Gi();us();De();Wi();CS={},bN=Z($e(zt(CS.url)),"..","..","..")});var wh=L(()=>{en();To();Wi()});var IS,OS,AN,jl=L(()=>{en();To();io();IS=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),OS=["this","is","about","the"],AN=OS.length});var yh=L(()=>{vt();De()});var _l=L(()=>{en()});var LS,qN,vh=L(()=>{zs();Gi();us();De();_l();en();LS={},qN=Z($e(zt(LS.url)),"..","..","..")});var VN,HN,KN,$h=L(()=>{VN=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),HN=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"})}),KN=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 jr(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 Vi(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 xh(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 Rl(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,Rl(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function NS(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 MS(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=xh(e,n),c=xh(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=>Rl(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 Hi(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||jr(t),c=NS(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 $=f(y),j=f(w);$!==j&&d.set($<j?j:$,$<j?$:j)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let $=MS(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...$}),$.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=>Rl(y,l,u,new Set),b=[...h.values()].map(y=>{let w=[...y].sort(),$=w[0],j=g($);for(let v of w){let x=g(v);x>j&&(j=x,$=v)}return{objects:w,label:$}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:m}}var Ki=L(()=>{Ft()});function Al(e){return typeof e=="string"&&PS.test(e)}function kh(e){return!!e&&typeof e=="object"&&Us(e.s)}function Tl(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Al(e.world)&&Us(e.subject)&&Us(e.predicate)&&Us(e.object)}function Cl(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Al(e.world)||!Us(e.name)||!DS.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(Us)}function Il(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Al(e.world)&&Us(e.opening)}function Sh(e){return Tl(e)||Cl(e)||Il(e)}function Eh(e){let t=e||[],n=t.filter(c=>c.predicate===zS).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 PS,FS,DS,Us,zS,_r=L(()=>{PS=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,FS=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),DS=new Set(FS),Us=e=>typeof e=="string"&&e.trim()!=="";zS="mgx:default-contains"});var BS,US,WS,qS,GS,VS,HS,KS,YS,a0,XS,jh,c0,l0,_h=L(()=>{To();Yo();BS="subClassOf",US="typeAssertion",WS="relation",qS="someValuesFrom",GS="cardinality",VS="disjointWith",HS="possessive",KS="adjective",YS="capability",a0=Object.freeze([BS,US,WS,qS,GS,VS,HS,KS,YS]),XS=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine"]),jh=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"]]),c0=Math.max(...[...jh.keys()].map(e=>e.split(" ").length)),l0=[...new Set([...XS,...[...jh.keys()].map(e=>e.split(" ")[0])])]});var Ws=L(()=>{});var Ol=L(()=>{Ce();os();Ws()});function jt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:ds.Capability,name:e,label:t,question:n,readOnly:!0,parameters:Object.freeze(s),preconditions:Object.freeze(o),effects:Object.freeze({add:Object.freeze(r),del:Object.freeze(i)})})}var JS,ds,Ae,Ar,bt,Tt,sn,QS,ZS,Et,eE,tE,Rh,g0,b0,w0,Ah=L(()=>{JS=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),ds=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Ae=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),Ar=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),bt=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:ds.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Tt=()=>Object.freeze({type:ds.Precondition,pred:Ar.graphLoaded}),sn=(e,t)=>Object.freeze({type:ds.Precondition,pred:Ar.resolves,param:e,as:t}),QS=e=>Object.freeze({type:ds.Precondition,pred:Ar.anyPresent,params:Object.freeze([...e])}),ZS=()=>Object.freeze({type:ds.Precondition,pred:Ar.memoryFacts}),Et=(e,t=null)=>Object.freeze({type:ds.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});eE=Object.freeze([jt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[bt("query",Ae.Query,{required:!1,note:"required unless a kind filter is given"}),bt("kind",Ae.Kind,{required:!1}),bt("name",Ae.Query,{required:!1}),bt("decorator",Ae.Query,{required:!1})],preconditions:[Tt(),QS(["query","kind"])],add:[Et("matches","query")]}),jt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("description","symbol")]}),jt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("signature","symbol")]}),jt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[bt("module",Ae.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Tt(),sn("module",Ae.Symbol)],add:[Et("impact","module")]}),jt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[bt("class",Ae.Class,{arg:"class"})],preconditions:[Tt(),sn("class",Ae.Class)],add:[Et("members","class")]}),jt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[bt("class",Ae.Class,{arg:"class"})],preconditions:[Tt(),sn("class",Ae.Class)],add:[Et("subclasses","class")]}),jt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[bt("module",Ae.Module)],preconditions:[Tt(),sn("module",Ae.Module)],add:[Et("exports","module")]}),jt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("callers","symbol")]}),jt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("callees","symbol")]}),jt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("calls","symbol")]}),jt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("tests","symbol")]}),jt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Tt()],add:[Et("untested",null)]}),jt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("history","symbol")]}),jt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[bt("symbol",Ae.Symbol)],preconditions:[Tt(),sn("symbol",Ae.Symbol)],add:[Et("cochanges","symbol")]}),jt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[bt("package",Ae.Package,{required:!1})],preconditions:[Tt()],add:[Et("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:[bt("term",Ae.Query,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[ZS()],add:[Et("related","term")]})]),tE=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Rh=eE,g0=tE(Rh),b0=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"}),w0=Object.freeze({prefixes:JS,vocab:ds,kinds:Ae,precond:Ar,get capabilities(){return Rh}})});var Th=L(()=>{Ah()});var Ch=L(()=>{ks()});function sE(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Z(nE,"corpus","worlds")}function Ih(e){try{return qi(Ro(e))}catch{return null}}function Oh(e){if(Ll.has(e))return Ll.get(e);let t=null,n=Ih(Z(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 Ll.set(e,t),t}function oE(e,t){let n=Oh(e);if(!n)return null;let s=n[String(t??"")];if(!kh(s))return null;let o=`${e}\0${t}`;if(Nl.has(o))return Nl.get(o);let r=null,i=Ih(Z(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
131
- `))if(u.trim())try{let d=JSON.parse(u);if(!Sh(d)||d.world!==t)continue;Tl(d)?a.push(d):Cl(d)?l.push(d):Il(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:Eh(a),rules:l,meta:c})}return Nl.set(o,r),r}var iE,nE,Ll,Nl,rE,C0,Ml=L(()=>{zs();Gi();us();De();_r();iE={},nE=Z($e(zt(iE.url)),"..","..","..");Ll=new Map,Nl=new Map;rE=e=>({list:async()=>{let t=Oh(e());return t?Object.keys(t).sort():null},load:async t=>oE(e(),t)}),C0=rE(()=>sE())});var z0,Lh=L(()=>{vt();De();Yn();Vo();ks();Ve();z0=Z(".tmct","memory","blocks")});var Nh=L(()=>{Ws()});var Ph=L(()=>{Yn();Vo();Ws()});var Pl=L(()=>{Yn();Vo();Ws()});var Fh=L(()=>{Pl();Yn();Es();Ws()});var Dh=L(()=>{});var zh=L(()=>{Nh();Ph();Pl();Fh();Dh();Ws()});var Bh=L(()=>{Lh();Ve();fi();xl();zh();Ol()});var Wh=L(()=>{_r();_h();zi();Ol();Th();Ch();Ml();Ve();Bh()});var Yi,Y1,X1,J1,Co=L(()=>{Yi=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}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),planning:Object.freeze({maxDepth:300})}),Y1=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"}),X1=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),J1=Object.freeze({max_depth:"maxDepth"})});var fE,qh,eM,Fl=L(()=>{Co();fE=Object.freeze({x:2,y:2}),qh=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})}),eM=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"])])});var Gh=L(()=>{});var Vh=L(()=>{Fl();Es();Ve();_r();Gh();en();Co()});var AM,Hh=L(()=>{Fl();Vh();_r();Ml();Ve();Co();AM=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")});var ut,CM,IM,OM,LM,NM,MM,PM,FM,DM,zM,BM,UM,WM,qM,GM,VM,HM,KM,YM,Kh=L(()=>{ut=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},CM=ut("createRequire"),IM=ut("readFileSync"),OM=ut("access"),LM=ut("readFile"),NM=ut("writeFile"),MM=ut("appendFile"),PM=ut("mkdir"),FM=ut("mkdtemp"),DM=ut("rename"),zM=ut("unlink"),BM=ut("rm"),UM=ut("stat"),WM=ut("copyFile"),qM=ut("readdir"),GM=ut("createReadStream"),VM=ut("createWriteStream"),HM=ut("randomBytes"),KM=ut("spawnSync"),YM=ut("createInterface")});var dt,JM,QM,ZM,eP,tP,nP,sP,oP,rP,iP,aP,cP,lP,uP,dP,pP,fP,mP,yE,Yh=L(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},JM=dt("createRequire"),QM=dt("readFileSync"),ZM=dt("access"),eP=dt("readFile"),tP=dt("writeFile"),nP=dt("appendFile"),sP=dt("mkdir"),oP=dt("mkdtemp"),rP=dt("rename"),iP=dt("unlink"),aP=dt("rm"),cP=dt("stat"),lP=dt("copyFile"),uP=dt("readdir"),dP=dt("createReadStream"),pP=dt("createWriteStream"),fP=dt("randomBytes"),mP=dt("spawnSync"),yE=dt("createInterface")});var pt,gP,bP,wP,yP,vP,$P,xP,kP,SP,EP,jP,_P,RP,AP,TP,CP,IP,Xh,OP,Dl=L(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},gP=pt("createRequire"),bP=pt("readFileSync"),wP=pt("access"),yP=pt("readFile"),vP=pt("writeFile"),$P=pt("appendFile"),xP=pt("mkdir"),kP=pt("mkdtemp"),SP=pt("rename"),EP=pt("unlink"),jP=pt("rm"),_P=pt("stat"),RP=pt("copyFile"),AP=pt("readdir"),TP=pt("createReadStream"),CP=pt("createWriteStream"),IP=pt("randomBytes"),Xh=pt("spawnSync"),OP=pt("createInterface")});var Jh=L(()=>{Dl();De();vt();De();Ri();Lt()});var Qh=L(()=>{});var vE,Zh=L(()=>{vt();De();Ve();Qh();vE=Z(".tmct","sessions")});var tg=L(()=>{vt();De();Bi()});var ft,eF,tF,nF,sF,oF,rF,iF,aF,cF,lF,uF,dF,pF,fF,mF,hF,gF,bF,$E,ng=L(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},eF=ft("createRequire"),tF=ft("readFileSync"),nF=ft("access"),sF=ft("readFile"),oF=ft("writeFile"),rF=ft("appendFile"),iF=ft("mkdir"),aF=ft("mkdtemp"),cF=ft("rename"),lF=ft("unlink"),uF=ft("rm"),dF=ft("stat"),pF=ft("copyFile"),fF=ft("readdir"),mF=ft("createReadStream"),hF=ft("createWriteStream"),gF=ft("randomBytes"),bF=ft("spawnSync"),$E=ft("createInterface")});var kE,Io,sg,xE,og,jF,Wn,_F,Xi,RF,rg=L(()=>{zs();vt();ng();us();De();Ei();Ve();kE={},Io=Z($e(zt(kE.url)),"..","..",".."),sg=Z(Io,"corpus","conceptnet","slice.jsonl"),xE=Z(Io,"src","adapters","corpus","conceptnet-map.toml"),og=Z(Io,"corpus","seon","concepts.jsonl"),jF=Z(Io,"corpus","seon","definitions.jsonl"),Wn=Z(Io,"corpus","tier2"),_F=Z(Wn,"manifest.json"),Xi=Z(Io,"corpus","wordnet"),RF=Z(Xi,"manifest.json")});function jE(){return{seon:{kind:"corpus",active:!1,corpusPath:og,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:sg,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:EE},human:{kind:"corpus",active:!0,corpusPath:Z(Wn,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Z(Wn,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Z(Wn,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Z(Wn,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Z(Wn,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Z(Wn,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Z(Wn,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Z(Xi,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Z(Xi,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Z(SE,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var _E,SE,DF,EE,zF,ig=L(()=>{De();vt();us();Ri();rg();_E={},SE=Z($e(zt(_E.url)),"..","..","corpus","namenet"),DF=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),EE=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];zF=Object.freeze(jE())});var ag=L(()=>{});var cg=L(()=>{De();zs();vt();Kh();Yh();Dl();Lt();Jh();Ce();Zh();Bi();tg();Wo();ig();Ji();Co();zi();jl();ag()});var lg={};En(lg,{proseLemma:()=>AE});function AE(){if(qs!==void 0)return qs;try{let e=kl();if(!e)return qs=null,qs;let t=e.its,n=new Map;qs=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{qs=null}return qs}var qs,ug=L(()=>{Sl()});var dg={};En(dg,{digestTermFromRows:()=>IE,loadDigestStructureTable:()=>CE,readDigestStructures:()=>TE});var TE,CE,IE,pg=L(()=>{TE=()=>null,CE=()=>null,IE=()=>null});function Jl(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 ${Qi(e.entityType)}`;if(t==="list")return`list/enumerate ${Qi(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${Qi(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 Jl(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&&on[o]?on[o]:`filter/traverse ${Qi(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&&on[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?on[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function ou(e){let t=new Map;for(let n of e)t.has(hg(n))||t.set(hg(n),n);return t}function Ul(e,t=Cr){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),Gs(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function Wl(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function iu(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)||FE.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 Vl(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return Fs;if(t==="can")return"mgx:capableOf";try{let{proseLemma:n}=await Promise.resolve().then(()=>(ug(),lg)),s=n(),o=s?s(t):t;return o==="have"?Fs:Dn(`mgx:${o}`)}catch{return Dn(`mgx:${t}`)}}function qE(e,t){let n=String(t||"").match(WE);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function Tr(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(os(),nf)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function KE(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 Bg(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 Ug(e){if(Vs[e])return Vs[e];let t=String(e||""),n=jf(t);if(n){let a=Ug(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",Bg(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:(${au})-([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?`${KE(i[1])}${i[2]?` ${i[2]}`:""}`:e}function Kl(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function XE(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of YE)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 ae(e){let t=e.provenance?` (source: ${e.provenance})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Ct(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Ct(e)}${t}`:e.provenance.includes("corpus:")?`${Ct(e)}${t}`:e.provenance.includes("reference:")?`${Ct(e)}${t}`:`i learned: ${Ct(e)}${t}`}function wg(e,t,n){let s=ae(e);if(!Gn.has(e.predicate)||!n.has(e.subject))return s;let o=Vi(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(JE);return i?s.slice(0,i.index)+r+i[0]:s+r}function yg(e,t,n,{indent:s=""}={}){let o=t.filter(j=>j.predicate===Cr).map(j=>[j.subject,j.object]),r=jr(o),i=e.map(j=>`${s}${wg(j,r,n)}`),a=e.filter(j=>Gn.has(j.predicate)&&n.has(j.subject)),l=[...new Set(a.map(j=>j.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(j=>j.predicate==="owl:disjointWith").map(j=>[j.subject,j.object]),{split:u,clusters:d}=Hi(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let j of d)for(let v of j.objects)p.set(v,j);let m=e.filter(j=>!(Gn.has(j.predicate)&&n.has(j.subject))),h=[],g=[],b=0,y=j=>{let v=wg(j,r,n);return b<je?(b+=1,`${s}${v}`):(g.push(v),null)};for(let j of d){let v=a.filter(x=>p.get(x.object)===j).map(y).filter(Boolean);v.length&&h.push(`${s}${f}, the ${j.label}:
130
+ `)}`:c}finally{await i()}}var eh=N(()=>{De();Ve();hl.ownsGraphLoad=!0});var oS,th=N(()=>{yc();cf();dm();fm();hm();bm();ym();$m();km();Sm();jm();Rm();Tm();Im();Lm();Mm();Fm();zm();Um();qm();Vm();Km();Xm();Zm();eh();oS=Object.freeze({tmct_context:wc,tmct_context_more:af,tmct_describe:um,tmct_snippet:pm,tmct_signature:mm,tmct_impact:gm,tmct_search:wm,tmct_members:vm,tmct_subclasses:xm,tmct_related:fl,tmct_architecture:Em,tmct_exports:_m,tmct_untested:Am,tmct_ask:Cm,tmct_tests_for:Om,tmct_history:Nm,tmct_file_history:Pm,tmct_method_history:Dm,tmct_class_history:Bm,tmct_callers:Wm,tmct_callees:Gm,tmct_calls:Hm,tmct_cochanges:Ym,tmct_export:ml,tmct_ingest:hl})});var gl=N(()=>{});var Fi,bl=N(()=>{Fi=()=>({relations:[],constructions:[]})});var nh,sh=N(()=>{yt();De();Au();Ot();Uo();ss();pi();fi();th();ro();Zr();gl();bl();fi();yc();ei(void 0);Qr(Fi);nh=Ru.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var YI,XI,JI,Di=N(()=>{YI=Object.freeze(["entity","set","event","measure"]),XI=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),JI=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 it,ZI,eO,tO,nO,sO,oO,rO,iO,aO,cO,lO,uO,dO,pO,fO,mO,rS,hO,gO,oh=N(()=>{it=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},ZI=it("createRequire"),eO=it("readFileSync"),tO=it("access"),nO=it("readFile"),sO=it("writeFile"),oO=it("appendFile"),rO=it("mkdir"),iO=it("mkdtemp"),aO=it("rename"),cO=it("unlink"),lO=it("rm"),uO=it("stat"),dO=it("copyFile"),pO=it("readdir"),fO=it("createReadStream"),mO=it("createWriteStream"),rS=it("randomBytes"),hO=it("spawnSync"),gO=it("createInterface")});var zi=N(()=>{oh()});var at,vO,$O,xO,kO,SO,EO,jO,_O,RO,AO,TO,CO,IO,OO,LO,NO,Dt,MO,PO,FO,ls=N(()=>{at=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},vO=at("createRequire"),$O=at("readFileSync"),xO=at("access"),kO=at("readFile"),SO=at("writeFile"),EO=at("appendFile"),jO=at("mkdir"),_O=at("mkdtemp"),RO=at("rename"),AO=at("unlink"),TO=at("rm"),CO=at("stat"),IO=at("copyFile"),OO=at("readdir"),LO=at("createReadStream"),NO=at("createWriteStream"),Dt=e=>String(e),MO=at("randomBytes"),PO=at("spawnSync"),FO=at("createInterface")});var iS,rh,WO,qO,GO,yl=N(()=>{yt();ls();De();iS={},rh=Z($e(Dt(iS.url)),"..","..",".."),WO=Z(rh,"data","templates","responses.jsonl"),qO=Z(rh,"data","phrasebook","software-phrases.txt"),GO=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function cS(e,t={}){let n=aS.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function lS(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>cS(s,t))):1}function Ye(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:lS(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 aS,ih=N(()=>{aS=/^src:corpus:(.+)$/});var ct,KO,_o,YO,XO,JO,QO,ZO,eL,tL,nL,sL,oL,rL,iL,uS,dS,aL,cL,lL,Ds=N(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},KO=ct("createRequire"),_o=ct("readFileSync"),YO=ct("access"),XO=ct("readFile"),JO=ct("writeFile"),QO=ct("appendFile"),ZO=ct("mkdir"),eL=ct("mkdtemp"),tL=ct("rename"),nL=ct("unlink"),sL=ct("rm"),oL=ct("stat"),rL=ct("copyFile"),iL=ct("readdir"),uS=ct("createReadStream"),dS=ct("createWriteStream"),aL=ct("randomBytes"),cL=ct("spawnSync"),lL=ct("createInterface")});function ah(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 hS(e=fS){let t=$o(_o(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function vl(){if(Bi===null)try{Bi=hS()}catch{Bi=[]}return Bi}var gS,pS,fS,mS,bL,Bi,$l=N(()=>{Ds();ls();De();Si();yl();gS={},pS=$e(Dt(gS.url)),fS=Z(pS,"..","..","data","templates","grammar-rules.toml"),mS=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),bL=Object.freeze(new Set(mS.filter(e=>e!=="prose")));Bi=null});function bS(){if(kr!==void 0)return kr;try{let e=ch?ch():wS();kr=e&&e.winkNLP&&e.model?e:null}catch{kr=null}return kr}function wS(){let e=process.getBuiltinModule("node:module").createRequire(yS.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function xl(){if(Ro!==void 0)return Ro;let e=bS();if(!e)return Ro=null,null;try{Ro=e.winkNLP(e.model)}catch{Ro=null}return Ro}var yS,ch,kr,Ro,kl=N(()=>{yS={}});var lh=N(()=>{kl()});var dh,uh=N(()=>{dh={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:{},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:{}},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 xS(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 ph(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!kS.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(!SS.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 zs(e,t=$S){if(!e&&Sl.has(t))return Sl.get(t);let n=dh,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return ph(s,n),e?(ph(s,e),s):(Sl.set(t,s),s)}function Sr(e,t,n={}){return ES(e,t,n)[0]??null}function ES(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 xS(s))l(e.nouns.get(c));return i}var $S,SL,EL,jL,kS,SS,Sl,Ao=N(()=>{uh();$S="tmct:",SL=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),EL=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),jL=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});kS=new Set(["data","object"]),SS=new Set(["subclass","data"]);Sl=new Map});var TL,CL,IL,jS,OL,LL,NL,fh=N(()=>{ss();Ce();TL=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),CL=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),IL=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`]}),jS=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"}),OL=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"]}),LL=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"}}),NL=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 Ui=N(()=>{Zt();Ao();fh()});var Wi,qi=N(()=>{Wi=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var RS,KL,mh=N(()=>{Ds();qi();ls();De();Ui();RS={},KL=Z($e(Dt(RS.url)),"..","..","..")});var hh=N(()=>{Zt();Ao();Ui()});var AS,TS,iN,El=N(()=>{Zt();Ao();ro();AS=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),TS=["this","is","about","the"],iN=TS.length});var gh=N(()=>{yt();De()});var jl=N(()=>{Zt()});var CS,$N,bh=N(()=>{Ds();qi();ls();De();jl();Zt();CS={},$N=Z($e(Dt(CS.url)),"..","..","..")});var kN,SN,EN,wh=N(()=>{kN=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),SN=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"})}),EN=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 Er(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 Gi(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 yh(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 _l(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,_l(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function IS(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 OS(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=yh(e,n),c=yh(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=>_l(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 Vi(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||Er(t),c=IS(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 $=f(y),j=f(w);$!==j&&d.set($<j?j:$,$<j?$:j)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let $=OS(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...$}),$.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=>_l(y,l,u,new Set),b=[...h.values()].map(y=>{let w=[...y].sort(),$=w[0],j=g($);for(let v of w){let x=g(v);x>j&&(j=x,$=v)}return{objects:w,label:$}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:m}}var Hi=N(()=>{Pt()});function Rl(e){return typeof e=="string"&&LS.test(e)}function vh(e){return!!e&&typeof e=="object"&&Bs(e.s)}function Al(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Rl(e.world)&&Bs(e.subject)&&Bs(e.predicate)&&Bs(e.object)}function Tl(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Rl(e.world)||!Bs(e.name)||!MS.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(Bs)}function Cl(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Rl(e.world)&&Bs(e.opening)}function $h(e){return Al(e)||Tl(e)||Cl(e)}function xh(e){let t=e||[],n=t.filter(c=>c.predicate===PS).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 LS,NS,MS,Bs,PS,jr=N(()=>{LS=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,NS=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),MS=new Set(NS),Bs=e=>typeof e=="string"&&e.trim()!=="";PS="mgx:default-contains"});var FS,DS,zS,BS,US,WS,qS,GS,VS,FN,HS,kh,DN,zN,Sh=N(()=>{Ao();Ko();FS="subClassOf",DS="typeAssertion",zS="relation",BS="someValuesFrom",US="cardinality",WS="disjointWith",qS="possessive",GS="adjective",VS="capability",FN=Object.freeze([FS,DS,zS,BS,US,WS,qS,GS,VS]),HS=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine"]),kh=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"]]),DN=Math.max(...[...kh.keys()].map(e=>e.split(" ").length)),zN=[...new Set([...HS,...[...kh.keys()].map(e=>e.split(" ")[0])])]});var Us=N(()=>{});var Il=N(()=>{Ce();ss();Us()});function Et({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:us.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 KS,us,Ae,Rr,gt,At,nn,YS,XS,St,JS,QS,Eh,HN,KN,YN,jh=N(()=>{KS=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),us=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),Ae=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),Rr=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),gt=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:us.Parameter,name:e,kind:t,arg:n,required:s,note:o}),At=()=>Object.freeze({type:us.Precondition,pred:Rr.graphLoaded}),nn=(e,t)=>Object.freeze({type:us.Precondition,pred:Rr.resolves,param:e,as:t}),YS=e=>Object.freeze({type:us.Precondition,pred:Rr.anyPresent,params:Object.freeze([...e])}),XS=()=>Object.freeze({type:us.Precondition,pred:Rr.memoryFacts}),St=(e,t=null)=>Object.freeze({type:us.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});JS=Object.freeze([Et({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[gt("query",Ae.Query,{required:!1,note:"required unless a kind filter is given"}),gt("kind",Ae.Kind,{required:!1}),gt("name",Ae.Query,{required:!1}),gt("decorator",Ae.Query,{required:!1})],preconditions:[At(),YS(["query","kind"])],add:[St("matches","query")]}),Et({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("description","symbol")]}),Et({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("signature","symbol")]}),Et({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[gt("module",Ae.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[At(),nn("module",Ae.Symbol)],add:[St("impact","module")]}),Et({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[gt("class",Ae.Class,{arg:"class"})],preconditions:[At(),nn("class",Ae.Class)],add:[St("members","class")]}),Et({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[gt("class",Ae.Class,{arg:"class"})],preconditions:[At(),nn("class",Ae.Class)],add:[St("subclasses","class")]}),Et({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[gt("module",Ae.Module)],preconditions:[At(),nn("module",Ae.Module)],add:[St("exports","module")]}),Et({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("callers","symbol")]}),Et({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("callees","symbol")]}),Et({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("calls","symbol")]}),Et({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("tests","symbol")]}),Et({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[At()],add:[St("untested",null)]}),Et({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("history","symbol")]}),Et({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[gt("symbol",Ae.Symbol)],preconditions:[At(),nn("symbol",Ae.Symbol)],add:[St("cochanges","symbol")]}),Et({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[gt("package",Ae.Package,{required:!1})],preconditions:[At()],add:[St("architecture","package")]}),Et({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[gt("term",Ae.Query,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[XS()],add:[St("related","term")]})]),QS=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Eh=JS,HN=QS(Eh),KN=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"}),YN=Object.freeze({prefixes:KS,vocab:us,kinds:Ae,precond:Rr,get capabilities(){return Eh}})});var _h=N(()=>{jh()});var Rh=N(()=>{xs()});function eE(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Z(ZS,"corpus","worlds")}function Ah(e){try{return Wi(_o(e))}catch{return null}}function Th(e){if(Ol.has(e))return Ol.get(e);let t=null,n=Ah(Z(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 Ol.set(e,t),t}function tE(e,t){let n=Th(e);if(!n)return null;let s=n[String(t??"")];if(!vh(s))return null;let o=`${e}\0${t}`;if(Ll.has(o))return Ll.get(o);let r=null,i=Ah(Z(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
131
+ `))if(u.trim())try{let d=JSON.parse(u);if(!$h(d)||d.world!==t)continue;Al(d)?a.push(d):Tl(d)?l.push(d):Cl(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:xh(a),rules:l,meta:c})}return Ll.set(o,r),r}var sE,ZS,Ol,Ll,nE,c0,Nl=N(()=>{Ds();qi();ls();De();jr();sE={},ZS=Z($e(Dt(sE.url)),"..","..","..");Ol=new Map,Ll=new Map;nE=e=>({list:async()=>{let t=Th(e());return t?Object.keys(t).sort():null},load:async t=>tE(e(),t)}),c0=nE(()=>eE())});var b0,Ch=N(()=>{yt();De();Kn();Go();xs();Ve();b0=Z(".tmct","memory","blocks")});var Ih=N(()=>{Us()});var Lh=N(()=>{Kn();Go();Us()});var Ml=N(()=>{Kn();Go();Us()});var Nh=N(()=>{Ml();Kn();Ss();Us()});var Mh=N(()=>{});var Ph=N(()=>{Ih();Lh();Ml();Nh();Mh();Us()});var Fh=N(()=>{Ch();Ve();pi();$l();Ph();Il()});var zh=N(()=>{jr();Sh();Di();Il();_h();Rh();Nl();Ve();Fh()});var Ki,j1,_1,R1,To=N(()=>{Ki=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),planning:Object.freeze({maxDepth:300})}),j1=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"}),_1=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),R1=Object.freeze({max_depth:"maxDepth"})});var uE,Bh,C1,Pl=N(()=>{To();uE=Object.freeze({x:2,y:2}),Bh=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})}),C1=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"])])});var Uh=N(()=>{});var Wh=N(()=>{Pl();Ss();Ve();jr();Uh();Zt();To()});var iM,qh=N(()=>{Pl();Wh();jr();Nl();Ve();To();iM=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")});var lt,cM,lM,uM,dM,pM,fM,mM,hM,gM,bM,wM,yM,vM,$M,xM,kM,SM,EM,jM,Gh=N(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},cM=lt("createRequire"),lM=lt("readFileSync"),uM=lt("access"),dM=lt("readFile"),pM=lt("writeFile"),fM=lt("appendFile"),mM=lt("mkdir"),hM=lt("mkdtemp"),gM=lt("rename"),bM=lt("unlink"),wM=lt("rm"),yM=lt("stat"),vM=lt("copyFile"),$M=lt("readdir"),xM=lt("createReadStream"),kM=lt("createWriteStream"),SM=lt("randomBytes"),EM=lt("spawnSync"),jM=lt("createInterface")});var ut,RM,AM,TM,CM,IM,OM,LM,NM,MM,PM,FM,DM,zM,BM,UM,WM,qM,GM,gE,Vh=N(()=>{ut=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},RM=ut("createRequire"),AM=ut("readFileSync"),TM=ut("access"),CM=ut("readFile"),IM=ut("writeFile"),OM=ut("appendFile"),LM=ut("mkdir"),NM=ut("mkdtemp"),MM=ut("rename"),PM=ut("unlink"),FM=ut("rm"),DM=ut("stat"),zM=ut("copyFile"),BM=ut("readdir"),UM=ut("createReadStream"),WM=ut("createWriteStream"),qM=ut("randomBytes"),GM=ut("spawnSync"),gE=ut("createInterface")});var dt,HM,KM,YM,XM,JM,QM,ZM,eP,tP,nP,sP,oP,rP,iP,aP,cP,lP,Hh,uP,Fl=N(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},HM=dt("createRequire"),KM=dt("readFileSync"),YM=dt("access"),XM=dt("readFile"),JM=dt("writeFile"),QM=dt("appendFile"),ZM=dt("mkdir"),eP=dt("mkdtemp"),tP=dt("rename"),nP=dt("unlink"),sP=dt("rm"),oP=dt("stat"),rP=dt("copyFile"),iP=dt("readdir"),aP=dt("createReadStream"),cP=dt("createWriteStream"),lP=dt("randomBytes"),Hh=dt("spawnSync"),uP=dt("createInterface")});var Kh=N(()=>{Fl();De();yt();De();_i();Ot()});var Yh=N(()=>{});var bE,Xh=N(()=>{yt();De();Ve();Yh();bE=Z(".tmct","sessions")});var Qh=N(()=>{yt();De();zi()});var pt,CP,IP,OP,LP,NP,MP,PP,FP,DP,zP,BP,UP,WP,qP,GP,VP,HP,KP,wE,Zh=N(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},CP=pt("createRequire"),IP=pt("readFileSync"),OP=pt("access"),LP=pt("readFile"),NP=pt("writeFile"),MP=pt("appendFile"),PP=pt("mkdir"),FP=pt("mkdtemp"),DP=pt("rename"),zP=pt("unlink"),BP=pt("rm"),UP=pt("stat"),WP=pt("copyFile"),qP=pt("readdir"),GP=pt("createReadStream"),VP=pt("createWriteStream"),HP=pt("randomBytes"),KP=pt("spawnSync"),wE=pt("createInterface")});var vE,Co,eg,yE,tg,sF,Un,oF,Yi,rF,ng=N(()=>{Ds();yt();Zh();ls();De();Si();Ve();vE={},Co=Z($e(Dt(vE.url)),"..","..",".."),eg=Z(Co,"corpus","conceptnet","slice.jsonl"),yE=Z(Co,"src","adapters","corpus","conceptnet-map.toml"),tg=Z(Co,"corpus","seon","concepts.jsonl"),sF=Z(Co,"corpus","seon","definitions.jsonl"),Un=Z(Co,"corpus","tier2"),oF=Z(Un,"manifest.json"),Yi=Z(Co,"corpus","wordnet"),rF=Z(Yi,"manifest.json")});function kE(){return{seon:{kind:"corpus",active:!1,corpusPath:tg,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:eg,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:xE},human:{kind:"corpus",active:!0,corpusPath:Z(Un,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Z(Un,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Z(Un,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Z(Un,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Z(Un,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Z(Un,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Z(Un,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Z(Yi,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Z(Yi,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Z($E,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var SE,$E,gF,xE,bF,sg=N(()=>{De();yt();ls();_i();ng();SE={},$E=Z($e(Dt(SE.url)),"..","..","corpus","namenet"),gF=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),xE=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];bF=Object.freeze(kE())});var og=N(()=>{});var rg=N(()=>{De();Ds();yt();Gh();Vh();Fl();Ot();Kh();Ce();Xh();zi();Qh();Uo();sg();Xi();To();Di();El();og()});var ig={};Sn(ig,{proseLemma:()=>jE});function jE(){if(Ws!==void 0)return Ws;try{let e=xl();if(!e)return Ws=null,Ws;let t=e.its,n=new Map;Ws=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{Ws=null}return Ws}var Ws,ag=N(()=>{kl()});var cg={};Sn(cg,{digestTermFromRows:()=>AE,loadDigestStructureTable:()=>RE,readDigestStructures:()=>_E});var _E,RE,AE,lg=N(()=>{_E=()=>null,RE=()=>null,AE=()=>null});function Xl(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 ${Ji(e.entityType)}`;if(t==="list")return`list/enumerate ${Ji(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${Ji(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 Xl(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&&sn[o]?sn[o]:`filter/traverse ${Ji(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&&sn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?sn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function su(e){let t=new Map;for(let n of e)t.has(pg(n))||t.set(pg(n),n);return t}function Bl(e,t=Tr){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),qs(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function Ul(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function ru(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)||NE.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 Gl(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return Ps;if(t==="can")return"mgx:capableOf";try{let{proseLemma:n}=await Promise.resolve().then(()=>(ag(),ig)),s=n(),o=s?s(t):t;return o==="have"?Ps:Fn(`mgx:${o}`)}catch{return Fn(`mgx:${t}`)}}function BE(e,t){let n=String(t||"").match(zE);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function Ar(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(ss(),tf)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function GE(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 Fg(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 Dg(e){if(Gs[e])return Gs[e];let t=String(e||""),n=Ef(t);if(n){let a=Dg(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",Fg(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:(${iu})-([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?`${GE(i[1])}${i[2]?` ${i[2]}`:""}`:e}function Hl(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function HE(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of VE)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 ae(e){let t=e.provenance?` (source: ${e.provenance})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Tt(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Tt(e)}${t}`:e.provenance.includes("corpus:")?`${Tt(e)}${t}`:e.provenance.includes("reference:")?`${Tt(e)}${t}`:`i learned: ${Tt(e)}${t}`}function hg(e,t,n){let s=ae(e);if(!qn.has(e.predicate)||!n.has(e.subject))return s;let o=Gi(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(KE);return i?s.slice(0,i.index)+r+i[0]:s+r}function gg(e,t,n,{indent:s=""}={}){let o=t.filter(j=>j.predicate===Tr).map(j=>[j.subject,j.object]),r=Er(o),i=e.map(j=>`${s}${hg(j,r,n)}`),a=e.filter(j=>qn.has(j.predicate)&&n.has(j.subject)),l=[...new Set(a.map(j=>j.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(j=>j.predicate==="owl:disjointWith").map(j=>[j.subject,j.object]),{split:u,clusters:d}=Vi(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let j of d)for(let v of j.objects)p.set(v,j);let m=e.filter(j=>!(qn.has(j.predicate)&&n.has(j.subject))),h=[],g=[],b=0,y=j=>{let v=hg(j,r,n);return b<je?(b+=1,`${s}${v}`):(g.push(v),null)};for(let j of d){let v=a.filter(x=>p.get(x.object)===j).map(y).filter(Boolean);v.length&&h.push(`${s}${f}, the ${j.label}:
132
132
  ${v.join(`
133
133
  `)}`)}if(m.length){let j=m.map(y).filter(Boolean);j.length&&h.push(`${s}also about ${f}:
134
134
  ${j.join(`
135
135
  `)}`)}let w=g.length?`
136
136
  ${s}\u2026and ${g.length} more \u2014 say 'more' to see them.`:"",$={text:h.join(`
137
- `)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:$}}async function ZE(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(pg(),dg)))}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("; ")})
137
+ `)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:$}}async function XE(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(lg(),cg)))}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("; ")})
138
138
  `:"",l=`Say 'show the facts' for all ${s.length} stored facts.`;return{text:`${r.paragraphs.join(`
139
139
 
140
140
  `)}
141
141
 
142
- ${a}${l}`,pending:{items:s,noun:"facts"}}}function Oo(e){let t=$l().find(n=>n.kind==="article");return t&&ch(String(e||""),t)?"an":"a"}function Wg(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${ae(e)}; ${ae(t)}. To settle it, say "forget that ${e.subject} is ${Oo(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${ae(t)}`,replace:!0}:e?{text:`yes \u2014 ${ae(e)}`,replace:!0}:null}function ej(e,t){let n=s=>`${Ct(s)}${s.provenance?` (source: ${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 ${Oo(e.object)} ${e.object}".`,replace:!0}}function Zi(e){let t=o=>`${Ct(o)}${o.provenance?` (source: ${o.provenance})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function Yl(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Ve(),ls)),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 mt(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Ve(),ls)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function tj(e){if(!ea)try{ea=Bs().nounPlurals}catch{ea=new Map}return ea.get(e)??null}function na(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return Er(Bs(),t)?.lemma||t}catch{return t}}function nj(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return na(e);let n=na(iu(t[1]));return`${Oo(n)} ${n}`}function K(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(sj,"").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=tj(i);a&&s.add(e(a))}return s}function vg(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 Vg(e,t=null){let n=sa(e),s=n.match(oj);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(ij);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function Zl(e){let t=String(e||"").replace(lj,"");if(t!==e){let s=t.match(ps);if(s)return s}let n=String(e||"").match(uj);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(ps):null}function tu(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 kg(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function kj(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=>`${Ct(s)}${s.provenance?` (source: ${s.provenance})`:""}`).join("; ")}function Eg(e,t,n,{maxHops:s=3}={}){let o=K(ee,e),r=K(ee,t),i=yi(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?kj(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:
142
+ ${a}${l}`,pending:{items:s,noun:"facts"}}}function Io(e){let t=vl().find(n=>n.kind==="article");return t&&ah(String(e||""),t)?"an":"a"}function zg(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${ae(e)}; ${ae(t)}. To settle it, say "forget that ${e.subject} is ${Io(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${ae(t)}`,replace:!0}:e?{text:`yes \u2014 ${ae(e)}`,replace:!0}:null}function JE(e,t){let n=s=>`${Tt(s)}${s.provenance?` (source: ${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 ${Io(e.object)} ${e.object}".`,replace:!0}}function Qi(e){let t=o=>`${Tt(o)}${o.provenance?` (source: ${o.provenance})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function Kl(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Ve(),cs)),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 ft(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Ve(),cs)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function QE(e){if(!Zi)try{Zi=zs().nounPlurals}catch{Zi=new Map}return Zi.get(e)??null}function ta(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return Sr(zs(),t)?.lemma||t}catch{return t}}function ZE(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return ta(e);let n=ta(ru(t[1]));return`${Io(n)} ${n}`}function K(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(ej,"").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=QE(i);a&&s.add(e(a))}return s}function bg(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 Wg(e,t=null){let n=na(e),s=n.match(tj);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(sj);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function Ql(e){let t=String(e||"").replace(ij,"");if(t!==e){let s=t.match(ds);if(s)return s}let n=String(e||"").match(aj);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(ds):null}function eu(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 vg(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function vj(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=>`${Tt(s)}${s.provenance?` (source: ${s.provenance})`:""}`).join("; ")}function xg(e,t,n,{maxHops:s=3}={}){let o=K(ee,e),r=K(ee,t),i=wi(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?vj(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:
143
143
  ${[...i.negative,...i.positive].map(ae).join(`
144
- `)}`,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 ${ae(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${ae(i.overrides.fact)}`),{text:c,replace:!0}}return null}function jg(e,t,n,{maxHops:s=3}={}){let o=K(ee,e),r=K(ee,t),i=Nc(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,Lc).map(f=>ae(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
144
+ `)}`,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 ${ae(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${ae(i.overrides.fact)}`),{text:c,replace:!0}}return null}function kg(e,t,n,{maxHops:s=3}={}){let o=K(ee,e),r=K(ee,t),i=Lc(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,Oc).map(f=>ae(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
145
145
  ${d.join(`
146
- `)}`,replace:!0,miss:!0}}let c=Mc(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,Lc),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)`:""}:
146
+ `)}`,replace:!0,miss:!0}}let c=Nc(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,Oc),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)`:""}:
147
147
  ${u.map(ae).join(`
148
- `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(ae),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function jj(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 un(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 Kg(e,t,n,s,o={},r=null,i=null){return Yg(await Ij(e,t,n,s,o,r,i),n,t)}function Yg(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=Jl(t?.parsed);if(!o&&e.generalVerbQuery&&(o=fg),!o){let r=s.match(Ql),i=r?null:sa(s).match(Gg)||Vg(s),a=r?r[2]:i?i[1]:null;a&&!eu.has(a.toLowerCase())&&(o=fg)}if(!o){let r=s.match(Jg);r&&(o=Jl({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function Ij(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(Ve(),ls)))}catch{return null}let c=String(t).trim(),u=c.match(gj);if(u){let F=K(a,u[1]),D=(await mt(e,r)).filter(B=>B.predicate==="mgx:usedFor"&&F.has(B.object));if(D.length){let W=Ye(un(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
148
+ `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(ae),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function kj(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 ln(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 Gg(e,t,n,s,o={},r=null,i=null){return Vg(await Aj(e,t,n,s,o,r,i),n,t)}function Vg(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=Xl(t?.parsed);if(!o&&e.generalVerbQuery&&(o=ug),!o){let r=s.match(Jl),i=r?null:na(s).match(Ug)||Wg(s),a=r?r[2]:i?i[1]:null;a&&!Zl.has(a.toLowerCase())&&(o=ug)}if(!o){let r=s.match(Kg);r&&(o=Xl({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function Aj(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(Ve(),cs)))}catch{return null}let c=String(t).trim(),u=c.match(fj);if(u){let F=K(a,u[1]),D=(await ft(e,r)).filter(B=>B.predicate==="mgx:usedFor"&&F.has(B.object));if(D.length){let W=Ye(ln(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
149
149
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
150
- `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}}for(let{predicate:F,re:D}of Rj){let B=c.match(D);if(!B)continue;let W=K(a,B[1]),C=(await mt(e,r)).filter(ie=>ie.predicate===F&&W.has(ie.object));if(!C.length)continue;let O=Ye(un(C),o).map(ae),M=O.slice(0,je),q=O.slice(je),U=q.length?`
150
+ `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}}for(let{predicate:F,re:D}of Ej){let B=c.match(D);if(!B)continue;let W=K(a,B[1]),C=(await ft(e,r)).filter(ie=>ie.predicate===F&&W.has(ie.object));if(!C.length)continue;let O=Ye(ln(C),o).map(ae),M=O.slice(0,je),q=O.slice(je),U=q.length?`
151
151
  \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:M.join(`
152
- `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}let d=c.match(Sj),f=d?null:c.match(Ej),p=d?d[1]:f?.[2],m=d?d[2]:f?.[1],h=p&&m?jj(m):null;if(h){let F=`mgx:${h.replace(/\s+/g,"-")}-than`,D=await mt(e,r),B=K(a,p),W=[...B].sort((O,M)=>O.length-M.length)[0],C=O=>B.has(O)||O.startsWith(`${W}-`)||O.startsWith(`${W} `)||D.some(M=>Gn.has(M.predicate)&&M.subject===O&&B.has(M.object)),I=un(D.filter(O=>O.predicate===F&&Gs(O))).filter(O=>O.subject!==O.object&&C(O.subject)&&C(O.object));if(I.length){let O=new Set,M=new Map;for(let X of I)O.add(X.subject),O.add(X.object),M.set(X.object,(M.get(X.object)||0)+1),M.has(X.subject)||M.set(X.subject,M.get(X.subject)||0);let q=new Map(M),U=[],ie=null;for(;q.size;){let X=[...q.keys()].filter(oe=>q.get(oe)===0);if(X.length!==1){ie=X.length===0?{text:`I can't order the ${W}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} ${W} from what I know \u2014 nothing compares ${X[0]} and ${X[1]}. Teach me, e.g. "${X[0]} is ${h} than ${X[1]}".`,replace:!0,miss:!0};break}let J=X[0];U.push(J),q.delete(J);for(let oe of I)oe.subject===J&&q.has(oe.object)&&q.set(oe.object,q.get(oe.object)-1)}if(ie)return ie;let se=U.slice(0,-1).map((X,J)=>I.find(oe=>oe.subject===X&&oe.object===U[J+1]));if(se.every(Boolean)){let X=se.map(J=>`${Ct(J)}${J.provenance?` (source: ${J.provenance})`:""}`).join("; ");return{text:`${U[0]} \u2014 ${X}; so ${U[0]} is the ${m} ${W}`,replace:!0}}}}let g=s?c.match(bj):null;if(g){let F=K(a,g[1]),D=(await mt(e,r)).filter(B=>xg.test(B.predicate)&&F.has(B.subject));if(D.length){let W=Ye(un(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
152
+ `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}let d=c.match($j),f=d?null:c.match(xj),p=d?d[1]:f?.[2],m=d?d[2]:f?.[1],h=p&&m?kj(m):null;if(h){let F=`mgx:${h.replace(/\s+/g,"-")}-than`,D=await ft(e,r),B=K(a,p),W=[...B].sort((O,M)=>O.length-M.length)[0],C=O=>B.has(O)||O.startsWith(`${W}-`)||O.startsWith(`${W} `)||D.some(M=>qn.has(M.predicate)&&M.subject===O&&B.has(M.object)),I=ln(D.filter(O=>O.predicate===F&&qs(O))).filter(O=>O.subject!==O.object&&C(O.subject)&&C(O.object));if(I.length){let O=new Set,M=new Map;for(let X of I)O.add(X.subject),O.add(X.object),M.set(X.object,(M.get(X.object)||0)+1),M.has(X.subject)||M.set(X.subject,M.get(X.subject)||0);let q=new Map(M),U=[],ie=null;for(;q.size;){let X=[...q.keys()].filter(oe=>q.get(oe)===0);if(X.length!==1){ie=X.length===0?{text:`I can't order the ${W}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} ${W} from what I know \u2014 nothing compares ${X[0]} and ${X[1]}. Teach me, e.g. "${X[0]} is ${h} than ${X[1]}".`,replace:!0,miss:!0};break}let J=X[0];U.push(J),q.delete(J);for(let oe of I)oe.subject===J&&q.has(oe.object)&&q.set(oe.object,q.get(oe.object)-1)}if(ie)return ie;let se=U.slice(0,-1).map((X,J)=>I.find(oe=>oe.subject===X&&oe.object===U[J+1]));if(se.every(Boolean)){let X=se.map(J=>`${Tt(J)}${J.provenance?` (source: ${J.provenance})`:""}`).join("; ");return{text:`${U[0]} \u2014 ${X}; so ${U[0]} is the ${m} ${W}`,replace:!0}}}}let g=s?c.match(mj):null;if(g){let F=K(a,g[1]),D=(await ft(e,r)).filter(B=>yg.test(B.predicate)&&F.has(B.subject));if(D.length){let W=Ye(ln(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
153
153
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
154
- `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}}let b=c.match(wj);if(b){let F=b[1].toLowerCase(),D=K(a,b[2].replace(/^(?:an?|the)\s+/i,"").trim()),B=(await mt(e,r)).filter(W=>xg.test(W.predicate)&&W.predicate.endsWith(`-${F}`)&&D.has(W.object));if(B.length){let C=Ye(un(B),o).map(ae),I=C.slice(0,je),O=C.slice(je),M=O.length?`
154
+ `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}}let b=c.match(hj);if(b){let F=b[1].toLowerCase(),D=K(a,b[2].replace(/^(?:an?|the)\s+/i,"").trim()),B=(await ft(e,r)).filter(W=>yg.test(W.predicate)&&W.predicate.endsWith(`-${F}`)&&D.has(W.object));if(B.length){let C=Ye(ln(B),o).map(ae),I=C.slice(0,je),O=C.slice(je),M=O.length?`
155
155
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
156
- `)+M,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}let y=n?.parsed?.shape==="meta"?n.parsed.object:null,w=n?.parsed&&n.parsed.node!=="miss";if(!y&&s&&!w&&!_g.test(c)){let F=c.match(Jg)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);F&&(y=gs(F[1]))}if(!y&&n?.ambiguous&&Array.isArray(n.candidateParses)){let F=n.candidateParses.find(D=>D?.shape==="meta"&&D.object);F&&(y=gs(String(F.object)))}if(y){let F=XE(y),{predicate:D}=F,B=F.subject.replace(/^(?:the|an?)\s+/i,"").trim()||F.subject,W=!1;if(D&&qn.test(B)){if(!i){let oe=String(Vs[D]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${B.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${oe?` ${oe}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}B=i,W=!0}let C=K(a,B),I=(await mt(e,r)).filter(oe=>C.has(oe.subject)&&!bg.has(oe.predicate)),O=D?I.filter(oe=>l(oe.predicate)===D):I;if(!O.length){if(D&&(I.length||W))return{text:`I don't have any "${Vs[D]}" facts about ${B}.`,replace:s,...I.length?{}:{miss:!0}};if(!D){let oe=Ye((await mt(e,r)).filter(H=>C.has(H.object)),o);if(oe.length){let H=oe.map(ae),le=H.slice(0,je),ne=H.slice(je),_e=ne.length?`
156
+ `)+M,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}let y=n?.parsed?.shape==="meta"?n.parsed.object:null,w=n?.parsed&&n.parsed.node!=="miss";if(!y&&s&&!w&&!Sg.test(c)){let F=c.match(Kg)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);F&&(y=hs(F[1]))}if(!y&&n?.ambiguous&&Array.isArray(n.candidateParses)){let F=n.candidateParses.find(D=>D?.shape==="meta"&&D.object);F&&(y=hs(String(F.object)))}if(y){let F=HE(y),{predicate:D}=F,B=F.subject.replace(/^(?:the|an?)\s+/i,"").trim()||F.subject,W=!1;if(D&&Wn.test(B)){if(!i){let oe=String(Gs[D]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${B.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${oe?` ${oe}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}B=i,W=!0}let C=K(a,B),I=(await ft(e,r)).filter(oe=>C.has(oe.subject)&&!mg.has(oe.predicate)),O=D?I.filter(oe=>l(oe.predicate)===D):I;if(!O.length){if(D&&(I.length||W))return{text:`I don't have any "${Gs[D]}" facts about ${B}.`,replace:s,...I.length?{}:{miss:!0}};if(!D){let oe=Ye((await ft(e,r)).filter(H=>C.has(H.object)),o);if(oe.length){let H=oe.map(ae),le=H.slice(0,je),ne=H.slice(je),_e=ne.length?`
157
157
  \u2026and ${ne.length} more \u2014 say 'more' to see them.`:"";return{text:le.join(`
158
- `)+_e,replace:s,...ne.length?{pending:{items:ne,noun:"facts"}}:{}}}}return null}O=Ye(O,o);let M=await mt(e,r),{lines:q,grouped:U}=yg(O,M,C),ie=!D&&q.length>QE?await ZE(B,O,M,q):null;if(ie)return{...ie,replace:s};if(U)return{...U,replace:s};let se=q.slice(0,je),X=q.slice(je),J=X.length?`
158
+ `)+_e,replace:s,...ne.length?{pending:{items:ne,noun:"facts"}}:{}}}}return null}O=Ye(O,o);let M=await ft(e,r),{lines:q,grouped:U}=gg(O,M,C),ie=!D&&q.length>YE?await XE(B,O,M,q):null;if(ie)return{...ie,replace:s};if(U)return{...U,replace:s};let se=q.slice(0,je),X=q.slice(je),J=X.length?`
159
159
  \u2026and ${X.length} more \u2014 say 'more' to see them.`:"";return{text:se.join(`
160
- `)+J,replace:s,...X.length?{pending:{items:X,noun:"facts"}}:{}}}if(!s)return null;let $=c.match(ME);if($){let D=`mgx:${$[2].toLowerCase().replace(/\s+/g,"-")}-than`,B=await Yl(e),W=se=>{let X=se.replace(/^(?:an?|the)\s+/i,"").trim();return i&&qn.test(X)?i:X},C=W($[1]),I=W($[3]),O=K(a,C),M=K(a,I),q=B.find(se=>se.predicate===D&&O.has(se.subject)&&M.has(se.object));if(q){let se=B.find(J=>J.predicate===D&&O.has(J.object)&&M.has(J.subject)),X=se?` \u2014 though you also told me the opposite: ${ae(se)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${ae(q)}${X}`,replace:!0}}let U=B.filter(se=>se.predicate===D&&(O.has(se.subject)||O.has(se.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${U.length?` I do know: ${U.slice(0,3).map(ae).join("; ")}.`:""} If it's true, teach me: "${C} is ${$[2].toLowerCase()} than ${I}".`,replace:!0,miss:!0}}for(let{predicate:F,phrase:D,re:B}of Tj){let W=c.match(B);if(!W)continue;let C=await Yl(e),I=K(a,W[1]),O=K(a,W[2]),M=C.find(U=>U.predicate===F&&I.has(U.subject)&&O.has(U.object));if(M)return{text:`yes \u2014 ${ae(M)}`,replace:!0};let q=C.filter(U=>U.predicate===F&&I.has(U.subject));if(q.length){let U=q.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${W[1]} ${D} ${W[2]}. I do know: ${U}.`,replace:!0,miss:!0}}if(!n?.parsed&&C.some(U=>I.has(U.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${W[1]} ${D} ${W[2]}.`,replace:!0,miss:!0};break}let j=c.match(ps)||Zl(c);if(j){let F=K(a,j[1]),D=K(a,j[2]),B=await mt(e,r),W=M=>F.has(M.subject)&&D.has(M.object),{DISJOINT_PREDICATE:C}=await Promise.resolve().then(()=>(Ft(),tn)),I=M=>F.has(M.subject)||F.has(M.object)||D.has(M.subject)||D.has(M.object);return B.some(M=>M.predicate===C&&Gs(M)&&I(M))?null:Wg(B.find(M=>Gn.has(M.predicate)&&W(M)),B.find(M=>M.predicate===bi&&W(M)))}let v=tu(c),x=v.match(pj);if(x){let F=await mt(e,r),D=x[1],B=Eg(x[2],x[3],F);if(B&&v!==Sg(c)&&(B=kg(B)),B&&D)return{text:`I can't speak for ${D.trim()} ${x[2]} \u2014 what I remember is generic, not universal. ${B.text}.`,replace:!0};if(B)return B;let W=K(a,x[2]),C=F.filter(I=>I.predicate==="mgx:capableOf"&&W.has(I.subject));if(C.length){let I=C.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${x[2]} can ${x[3]}. I do know: ${I}. If it's true, teach me: "a ${C[0].subject} can ${x[3]}".`,replace:!0,miss:!0}}return jg(x[2],x[3],F)}let k=c.match(fj);if(k){let F=K(a,k[1]),D=K(a,k[2]),B=new Set(["mgx:hasA","tmct:has"]),W=await Yl(e),C=q=>W.find(U=>B.has(U.predicate)&&q.has(U.subject)&&D.has(U.object)),I=C(F);if(I)return{text:`yes \u2014 ${ae(I)}`,replace:!0};let O=[{terms:F,chain:[]}],M=new Set;for(let q=0;q<4;q+=1){let U=[];for(let{terms:ie,chain:se}of O){let X=W.filter(J=>Gn.has(J.predicate)&&ie.has(J.subject)&&!M.has(J.object));for(let J of X){if(M.has(J.object))continue;M.add(J.object);let oe=[...se,J],H=C(K(a,J.object));if(H)return{text:`yes \u2014 ${[...oe.map(ae),ae(H)].join("; ")}`,replace:!0};U.push({terms:K(a,J.object),chain:oe})}}if(!U.length)break;O=U}return null}let _=tu(c),R=_.match(yj);if(R){let F=await mt(e,r),D=!!R[1],B=K(a,R[2]),W=K(a,R[3]),C=Eg(R[2],R[3],F);if(C&&_!==Sg(c)&&(C=kg(C)),C&&D)return{text:`I can't speak for ${R[1].trim()} ${R[2]} \u2014 what I remember is generic, not universal. ${C.text}.`,replace:!0};if(C)return C;if(s){let I=F.filter(M=>M.predicate==="mgx:capableOf"&&B.has(M.subject));if(I.length){let M=I.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${R[2]} can ${R[3]}. I do know: ${M}. If it's true, teach me: "a ${I[0].subject} can ${R[3]}".`,replace:!0,miss:!0}}let O=jg(R[2],R[3],F);if(O)return O;if(!/\s/.test(R[2].trim())&&!F.some(M=>B.has(M.subject)||B.has(M.object))){let M=iu(na(R[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${R[2]}" yet. Teach me "a ${M} can ${R[3]}" (or "a ${M} cannot ${R[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let E=c.match(mj);if(E){let F=K(a,E[1]),D=(await mt(e,r)).filter(M=>(M.predicate==="mgx:capableOf"||M.predicate===bo)&&F.has(M.subject));if(!D.length)return null;let W=Ye(un(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
160
+ `)+J,replace:s,...X.length?{pending:{items:X,noun:"facts"}}:{}}}if(!s)return null;let $=c.match(OE);if($){let D=`mgx:${$[2].toLowerCase().replace(/\s+/g,"-")}-than`,B=await Kl(e),W=se=>{let X=se.replace(/^(?:an?|the)\s+/i,"").trim();return i&&Wn.test(X)?i:X},C=W($[1]),I=W($[3]),O=K(a,C),M=K(a,I),q=B.find(se=>se.predicate===D&&O.has(se.subject)&&M.has(se.object));if(q){let se=B.find(J=>J.predicate===D&&O.has(J.object)&&M.has(J.subject)),X=se?` \u2014 though you also told me the opposite: ${ae(se)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${ae(q)}${X}`,replace:!0}}let U=B.filter(se=>se.predicate===D&&(O.has(se.subject)||O.has(se.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${U.length?` I do know: ${U.slice(0,3).map(ae).join("; ")}.`:""} If it's true, teach me: "${C} is ${$[2].toLowerCase()} than ${I}".`,replace:!0,miss:!0}}for(let{predicate:F,phrase:D,re:B}of _j){let W=c.match(B);if(!W)continue;let C=await Kl(e),I=K(a,W[1]),O=K(a,W[2]),M=C.find(U=>U.predicate===F&&I.has(U.subject)&&O.has(U.object));if(M)return{text:`yes \u2014 ${ae(M)}`,replace:!0};let q=C.filter(U=>U.predicate===F&&I.has(U.subject));if(q.length){let U=q.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${W[1]} ${D} ${W[2]}. I do know: ${U}.`,replace:!0,miss:!0}}if(!n?.parsed&&C.some(U=>I.has(U.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${W[1]} ${D} ${W[2]}.`,replace:!0,miss:!0};break}let j=c.match(ds)||Ql(c);if(j){let F=K(a,j[1]),D=K(a,j[2]),B=await ft(e,r),W=M=>F.has(M.subject)&&D.has(M.object),{DISJOINT_PREDICATE:C}=await Promise.resolve().then(()=>(Pt(),en)),I=M=>F.has(M.subject)||F.has(M.object)||D.has(M.subject)||D.has(M.object);return B.some(M=>M.predicate===C&&qs(M)&&I(M))?null:zg(B.find(M=>qn.has(M.predicate)&&W(M)),B.find(M=>M.predicate===gi&&W(M)))}let v=eu(c),x=v.match(lj);if(x){let F=await ft(e,r),D=x[1],B=xg(x[2],x[3],F);if(B&&v!==$g(c)&&(B=vg(B)),B&&D)return{text:`I can't speak for ${D.trim()} ${x[2]} \u2014 what I remember is generic, not universal. ${B.text}.`,replace:!0};if(B)return B;let W=K(a,x[2]),C=F.filter(I=>I.predicate==="mgx:capableOf"&&W.has(I.subject));if(C.length){let I=C.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${x[2]} can ${x[3]}. I do know: ${I}. If it's true, teach me: "a ${C[0].subject} can ${x[3]}".`,replace:!0,miss:!0}}return kg(x[2],x[3],F)}let k=c.match(uj);if(k){let F=K(a,k[1]),D=K(a,k[2]),B=new Set(["mgx:hasA","tmct:has"]),W=await Kl(e),C=q=>W.find(U=>B.has(U.predicate)&&q.has(U.subject)&&D.has(U.object)),I=C(F);if(I)return{text:`yes \u2014 ${ae(I)}`,replace:!0};let O=[{terms:F,chain:[]}],M=new Set;for(let q=0;q<4;q+=1){let U=[];for(let{terms:ie,chain:se}of O){let X=W.filter(J=>qn.has(J.predicate)&&ie.has(J.subject)&&!M.has(J.object));for(let J of X){if(M.has(J.object))continue;M.add(J.object);let oe=[...se,J],H=C(K(a,J.object));if(H)return{text:`yes \u2014 ${[...oe.map(ae),ae(H)].join("; ")}`,replace:!0};U.push({terms:K(a,J.object),chain:oe})}}if(!U.length)break;O=U}return null}let _=eu(c),R=_.match(gj);if(R){let F=await ft(e,r),D=!!R[1],B=K(a,R[2]),W=K(a,R[3]),C=xg(R[2],R[3],F);if(C&&_!==$g(c)&&(C=vg(C)),C&&D)return{text:`I can't speak for ${R[1].trim()} ${R[2]} \u2014 what I remember is generic, not universal. ${C.text}.`,replace:!0};if(C)return C;if(s){let I=F.filter(M=>M.predicate==="mgx:capableOf"&&B.has(M.subject));if(I.length){let M=I.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${R[2]} can ${R[3]}. I do know: ${M}. If it's true, teach me: "a ${I[0].subject} can ${R[3]}".`,replace:!0,miss:!0}}let O=kg(R[2],R[3],F);if(O)return O;if(!/\s/.test(R[2].trim())&&!F.some(M=>B.has(M.subject)||B.has(M.object))){let M=ru(ta(R[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${R[2]}" yet. Teach me "a ${M} can ${R[3]}" (or "a ${M} cannot ${R[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let E=c.match(dj);if(E){let F=K(a,E[1]),D=(await ft(e,r)).filter(M=>(M.predicate==="mgx:capableOf"||M.predicate===go)&&F.has(M.subject));if(!D.length)return null;let W=Ye(ln(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
161
161
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
162
- `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let A=c.match(xj);if(A){let F=K(a,A[1]),D=K(a,A[2]),B=await mt(e,r),W=un(B.filter(C=>C.predicate==="mgx:capableOf"&&D.has(C.object))).filter(C=>yi(new Set([C.subject]),D,B).verdict==="yes");if(W.length){let{findIsaChain:C,SUBCLASS_PREDICATE:I,TYPE_PREDICATE:O}=await Promise.resolve().then(()=>(Ft(),tn)),M=B.filter(Q=>Q.predicate===I),q=B.filter(Q=>Q.predicate===O),U=M.map(Q=>[Q.subject,Q.object]),ie=q.map(Q=>[Q.subject,Q.object]),se=Q=>(Q.predicate===I?M:q).find(xe=>xe.subject===Q.subject&&xe.object===Q.object),X=new Map,J=W.filter(Q=>F.has(Q.subject)?!0:(X.has(Q.subject)||X.set(Q.subject,C(Q.subject,F,ie,U,{maxHops:3})),!!X.get(Q.subject))),H=Ye(J.length?J:W,o).map(Q=>{let xe=J.length?X.get(Q.subject):null;if(!xe||xe.length<2)return ae(Q);let ge=xe.map(se);if(!ge.every(Boolean))return ae(Q);let ve=ge.map(V=>`${Ct(V)}${V.provenance?` (source: ${V.provenance})`:""}`).join("; ");return`${ae(Q)} \u2014 via: ${ve}`}),le=H.slice(0,je),ne=H.slice(je),_e=ne.length?`
162
+ `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let A=c.match(yj);if(A){let F=K(a,A[1]),D=K(a,A[2]),B=await ft(e,r),W=ln(B.filter(C=>C.predicate==="mgx:capableOf"&&D.has(C.object))).filter(C=>wi(new Set([C.subject]),D,B).verdict==="yes");if(W.length){let{findIsaChain:C,SUBCLASS_PREDICATE:I,TYPE_PREDICATE:O}=await Promise.resolve().then(()=>(Pt(),en)),M=B.filter(Q=>Q.predicate===I),q=B.filter(Q=>Q.predicate===O),U=M.map(Q=>[Q.subject,Q.object]),ie=q.map(Q=>[Q.subject,Q.object]),se=Q=>(Q.predicate===I?M:q).find(xe=>xe.subject===Q.subject&&xe.object===Q.object),X=new Map,J=W.filter(Q=>F.has(Q.subject)?!0:(X.has(Q.subject)||X.set(Q.subject,C(Q.subject,F,ie,U,{maxHops:3})),!!X.get(Q.subject))),H=Ye(J.length?J:W,o).map(Q=>{let xe=J.length?X.get(Q.subject):null;if(!xe||xe.length<2)return ae(Q);let ge=xe.map(se);if(!ge.every(Boolean))return ae(Q);let ve=ge.map(V=>`${Tt(V)}${V.provenance?` (source: ${V.provenance})`:""}`).join("; ");return`${ae(Q)} \u2014 via: ${ve}`}),le=H.slice(0,je),ne=H.slice(je),_e=ne.length?`
163
163
  \u2026and ${ne.length} more \u2014 say 'more' to see them.`:"";return{text:(J.length?"":`nothing I remember ties these to "${A[1]}", but:
164
164
  `)+le.join(`
165
- `)+_e,replace:!0,...ne.length?{pending:{items:ne,noun:"facts"}}:{}}}}let N=c.match($j);if(N&&N[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let F=K(a,N[1]),D=(await mt(e,r)).filter(B=>B.predicate==="mgxneg:capableOf"&&F.has(B.object));if(D.length){let W=Ye(un(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
165
+ `)+_e,replace:!0,...ne.length?{pending:{items:ne,noun:"facts"}}:{}}}}let L=c.match(wj);if(L&&L[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let F=K(a,L[1]),D=(await ft(e,r)).filter(B=>B.predicate==="mgxneg:capableOf"&&F.has(B.object));if(D.length){let W=Ye(ln(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
166
166
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
167
- `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${N[1].trim()}.`,replace:!0,miss:!0}}let T=c.match(vj);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let F=K(a,T[1]),D=Mc(F,await mt(e,r));if(D.length){let W=Ye(un(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
167
+ `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${L[1].trim()}.`,replace:!0,miss:!0}}let T=c.match(bj);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let F=K(a,T[1]),D=Nc(F,await ft(e,r));if(D.length){let W=Ye(ln(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
168
168
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
169
- `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}}let P=c.match(hj);if(P&&!Cj.has(P[1].trim().split(/\s+/)[0]?.toLowerCase())){let F=K(a,P[1]),D=(await mt(e,r)).filter(M=>M.predicate==="mgx:hasA"&&F.has(M.object));if(!D.length)return null;let W=Ye(un(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
169
+ `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}}let P=c.match(pj);if(P&&!Rj.has(P[1].trim().split(/\s+/)[0]?.toLowerCase())){let F=K(a,P[1]),D=(await ft(e,r)).filter(M=>M.predicate==="mgx:hasA"&&F.has(M.object));if(!D.length)return null;let W=Ye(ln(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
170
170
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
171
- `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let G=c.match(_g),Y=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:G?.[1];if(Y){let F=K(a,Y),D=(await mt(e,r)).filter(M=>Gn.has(M.predicate)&&F.has(M.object));if(!D.length)return null;let W=Ye(un(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
171
+ `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let G=c.match(Sg),Y=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:G?.[1];if(Y){let F=K(a,Y),D=(await ft(e,r)).filter(M=>qn.has(M.predicate)&&F.has(M.object));if(!D.length)return null;let W=Ye(ln(D),o).map(ae),C=W.slice(0,je),I=W.slice(je),O=I.length?`
172
172
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:C.join(`
173
- `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let te=c.match(dj);if(te){let F=K(a,te[1]),D=await mt(e,r),B=V=>!String(V.provenance||"").includes("corpus:")&&!String(V.provenance||"").includes("web:"),W=D.filter(V=>Gn.has(V.predicate)&&B(V)),C=new Set,I=F;for(let V=0;V<8&&I.size;V+=1){let re=new Set;for(let ce of W)I.has(ce.object)&&!C.has(ce.subject)&&re.add(ce.subject);if(!re.size)break;for(let ce of re)C.add(ce);let fe=new Set;for(let ce of re)for(let wt of K(a,ce))fe.add(wt);I=fe}let O=D.filter(V=>F.has(V.subject)||F.has(V.object)||C.has(V.subject));if(!O.length){let V=a(te[1]).split(/\s+/).filter(re=>re.length>=4&&!qg.has(re));if(V.length){let re=ce=>new Set(String(ce||"").split(/\s+/)),fe=ce=>{let wt=re(ce);return V.some(Bt=>wt.has(Bt))};O=D.filter(ce=>fe(ce.subject)||fe(ce.object))}}if(O=O.filter(V=>!bg.has(V.predicate)),!O.length)return null;let{findConsistencyViolations:M,TYPE_PREDICATE:q,SUBCLASS_PREDICATE:U,DISJOINT_PREDICATE:ie}=await Promise.resolve().then(()=>(Ft(),tn)),se=V=>!V.provenance?.includes("corpus:")&&!V.provenance?.includes("web:"),X=D.filter(V=>V.predicate===q&&se(V)).map(V=>[V.subject,V.object]),J=D.filter(V=>V.predicate===U&&se(V)).map(V=>[V.subject,V.object]),oe=D.filter(V=>V.predicate===ie&&se(V)).map(V=>[V.subject,V.object]);if(oe.length){let re=M(X,J,oe,{focus:F,budget:5}).find(fe=>F.has(fe.subject));if(re)return{text:`I can't answer that \u2014 what I've been told about ${re.subject} is inconsistent: it's taught to be both ${re.classA} and ${re.classB}, but ${re.viaA} and ${re.viaB} are disjoint (${re.viaA} owl:disjointWith ${re.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let H=O.find(V=>F.has(V.subject)||F.has(V.object)),le=H?F.has(H.subject)?H.subject:H.object:te[1].trim(),ne=O.some(V=>C.has(V.subject)&&!F.has(V.subject)&&!F.has(V.object));O=Ye(O,o);let _e=`${O.length} remembered fact${O.length===1?"":"s"} about ${le}${ne?" (including its known subtypes)":""}:`,{lines:Le,grouped:Q}=yg(O,D,F,{indent:" "});if(Q)return{...Q,text:`${_e}
173
+ `)+O,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let te=c.match(cj);if(te){let F=K(a,te[1]),D=await ft(e,r),B=V=>!String(V.provenance||"").includes("corpus:")&&!String(V.provenance||"").includes("web:"),W=D.filter(V=>qn.has(V.predicate)&&B(V)),C=new Set,I=F;for(let V=0;V<8&&I.size;V+=1){let re=new Set;for(let ce of W)I.has(ce.object)&&!C.has(ce.subject)&&re.add(ce.subject);if(!re.size)break;for(let ce of re)C.add(ce);let fe=new Set;for(let ce of re)for(let bt of K(a,ce))fe.add(bt);I=fe}let O=D.filter(V=>F.has(V.subject)||F.has(V.object)||C.has(V.subject));if(!O.length){let V=a(te[1]).split(/\s+/).filter(re=>re.length>=4&&!Bg.has(re));if(V.length){let re=ce=>new Set(String(ce||"").split(/\s+/)),fe=ce=>{let bt=re(ce);return V.some(zt=>bt.has(zt))};O=D.filter(ce=>fe(ce.subject)||fe(ce.object))}}if(O=O.filter(V=>!mg.has(V.predicate)),!O.length)return null;let{findConsistencyViolations:M,TYPE_PREDICATE:q,SUBCLASS_PREDICATE:U,DISJOINT_PREDICATE:ie}=await Promise.resolve().then(()=>(Pt(),en)),se=V=>!V.provenance?.includes("corpus:")&&!V.provenance?.includes("web:"),X=D.filter(V=>V.predicate===q&&se(V)).map(V=>[V.subject,V.object]),J=D.filter(V=>V.predicate===U&&se(V)).map(V=>[V.subject,V.object]),oe=D.filter(V=>V.predicate===ie&&se(V)).map(V=>[V.subject,V.object]);if(oe.length){let re=M(X,J,oe,{focus:F,budget:5}).find(fe=>F.has(fe.subject));if(re)return{text:`I can't answer that \u2014 what I've been told about ${re.subject} is inconsistent: it's taught to be both ${re.classA} and ${re.classB}, but ${re.viaA} and ${re.viaB} are disjoint (${re.viaA} owl:disjointWith ${re.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let H=O.find(V=>F.has(V.subject)||F.has(V.object)),le=H?F.has(H.subject)?H.subject:H.object:te[1].trim(),ne=O.some(V=>C.has(V.subject)&&!F.has(V.subject)&&!F.has(V.object));O=Ye(O,o);let _e=`${O.length} remembered fact${O.length===1?"":"s"} about ${le}${ne?" (including its known subtypes)":""}:`,{lines:Le,grouped:Q}=gg(O,D,F,{indent:" "});if(Q)return{...Q,text:`${_e}
174
174
  ${Q.text}`};let xe=Le.slice(0,je),ge=Le.slice(je),ve=ge.length?`
175
175
  \u2026and ${ge.length} more \u2014 say 'more' to see them.`:"";return{text:`${_e}
176
176
  ${xe.join(`
177
- `)}${ve}`,replace:!0,...ge.length?{pending:{items:ge.map(V=>V.trim()),noun:"facts"}}:{}}}return null}async function Wj(e,t){let n=await Tr(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&mg[s]?mg[s][0]:null}function ta(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<Gj;r+=1){let i=null;for(let a of e.relations||[])if(qj.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 Xg(e,t,n,s,o=null,r=null,i={},a=null){return Yg(await Vj(e,t,n,s,o,r,i,a),n,t)}async function Vj(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Ve(),ls)))}catch{return null}let c=String(t).trim();if(o){let C=c.match(ps);if(C){let I=await Tr(o,C[1]);if(I){let O=K(l,Xt(C[2])),M=ta(o,I.id).find(U=>[...K(l,U.label)].some(ie=>O.has(ie)));if(M)return{text:`yes \u2014 the code graph says ${I.label} inherits ${M.label}.`,replace:!0};let q=await Tr(o,Xt(C[2]));if(q&&ta(o,q.id).some(U=>U.id===I.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${q.label} inherits ${I.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 mt(e,a);if(!d.length){if(!ps.test(u)&&!Ql.test(u)){let I=u.match(Ag);if(I){let O=I[1].trim(),M=qn.test(O)?r||null:O;if(M&&!/^there\b/i.test(M)&&!n?.parsed&&!Cg.test(O)&&!Tg.test(O)&&!gg.test(I[2].trim()))return Ig(M,I[2].trim().toLowerCase())}}let C=u.match(ps)||Zl(c);if(!(C&&!/^there\b/i.test(C[1].trim())||$g.test(c)))return null}let f=d.filter(C=>Gn.has(C.predicate)),p=(C,I)=>I.trust-C.trust,m=C=>{let I=C.map(ae),O=I.slice(0,je),M=I.slice(je),q=M.length?`
177
+ `)}${ve}`,replace:!0,...ge.length?{pending:{items:ge.map(V=>V.trim()),noun:"facts"}}:{}}}return null}async function zj(e,t){let n=await Ar(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&dg[s]?dg[s][0]:null}function ea(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<Uj;r+=1){let i=null;for(let a of e.relations||[])if(Bj.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 Hg(e,t,n,s,o=null,r=null,i={},a=null){return Vg(await Wj(e,t,n,s,o,r,i,a),n,t)}async function Wj(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Ve(),cs)))}catch{return null}let c=String(t).trim();if(o){let C=c.match(ds);if(C){let I=await Ar(o,C[1]);if(I){let O=K(l,Yt(C[2])),M=ea(o,I.id).find(U=>[...K(l,U.label)].some(ie=>O.has(ie)));if(M)return{text:`yes \u2014 the code graph says ${I.label} inherits ${M.label}.`,replace:!0};let q=await Ar(o,Yt(C[2]));if(q&&ea(o,q.id).some(U=>U.id===I.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${q.label} inherits ${I.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 ft(e,a);if(!d.length){if(!ds.test(u)&&!Jl.test(u)){let I=u.match(jg);if(I){let O=I[1].trim(),M=Wn.test(O)?r||null:O;if(M&&!/^there\b/i.test(M)&&!n?.parsed&&!Rg.test(O)&&!_g.test(O)&&!fg.test(I[2].trim()))return Ag(M,I[2].trim().toLowerCase())}}let C=u.match(ds)||Ql(c);if(!(C&&!/^there\b/i.test(C[1].trim())||wg.test(c)))return null}let f=d.filter(C=>qn.has(C.predicate)),p=(C,I)=>I.trust-C.trust,m=C=>{let I=C.map(ae),O=I.slice(0,je),M=I.slice(je),q=M.length?`
178
178
  \u2026and ${M.length} more \u2014 say 'more' to see them.`:"";return{text:O.join(`
179
- `)+q,replace:!0,...M.length?{pending:{items:M,noun:"facts"}}:{}}};if(Uj.test(c)){let C=Ye(f.length?f:d,i);return C.length?m(C):null}let h=u.match(Ql);if(h){let C=h[1].trim(),I=qn.test(C)?r||null:C,O=h[2].trim().toLowerCase(),M=h[3].trim();if(I&&!eu.has(O)){let q=Ul(d),{findIsaChain:U}=await Promise.resolve().then(()=>(Ft(),tn)),ie=Le=>{let Q=String(Le||"").trim().toLowerCase(),xe=[];for(let ge of d){let ve=Kl(ge.predicate);if(!ve)continue;if(ve===Q){xe.push({fact:ge,aliasFacts:[]});continue}let V=Wl(U,ve,new Set([Q]),q,{maxHops:2});if(!V)continue;let re=V.map(fe=>d.find(ce=>ce.predicate===Cr&&ce.subject===fe.subject&&ce.object===fe.object));re.every(Boolean)&&xe.push({fact:ge,aliasFacts:re})}return xe},{loadMemory:se,findRuleByName:X,resolveRelationChase:J}=await Promise.resolve().then(()=>(Ve(),ls)),{findActionPath:oe}=await Promise.resolve().then(()=>(Es(),Br)),H=await se(e),ne=await J(H,O,I,M,{relationFactsFor:ie,renderFactLine:ae,factPhrase:Ct,factTermVariants:K,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Bl,findActionPath:oe});return ne?{text:`yes \u2014 ${ne.citation.join("; ")}`,replace:!0}:ie(O).length>0||!!X(H,O)?{text:`I know the '${O}' relation, but I can't confirm ${I} is the ${O} of ${M} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${O}' yet.`,replace:!0}}}let g=sa(u).match(Gg)||Vg(u,C=>{let I=K(l,C);return d.some(O=>I.has(O.subject)||I.has(O.object))});if(g){let C=g[1].trim().toLowerCase(),I=g[2].trim(),O=qn.test(I)?r||null:I;if(O&&!eu.has(C)){let M=Ul(d),{findIsaChain:q}=await Promise.resolve().then(()=>(Ft(),tn)),U=Le=>{let Q=String(Le||"").trim().toLowerCase(),xe=[];for(let ge of d){let ve=Kl(ge.predicate);if(!ve)continue;if(ve===Q){xe.push({fact:ge,aliasFacts:[]});continue}let V=Wl(q,ve,new Set([Q]),M,{maxHops:2});if(!V)continue;let re=V.map(fe=>d.find(ce=>ce.predicate===Cr&&ce.subject===fe.subject&&ce.object===fe.object));re.every(Boolean)&&xe.push({fact:ge,aliasFacts:re})}return xe},{loadMemory:ie,findRuleByName:se,resolveRelationChaseReverse:X}=await Promise.resolve().then(()=>(Ve(),ls)),J=await ie(e),{findReachableSet:oe}=await Promise.resolve().then(()=>(Es(),Br)),le=await X(J,C,O,{relationFactsFor:U,renderFactLine:ae,factPhrase:Ct,factTermVariants:K,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Bl,findReachableSet:oe});return le.length?{text:le.map(Q=>`${Q.subject} \u2014 ${Q.citation.join("; ")}`).join(`
180
- `),replace:!0}:U(C).length>0||!!se(J,C)?{text:/^what\b/i.test(sa(u))?`I don't know what the ${C} of ${O} is from what you've told me.`:`I don't know anyone who is the ${C} of ${O} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}{let C=u.match(Hj);if(C){let I=K(l,C[1]),O=Ye(d.filter(M=>I.has(M.subject)||I.has(M.object)),i);if(O.length){let M=O.map(ae),q=M.slice(0,je),U=M.slice(je),ie=U.length?`
179
+ `)+q,replace:!0,...M.length?{pending:{items:M,noun:"facts"}}:{}}};if(Dj.test(c)){let C=Ye(f.length?f:d,i);return C.length?m(C):null}let h=u.match(Jl);if(h){let C=h[1].trim(),I=Wn.test(C)?r||null:C,O=h[2].trim().toLowerCase(),M=h[3].trim();if(I&&!Zl.has(O)){let q=Bl(d),{findIsaChain:U}=await Promise.resolve().then(()=>(Pt(),en)),ie=Le=>{let Q=String(Le||"").trim().toLowerCase(),xe=[];for(let ge of d){let ve=Hl(ge.predicate);if(!ve)continue;if(ve===Q){xe.push({fact:ge,aliasFacts:[]});continue}let V=Ul(U,ve,new Set([Q]),q,{maxHops:2});if(!V)continue;let re=V.map(fe=>d.find(ce=>ce.predicate===Tr&&ce.subject===fe.subject&&ce.object===fe.object));re.every(Boolean)&&xe.push({fact:ge,aliasFacts:re})}return xe},{loadMemory:se,findRuleByName:X,resolveRelationChase:J}=await Promise.resolve().then(()=>(Ve(),cs)),{findActionPath:oe}=await Promise.resolve().then(()=>(Ss(),zr)),H=await se(e),ne=await J(H,O,I,M,{relationFactsFor:ie,renderFactLine:ae,factPhrase:Tt,factTermVariants:K,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:zl,findActionPath:oe});return ne?{text:`yes \u2014 ${ne.citation.join("; ")}`,replace:!0}:ie(O).length>0||!!X(H,O)?{text:`I know the '${O}' relation, but I can't confirm ${I} is the ${O} of ${M} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${O}' yet.`,replace:!0}}}let g=na(u).match(Ug)||Wg(u,C=>{let I=K(l,C);return d.some(O=>I.has(O.subject)||I.has(O.object))});if(g){let C=g[1].trim().toLowerCase(),I=g[2].trim(),O=Wn.test(I)?r||null:I;if(O&&!Zl.has(C)){let M=Bl(d),{findIsaChain:q}=await Promise.resolve().then(()=>(Pt(),en)),U=Le=>{let Q=String(Le||"").trim().toLowerCase(),xe=[];for(let ge of d){let ve=Hl(ge.predicate);if(!ve)continue;if(ve===Q){xe.push({fact:ge,aliasFacts:[]});continue}let V=Ul(q,ve,new Set([Q]),M,{maxHops:2});if(!V)continue;let re=V.map(fe=>d.find(ce=>ce.predicate===Tr&&ce.subject===fe.subject&&ce.object===fe.object));re.every(Boolean)&&xe.push({fact:ge,aliasFacts:re})}return xe},{loadMemory:ie,findRuleByName:se,resolveRelationChaseReverse:X}=await Promise.resolve().then(()=>(Ve(),cs)),J=await ie(e),{findReachableSet:oe}=await Promise.resolve().then(()=>(Ss(),zr)),le=await X(J,C,O,{relationFactsFor:U,renderFactLine:ae,factPhrase:Tt,factTermVariants:K,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:zl,findReachableSet:oe});return le.length?{text:le.map(Q=>`${Q.subject} \u2014 ${Q.citation.join("; ")}`).join(`
180
+ `),replace:!0}:U(C).length>0||!!se(J,C)?{text:/^what\b/i.test(na(u))?`I don't know what the ${C} of ${O} is from what you've told me.`:`I don't know anyone who is the ${C} of ${O} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}{let C=u.match(qj);if(C){let I=K(l,C[1]),O=Ye(d.filter(M=>I.has(M.subject)||I.has(M.object)),i);if(O.length){let M=O.map(ae),q=M.slice(0,je),U=M.slice(je),ie=U.length?`
181
181
  \u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:q.join(`
182
- `)+ie,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}}let b=u.match(aj);if(b){let C=iu(b[1].trim().toLowerCase()),I=b[2].trim(),O=qn.test(I)?r||null:I;if(O){let{loadMemory:M,findRuleByName:q,RULE_KIND_PROP:U,RULE_KIND_RECURSIVE:ie}=await Promise.resolve().then(()=>(Ve(),ls)),se=await M(e),X=q(se,C),J=X?.attributes?.find(oe=>oe.prop===U)?.value;if(X&&J===ie){let oe=X.attributes.find(ne=>ne.prop==="mgx:ruleBaseCase")?.value,H=X.attributes.find(ne=>ne.prop==="mgx:ruleRecStep")?.value,le=l(O);if(oe&&H&&le){let ne=Ul(d),{findIsaChain:_e}=await Promise.resolve().then(()=>(Ft(),tn)),Le=V=>{let re=String(V||"").trim().toLowerCase(),fe=[];for(let ce of d){let wt=Kl(ce.predicate);if(!wt)continue;if(wt===re){fe.push({fact:ce,aliasFacts:[]});continue}let Bt=Wl(_e,wt,new Set([re]),ne,{maxHops:2});if(!Bt)continue;let Qe=Bt.map(dn=>d.find(Kt=>Kt.predicate===Cr&&Kt.subject===dn.subject&&Kt.object===dn.object));Qe.every(Boolean)&&fe.push({fact:ce,aliasFacts:Qe})}return fe},{findReachableSet:Q}=await Promise.resolve().then(()=>(Es(),Br)),ve=Q({entity:le,hop:0},V=>{let re=V.hop===0?oe:H;return Le(re).filter(fe=>fe.fact.subject===V.entity).map(fe=>({action:fe,nextState:{entity:fe.fact.object,hop:V.hop+1}}))},{maxDepth:20,stateKey:V=>V.entity});if(ve.length)return{text:ve.map(({node:re,path:fe})=>{let ce=new Set,wt=[];for(let Bt of fe.actions){wt.push(ae(Bt.fact));for(let Qe of Bt.aliasFacts){let dn=Qe.id||`${Qe.subject}|${Qe.predicate}|${Qe.object}`;ce.has(dn)||(ce.add(dn),wt.push(`${Ct(Qe)}${Qe.provenance?` (source: ${Qe.provenance})`:""}`))}}return`${re.entity} \u2014 ${wt.join("; ")}`}).join(`
183
- `),replace:!0}}}return null}}let y=c.match($g),w=c.match(ps)||Zl(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(ps);if(w){let C=K(l,Xt(w[2])),I=r&&qn.test(w[1].trim())?r:w[1],O=new Set(K(l,I));if([...O].some(z=>C.has(z))){let z=Xt(w[2]).trim();return{text:`yes \u2014 ${Oo(z)} ${z} is ${Oo(z)} ${z}, trivially: every kind is a kind of itself.`,replace:!0}}let M=await Wj(o,I);if(M)for(let z of K(l,M))O.add(z);let{findIsaChain:q,deriveDisjointViolations:U,SUBCLASS_PREDICATE:ie,TYPE_PREDICATE:se,DISJOINT_PREDICATE:X}=await Promise.resolve().then(()=>(Ft(),tn)),J=Gs,oe=f.filter(z=>z.predicate===ie&&J(z)),H=f.filter(z=>z.predicate===se&&J(z)),le=oe.map(z=>[z.subject,z.object]),ne=H.map(z=>[z.subject,z.object]),_e=f.filter(z=>z.predicate===ie),Le=f.filter(z=>z.predicate===se),Q=Le.map(z=>[z.subject,z.object]),xe=_e.map(z=>[z.subject,z.object]),ge=d.filter(z=>z.predicate===X&&J(z)),ve=ge.map(z=>[z.subject,z.object]),V=ge.length?U(Q.concat(xe),xe,ve,{budget:20,focus:new Set([...O,...C])}):[],re=z=>{let be=V.find(Ne=>Ne.subject===z&&C.has(Ne.object));if(!be)return null;let we=f.filter(Ne=>C.has(Ne.object)&&(Ne.subject===be.viaClass||Ne.subject===be.subject)).sort(p)[0],Ee=ge.find(Ne=>Ne.subject===be.viaClass&&Ne.object===be.object||Ne.subject===be.object&&Ne.object===be.viaClass);return!we||!Ee?null:ej(we,Ee)},fe=f.filter(z=>O.has(z.subject)&&C.has(z.object)).sort(p)[0],ce=d.filter(z=>z.predicate===bi&&O.has(z.subject)&&C.has(z.object)).sort(p)[0],wt=ge.find(z=>O.has(z.subject)&&C.has(z.object)||O.has(z.object)&&C.has(z.subject));if(fe&&!ce){let z=re(fe.subject);if(z)return z}let Bt=Wg(fe,ce||wt);if(Bt)return Bt;if(ge.length){let z=Ee=>{let Ne=new Set(Ee),_t=new Set(Ee);for(let Te=0;Te<8&&_t.size;Te+=1){let ye=new Set;for(let[Ze,ms]of xe)_t.has(Ze)&&!Ne.has(ms)&&ye.add(ms);if(!ye.size)break;for(let Ze of ye)Ne.add(Ze);_t=ye}return Ne},be=z(C),we=V.find(Ee=>O.has(Ee.subject)&&be.has(Ee.object)&&!z([Ee.viaClass]).has(Ee.object)&&!z([Ee.object]).has(Ee.viaClass));if(we){let Ee=f.filter(ye=>O.has(ye.subject)&&ye.object===we.viaClass).sort(p)[0],Ne=ge.find(ye=>ye.subject===we.viaClass&&ye.object===we.object||ye.subject===we.object&&ye.object===we.viaClass),_t=!C.has(we.object),Te=_t?f.filter(ye=>C.has(ye.subject)&&ye.object===we.object).sort(p)[0]:null;if(Ee&&Ne&&(!_t||Te)){let ye=Xt(w[2]).trim();return{text:`no \u2014 ${[Ee,...Te?[Te]:[]].map(ae).join("; ")}; and ${Ct(Ne)}${Ne.provenance?` (source: ${Ne.provenance})`:""} \u2014 so ${I} can never be ${Oo(ye)} ${ye}.`,replace:!0}}}}let Qe=await Tr(o,I);if(Qe){let z=new Map;for(let we of ta(o,Qe.id))for(let Ee of K(l,we.label))!O.has(Ee)&&!z.has(Ee)&&z.set(Ee,we.label);let be=f.filter(we=>z.has(we.subject)&&C.has(we.object)).sort(p)[0];if(be)return{text:`yes \u2014 the code graph says ${Qe.label} inherits ${z.get(be.subject)}, and ${ae(be)}`,replace:!0}}let dn=z=>(z.predicate===ie?oe:H).find(be=>be.subject===z.subject&&be.object===z.object);for(let z of O){let be=q(z,C,ne,le,{maxHops:2});if(!be)continue;let we=re(z);if(we)return we;let Ee=be.map(dn);if(Ee.every(Boolean))return{text:`yes \u2014 ${Zi(Ee)}`,replace:!0}}let Kt=z=>(z.predicate===ie?_e:Le).find(be=>be.subject===z.subject&&be.object===z.object);for(let z of O){let be=q(z,C,Q,xe,{maxHops:2});if(!be)continue;let we=re(z);if(we)return we;let Ee=be.map(Kt);if(Ee.every(Boolean)&&Ee.some(J))return{text:`yes \u2014 ${Zi(Ee)}`,replace:!0}}let Ut=I.match(/^(.*\S)\s+not$/i),It=Ut&&[Ut[0],r&&qn.test(Ut[1].trim())?r:Ut[1]];if(It){let z=K(l,It[1]),be=C,we=f.filter(Te=>z.has(Te.subject)&&be.has(Te.object)).sort(p)[0];if(we)return{text:`no \u2014 ${ae(we)}`,replace:!0};let Ee=ge.find(Te=>z.has(Te.subject)&&be.has(Te.object)||z.has(Te.object)&&be.has(Te.subject));if(Ee)return{text:`yes \u2014 ${ae(Ee)}`,replace:!0};let Ne=It[1].trim(),_t=Xt(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${_t}. If no ${Ne} is a ${_t}, teach me: "no ${Ne} is a ${_t}".`,replace:!0,miss:!0}}if(ge.length){let z=U(ne.concat(le),le,ve,{budget:10});for(let be of O){let we=z.find(Te=>Te.subject===be&&C.has(Te.object));if(!we)continue;let Ee=H.concat(oe).find(Te=>Te.subject===we.subject&&Te.object===we.viaType),Ne=ge.find(Te=>Te.subject===we.viaClass&&Te.object===we.object||Te.subject===we.object&&Te.object===we.viaClass),_t=[Ee,Ne].filter(Boolean).map(ae);return{text:`no \u2014 ${_t.length?_t.join("; "):`${we.viaClass} and ${we.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:Ir,ON_PROPERTY_PREDICATE:S,SOME_VALUES_FROM_PREDICATE:ue,deriveSomeValuesFromSubsumption:Re,ENTAILED_SCM_SVF_PROVENANCE:Sn,SCM_SVF_RULE_CONFIDENCE:Ys,entailedTrustFrom:uu}=await Promise.resolve().then(()=>(Ft(),tn)),du=d.filter(z=>z.predicate===S&&J(z)),pu=d.filter(z=>z.predicate===ue&&J(z));if(du.length&&pu.length){let z=new Map(pu.map(ye=>[ye.subject,ye.object])),be=du.map(ye=>({restriction:ye.subject,property:ye.object,target:z.get(ye.subject)})).filter(ye=>ye.target),we=new Set([ie,se,X,S,ue,"owl:intersectionOf"]),Ee=d.filter(ye=>J(ye)&&!we.has(ye.predicate)),Ne=Ee.map(ye=>[ye.subject,ye.predicate,ye.object]),_t=Ir(Ne,ne,le,be,{budget:10});for(let ye of O){let Ze=_t.find(rn=>rn.subject===ye&&C.has(rn.object));if(!Ze)continue;let ms=Ee.find(rn=>rn.subject===Ze.subject&&rn.predicate===Ze.viaProperty&&rn.object===Ze.viaValue),hs=H.find(rn=>rn.subject===Ze.viaValue&&rn.object===Ze.viaType),No=[ms,hs].filter(Boolean).map(ae);return{text:`yes \u2014 ${No.length?No.join("; "):`${Ze.subject} ${Ze.viaProperty} ${Ze.viaValue}, and ${Ze.viaValue} is a ${Ze.viaType}.`}`,replace:!0}}let Te=be.length>1?Re(be,le,{budget:10}):[];if(Te.length){let ye=le.concat(Te.map(ke=>[ke.subject,ke.object])),Ze=new Map(be.map(ke=>[ke.restriction,ke])),ms=new Map;for(let ke of d)ms.set(`${ke.subject}\0${ke.predicate}\0${ke.object}`,ke.trust);let hs=(ke,pn,Ot)=>ms.get(`${ke}\0${pn}\0${Ot}`),No=new Map;for(let ke of Te){let pn=Ze.get(ke.subject),Ot=Ze.get(ke.object),Wt=[pn&&hs(ke.subject,S,pn.property),hs(ke.subject,ue,ke.viaY1),Ot&&hs(ke.object,S,Ot.property),hs(ke.object,ue,ke.viaY2),hs(ke.viaY1,ie,ke.viaY2)].filter(hb=>typeof hb=="number"),Lr=uu(Wt,Ys);Lr!==null&&No.set(`${ke.subject}\0${ke.object}`,Lr)}let rn=ke=>{if(ke.predicate!==ie)return H.find(Wt=>Wt.subject===ke.subject&&Wt.object===ke.object);let pn=oe.find(Wt=>Wt.subject===ke.subject&&Wt.object===ke.object);if(pn)return pn;let Ot=Te.find(Wt=>Wt.subject===ke.subject&&Wt.object===ke.object);return Ot?{subject:Ot.subject,predicate:ie,object:Ot.object,provenance:Sn,trust:No.get(`${Ot.subject}\0${Ot.object}`)}:void 0};for(let ke of O){let pn=q(ke,C,ne,ye,{maxHops:3});if(!pn)continue;let Ot=pn.map(rn);if(Ot.every(Boolean)){let Wt=uu(Ot.map(Lr=>Lr.trust),1);return{text:`yes \u2014 ${Zi(Ot)}`,replace:!0,...Wt!==null?{trust:Wt}:{}}}}}}let fb=K(l,I),fu=f.filter(z=>fb.has(z.subject)).sort(p),fs=I.trim(),Or=Xt(w[2]).trim(),mb=[...O].some(z=>q(z,C,ne,le,{maxHops:cj}));if(fu.length){let z=fu.slice(0,3).map(ae).join("; "),be=mb?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${fs}", then ask me again.`:`If it's true, teach me: "${fs} is a kind of ${Or}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${fs} is a ${Or}. I do know: ${z}. ${be}`,replace:!0,miss:!0}}let mu=f.filter(z=>O.has(z.object)&&C.has(z.subject)).sort(p)[0];return mu?{text:`I can't confirm that \u2014 what I know runs the other way: ${ae(mu)}. A kind doesn't reverse. If it's true, teach me: "every ${fs} is a ${Or}".`,replace:!0,miss:!0}:!Qe&&!M&&!OE(fs)&&!d.some(z=>O.has(z.subject)||O.has(z.object))?{text:`I can't confirm that \u2014 I don't know "${fs}" at all yet. If it's true, teach me: "${fs} is a kind of ${Or}".`,replace:!0,miss:!0}:null}let $=c.match(Nj);if($){let[,C,I,O]=$,{SUBCLASS_PREDICATE:M,ON_PROPERTY_PREDICATE:q,buildCardinalityRestrictions:U,proveCardinalityAtLeast:ie,CARDINALITY_RULE_CONFIDENCE:se,entailedTrustFrom:X}=await Promise.resolve().then(()=>(Ft(),tn)),J=Gs,oe=f.filter(ne=>ne.predicate===M&&J(ne)).map(ne=>[ne.subject,ne.object]),H=d.filter(ne=>(ne.predicate===q||Rg.has(ne.predicate))&&J(ne)),le=U(H);if(le.length){let ne=K(l,C.trim()),_e=K(l,O.trim()),Le=Number(I),Q=vg(ne,_e,(xe,ge)=>ie(oe,le,xe,ge,Le,{}));if(Q){let xe=d.find(ce=>ce.predicate===M&&ce.subject===Q.viaClass&&ce.object===Q.viaRestriction),ge=xe?.provenance?` (source: ${xe.provenance})`:"",ve=Q.kind==="exactly"?"exactly":"at least",V=(ce,wt)=>`${ce}${wt===1?"":"s"}`,re=[xe?.trust,...H.filter(ce=>ce.subject===Q.viaRestriction).map(ce=>ce.trust),...Q.viaClass!==Q.subject?[f.find(ce=>ce.predicate===M&&ce.subject===Q.subject&&ce.object===Q.viaClass)?.trust]:[]].filter(ce=>typeof ce=="number"),fe=X(re,se);return{text:`yes \u2014 every ${Q.viaClass} has ${ve} ${Q.n} ${V(Q.object,Q.n)}${ge}, so at least ${Le} follows.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let j=c.match(Mj);if(j){let[,C,I]=j,{SUBCLASS_PREDICATE:O,ON_PROPERTY_PREDICATE:M,buildCardinalityRestrictions:q,proveMaxCardinalityZeroDenial:U,CAX_MAXC0_RULE_CONFIDENCE:ie,entailedTrustFrom:se}=await Promise.resolve().then(()=>(Ft(),tn)),X=Gs,J=f.filter(le=>le.predicate===O&&X(le)).map(le=>[le.subject,le.object]),oe=d.filter(le=>(le.predicate===M||Rg.has(le.predicate))&&X(le)),H=q(oe);if(H.length){let le=K(l,C.trim()),ne=K(l,I.trim()),_e=vg(le,ne,(Le,Q)=>U(J,H,Le,Q,{}));if(_e){let Le=d.find(ve=>ve.predicate===O&&ve.subject===_e.viaClass&&ve.object===_e.viaRestriction),Q=Le?.provenance?` (source: ${Le.provenance})`:"",xe=[Le?.trust,...oe.filter(ve=>ve.subject===_e.viaRestriction).map(ve=>ve.trust),..._e.viaClass!==_e.subject?[f.find(ve=>ve.predicate===O&&ve.subject===_e.subject&&ve.object===_e.viaClass)?.trust]:[]].filter(ve=>typeof ve=="number"),ge=se(xe,ie);return{text:`no \u2014 every ${_e.viaClass} has at most 0 ${_e.object}${Q}.`,replace:!0,...ge!==null?{trust:ge}:{}}}}}let v=c.match(Pj);if(v){let C=K(l,v[1]),I=d.filter(O=>O.predicate===zl&&C.has(O.subject)).sort(p);return I.length?m(I):null}let x=u.match(Fj);if(x){let[,C,I]=x,O=K(l,C.trim()),M=K(l,I.replace(/^an?\s+/i,"").trim()),q=d.filter(U=>U.predicate===zl&&M.has(U.subject)&&O.has(U.object)).sort(p)[0];return q?{text:`yes \u2014 ${ae(q)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} owns/maintains ${I.trim()}.`,replace:!0}}let k=u.match(Dj);if(k){let[,C,I]=k,O=K(l,C.replace(/^an?\s+/i,"").trim()),M=K(l,I.trim()),q=d.filter(U=>U.predicate===zl&&O.has(U.subject)&&M.has(U.object)).sort(p)[0];return q?{text:`yes \u2014 ${ae(q)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} is owned by ${I.trim()}.`,replace:!0}}let _=u.match(zj);if(_){let[,C,I]=_,O=K(l,C.trim()),M=K(l,`${I.trim()} method`),q=d.filter(U=>U.predicate===Fs&&O.has(U.subject)&&M.has(U.object)).sort(p)[0];return q?{text:`yes \u2014 ${ae(q)}`,replace:!0}:null}let R=u.match(Bj);if(R){let C=K(l,R[1].trim()),I=d.filter(O=>O.predicate===Fs&&C.has(O.subject)&&/ method$/.test(O.object)).sort(p);return I.length?m(I):null}let E=u.match(Ag);if(E){let C=E[1].trim(),I=Cg.test(C)||Tg.test(C)?null:qn.test(C)?r||null:C,O=E[2].trim().toLowerCase();if(I){let M=K(l,I),q=new Map,U=null;if(o){let H=await Tr(o,I);if(U=H,H)for(let le of ta(o,H.id))for(let ne of K(l,le.label))!M.has(ne)&&!q.has(ne)&&q.set(ne,le.label),M.add(ne)}let ie=H=>H.predicate===Bl&&l(H.object)===O||H.predicate===`tmct:${O}`&&H.object==="true",se=l(I).split(/\s+/).filter(H=>H.length>=4&&!qg.has(H)),X=H=>se.some(le=>new Set(String(H.subject||"").split(/\s+/)).has(le)),J=H=>M.has(H.subject)||se.length&&X(H),oe=d.filter(H=>J(H)&&ie(H)).sort(p)[0];if(oe){let H=q.get(oe.subject);return{text:H?`yes \u2014 the code graph says ${U.label} inherits ${H}, and ${ae(oe)}`:`yes \u2014 ${ae(oe)}`,replace:!0}}{let{findIsaChain:H,SUBCLASS_PREDICATE:le,TYPE_PREDICATE:ne}=await Promise.resolve().then(()=>(Ft(),tn)),_e=Gs,Le=d.filter(re=>re.predicate===le&&_e(re)),Q=d.filter(re=>re.predicate===ne&&_e(re)),xe=Le.map(re=>[re.subject,re.object]),ge=Q.map(re=>[re.subject,re.object]),ve=re=>(re.predicate===le?Le:Q).find(fe=>fe.subject===re.subject&&fe.object===re.object),V=K(l,O);for(let re of M){let fe=H(re,V,ge,xe,{maxHops:2});if(!fe)continue;let ce=fe.map(ve);if(ce.every(Boolean))return{text:`yes \u2014 ${Zi(ce)}`,replace:!0}}}if(d.some(J)&&!n?.parsed)return{text:`I don't have a fact saying ${nj(I)} is ${O}.`,replace:!0};if(!n?.parsed&&!gg.test(O))return Ig(I,O)}}let A=tu(c).match(BE);if(A&&!Gl.test(c)){let[,C,I,O]=A,M=I.toLowerCase();if(!ql.test(M)&&!Hl.test(M)){let q=C.trim(),U=qE(await Vl(M),O),ie=U.object.replace(/^an?\s+/i,"").trim();if(q&&ie){let se=U.predicate,X=K(l,q),J=K(l,ie),oe=[se,yo(se)],H=d.filter(ne=>oe.includes(ne.predicate)&&X.has(ne.subject)&&J.has(ne.object)).sort(p)[0];if(H)return{text:`${_f(H.predicate)?"no":"yes"} \u2014 ${ae(H)}`,replace:!0,generalVerbQuery:!0};let le=d.filter(ne=>oe.includes(ne.predicate)&&X.has(ne.subject));if(le.length){let ne=le.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Ct({subject:q,predicate:se,object:ie})}. I do know: ${ne}.`,replace:!0,miss:!0}}return null}}}let N=c.match(UE);if(N&&!Gl.test(c)){let[,C,I]=N,[O,M]=I.toLowerCase().split(/\s+/);if(!ql.test(O)&&!Hl.test(O)){let q=C.trim();if(q){let U=await Vl(O);M&&/^mgx:[a-z]+$/.test(U)&&(U=`${U}-${M}`);let ie=K(l,q),se=[U,yo(U)],X=Ye(d.filter(J=>se.includes(J.predicate)&&ie.has(J.subject)),i);if(X.length)return{...m(X),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&&!Gl.test(c)){let[,C,I,O]=T,M=C.toLowerCase();if(!ql.test(M)&&!Hl.test(M)&&!zE.test(M)){let q=await Vl(M);/^mgx:[a-z]+$/.test(q)&&(q=`${q}-${I.toLowerCase()}`);let U=K(l,O.replace(/^(?:an?|the)\s+/i,"").trim()),ie=Ye(d.filter(se=>se.predicate===q&&U.has(se.object)),i);if(ie.length)return{...m(ie),generalVerbQuery:!0}}}let P=c.match(Oj);if(P){let C=K(l,P[1]),I=Ye(d.filter(se=>C.has(se.subject)||C.has(se.object)),i);if(!I.length)return null;let O=C.has(I[0].subject)?I[0].subject:I[0].object,M=I.map(se=>` ${ae(se)}`),q=M.slice(0,je),U=M.slice(je),ie=U.length?`
182
+ `)+ie,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}}let b=u.match(oj);if(b){let C=ru(b[1].trim().toLowerCase()),I=b[2].trim(),O=Wn.test(I)?r||null:I;if(O){let{loadMemory:M,findRuleByName:q,RULE_KIND_PROP:U,RULE_KIND_RECURSIVE:ie}=await Promise.resolve().then(()=>(Ve(),cs)),se=await M(e),X=q(se,C),J=X?.attributes?.find(oe=>oe.prop===U)?.value;if(X&&J===ie){let oe=X.attributes.find(ne=>ne.prop==="mgx:ruleBaseCase")?.value,H=X.attributes.find(ne=>ne.prop==="mgx:ruleRecStep")?.value,le=l(O);if(oe&&H&&le){let ne=Bl(d),{findIsaChain:_e}=await Promise.resolve().then(()=>(Pt(),en)),Le=V=>{let re=String(V||"").trim().toLowerCase(),fe=[];for(let ce of d){let bt=Hl(ce.predicate);if(!bt)continue;if(bt===re){fe.push({fact:ce,aliasFacts:[]});continue}let zt=Ul(_e,bt,new Set([re]),ne,{maxHops:2});if(!zt)continue;let Qe=zt.map(un=>d.find(Ht=>Ht.predicate===Tr&&Ht.subject===un.subject&&Ht.object===un.object));Qe.every(Boolean)&&fe.push({fact:ce,aliasFacts:Qe})}return fe},{findReachableSet:Q}=await Promise.resolve().then(()=>(Ss(),zr)),ve=Q({entity:le,hop:0},V=>{let re=V.hop===0?oe:H;return Le(re).filter(fe=>fe.fact.subject===V.entity).map(fe=>({action:fe,nextState:{entity:fe.fact.object,hop:V.hop+1}}))},{maxDepth:20,stateKey:V=>V.entity});if(ve.length)return{text:ve.map(({node:re,path:fe})=>{let ce=new Set,bt=[];for(let zt of fe.actions){bt.push(ae(zt.fact));for(let Qe of zt.aliasFacts){let un=Qe.id||`${Qe.subject}|${Qe.predicate}|${Qe.object}`;ce.has(un)||(ce.add(un),bt.push(`${Tt(Qe)}${Qe.provenance?` (source: ${Qe.provenance})`:""}`))}}return`${re.entity} \u2014 ${bt.join("; ")}`}).join(`
183
+ `),replace:!0}}}return null}}let y=c.match(wg),w=c.match(ds)||Ql(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(ds);if(w){let C=K(l,Yt(w[2])),I=r&&Wn.test(w[1].trim())?r:w[1],O=new Set(K(l,I));if([...O].some(z=>C.has(z))){let z=Yt(w[2]).trim();return{text:`yes \u2014 ${Io(z)} ${z} is ${Io(z)} ${z}, trivially: every kind is a kind of itself.`,replace:!0}}let M=await zj(o,I);if(M)for(let z of K(l,M))O.add(z);let{findIsaChain:q,deriveDisjointViolations:U,SUBCLASS_PREDICATE:ie,TYPE_PREDICATE:se,DISJOINT_PREDICATE:X}=await Promise.resolve().then(()=>(Pt(),en)),J=qs,oe=f.filter(z=>z.predicate===ie&&J(z)),H=f.filter(z=>z.predicate===se&&J(z)),le=oe.map(z=>[z.subject,z.object]),ne=H.map(z=>[z.subject,z.object]),_e=f.filter(z=>z.predicate===ie),Le=f.filter(z=>z.predicate===se),Q=Le.map(z=>[z.subject,z.object]),xe=_e.map(z=>[z.subject,z.object]),ge=d.filter(z=>z.predicate===X&&J(z)),ve=ge.map(z=>[z.subject,z.object]),V=ge.length?U(Q.concat(xe),xe,ve,{budget:20,focus:new Set([...O,...C])}):[],re=z=>{let be=V.find(Ne=>Ne.subject===z&&C.has(Ne.object));if(!be)return null;let we=f.filter(Ne=>C.has(Ne.object)&&(Ne.subject===be.viaClass||Ne.subject===be.subject)).sort(p)[0],Ee=ge.find(Ne=>Ne.subject===be.viaClass&&Ne.object===be.object||Ne.subject===be.object&&Ne.object===be.viaClass);return!we||!Ee?null:JE(we,Ee)},fe=f.filter(z=>O.has(z.subject)&&C.has(z.object)).sort(p)[0],ce=d.filter(z=>z.predicate===gi&&O.has(z.subject)&&C.has(z.object)).sort(p)[0],bt=ge.find(z=>O.has(z.subject)&&C.has(z.object)||O.has(z.object)&&C.has(z.subject));if(fe&&!ce){let z=re(fe.subject);if(z)return z}let zt=zg(fe,ce||bt);if(zt)return zt;if(ge.length){let z=Ee=>{let Ne=new Set(Ee),jt=new Set(Ee);for(let Te=0;Te<8&&jt.size;Te+=1){let ye=new Set;for(let[Ze,fs]of xe)jt.has(Ze)&&!Ne.has(fs)&&ye.add(fs);if(!ye.size)break;for(let Ze of ye)Ne.add(Ze);jt=ye}return Ne},be=z(C),we=V.find(Ee=>O.has(Ee.subject)&&be.has(Ee.object)&&!z([Ee.viaClass]).has(Ee.object)&&!z([Ee.object]).has(Ee.viaClass));if(we){let Ee=f.filter(ye=>O.has(ye.subject)&&ye.object===we.viaClass).sort(p)[0],Ne=ge.find(ye=>ye.subject===we.viaClass&&ye.object===we.object||ye.subject===we.object&&ye.object===we.viaClass),jt=!C.has(we.object),Te=jt?f.filter(ye=>C.has(ye.subject)&&ye.object===we.object).sort(p)[0]:null;if(Ee&&Ne&&(!jt||Te)){let ye=Yt(w[2]).trim();return{text:`no \u2014 ${[Ee,...Te?[Te]:[]].map(ae).join("; ")}; and ${Tt(Ne)}${Ne.provenance?` (source: ${Ne.provenance})`:""} \u2014 so ${I} can never be ${Io(ye)} ${ye}.`,replace:!0}}}}let Qe=await Ar(o,I);if(Qe){let z=new Map;for(let we of ea(o,Qe.id))for(let Ee of K(l,we.label))!O.has(Ee)&&!z.has(Ee)&&z.set(Ee,we.label);let be=f.filter(we=>z.has(we.subject)&&C.has(we.object)).sort(p)[0];if(be)return{text:`yes \u2014 the code graph says ${Qe.label} inherits ${z.get(be.subject)}, and ${ae(be)}`,replace:!0}}let un=z=>(z.predicate===ie?oe:H).find(be=>be.subject===z.subject&&be.object===z.object);for(let z of O){let be=q(z,C,ne,le,{maxHops:2});if(!be)continue;let we=re(z);if(we)return we;let Ee=be.map(un);if(Ee.every(Boolean))return{text:`yes \u2014 ${Qi(Ee)}`,replace:!0}}let Ht=z=>(z.predicate===ie?_e:Le).find(be=>be.subject===z.subject&&be.object===z.object);for(let z of O){let be=q(z,C,Q,xe,{maxHops:2});if(!be)continue;let we=re(z);if(we)return we;let Ee=be.map(Ht);if(Ee.every(Boolean)&&Ee.some(J))return{text:`yes \u2014 ${Qi(Ee)}`,replace:!0}}let Bt=I.match(/^(.*\S)\s+not$/i),Ct=Bt&&[Bt[0],r&&Wn.test(Bt[1].trim())?r:Bt[1]];if(Ct){let z=K(l,Ct[1]),be=C,we=f.filter(Te=>z.has(Te.subject)&&be.has(Te.object)).sort(p)[0];if(we)return{text:`no \u2014 ${ae(we)}`,replace:!0};let Ee=ge.find(Te=>z.has(Te.subject)&&be.has(Te.object)||z.has(Te.object)&&be.has(Te.subject));if(Ee)return{text:`yes \u2014 ${ae(Ee)}`,replace:!0};let Ne=Ct[1].trim(),jt=Yt(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${jt}. If no ${Ne} is a ${jt}, teach me: "no ${Ne} is a ${jt}".`,replace:!0,miss:!0}}if(ge.length){let z=U(ne.concat(le),le,ve,{budget:10});for(let be of O){let we=z.find(Te=>Te.subject===be&&C.has(Te.object));if(!we)continue;let Ee=H.concat(oe).find(Te=>Te.subject===we.subject&&Te.object===we.viaType),Ne=ge.find(Te=>Te.subject===we.viaClass&&Te.object===we.object||Te.subject===we.object&&Te.object===we.viaClass),jt=[Ee,Ne].filter(Boolean).map(ae);return{text:`no \u2014 ${jt.length?jt.join("; "):`${we.viaClass} and ${we.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:Cr,ON_PROPERTY_PREDICATE:S,SOME_VALUES_FROM_PREDICATE:ue,deriveSomeValuesFromSubsumption:Re,ENTAILED_SCM_SVF_PROVENANCE:kn,SCM_SVF_RULE_CONFIDENCE:Ks,entailedTrustFrom:lu}=await Promise.resolve().then(()=>(Pt(),en)),uu=d.filter(z=>z.predicate===S&&J(z)),du=d.filter(z=>z.predicate===ue&&J(z));if(uu.length&&du.length){let z=new Map(du.map(ye=>[ye.subject,ye.object])),be=uu.map(ye=>({restriction:ye.subject,property:ye.object,target:z.get(ye.subject)})).filter(ye=>ye.target),we=new Set([ie,se,X,S,ue,"owl:intersectionOf"]),Ee=d.filter(ye=>J(ye)&&!we.has(ye.predicate)),Ne=Ee.map(ye=>[ye.subject,ye.predicate,ye.object]),jt=Cr(Ne,ne,le,be,{budget:10});for(let ye of O){let Ze=jt.find(on=>on.subject===ye&&C.has(on.object));if(!Ze)continue;let fs=Ee.find(on=>on.subject===Ze.subject&&on.predicate===Ze.viaProperty&&on.object===Ze.viaValue),ms=H.find(on=>on.subject===Ze.viaValue&&on.object===Ze.viaType),Lo=[fs,ms].filter(Boolean).map(ae);return{text:`yes \u2014 ${Lo.length?Lo.join("; "):`${Ze.subject} ${Ze.viaProperty} ${Ze.viaValue}, and ${Ze.viaValue} is a ${Ze.viaType}.`}`,replace:!0}}let Te=be.length>1?Re(be,le,{budget:10}):[];if(Te.length){let ye=le.concat(Te.map(ke=>[ke.subject,ke.object])),Ze=new Map(be.map(ke=>[ke.restriction,ke])),fs=new Map;for(let ke of d)fs.set(`${ke.subject}\0${ke.predicate}\0${ke.object}`,ke.trust);let ms=(ke,dn,It)=>fs.get(`${ke}\0${dn}\0${It}`),Lo=new Map;for(let ke of Te){let dn=Ze.get(ke.subject),It=Ze.get(ke.object),Ut=[dn&&ms(ke.subject,S,dn.property),ms(ke.subject,ue,ke.viaY1),It&&ms(ke.object,S,It.property),ms(ke.object,ue,ke.viaY2),ms(ke.viaY1,ie,ke.viaY2)].filter(pb=>typeof pb=="number"),Or=lu(Ut,Ks);Or!==null&&Lo.set(`${ke.subject}\0${ke.object}`,Or)}let on=ke=>{if(ke.predicate!==ie)return H.find(Ut=>Ut.subject===ke.subject&&Ut.object===ke.object);let dn=oe.find(Ut=>Ut.subject===ke.subject&&Ut.object===ke.object);if(dn)return dn;let It=Te.find(Ut=>Ut.subject===ke.subject&&Ut.object===ke.object);return It?{subject:It.subject,predicate:ie,object:It.object,provenance:kn,trust:Lo.get(`${It.subject}\0${It.object}`)}:void 0};for(let ke of O){let dn=q(ke,C,ne,ye,{maxHops:3});if(!dn)continue;let It=dn.map(on);if(It.every(Boolean)){let Ut=lu(It.map(Or=>Or.trust),1);return{text:`yes \u2014 ${Qi(It)}`,replace:!0,...Ut!==null?{trust:Ut}:{}}}}}}let ub=K(l,I),pu=f.filter(z=>ub.has(z.subject)).sort(p),ps=I.trim(),Ir=Yt(w[2]).trim(),db=[...O].some(z=>q(z,C,ne,le,{maxHops:rj}));if(pu.length){let z=pu.slice(0,3).map(ae).join("; "),be=db?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${ps}", then ask me again.`:`If it's true, teach me: "${ps} is a kind of ${Ir}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${ps} is a ${Ir}. I do know: ${z}. ${be}`,replace:!0,miss:!0}}let fu=f.filter(z=>O.has(z.object)&&C.has(z.subject)).sort(p)[0];return fu?{text:`I can't confirm that \u2014 what I know runs the other way: ${ae(fu)}. A kind doesn't reverse. If it's true, teach me: "every ${ps} is a ${Ir}".`,replace:!0,miss:!0}:!Qe&&!M&&!TE(ps)&&!d.some(z=>O.has(z.subject)||O.has(z.object))?{text:`I can't confirm that \u2014 I don't know "${ps}" at all yet. If it's true, teach me: "${ps} is a kind of ${Ir}".`,replace:!0,miss:!0}:null}let $=c.match(Ij);if($){let[,C,I,O]=$,{SUBCLASS_PREDICATE:M,ON_PROPERTY_PREDICATE:q,buildCardinalityRestrictions:U,proveCardinalityAtLeast:ie,CARDINALITY_RULE_CONFIDENCE:se,entailedTrustFrom:X}=await Promise.resolve().then(()=>(Pt(),en)),J=qs,oe=f.filter(ne=>ne.predicate===M&&J(ne)).map(ne=>[ne.subject,ne.object]),H=d.filter(ne=>(ne.predicate===q||Eg.has(ne.predicate))&&J(ne)),le=U(H);if(le.length){let ne=K(l,C.trim()),_e=K(l,O.trim()),Le=Number(I),Q=bg(ne,_e,(xe,ge)=>ie(oe,le,xe,ge,Le,{}));if(Q){let xe=d.find(ce=>ce.predicate===M&&ce.subject===Q.viaClass&&ce.object===Q.viaRestriction),ge=xe?.provenance?` (source: ${xe.provenance})`:"",ve=Q.kind==="exactly"?"exactly":"at least",V=(ce,bt)=>`${ce}${bt===1?"":"s"}`,re=[xe?.trust,...H.filter(ce=>ce.subject===Q.viaRestriction).map(ce=>ce.trust),...Q.viaClass!==Q.subject?[f.find(ce=>ce.predicate===M&&ce.subject===Q.subject&&ce.object===Q.viaClass)?.trust]:[]].filter(ce=>typeof ce=="number"),fe=X(re,se);return{text:`yes \u2014 every ${Q.viaClass} has ${ve} ${Q.n} ${V(Q.object,Q.n)}${ge}, so at least ${Le} follows.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let j=c.match(Oj);if(j){let[,C,I]=j,{SUBCLASS_PREDICATE:O,ON_PROPERTY_PREDICATE:M,buildCardinalityRestrictions:q,proveMaxCardinalityZeroDenial:U,CAX_MAXC0_RULE_CONFIDENCE:ie,entailedTrustFrom:se}=await Promise.resolve().then(()=>(Pt(),en)),X=qs,J=f.filter(le=>le.predicate===O&&X(le)).map(le=>[le.subject,le.object]),oe=d.filter(le=>(le.predicate===M||Eg.has(le.predicate))&&X(le)),H=q(oe);if(H.length){let le=K(l,C.trim()),ne=K(l,I.trim()),_e=bg(le,ne,(Le,Q)=>U(J,H,Le,Q,{}));if(_e){let Le=d.find(ve=>ve.predicate===O&&ve.subject===_e.viaClass&&ve.object===_e.viaRestriction),Q=Le?.provenance?` (source: ${Le.provenance})`:"",xe=[Le?.trust,...oe.filter(ve=>ve.subject===_e.viaRestriction).map(ve=>ve.trust),..._e.viaClass!==_e.subject?[f.find(ve=>ve.predicate===O&&ve.subject===_e.subject&&ve.object===_e.viaClass)?.trust]:[]].filter(ve=>typeof ve=="number"),ge=se(xe,ie);return{text:`no \u2014 every ${_e.viaClass} has at most 0 ${_e.object}${Q}.`,replace:!0,...ge!==null?{trust:ge}:{}}}}}let v=c.match(Lj);if(v){let C=K(l,v[1]),I=d.filter(O=>O.predicate===Dl&&C.has(O.subject)).sort(p);return I.length?m(I):null}let x=u.match(Nj);if(x){let[,C,I]=x,O=K(l,C.trim()),M=K(l,I.replace(/^an?\s+/i,"").trim()),q=d.filter(U=>U.predicate===Dl&&M.has(U.subject)&&O.has(U.object)).sort(p)[0];return q?{text:`yes \u2014 ${ae(q)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} owns/maintains ${I.trim()}.`,replace:!0}}let k=u.match(Mj);if(k){let[,C,I]=k,O=K(l,C.replace(/^an?\s+/i,"").trim()),M=K(l,I.trim()),q=d.filter(U=>U.predicate===Dl&&O.has(U.subject)&&M.has(U.object)).sort(p)[0];return q?{text:`yes \u2014 ${ae(q)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} is owned by ${I.trim()}.`,replace:!0}}let _=u.match(Pj);if(_){let[,C,I]=_,O=K(l,C.trim()),M=K(l,`${I.trim()} method`),q=d.filter(U=>U.predicate===Ps&&O.has(U.subject)&&M.has(U.object)).sort(p)[0];return q?{text:`yes \u2014 ${ae(q)}`,replace:!0}:null}let R=u.match(Fj);if(R){let C=K(l,R[1].trim()),I=d.filter(O=>O.predicate===Ps&&C.has(O.subject)&&/ method$/.test(O.object)).sort(p);return I.length?m(I):null}let E=u.match(jg);if(E){let C=E[1].trim(),I=Rg.test(C)||_g.test(C)?null:Wn.test(C)?r||null:C,O=E[2].trim().toLowerCase();if(I){let M=K(l,I),q=new Map,U=null;if(o){let H=await Ar(o,I);if(U=H,H)for(let le of ea(o,H.id))for(let ne of K(l,le.label))!M.has(ne)&&!q.has(ne)&&q.set(ne,le.label),M.add(ne)}let ie=H=>H.predicate===zl&&l(H.object)===O||H.predicate===`tmct:${O}`&&H.object==="true",se=l(I).split(/\s+/).filter(H=>H.length>=4&&!Bg.has(H)),X=H=>se.some(le=>new Set(String(H.subject||"").split(/\s+/)).has(le)),J=H=>M.has(H.subject)||se.length&&X(H),oe=d.filter(H=>J(H)&&ie(H)).sort(p)[0];if(oe){let H=q.get(oe.subject);return{text:H?`yes \u2014 the code graph says ${U.label} inherits ${H}, and ${ae(oe)}`:`yes \u2014 ${ae(oe)}`,replace:!0}}{let{findIsaChain:H,SUBCLASS_PREDICATE:le,TYPE_PREDICATE:ne}=await Promise.resolve().then(()=>(Pt(),en)),_e=qs,Le=d.filter(re=>re.predicate===le&&_e(re)),Q=d.filter(re=>re.predicate===ne&&_e(re)),xe=Le.map(re=>[re.subject,re.object]),ge=Q.map(re=>[re.subject,re.object]),ve=re=>(re.predicate===le?Le:Q).find(fe=>fe.subject===re.subject&&fe.object===re.object),V=K(l,O);for(let re of M){let fe=H(re,V,ge,xe,{maxHops:2});if(!fe)continue;let ce=fe.map(ve);if(ce.every(Boolean))return{text:`yes \u2014 ${Qi(ce)}`,replace:!0}}}if(d.some(J)&&!n?.parsed)return{text:`I don't have a fact saying ${ZE(I)} is ${O}.`,replace:!0};if(!n?.parsed&&!fg.test(O))return Ag(I,O)}}let A=eu(c).match(FE);if(A&&!ql.test(c)){let[,C,I,O]=A,M=I.toLowerCase();if(!Wl.test(M)&&!Vl.test(M)){let q=C.trim(),U=BE(await Gl(M),O),ie=U.object.replace(/^an?\s+/i,"").trim();if(q&&ie){let se=U.predicate,X=K(l,q),J=K(l,ie),oe=[se,wo(se)],H=d.filter(ne=>oe.includes(ne.predicate)&&X.has(ne.subject)&&J.has(ne.object)).sort(p)[0];if(H)return{text:`${jf(H.predicate)?"no":"yes"} \u2014 ${ae(H)}`,replace:!0,generalVerbQuery:!0};let le=d.filter(ne=>oe.includes(ne.predicate)&&X.has(ne.subject));if(le.length){let ne=le.slice(0,3).map(ae).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Tt({subject:q,predicate:se,object:ie})}. I do know: ${ne}.`,replace:!0,miss:!0}}return null}}}let L=c.match(DE);if(L&&!ql.test(c)){let[,C,I]=L,[O,M]=I.toLowerCase().split(/\s+/);if(!Wl.test(O)&&!Vl.test(O)){let q=C.trim();if(q){let U=await Gl(O);M&&/^mgx:[a-z]+$/.test(U)&&(U=`${U}-${M}`);let ie=K(l,q),se=[U,wo(U)],X=Ye(d.filter(J=>se.includes(J.predicate)&&ie.has(J.subject)),i);if(X.length)return{...m(X),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&&!ql.test(c)){let[,C,I,O]=T,M=C.toLowerCase();if(!Wl.test(M)&&!Vl.test(M)&&!PE.test(M)){let q=await Gl(M);/^mgx:[a-z]+$/.test(q)&&(q=`${q}-${I.toLowerCase()}`);let U=K(l,O.replace(/^(?:an?|the)\s+/i,"").trim()),ie=Ye(d.filter(se=>se.predicate===q&&U.has(se.object)),i);if(ie.length)return{...m(ie),generalVerbQuery:!0}}}let P=c.match(Tj);if(P){let C=K(l,P[1]),I=Ye(d.filter(se=>C.has(se.subject)||C.has(se.object)),i);if(!I.length)return null;let O=C.has(I[0].subject)?I[0].subject:I[0].object,M=I.map(se=>` ${ae(se)}`),q=M.slice(0,je),U=M.slice(je),ie=U.length?`
184
184
  \u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:`${I.length} remembered fact${I.length===1?"":"s"} about ${O}:
185
185
  ${q.join(`
186
- `)}${ie}`,replace:!0,...U.length?{pending:{items:U.map(se=>se.trim()),noun:"facts"}}:{}}}let G=n?.parsed?.shape==="meta"?n.parsed.object:null,Y=!1,te=c.match(Lj);if(te)G=te[1],Y=!0;else if(!G&&!n?.parsed){let C=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);C&&(G=C[1])}if(!G)return null;let F=K(l,G),D=Ye(f.filter(C=>F.has(C.subject)),i),B=Ye(f.filter(C=>F.has(C.object)),i),W=Y?D.length?D:B:B.length?B:D;return W.length?m(W):null}var su,OE,on,Qi,fg,Og,Hz,mg,LE,Kz,Yz,Lg,Ng,Mg,NE,hg,Xz,Jz,Qz,Zz,eB,ru,tB,ME,qe,zl,Bl,Cr,PE,Gs,nB,sB,oB,rB,iB,aB,cB,lB,uB,dB,pB,fB,mB,hB,gB,gg,FE,oa,DE,bB,wB,au,Pg,yB,vB,$B,ql,Gl,zE,xB,BE,UE,Hl,WE,GE,kB,Fg,Dg,VE,SB,EB,jB,_B,Lo,RB,AB,TB,zg,CB,IB,HE,OB,LB,NB,Vs,bg,cu,Ct,YE,JE,QE,ea,sj,qg,MB,Ql,Gg,oj,rj,sa,ij,aj,ps,Gn,cj,lj,uj,eu,$g,dj,je,pj,fj,mj,hj,gj,bj,xg,wj,yj,vj,$j,xj,Sg,Hg,Sj,Ej,_j,Rj,Aj,Tj,_g,Cj,Oj,Lj,Nj,Mj,Rg,Pj,Fj,Dj,zj,Bj,Ag,qn,Tg,Cg,Ig,Uj,qj,Gj,PB,Jg,Hj,FB,Xl,nu,Kj,DB,zB,Qg,BB,UB,WB,qB,GB,ra,VB,HB,KB,YB,Yj,XB,JB,Ji=L(()=>{De();oh();Lt();Ce();os();zi();Bi();Wo();vl();ah();Ve();Pc();xl();ph();An();Jn();io();ei();bl();wl();Yo();To();Ua();Wi();bh();wh();jl();yh();_l();vh();$h();Ki();fl();Wh();Hh();Co();cg();ti(void 0);Zr(Di);su=new Set(["it","this","that","here"]),OE=e=>su.has(String(e||"").trim().toLowerCase()),on={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"},Qi=e=>e?`${String(e).toLowerCase()}(s)`:"entities",fg="look up a taught fact about a subject/verb/object";Og={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}},Hz=new Set(["stats","memory","focus",...Object.keys(Og)]),mg={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"]},LE=new Set(["have","has","holds","hold"]),Kz=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(Hn)].filter(e=>!LE.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),Yz=new Set([...sh.map(e=>e.name),...Object.values(Og).map(e=>e.tool)]),Lg=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"]),Ng=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"]),Mg=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"]),NE=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),hg=e=>e.replace(/(.)\1+/g,"$1");Xz=ou(Lg),Jz=ou(Ng),Qz=ou(Mg),Zz=new RegExp(`^(?:${[...NE].map(He).join("|")})\\s+(.+)$`,"i"),eB=[...Lg,...Ng,...Mg,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],ru="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",tB=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${ru})\\s+than\\s+(.+)$`,"i"),ME=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${ru})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),qe="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",zl="mgx:ownedBy",Bl="mgx:hasProperty",Cr="rdfs:subClassOf",PE=new Set(["operator","teach","entailed"]),Gs=e=>!!e.sourceTypes?.some(t=>PE.has(t));nB=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),sB=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),oB=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${qe})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),rB=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${ru})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),iB=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${qe})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),aB=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\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"),cB=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),lB=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),uB=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),dB=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),pB=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${qe})\\s+([\\w-]+)[?.!]*$`,"i"),fB=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${qe})\\s+([\\w-]+)[?.!]*$`,"i"),mB=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${qe})\\s+([\\w-]+)$`,"i"),hB=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${qe})\\s+(.+?)[?.!\\s]*$`,"i"),gB=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${qe}))?[?.!\\s]*$`,"i"),gg=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,FE=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"]);oa="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",DE="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",bB=new RegExp(`^(.+?)\\s+(${DE})\\s+(.+)$`,"i"),wB=new RegExp(`^([\\w'-]+)\\s+${oa}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),au="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",Pg="with|to|from|by|of|in|on|for|as|about|into",yB=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${oa}(${au})\\s+(${Pg})\\s+(.+)$`,"i"),vB=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${au})\\s+(${Pg})\\s+(.+)$`,"i"),$B=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${qe})\\s+(.+?)[.!?]*$`,"i"),ql=/^(?:is|are|am|owns|maintains)$/i,Gl=/\b(?:is|are|am|owns|maintains)\b/i,zE=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"),xB=new RegExp(`^(?:${vs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");BE=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${oa}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),UE=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${oa}([a-z]+(?:\\s+(?:${qe}))?)[?.!\\s]*$`,"i"),Hl=/^(?:be|own|maintain)$/i,WE=new RegExp(`^(${qe})\\s+(.+)$`,"i");GE=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],kB=new RegExp(`^(?:${GE.join("|")})\\b\\s*,?\\s+`,"i"),Fg=Object.freeze(["you","i","it","they","he","she","we"]),Dg=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),VE=Object.freeze([...Dg,...Fg]),SB=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${VE.join("|")})\\s+\\S+`,"i"),EB=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${Fg.join("|")})\\s+(?:is|are|am|was|were)|(${Dg.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),jB=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${qe})\\s+([\\w-]+)$`,"i"),_B=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${qe})\\s+([\\w-]+)$`,"i"),Lo="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",RB=new RegExp(`^what\\s+does\\s+(.+?)${Lo}\\s+do${Lo}\\??$`,"i"),AB=new RegExp(`^what\\s+(.+?)${Lo}\\s+does${Lo}\\??$`,"i"),TB=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${Lo}\\s+do${Lo}\\??$`,"i"),zg="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",CB=new RegExp(`^who\\s+(?:is|was)\\s+${zg}$`,"i"),IB=new RegExp(`^what\\s+(?:did|has)\\s+${zg}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),HE="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",OB=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${HE}\\b`,"i"),LB=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");NB=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Yt,...an,"owns","maintains"].filter(e=>e.length>=3)),Vs={"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"},bg=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"]),cu=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Ct=e=>`${e.subject} ${Ug(e.predicate)} ${e.object}`;YE=Object.entries(Vs).filter(([e])=>!cu.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);JE=/ \(source: [^)]*\)$/;QE=8;ea=null;sj=/^(?:every|each|all|any)\s+/i;qg=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"]),MB=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("|"))),Ql=/^(?: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,Gg=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,oj=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,rj=/^(who|what)'?s\s+/i,sa=e=>String(e).replace(rj,(t,n)=>`${n} is `),ij=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;aj=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,ps=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,Gn=new Set(["rdfs:subClassOf","rdf:type"]),cj=6,lj=/^why\s+(?=(?:is|are)\b)/i,uj=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;eu=new Set(["kind","sort","type","subclass","superclass"]),$g=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,dj=/^(?: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,pj=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,fj=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,mj=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,hj=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,gj=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,bj=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,xg=/^mgx:[a-z]+-(?:on|in|at|inside|under|below|above|near|beside|behind|by)$/,wj=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${qe})\\s+(.+?)\\s*[?.!]*$`,"i"),yj=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,vj=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,$j=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,xj=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;Sg=e=>String(e||"").replace(/\s+/g," ").trim();Hg="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",Sj=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${Hg})[?.!\\s]*$`,"i"),Ej=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${Hg})\\s+([\\w'-]+)[?.!\\s]*$`,"i");_j=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),Rj=Object.entries(Vs).filter(([e])=>!_j.has(e)&&!cu.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${He(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),Aj=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),Tj=Object.entries(Vs).filter(([e])=>!Aj.has(e)&&!cu.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=He(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=[Bg(s),...o].map(He).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),_g=/^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,Cj=new Set(["changed","change","changes","updated","modified","happened","occurred"]);Oj=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,Lj=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Nj=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,Mj=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,Rg=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),Pj=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,Fj=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,Dj=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,zj=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,Bj=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,Ag=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,qn=/^(?:it|this|that)$/i,Tg=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,Cg=/^(?:you|i|they|he|she|we)\b/i,Ig=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${na(e)} is ${t}".`,replace:!0}),Uj=/^(?: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;qj=/inherit|supertype|subclass|extend|specializ/i,Gj=8;PB=new RegExp(`\\b(?:${[...su].join("|")})\\b`,"i"),Jg=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Hj=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,FB=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),Xl="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",nu="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",Kj=`(?:\\s+${nu})?`,DB=[new RegExp(`^${Xl}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${Kj}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Xl}architecture\\s+(?:${nu}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Xl}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${nu}(?:\\s+here)?\\??$`,"i")],zB={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:on.contains,subclasses:on.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:on.calls,callees:on.calls,tests:on.tests,untested:on.tests,history:on.touches,exports:on.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"},Qg="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",BB=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+${Qg}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),UB=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${Qg}\\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"),WB=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"),qB=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"),GB=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"),ra="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",VB=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${ra}\\s*\\??$`,"i"),HB=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${ra}\\s*\\??$`,"i"),KB=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${ra}\\s*\\??$`,"i"),YB=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${ra}\\s*[.!]*$`,"i"),Yj=Object.freeze([...su].filter(e=>e!=="here").concat("they")),XB=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${Yj.join("|")})\\b(\\s+\\S.*)?$`,"i"),JB=Z(".tmct","memory","corpus-seed.json")});Ji();Ve();ks();Ki();var ia={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 tb=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),Hs=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),aa=e=>tb[e]||"other",Jj=e=>Math.max(0,Math.min(1,e));function Zg(e){let t=(e.sourceTypes||[]).map(n=>Go[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Go.entailed}function Qj(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function eb(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function nb(e,t,n={},s={}){let o={...ia,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(v=>v&&v.object&&v.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let v of i){if(aa(v.predicate)==="isa"){let x=eb(v.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:v,family:"isa",reason:"uninformative-class",share:x});continue}}c.push(v)}let u=c.filter(v=>aa(v.predicate)==="isa").map(v=>v.object),d=Hi(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let v of d.clusters){let x=0;for(let k of v.objects){p.set(k,v.label);let _=c.find(R=>R.object===k&&aa(R.predicate)==="isa");x+=_?Zg(_):0}f.set(v.label,x)}let m=null,h=-1;for(let[v,x]of[...f].sort((k,_)=>k[0].localeCompare(_[0])))x>h&&(h=x,m=v);let g=[];for(let v of c){let x=aa(v.predicate),k=Zg(v),_={provenance:k};if(Qj(v)&&(k-=o.entailedDepthPenalty,_.entailed=!0),x==="isa"){let E=.6+.4*(1-eb(v.object,n));k*=E,_.informativeness=E;let A=p.get(v.object);m&&A&&A!==m&&(k-=o.minoritySensePenalty,_.minoritySense=A)}k=Jj(k),g.push({row:v,family:x,score:k,reasons:_})}let b=[];for(let v of g)v.score<o.minScore?a.push({row:v.row,family:v.family,reason:"below-floor",score:v.score}):b.push(v);let y=new Map;for(let v of b)y.has(v.family)||y.set(v.family,[]),y.get(v.family).push(v);for(let v of y.values())v.sort((x,k)=>k.score-x.score||x.row.object.localeCompare(k.row.object));let w=Hs.filter(v=>y.has(v)).concat([...y.keys()].filter(v=>!Hs.includes(v)).sort()),$=[],j=!1;for(;$.length<r&&!j;){j=!0;for(let v of w){let x=y.get(v);if(x&&x.length&&($.push(x.shift()),j=!1,$.length>=r))break}}for(let v of w)for(let x of y.get(v)||[])a.push({row:x.row,family:x.family,reason:"over-budget",score:x.score});return $.sort((v,x)=>{let k=Hs.indexOf(v.family),_=Hs.indexOf(x.family);return k-_||x.score-v.score||v.row.object.localeCompare(x.row.object)}),{term:e,selected:$,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}oi();en();var Zj=new Set(["isa","location","partOf","capableOf","usedFor"]),e_=new Set(["single","several","chained","group","closer"]),sb=(e,t)=>`${e}:${t}`;function lu(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!Zj.has(n.family)||typeof n.form!="string"||!e_.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=sb(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 Ks=e=>`${ao(e)} ${e}`;function t_(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Ks(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Qo(s.map(Ks))}`:n}function n_(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:co(o),A_TERM:Ks(o),A_TERM_CAP:co(Ks(o)),TERMS:si(o),TERMS_CAP:co(si(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Ks(a):"",OBJECT:i,A_OBJECT:i?Ks(i):"",OBJECTS_A:Qo(r.map(Ks)),OBJECTS_PLURAL:Qo(r.map(si)),OBJECTS_RAW:Qo(r),CHAIN:t_(n&&n.length?n:r.slice(0,1))}}function s_(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 Vn(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(sb(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=hi(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=s_(l[u],n_(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}oi();var o_=Hs.filter(e=>e!=="isa"&&e!=="other");function r_(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 ob(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 i_(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 a_(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 c_(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=Vn(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=Vn(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=Vn(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 i_(a,t))for(let p of ob(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?Vn(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):Vn(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=a_(t,e,o.closerRootCount);if(u.length){let f=Vn(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 l_(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=co(`${ao(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function u_(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 rb(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...ia,...n.config||{}},a=r_(e?.selected||[]),l=[];for(let u of c_(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of o_){let d=a.get(u);if(!(!d||!d.length))for(let f of ob(d,i.maxObjectsPerBodySentence)){let p=Vn(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}l_(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:u_(l,o),provenanceRows:[...c.values()]}}var d_=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function p_(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 f_=Object.freeze({facts:"show the facts",chains:"show the chains"});function m_(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:f_,facts:n.map(d_),factCount:n.length,chains:s}}function ib(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:p_(t?.provenanceRows||[]),detail:m_(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function ab(e,t,n={},s=new Map,o={}){let r=nb(e,t,n,o),i=rb(r,s,o);return ib(r,i,o)}Ki();var cb=new Set(["rdfs:subClassOf","rdf:type"]);function lb(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(cb.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 ub(e,t,n=6){let s=jr(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Vi(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function db(e){let t=[],n=new Set;for(let s of e||[])!s||!cb.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Ve();Ji();function h_(e,t,n,s,o={}){let r=lu(s||[]);if(!r||r.size===0)return null;let i=t||[],a=lb(n||i),l=ub(a.subClassEdges,db(i));return ab(e,i,a,r,{...o,chains:l})}function pb(e,t,n,s={}){let o=Dt(e||{individuals:[],objectProperties:[]}),r=K(ee,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=h_(t,i,o,n,s);return g_(a)}function g_(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}}globalThis.tmctMemoryAsk={factAnswer:Kg,factReadBack:Xg,createInMemoryStore:Ii,normFactTerm:ee,digestTermFromPayloadBrowser:pb};})();
186
+ `)}${ie}`,replace:!0,...U.length?{pending:{items:U.map(se=>se.trim()),noun:"facts"}}:{}}}let G=n?.parsed?.shape==="meta"?n.parsed.object:null,Y=!1,te=c.match(Cj);if(te)G=te[1],Y=!0;else if(!G&&!n?.parsed){let C=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);C&&(G=C[1])}if(!G)return null;let F=K(l,G),D=Ye(f.filter(C=>F.has(C.subject)),i),B=Ye(f.filter(C=>F.has(C.object)),i),W=Y?D.length?D:B:B.length?B:D;return W.length?m(W):null}var nu,TE,sn,Ji,ug,Tg,Sz,dg,CE,Ez,jz,Cg,Ig,Og,IE,pg,_z,Rz,Az,Tz,Cz,ou,Iz,OE,qe,Dl,zl,Tr,LE,qs,Oz,Lz,Nz,Mz,Pz,Fz,Dz,zz,Bz,Uz,Wz,qz,Gz,Vz,Hz,fg,NE,sa,ME,Kz,Yz,iu,Lg,Xz,Jz,Qz,Wl,ql,PE,Zz,FE,DE,Vl,zE,UE,eB,Ng,Mg,WE,tB,nB,sB,oB,Oo,rB,iB,aB,Pg,cB,lB,qE,uB,dB,pB,Gs,mg,au,Tt,VE,KE,YE,Zi,ej,Bg,fB,Jl,Ug,tj,nj,na,sj,oj,ds,qn,rj,ij,aj,Zl,wg,cj,je,lj,uj,dj,pj,fj,mj,yg,hj,gj,bj,wj,yj,$g,qg,$j,xj,Sj,Ej,jj,_j,Sg,Rj,Tj,Cj,Ij,Oj,Eg,Lj,Nj,Mj,Pj,Fj,jg,Wn,_g,Rg,Ag,Dj,Bj,Uj,mB,Kg,qj,hB,Yl,tu,Gj,gB,bB,Yg,wB,yB,vB,$B,xB,oa,kB,SB,EB,jB,Vj,_B,RB,Xi=N(()=>{De();sh();Ot();Ce();ss();Di();zi();Uo();yl();ih();Ve();Mc();$l();lh();Rn();Xn();ro();Zr();gl();bl();Ko();Ao();Ba();Ui();mh();hh();El();gh();jl();bh();wh();Hi();pl();zh();qh();To();rg();ei(void 0);Qr(Fi);nu=new Set(["it","this","that","here"]),TE=e=>nu.has(String(e||"").trim().toLowerCase()),sn={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"},Ji=e=>e?`${String(e).toLowerCase()}(s)`:"entities",ug="look up a taught fact about a subject/verb/object";Tg={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}},Sz=new Set(["stats","memory","focus",...Object.keys(Tg)]),dg={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"]},CE=new Set(["have","has","holds","hold"]),Ez=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(Vn)].filter(e=>!CE.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),jz=new Set([...nh.map(e=>e.name),...Object.values(Tg).map(e=>e.tool)]),Cg=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"]),Ig=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"]),Og=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"]),IE=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),pg=e=>e.replace(/(.)\1+/g,"$1");_z=su(Cg),Rz=su(Ig),Az=su(Og),Tz=new RegExp(`^(?:${[...IE].map(He).join("|")})\\s+(.+)$`,"i"),Cz=[...Cg,...Ig,...Og,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],ou="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",Iz=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${ou})\\s+than\\s+(.+)$`,"i"),OE=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${ou})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),qe="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Dl="mgx:ownedBy",zl="mgx:hasProperty",Tr="rdfs:subClassOf",LE=new Set(["operator","teach","entailed"]),qs=e=>!!e.sourceTypes?.some(t=>LE.has(t));Oz=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Lz=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Nz=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${qe})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Mz=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${ou})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Pz=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${qe})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),Fz=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\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"),Dz=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),zz=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),Bz=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),Uz=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),Wz=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${qe})\\s+([\\w-]+)[?.!]*$`,"i"),qz=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${qe})\\s+([\\w-]+)[?.!]*$`,"i"),Gz=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${qe})\\s+([\\w-]+)$`,"i"),Vz=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${qe})\\s+(.+?)[?.!\\s]*$`,"i"),Hz=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${qe}))?[?.!\\s]*$`,"i"),fg=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,NE=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"]);sa="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",ME="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",Kz=new RegExp(`^(.+?)\\s+(${ME})\\s+(.+)$`,"i"),Yz=new RegExp(`^([\\w'-]+)\\s+${sa}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),iu="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",Lg="with|to|from|by|of|in|on|for|as|about|into",Xz=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${sa}(${iu})\\s+(${Lg})\\s+(.+)$`,"i"),Jz=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${iu})\\s+(${Lg})\\s+(.+)$`,"i"),Qz=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${qe})\\s+(.+?)[.!?]*$`,"i"),Wl=/^(?:is|are|am|owns|maintains)$/i,ql=/\b(?:is|are|am|owns|maintains)\b/i,PE=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"),Zz=new RegExp(`^(?:${ys.filter(e=>!/\s/.test(e)).join("|")})$`,"i");FE=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${sa}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),DE=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${sa}([a-z]+(?:\\s+(?:${qe}))?)[?.!\\s]*$`,"i"),Vl=/^(?:be|own|maintain)$/i,zE=new RegExp(`^(${qe})\\s+(.+)$`,"i");UE=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],eB=new RegExp(`^(?:${UE.join("|")})\\b\\s*,?\\s+`,"i"),Ng=Object.freeze(["you","i","it","they","he","she","we"]),Mg=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),WE=Object.freeze([...Mg,...Ng]),tB=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${WE.join("|")})\\s+\\S+`,"i"),nB=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${Ng.join("|")})\\s+(?:is|are|am|was|were)|(${Mg.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),sB=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${qe})\\s+([\\w-]+)$`,"i"),oB=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${qe})\\s+([\\w-]+)$`,"i"),Oo="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",rB=new RegExp(`^what\\s+does\\s+(.+?)${Oo}\\s+do${Oo}\\??$`,"i"),iB=new RegExp(`^what\\s+(.+?)${Oo}\\s+does${Oo}\\??$`,"i"),aB=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${Oo}\\s+do${Oo}\\??$`,"i"),Pg="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",cB=new RegExp(`^who\\s+(?:is|was)\\s+${Pg}$`,"i"),lB=new RegExp(`^what\\s+(?:did|has)\\s+${Pg}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),qE="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",uB=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${qE}\\b`,"i"),dB=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");pB=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Kt,...rn,"owns","maintains"].filter(e=>e.length>=3)),Gs={"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"},mg=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"]),au=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Tt=e=>`${e.subject} ${Dg(e.predicate)} ${e.object}`;VE=Object.entries(Gs).filter(([e])=>!au.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);KE=/ \(source: [^)]*\)$/;YE=8;Zi=null;ej=/^(?:every|each|all|any)\s+/i;Bg=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"]),fB=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("|"))),Jl=/^(?: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,Ug=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,tj=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,nj=/^(who|what)'?s\s+/i,na=e=>String(e).replace(nj,(t,n)=>`${n} is `),sj=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;oj=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,ds=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,qn=new Set(["rdfs:subClassOf","rdf:type"]),rj=6,ij=/^why\s+(?=(?:is|are)\b)/i,aj=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;Zl=new Set(["kind","sort","type","subclass","superclass"]),wg=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,cj=/^(?: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,lj=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,uj=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,dj=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,pj=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,fj=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,mj=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,yg=/^mgx:[a-z]+-(?:on|in|at|inside|under|below|above|near|beside|behind|by)$/,hj=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${qe})\\s+(.+?)\\s*[?.!]*$`,"i"),gj=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,bj=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,wj=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,yj=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;$g=e=>String(e||"").replace(/\s+/g," ").trim();qg="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",$j=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${qg})[?.!\\s]*$`,"i"),xj=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${qg})\\s+([\\w'-]+)[?.!\\s]*$`,"i");Sj=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),Ej=Object.entries(Gs).filter(([e])=>!Sj.has(e)&&!au.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${He(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),jj=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),_j=Object.entries(Gs).filter(([e])=>!jj.has(e)&&!au.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=He(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=[Fg(s),...o].map(He).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),Sg=/^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,Rj=new Set(["changed","change","changes","updated","modified","happened","occurred"]);Tj=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,Cj=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Ij=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,Oj=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,Eg=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),Lj=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,Nj=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,Mj=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Pj=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,Fj=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,jg=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,Wn=/^(?:it|this|that)$/i,_g=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,Rg=/^(?:you|i|they|he|she|we)\b/i,Ag=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${ta(e)} is ${t}".`,replace:!0}),Dj=/^(?: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;Bj=/inherit|supertype|subclass|extend|specializ/i,Uj=8;mB=new RegExp(`\\b(?:${[...nu].join("|")})\\b`,"i"),Kg=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,qj=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,hB=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Be).join("|")})$`,"i"),Yl="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",tu="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",Gj=`(?:\\s+${tu})?`,gB=[new RegExp(`^${Yl}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${Gj}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${Yl}architecture\\s+(?:${tu}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${Yl}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${tu}(?:\\s+here)?\\??$`,"i")],bB={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:sn.contains,subclasses:sn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:sn.calls,callees:sn.calls,tests:sn.tests,untested:sn.tests,history:sn.touches,exports:sn.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"},Yg="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",wB=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+${Yg}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),yB=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${Yg}\\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"),vB=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"),$B=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"),xB=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"),oa="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",kB=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${oa}\\s*\\??$`,"i"),SB=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${oa}\\s*\\??$`,"i"),EB=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${oa}\\s*\\??$`,"i"),jB=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${oa}\\s*[.!]*$`,"i"),Vj=Object.freeze([...nu].filter(e=>e!=="here").concat("they")),_B=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${Vj.join("|")})\\b(\\s+\\S.*)?$`,"i"),RB=Z(".tmct","memory","corpus-seed.json")});Xi();Ve();xs();Hi();var ra={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 Qg=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),Vs=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),ia=e=>Qg[e]||"other",Kj=e=>Math.max(0,Math.min(1,e));function Xg(e){let t=(e.sourceTypes||[]).map(n=>qo[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:qo.entailed}function Yj(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function Jg(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function Zg(e,t,n={},s={}){let o={...ra,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(v=>v&&v.object&&v.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let v of i){if(ia(v.predicate)==="isa"){let x=Jg(v.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:v,family:"isa",reason:"uninformative-class",share:x});continue}}c.push(v)}let u=c.filter(v=>ia(v.predicate)==="isa").map(v=>v.object),d=Vi(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let v of d.clusters){let x=0;for(let k of v.objects){p.set(k,v.label);let _=c.find(R=>R.object===k&&ia(R.predicate)==="isa");x+=_?Xg(_):0}f.set(v.label,x)}let m=null,h=-1;for(let[v,x]of[...f].sort((k,_)=>k[0].localeCompare(_[0])))x>h&&(h=x,m=v);let g=[];for(let v of c){let x=ia(v.predicate),k=Xg(v),_={provenance:k};if(Yj(v)&&(k-=o.entailedDepthPenalty,_.entailed=!0),x==="isa"){let E=.6+.4*(1-Jg(v.object,n));k*=E,_.informativeness=E;let A=p.get(v.object);m&&A&&A!==m&&(k-=o.minoritySensePenalty,_.minoritySense=A)}k=Kj(k),g.push({row:v,family:x,score:k,reasons:_})}let b=[];for(let v of g)v.score<o.minScore?a.push({row:v.row,family:v.family,reason:"below-floor",score:v.score}):b.push(v);let y=new Map;for(let v of b)y.has(v.family)||y.set(v.family,[]),y.get(v.family).push(v);for(let v of y.values())v.sort((x,k)=>k.score-x.score||x.row.object.localeCompare(k.row.object));let w=Vs.filter(v=>y.has(v)).concat([...y.keys()].filter(v=>!Vs.includes(v)).sort()),$=[],j=!1;for(;$.length<r&&!j;){j=!0;for(let v of w){let x=y.get(v);if(x&&x.length&&($.push(x.shift()),j=!1,$.length>=r))break}}for(let v of w)for(let x of y.get(v)||[])a.push({row:x.row,family:x.family,reason:"over-budget",score:x.score});return $.sort((v,x)=>{let k=Vs.indexOf(v.family),_=Vs.indexOf(x.family);return k-_||x.score-v.score||v.row.object.localeCompare(x.row.object)}),{term:e,selected:$,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}si();Zt();var Xj=new Set(["isa","location","partOf","capableOf","usedFor"]),Jj=new Set(["single","several","chained","group","closer"]),eb=(e,t)=>`${e}:${t}`;function cu(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!Xj.has(n.family)||typeof n.form!="string"||!Jj.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=eb(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 Hs=e=>`${io(e)} ${e}`;function Qj(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Hs(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Jo(s.map(Hs))}`:n}function Zj(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:ao(o),A_TERM:Hs(o),A_TERM_CAP:ao(Hs(o)),TERMS:ni(o),TERMS_CAP:ao(ni(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Hs(a):"",OBJECT:i,A_OBJECT:i?Hs(i):"",OBJECTS_A:Jo(r.map(Hs)),OBJECTS_PLURAL:Jo(r.map(ni)),OBJECTS_RAW:Jo(r),CHAIN:Qj(n&&n.length?n:r.slice(0,1))}}function e_(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 Gn(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(eb(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=mi(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=e_(l[u],Zj(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}si();var t_=Vs.filter(e=>e!=="isa"&&e!=="other");function n_(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 tb(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 s_(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 o_(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 r_(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=Gn(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=Gn(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=Gn(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 s_(a,t))for(let p of tb(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?Gn(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):Gn(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=o_(t,e,o.closerRootCount);if(u.length){let f=Gn(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 i_(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=ao(`${io(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function a_(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 nb(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...ra,...n.config||{}},a=n_(e?.selected||[]),l=[];for(let u of r_(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of t_){let d=a.get(u);if(!(!d||!d.length))for(let f of tb(d,i.maxObjectsPerBodySentence)){let p=Gn(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}i_(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:a_(l,o),provenanceRows:[...c.values()]}}var c_=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function l_(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 u_=Object.freeze({facts:"show the facts",chains:"show the chains"});function d_(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:u_,facts:n.map(c_),factCount:n.length,chains:s}}function sb(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:l_(t?.provenanceRows||[]),detail:d_(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function ob(e,t,n={},s=new Map,o={}){let r=Zg(e,t,n,o),i=nb(r,s,o);return sb(r,i,o)}Hi();var rb=new Set(["rdfs:subClassOf","rdf:type"]);function ib(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(rb.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 ab(e,t,n=6){let s=Er(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Gi(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function cb(e){let t=[],n=new Set;for(let s of e||[])!s||!rb.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Ve();Xi();function p_(e,t,n,s,o={}){let r=cu(s||[]);if(!r||r.size===0)return null;let i=t||[],a=ib(n||i),l=ab(a.subClassEdges,cb(i));return ob(e,i,a,r,{...o,chains:l})}function lb(e,t,n,s={}){let o=Ft(e||{individuals:[],objectProperties:[]}),r=K(ee,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=p_(t,i,o,n,s);return f_(a)}function f_(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}}globalThis.tmctMemoryAsk={factAnswer:Gg,factReadBack:Hg,createInMemoryStore:Ci,normFactTerm:ee,digestTermFromPayloadBrowser:lb};})();