@polycode-projects/the-mechanical-code-talker 2.11.0 → 2.11.2

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 Sg=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 Bn=(e,t)=>{for(var n in t)Sg(e,n,{get:t[n],enumerable:!0})};var et,TS,CS,IS,OS,LS,NS,MS,PS,FS,DS,zS,US,BS,WS,GS,qS,J,we,Bt,Nl,VS,HS,KS,De=L(()=>{et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},TS=et("createRequire"),CS=et("readFileSync"),IS=et("access"),OS=et("readFile"),LS=et("writeFile"),NS=et("appendFile"),MS=et("mkdir"),PS=et("mkdtemp"),FS=et("rename"),DS=et("unlink"),zS=et("rm"),US=et("stat"),BS=et("copyFile"),WS=et("readdir"),GS=et("createReadStream"),qS=et("createWriteStream"),J=(...e)=>e.join("/"),we=e=>String(e).replace(/\/[^/]*$/,""),Bt=(...e)=>e.join("/"),Nl="/",VS=et("randomBytes"),HS=et("spawnSync"),KS=et("createInterface")});var tt,XS,JS,Ml,ze,$r,jg,Wn,_g,xr,Pl,Rg,Ag,QS,Tg,ZS,ej,tj,nj,sj,St=L(()=>{tt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},XS=tt("createRequire"),JS=tt("readFileSync"),Ml=tt("access"),ze=tt("readFile"),$r=tt("writeFile"),jg=tt("appendFile"),Wn=tt("mkdir"),_g=tt("mkdtemp"),xr=tt("rename"),Pl=tt("unlink"),Rg=tt("rm"),Ag=tt("stat"),QS=tt("copyFile"),Tg=tt("readdir"),ZS=tt("createReadStream"),ej=tt("createWriteStream"),tj=tt("randomBytes"),nj=tt("spawnSync"),sj=tt("createInterface")});function ps(e){return e.replace(Cg,"").trim()}function Ht(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(Og,"").trim();if(s=s.replace(Ng,"").trim(),s===t)break;t=s}return t}var Fl,Ao,To,Vt,Dl,on,Ni,Cg,Ig,Og,Lg,Ng,ae,Mg,zl,Ue,Wt,fs,Mi,Pi,Fi,Ul,Co,Gs,Bl,Wl,ms,Sn,jn,qs,qe,Gl,hs,gs,Gn,dn,ql,Io,Vs,kr,Hs,Vl,_n=L(()=>{Fl=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],Ao={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",...Fl]},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"]}},To=Object.freeze([...Fl,"is the superclass of","are the superclass of","is the parent class of"]),Vt=Object.freeze(["defined","declared","located","implemented"]),Dl=Object.freeze(["now","currently","right now","at the moment","these days","today"]),on=Object.freeze(["mentioned","referenced"]),Ni=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),Cg=new RegExp(`\\s+(?:${Ni.join("|")})\\s*[?.!]*$`,"i");Ig=Object.freeze(["then","though","too"]),Og=new RegExp(`\\s+(?:${Ig.join("|")})\\s*[?.!]*$`,"i"),Lg=Object.freeze(["please explain","explain"]),Ng=new RegExp(`,\\s*(?:${Lg.join("|")})\\s*[?.!]*$`,"i");ae=Object.freeze(Object.fromEntries(Object.entries(Ao).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Mg=e=>!To.includes(e),zl=Object.freeze([...new Set(Object.keys(ae).filter(Mg).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),Ue=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",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),Wt=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),fs=Object.freeze({imported:"imports",called:"calls",used:"uses",tested:"tests",covered:"tests",verified:"tests",exercised:"tests",checked:"tests",defined:"defines",declared:"defines",inherited:"inherits",extended:"inherits",subclassed:"inherits",contained:"contains",exported:"reexports","re-exported":"reexports",exposed:"reexports",touched:"touches",changed:"touches",modified:"touches",edited:"touches",updated:"touches"}),Mi=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"}),Pi=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"}),Fi=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"}),Ul=/\b([a-z]{3,})in'/gi,Co=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"]),Bl=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]}`}]),Wl=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`}]),ms=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),Sn=Object.freeze(["that","which","who"]),jn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),qs=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"}),qe=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}}),Gl=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),hs=Object.freeze(["how many","how much","how many of","number of","total number of","quantity of","tally of","sum of","total of","amount of","count","count up","count of","tot up"]),gs=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"]),Gn=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"}),dn=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"}}),ql=Object.freeze({tests:"Module",test:"Module"}),Io=Object.freeze(["those","them","these"]),Vs=Object.freeze(["contains","defines"]),kr=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"]),Hs=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),Vl=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 Kt,Hl,Kl,Di,Yl,aj,cj,Xl=L(()=>{_n();Kt=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Hl=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Kl=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),Di=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:Vt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:Kt("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:Kt("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:Hl("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:Kl("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:Kl("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:Hl("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:Kt("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:Kt("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:Kt("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:Kt("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:Kt("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:Kt("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:Kt("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:Kt("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:Kt("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:Kt("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}}]),Yl=Di.filter(e=>e.tier==="hot"),aj=Di.filter(e=>e.tier==="cold"),cj=Object.freeze(Di.map(e=>e.name))});var Jl,Ie,It=L(()=>{De();Jl=J(".tmct","graph.json"),Ie=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function Pg(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 Ql(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})=>Pg(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=m=>o.has(m)?`${c}/${m}`:m;Array.isArray(l.classes)&&r.classes.push(...l.classes),Array.isArray(l.vocabulary)&&r.vocabulary.push(...l.vocabulary);for(let m of Array.isArray(l.individuals)?l.individuals:[]){if(!m)continue;let p={...m};p.id&&(p.id=u(p.id)),Array.isArray(p.derived_from)&&(p.derived_from=p.derived_from.map(f=>u(f))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(f=>f&&f.id?{...f,id:u(f.id)}:f)),r.individuals.push(p)}for(let m of Array.isArray(l.objectProperties)?l.objectProperties:[]){if(!m)continue;let p={...m};Array.isArray(p.examples)&&(p.examples=p.examples.map(f=>{if(!f)return f;let g={...f};return g.subject&&(g.subject=u(g.subject)),g.object&&(g.object=u(g.object)),g})),r.objectProperties.push(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[m,p]of Object.entries(d)){let f=r.proseIndex[m]||(r.proseIndex[m]=[]);for(let g of Array.isArray(p)?p:[]){let h=u(g);f.includes(h)||f.push(h)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var Zl=L(()=>{});var Ys={};Bn(Ys,{clearCache:()=>Fg,emptyEntities:()=>zi,fetchEntities:()=>Bg,registerProvider:()=>Dg});function Fg(){Ks=null,Oo=null}function Dg(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Er;return Er=e??null,Ks=null,t}function zi(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function zg(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return zi();throw new Ie(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Ie(`graph artifact ${e} is not valid JSON`)}}async function Ug(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(Oo&&Oo.key===n)return Oo.payload;let s=[];for(let r=0;r<t.length;r++){let i=await zg(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Ql(s);return Oo={key:n,payload:o},o}async function Bg(e){if(Er){let s;try{s=await Er(e)}catch(o){throw o instanceof Ie?o:new Ie(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Ie("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return Ug(e);if(Ks&&Ks.file===e.graphFile)return Ks.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return zi();throw new Ie(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Ie(`graph artifact ${e.graphFile} is not valid JSON`)}return Ks={file:e.graphFile,payload:n},n}var Ks,Oo,Er,Lo=L(()=>{St();It();Zl();Ks=null,Oo=null,Er=null});function pn(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<=eu)}function Ui(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>eu||Wg.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=Gg))break;return t}function Sr({name:e,doc:t}={}){return[...new Set([...pn(e),...Ui(t)])].sort()}function tu(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 bs(e,t,{limit:n=10}={}){let s=[...new Set([...pn(t),...Ui(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 m of d)i.add(m);a.add(l)}}return i.size?{ids:[...i].sort(),via:[...a].sort().join("+")}:r}var Wg,eu,Gg,qn=L(()=>{Wg=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+/)),eu=40,Gg=120});function su(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 No(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:Vg(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",...su(n.slice(4))}:n.startsWith("teach:")?{kind:"teach",...su(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 Yg(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return ru;let n=Number(t);return Number.isFinite(n)?Math.max(Bi,Math.min(au,n)):ru}function Xg(e,t=Date.now(),n=Hg){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return ou+(1-ou)*Math.pow(.5,o/n)}function cu(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 f=t[p],g=Kg(f);if(!g)continue;i.push(g);let h=(iu[g]??0)*Yg(f);a.push(Math.max(0,Math.min(1,h)))}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=Xg(e?.createdAt,s,n.halfLifeMs),d=Wi(Math.min(1,l*u)),m={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Wi(u)};return{score:d,inputs:m}}function lu({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+Jg),i=(o*r+1)/2;return Wi(Bi+(au-Bi)*i)}var jr,Gi,Ot,ws,qg,Vg,iu,Hg,ou,Bi,au,ru,Wi,Kg,Jg,Xs=L(()=>{jr="mgx:trustScore",Gi="mgx:trustInputs",Ot="mgx:createdAt",ws="mgx:updatedAt";qg="wikipedia-live",Vg=e=>e===qg?"referenceLive":"reference";iu=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Hg=720*60*60*1e3,ou=.9,Bi=.5,au=1.5,ru=1,Wi=(e,t=6)=>Number(e.toFixed(t)),Kg=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";Jg=19});var ys,qi=L(()=>{ys=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)});function Vi(e,t){return Math.log(1+e/(1+t))}var Mo=L(()=>{});var Rr={};Bn(Rr,{bfsLevels:()=>_r,findActionPath:()=>Hi,findReachableSet:()=>Ki});function uu(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function du(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 Hi(e,t,n,{maxDepth:s=50,stateKey:o=uu}={}){if(t(e))return{actions:[],states:[e]};let r=du(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:m}of n(c.state)||[]){let p=o(m);i.has(p)||l.push({state:m,actions:[...c.actions,d],states:[...c.states,m]})}}}r=l}return null}function Ki(e,t,{maxDepth:n=50,stateKey:s=uu}={}){let o=du(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:m}of t(c.state)||[]){let p=s(m);r.has(p)||l.push({state:m,actions:[...c.actions,d],states:[...c.states,m]})}}o=l}return i}function*_r(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 vs=L(()=>{});function Tr(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 ea(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Tn(e){let t=String(e?.prop||"").toLowerCase();if(pu[t])return pu[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":null}function Vn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Yi(e){let t=Vn(e).split("/");return t[t.length-1]}function Qg(e){return(e?.derived_from||[]).filter(Su).length}function fu(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+Qg(e)}function Gt(e,t){let n=Vn(t);if(!n)return{match:null,candidates:[]};let s=Yi(n),o=[];for(let r of e.individuals){let i=Vn(r.label),a=String(r.id||"").toLowerCase(),l=0;i===n||a===n?l=100:i.endsWith(`/${n}`)||Yi(i)===s||Yi(i).replace(/\.[a-z]+$/,"")===s?l=80:i.includes(n)&&(l=Math.max(10,50-(i.length-n.length))),l>0&&o.push({ind:r,score:l})}return o.sort((r,i)=>i.score-r.score||fu(i.ind)-fu(r.ind)||String(r.ind.label).length-String(i.ind.label).length),{match:o[0]?.ind||null,candidates:o.slice(1,5).map(r=>r.ind)}}function yt(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 Zg(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 mu(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function An(e){let t=e||"Entity",n=pn(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 ta(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${An(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(Su);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}=Zg(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(` ${mu(l)} (${c.length}) \u2192 ${nt(c.map(u=>u.objectLabel||u.object),hu)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${mu(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,eb)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${An(l.class)})`).join(", ")}`),e.truncated.length&&s.push(tb(e)),s.join(`
2
- `)}function tb(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 Qs(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=Tn(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=Rn(e,c.subject),d=Rn(e,c.object);if(!u||!d)continue;let m=e.byId.get(u)?.label||u;r(d,u,m,a.predicate),u!==d&&r(c.object,u,m,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 _r(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 ju(e,t,{maxDepth:n=8}={}){let s=Qs(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>=nb){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,Xi)){let u=c.tests.length?`tests: ${nt(c.tests,sb)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Xi&&o.push(` \u2026+${a.length-Xi} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=Tn({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 _u(e){let t=new Map;for(let n of e.relations)if(Tn(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 bu(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Iu(e,t,n=null){let s=n||(i=>Rn(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 ve(e,i))r(s(a.subject),s(a.object));return o}function Db(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 f of c.values())u=Math.max(u,f);let d=[...c.entries()].sort((f,g)=>g[1]-f[1]),m=[],p=[];for(let[f,g]of d)g>=u*Ab&&m.length<n?m.push([f,g]):p.length<gu&&p.push([f,g]);return[m,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<Ib&&i.length;c++){let u=new Map,d=[];for(let m of Ob){let p=Iu(e,m),f=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&f.set(w,Math.max(f.get(w)||0,y));let[g,h]=r(f);for(let[b,y]of g)u.set(b,Math.max(u.get(b)||0,y));d.push(...h)}a.push(...d);for(let[m,p]of u){if(l.has(m))continue;let f=s.get(m);f&&(f.score+=Math.min(p*Tb,f.score*Cb),l.add(m))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,gu).filter(([m])=>!l.has(m)))}}function zb(e,t=[],{depth:n=Au,q:s=Cu,nodeLimit:o=Tu,kinds:r=Lb,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(T=>[T.ind.id,T])),d=0;for(let T of t)d=Math.max(d,T.score);let m=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let f=Iu(e,r,a),g=T=>f.get(T)?.size||0,h=[],b=(T,C)=>T.hop!==C.hop?T.hop<C.hop:T.deg!==C.deg?T.deg<C.deg:T.id<C.id,y=(T,C)=>{let S=h[T];h[T]=h[C],h[C]=S},w=T=>{h.push(T);let C=h.length-1;for(;C>0;){let S=C-1>>1;if(b(h[C],h[S]))y(C,S),C=S;else break}},$=()=>{let T=h[0],C=h.pop();if(h.length){h[0]=C;let S=0;for(;;){let R=2*S+1,M=2*S+2,j=S;if(R<h.length&&b(h[R],h[j])&&(j=R),M<h.length&&b(h[M],h[j])&&(j=M),j===S)break;y(S,j),S=j}}return T},k=new Set(p);for(let T of p)w({id:T,hop:0,deg:g(T)});let x=null,v=0,A=[];for(;h.length&&v<o;){let T=$();if(A.push({id:T.id,hop:T.hop}),!p.has(T.id)){if(m){let R=d*Nb*Math.pow(Mb,T.hop-1),M=u.get(T.id);if(M)M.score+=Math.min(R*Pb,M.score*Fb);else{let j=e.byId?.get?.(T.id);if(j&&i(j)){x||(x=_u(e));let _=x.get(j.id)||[],O={ind:j,score:R,defineCount:_.length,matching:[],density:0};t.push(O),u.set(T.id,O)}}}v++}if(T.hop>=n||T.hop>0&&g(T.id)>c)continue;let C=[];for(let R of f.get(T.id)||[]){if(k.has(R))continue;let M=e.byId?.get?.(R);!M||!i(M)||C.push({id:R,deg:g(R)})}if(!C.length)continue;C.sort((R,M)=>R.deg-M.deg||(R.id<M.id?-1:R.id>M.id?1:0));let S=Math.max(1,Math.floor(s*C.length));for(let R=0;R<S;R++){let M=C[R];k.add(M.id),w({id:M.id,hop:T.hop+1,deg:M.deg})}}return A}function Ou(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,m=Number.isFinite(n.beamWidth)&&n.beamWidth>0?n.beamWidth:8,p=_u(e),f=[];for(let $ of e.individuals){if(($.class||"")!=="Module")continue;let k=String($.label),x=k.toLowerCase(),v=p.get($.id)||[],A=new Set(v.map(S=>S.toLowerCase())),T=new Set;for(let S of v)for(let R of bu(S))T.add(R);let C=u?String(($.attributes||[]).find(S=>S.key==="dotted")?.value||"").toLowerCase():"";f.push({ind:$,label:k,labelLc:x,defines:v,symSet:A,symComps:T,dotted:C})}let g=f.length||1,h=new Map,b=$=>{let k=0;for(let x of f)(x.labelLc.includes($)||x.symComps.has($)||x.symSet.has($))&&k++;return k},y=$=>(h.has($)||h.set($,Vi(g,b($))),h.get($));for(let $ of t)y($);let w=[];for(let $ of f){let k=0,x=0,v=0,A=[];for(let M of t){let j=h.get(M)||0;j&&($.symSet.has(M)?(k+=j*Ru,v++):$.symComps.has(M)&&(A.push(j),v++),$.labelLc.includes(M)&&(x+=j*rb))}A.sort((M,j)=>j-M);let T=0;for(let M=0;M<Math.min(A.length,ab);M++)T+=A[M]*ib;let C=k+x+T;if(!C)continue;s&&(ys($.labelLc)||db($.labelLc))?C*=ub:ys($.labelLc)&&(C*=.4);let S=$.defines.filter(M=>{let j=M.toLowerCase(),_=bu(M);return t.some(O=>j===O||_.has(O))}),R=$.defines.length?v/$.defines.length:0;w.push({ind:$.ind,score:C,defineCount:$.defines.length,matching:S,density:R})}if(u&&d&&w.length){let $=String(d).toLowerCase(),k=T=>T!=null&&/[a-z0-9_./]/.test(T),x=T=>{for(let C=$.indexOf(T);C!==-1;C=$.indexOf(T,C+1))if(!k($[C-1])&&!k($[C+T.length]))return!0;return!1},v=new Map(f.map(T=>[T.ind.id,T])),A=0;for(let T of w)A=Math.max(A,T.score);for(let T of w){let C=v.get(T.ind.id);if(!C)continue;let S=0;for(let R of new Set([C.dotted,C.labelLc])){if(!R||R.split(/[./]+/).filter(Boolean).length<Sb||!x(R))continue;let M=[...new Set(R.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((_,O)=>O-_),j=0;for(let _=0;_<Math.min(M.length,jb);_++)j+=M[_]*Eb;S=Math.max(S,j)}S&&(T.score+=Math.min(S*_b,A*Rb))}}if(w.length>1){let $=new Map(w.map(x=>[x.ind.id,x.score])),k=new Map;for(let x of ve(e,"imports"))!$.has(x.subject)&&!$.has(x.object)||(k.has(x.subject)||k.set(x.subject,new Set),k.has(x.object)||k.set(x.object,new Set),k.get(x.subject).add(x.object),k.get(x.object).add(x.subject));for(let x of w){let v=0;for(let A of k.get(x.ind.id)||[])v=Math.max(v,$.get(A)||0);x.score+=Math.min(v*cb,x.score*lb)}}if(o&&w.length>1){let $=new Map(w.map(x=>[x.ind.id,x.score])),k=new Map;for(let x of["calls","callsSymbol"])for(let v of ve(e,x)){let A=Rn(e,v.subject),T=Rn(e,v.object);!A||!T||A===T||!$.has(A)&&!$.has(T)||(k.has(A)||k.set(A,new Set),k.has(T)||k.set(T,new Set),k.get(A).add(T),k.get(T).add(A))}for(let x of w){let v=0;for(let A of k.get(x.ind.id)||[])v=Math.max(v,$.get(A)||0);x.score+=Math.min(v*pb,x.score*fb)}}if(r&&w.length>1){let $=new Map(w.map(x=>[x.ind.id,x.score])),k=new Map;for(let x of e.individuals)(x.class||"")==="Class"&&x.label&&k.set(String(x.label),x);for(let x of w){if(!gb(x.ind.label))continue;let v=0;for(let A of ve(e,"inherits")){if(Rn(e,A.subject)!==x.ind.id||!bb(A.objectLabel))continue;let C=Rn(e,A.object);if(!C){let S=k.get(String(A.objectLabel||""));S&&(C=fn(e,S))}C&&(v=Math.max(v,$.get(C)||0))}x.score+=Math.min(v*mb,x.score*hb)}}if(l&&w.length&&e.proseIndex){let $=bs(e.proseIndex,t.join(" "),{limit:vb});if($.length){let k=new Map;for(let{id:x,score:v}of $){let A=Rn(e,x);A&&k.set(A,(k.get(A)||0)+v)}for(let x of w){let v=k.get(x.ind.id)||0;v&&(x.score+=Math.min(v*wb,x.score*yb))}}}if(c&&w.length&&e.proseIndex){let $=new Map(w.map(v=>[v.ind.id,v])),k=new Map(f.map(v=>[v.ind.id,v])),x=new Map;for(let v of new Set(t)){let A=h.get(v)||0;if(!A)continue;let{ids:T}=nu(e.proseIndex,v);if(!T.length)continue;let C=new Set;for(let S of T){let R=Rn(e,S);if(!R||C.has(R)||(C.add(R),!$.has(R)))continue;let M=k.get(R);M&&(M.symSet.has(v)||M.symComps.has(v)||M.labelLc.includes(v))||x.set(R,(x.get(R)||0)+A*kb)}}for(let v of w){let A=x.get(v.ind.id)||0;A&&(v.score+=Math.min(A*$b,v.score*xb))}}return i&&w.length>1&&Db(e,w,m),a&&w.length&&zb(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:Au,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:Cu,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:Tu}),w.sort(($,k)=>k.score-$.score||k.density-$.density||$.defineCount-k.defineCount||String($.ind.label).length-String(k.ind.label).length),w}function Lu(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 Ou(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function Bb(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 na(e,{now:t=Date.now}={}){let n=String(e);if(n.length>wu)return{error:`name pattern is ${n.length} characters; the limit is ${wu}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=Bb(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>yu)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${yu}.`};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()+vu;else if(t()>a)throw new Ar(`name pattern "${n}" exceeded its ${vu}ms matching budget.`);return i.test(String(l).slice(0,Ub))}}}function Nu(e,t,{limit:n=Cr,kind:s="",decorator:o="",name:r=""}={}){let i=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),a=String(s||"").trim().toLowerCase(),l=String(o||"").trim().toLowerCase(),c=null;if(r){let p=na(r);if(p.error)return p.error;c=p}if(a&&a!=="module")try{return Hb(e,i,{limit:n,kind:a,decFilter:l,nameRe:c})}catch(p){if(p instanceof Ar)return p.message;throw p}if(!i.length&&!c&&!l)return"empty query";let u=Ou(e,i);if(!u.length)return`no module matches "${t}". Try broader keywords, or tmct_describe <path> if you know where it lives.`;let d=u.slice(0,n),m=[`${u.length} module(s) match "${t}" (top ${d.length}):`];for(let{ind:p,defineCount:f,matching:g}of d){let h=g.length?` \u2014 matching: ${nt([...new Set(g)],ob)}`:"";m.push(`- ${p.label} (defines ${f} symbol(s))${h}`)}return m.push("Then tmct_describe <path> for the full sibling list + typed edges, or tmct_impact <path> for dependents."),m.join(`
4
- `)}function ve(e,t){let n=$u.get(e);n||(n=new Map,$u.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Tn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Rn(e,t){let n=e.byId?.get?.(t);if(n)return fn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function fn(e,t){if((t?.class||"")==="Module")return t.id;let n=yt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function sa(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function Js(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function Mu(e,t){let n=[`${t.label} \u2014 ${An(t.class)} (id: ${t.id})`],s=ve(e,"contains").filter(i=>i.subject===t.id);if(!s.length)return n.push("members: none recorded (empty class, or members not in the extracted graph). Use tmct_describe for its edges."),n.join(`
5
- `);let o=[],r=[];for(let i of s){let a=e.byId.get(i.object),l=sa(a?yt(a):null),c=a?Js(a):"",u=`${i.objectLabel||i.object}${l}${c?` @${c}`:""}`;((a?.class||"")==="Attribute"?r:o).push(u)}return o.length&&n.push(`methods (${o.length}): ${nt(o,xu)}`),r.length&&n.push(`attributes (${r.length}): ${nt(r,xu)}`),n.push("Use tmct_snippet <Class.member> for an exact body."),n.join(`
6
- `)}function Pu(e,t){let n=yt(t),s=[`${t.label} \u2014 ${An(t.class)}${sa(n)}`],o=Ne(t,"params"),r=Ne(t,"returns");(o||r||(t.class||"")==="Method"||(t.class||"")==="Function")&&s.push(`signature: ${t.label}(${o})${r?` -> ${r}`:""}`);let i=[];Ne(t,"isStatic")&&i.push("static"),Ne(t,"isAbstract")&&i.push("abstract"),Ne(t,"isConstant")&&i.push("constant");let a=Ne(t,"visibility");a&&i.push(a),i.length&&s.push(`flags: ${i.join(", ")}`);let l=Js(t);l&&s.push(`decorators: @${l.split(", ").join(", @")}`);let c=Ne(t,"raises");c&&s.push(`raises: ${c}`);let u=Ne(t,"catches");u&&s.push(`catches: ${u}`);let d=Ne(t,"self_fields");d&&s.push(`self fields: ${d}`);let m=Ne(t,"value");m&&s.push(`value: ${m}`);let p=Ne(t,"doc");return p&&s.push(`doc: ${p}`),s.length===1&&s.push("(no signature detail recorded for this symbol \u2014 likely a module or attribute; use tmct_snippet for its source.)"),s.push("Use tmct_snippet for the exact body."),s.join(`
7
- `)}function Fu(e,t){let n=ve(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 ${An(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${nt(s,ku)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of _r(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,ku)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
- `)}function Du(e,{pkg:t=""}={}){let n=Vn(t),s=e.individuals.filter(u=>(u.class||"")==="Module"&&(!n||Vn(u.label).startsWith(n)));if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=new Map;for(let u of s){let d=u.label.includes("/")?u.label.slice(0,u.label.lastIndexOf("/")):"(root)";o.set(d,(o.get(d)||0)+1)}let r=new Map;for(let u of ve(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,Gb).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})`),Wb)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
- `)}function Uu(e,t){let n=fn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||yt(t)?.path||n,o=[...new Set(ve(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,zu,`
1
+ (()=>{var Ag=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 Bn=(e,t)=>{for(var n in t)Ag(e,n,{get:t[n],enumerable:!0})};var et,PE,FE,zE,DE,UE,BE,WE,qE,GE,VE,HE,KE,YE,XE,JE,QE,J,we,Bt,Fl,ZE,ej,tj,ze=L(()=>{et=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},PE=et("createRequire"),FE=et("readFileSync"),zE=et("access"),DE=et("readFile"),UE=et("writeFile"),BE=et("appendFile"),WE=et("mkdir"),qE=et("mkdtemp"),GE=et("rename"),VE=et("unlink"),HE=et("rm"),KE=et("stat"),YE=et("copyFile"),XE=et("readdir"),JE=et("createReadStream"),QE=et("createWriteStream"),J=(...e)=>e.join("/"),we=e=>String(e).replace(/\/[^/]*$/,""),Bt=(...e)=>e.join("/"),Fl="/",ZE=et("randomBytes"),ej=et("spawnSync"),tj=et("createInterface")});var tt,sj,oj,zl,De,xr,Tg,Wn,Cg,kr,Dl,Ig,Og,rj,Lg,ij,aj,cj,lj,uj,Et=L(()=>{tt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},sj=tt("createRequire"),oj=tt("readFileSync"),zl=tt("access"),De=tt("readFile"),xr=tt("writeFile"),Tg=tt("appendFile"),Wn=tt("mkdir"),Cg=tt("mkdtemp"),kr=tt("rename"),Dl=tt("unlink"),Ig=tt("rm"),Og=tt("stat"),rj=tt("copyFile"),Lg=tt("readdir"),ij=tt("createReadStream"),aj=tt("createWriteStream"),cj=tt("randomBytes"),lj=tt("spawnSync"),uj=tt("createInterface")});function ms(e){return e.replace(Ng,"").trim()}function Kt(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(Pg,"").trim();if(s=s.replace(zg,"").trim(),s===t)break;t=s}return t}var Ul,Ao,To,Ht,Bl,rn,Pi,Ng,Mg,Pg,Fg,zg,ae,Co,Dg,Wl,Ue,Wt,qn,Fi,zi,Di,ql,Io,qs,Gl,Vl,fs,En,jn,Gs,Ge,Hl,hs,gs,Gn,dn,Kl,Oo,Vs,Sr,Hs,Yl,_n=L(()=>{Ul=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],Ao={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",...Ul]},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"]}},To=Object.freeze([...Ul,"is the superclass of","are the superclass of","is the parent class of"]),Ht=Object.freeze(["defined","declared","located","implemented"]),Bl=Object.freeze(["now","currently","right now","at the moment","these days","today"]),rn=Object.freeze(["mentioned","referenced"]),Pi=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),Ng=new RegExp(`\\s+(?:${Pi.join("|")})\\s*[?.!]*$`,"i");Mg=Object.freeze(["then","though","too"]),Pg=new RegExp(`\\s+(?:${Mg.join("|")})\\s*[?.!]*$`,"i"),Fg=Object.freeze(["please explain","explain"]),zg=new RegExp(`,\\s*(?:${Fg.join("|")})\\s*[?.!]*$`,"i");ae=Object.freeze(Object.fromEntries(Object.entries(Ao).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Co=Object.freeze(new Set(["has","have","holds","hold"])),Dg=e=>!To.includes(e),Wl=Object.freeze([...new Set(Object.keys(ae).filter(Dg).map(e=>e.match(/^(?:is|are)\s+an?\s+(.+)$/i)).filter(Boolean).map(e=>e[1].toLowerCase()))]),Ue=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",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),Wt=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),qn=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"}),Fi=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"}),zi=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"}),Di=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"}),ql=/\b([a-z]{3,})in'/gi,Io=Object.freeze(["um","uh","erm","so","like","yo","hey","bru","bro","fam","mate","please","could you","can you","would you","tell me","i wonder","just wondering","quickly","real quick","kinda","sorta","btw","by the way","you","quick q"]),qs=Object.freeze(["this","it","that","here","this one","that one"]),Gl=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]}`}]),Vl=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`}]),fs=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),En=Object.freeze(["that","which","who"]),jn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),Gs=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}}),Hl=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),hs=Object.freeze(["how many","how much","how many of","number of","total number of","quantity of","tally of","sum of","total of","amount of","count","count up","count of","tot up"]),gs=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"]),Gn=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"}),dn=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"}}),Kl=Object.freeze({tests:"Module",test:"Module"}),Oo=Object.freeze(["those","them","these"]),Vs=Object.freeze(["contains","defines"]),Sr=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"]),Hs=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),Yl=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 Yt,Xl,Jl,Ui,Ql,fj,hj,Zl=L(()=>{_n();Yt=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Xl=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Jl=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),Ui=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:Ht}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:Yt("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:Yt("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:Xl("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:Jl("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:Jl("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:Xl("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:Yt("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:Yt("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:Yt("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:Yt("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:Yt("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:Yt("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:Yt("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:Yt("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:Yt("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:Yt("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}}]),Ql=Ui.filter(e=>e.tier==="hot"),fj=Ui.filter(e=>e.tier==="cold"),hj=Object.freeze(Ui.map(e=>e.name))});var eu,Ie,It=L(()=>{ze();eu=J(".tmct","graph.json"),Ie=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function Ug(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 tu(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})=>Ug(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 g={...m};return g.subject&&(g.subject=u(g.subject)),g.object&&(g.object=u(g.object)),g})),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 g of Array.isArray(p)?p:[]){let h=u(g);m.includes(h)||m.push(h)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var nu=L(()=>{});var Ys={};Bn(Ys,{clearCache:()=>Bg,emptyEntities:()=>Bi,fetchEntities:()=>Vg,registerProvider:()=>Wg});function Bg(){Ks=null,Lo=null}function Wg(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=Er;return Er=e??null,Ks=null,t}function Bi(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function qg(e){let t;try{t=await De(e,"utf8")}catch(n){if(n?.code==="ENOENT")return Bi();throw new Ie(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Ie(`graph artifact ${e} is not valid JSON`)}}async function Gg(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(Lo&&Lo.key===n)return Lo.payload;let s=[];for(let r=0;r<t.length;r++){let i=await qg(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=tu(s);return Lo={key:n,payload:o},o}async function Vg(e){if(Er){let s;try{s=await Er(e)}catch(o){throw o instanceof Ie?o:new Ie(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Ie("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return Gg(e);if(Ks&&Ks.file===e.graphFile)return Ks.payload;let t;try{t=await De(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return Bi();throw new Ie(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Ie(`graph artifact ${e.graphFile} is not valid JSON`)}return Ks={file:e.graphFile,payload:n},n}var Ks,Lo,Er,No=L(()=>{Et();It();nu();Ks=null,Lo=null,Er=null});function pn(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<=su)}function Wi(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>su||Hg.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=Kg))break;return t}function jr({name:e,doc:t}={}){return[...new Set([...pn(e),...Wi(t)])].sort()}function ou(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 bs(e,t,{limit:n=10}={}){let s=[...new Set([...pn(t),...Wi(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 ru(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 Hg,su,Kg,Vn=L(()=>{Hg=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+/)),su=40,Kg=120});function iu(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 Mo(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:Xg(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",...iu(n.slice(4))}:n.startsWith("teach:")?{kind:"teach",...iu(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 Zg(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return cu;let n=Number(t);return Number.isFinite(n)?Math.max(qi,Math.min(uu,n)):cu}function eb(e,t=Date.now(),n=Jg){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return au+(1-au)*Math.pow(.5,o/n)}function du(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],g=Qg(m);if(!g)continue;i.push(g);let h=(lu[g]??0)*Zg(m);a.push(Math.max(0,Math.min(1,h)))}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=eb(e?.createdAt,s,n.halfLifeMs),d=Gi(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:Gi(u)};return{score:d,inputs:f}}function pu({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+tb),i=(o*r+1)/2;return Gi(qi+(uu-qi)*i)}var _r,Vi,Ot,ws,Yg,Xg,lu,Jg,au,qi,uu,cu,Gi,Qg,tb,Xs=L(()=>{_r="mgx:trustScore",Vi="mgx:trustInputs",Ot="mgx:createdAt",ws="mgx:updatedAt";Yg="wikipedia-live",Xg=e=>e===Yg?"referenceLive":"reference";lu=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),Jg=720*60*60*1e3,au=.9,qi=.5,uu=1.5,cu=1,Gi=(e,t=6)=>Number(e.toFixed(t)),Qg=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";tb=19});var ys,Hi=L(()=>{ys=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)});function Ki(e,t){return Math.log(1+e/(1+t))}var Po=L(()=>{});var Ar={};Bn(Ar,{bfsLevels:()=>Rr,findActionPath:()=>Yi,findReachableSet:()=>Xi});function mu(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function fu(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 Yi(e,t,n,{maxDepth:s=50,stateKey:o=mu}={}){if(t(e))return{actions:[],states:[e]};let r=fu(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 Xi(e,t,{maxDepth:n=50,stateKey:s=mu}={}){let o=fu(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*Rr(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 vs=L(()=>{});function Cr(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 na(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Tn(e){let t=String(e?.prop||"").toLowerCase();if(hu[t])return hu[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 Hn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Ji(e){let t=Hn(e).split("/");return t[t.length-1]}function nb(e){return(e?.derived_from||[]).filter(Ru).length}function gu(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+nb(e)}function qt(e,t){let n=Hn(t);if(!n)return{match:null,candidates:[]};let s=Ji(n),o=[];for(let r of e.individuals){let i=Hn(r.label),a=String(r.id||"").toLowerCase(),l=0;i===n||a===n?l=100:i.endsWith(`/${n}`)||Ji(i)===s||Ji(i).replace(/\.[a-z]+$/,"")===s?l=80:i.includes(n)&&(l=Math.max(10,50-(i.length-n.length))),l>0&&o.push({ind:r,score:l})}return o.sort((r,i)=>i.score-r.score||gu(i.ind)-gu(r.ind)||String(r.ind.label).length-String(i.ind.label).length),{match:o[0]?.ind||null,candidates:o.slice(1,5).map(r=>r.ind)}}function yt(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 sb(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 bu(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function An(e){let t=e||"Entity",n=pn(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 sa(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${An(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(Ru);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}=sb(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(` ${bu(l)} (${c.length}) \u2192 ${nt(c.map(u=>u.objectLabel||u.object),wu)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${bu(l)} (${c.length}) by ${nt(c.map(u=>u.subjectLabel||u.subject),wu)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${nt(a,ob)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${An(l.class)})`).join(", ")}`),e.truncated.length&&s.push(rb(e)),s.join(`
2
+ `)}function rb(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 Qs(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=Tn(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=Rn(e,c.subject),d=Rn(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 Rr(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 Au(e,t,{maxDepth:n=8}={}){let s=Qs(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>=ib){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,Qi)){let u=c.tests.length?`tests: ${nt(c.tests,ab)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Qi&&o.push(` \u2026+${a.length-Qi} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=Tn({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 Tu(e){let t=new Map;for(let n of e.relations)if(Tn(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 vu(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Nu(e,t,n=null){let s=n||(i=>Rn(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 ve(e,i))r(s(a.subject),s(a.object));return o}function Wb(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,g)=>g[1]-m[1]),f=[],p=[];for(let[m,g]of d)g>=u*Ob&&f.length<n?f.push([m,g]):p.length<yu&&p.push([m,g]);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<Mb&&i.length;c++){let u=new Map,d=[];for(let f of Pb){let p=Nu(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[g,h]=r(m);for(let[b,y]of g)u.set(b,Math.max(u.get(b)||0,y));d.push(...h)}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*Lb,m.score*Nb),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,yu).filter(([f])=>!l.has(f)))}}function qb(e,t=[],{depth:n=Iu,q:s=Lu,nodeLimit:o=Ou,kinds:r=Fb,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=Nu(e,r,a),g=_=>m.get(_)?.size||0,h=[],b=(_,C)=>_.hop!==C.hop?_.hop<C.hop:_.deg!==C.deg?_.deg<C.deg:_.id<C.id,y=(_,C)=>{let S=h[_];h[_]=h[C],h[C]=S},w=_=>{h.push(_);let C=h.length-1;for(;C>0;){let S=C-1>>1;if(b(h[C],h[S]))y(C,S),C=S;else break}},v=()=>{let _=h[0],C=h.pop();if(h.length){h[0]=C;let S=0;for(;;){let T=2*S+1,N=2*S+2,R=S;if(T<h.length&&b(h[T],h[R])&&(R=T),N<h.length&&b(h[N],h[R])&&(R=N),R===S)break;y(S,R),S=R}}return _},x=new Set(p);for(let _ of p)w({id:_,hop:0,deg:g(_)});let $=null,j=0,E=[];for(;h.length&&j<o;){let _=v();if(E.push({id:_.id,hop:_.hop}),!p.has(_.id)){if(f){let T=d*zb*Math.pow(Db,_.hop-1),N=u.get(_.id);if(N)N.score+=Math.min(T*Ub,N.score*Bb);else{let R=e.byId?.get?.(_.id);if(R&&i(R)){$||($=Tu(e));let A=$.get(R.id)||[],O={ind:R,score:T,defineCount:A.length,matching:[],density:0};t.push(O),u.set(_.id,O)}}}j++}if(_.hop>=n||_.hop>0&&g(_.id)>c)continue;let C=[];for(let T of m.get(_.id)||[]){if(x.has(T))continue;let N=e.byId?.get?.(T);!N||!i(N)||C.push({id:T,deg:g(T)})}if(!C.length)continue;C.sort((T,N)=>T.deg-N.deg||(T.id<N.id?-1:T.id>N.id?1:0));let S=Math.max(1,Math.floor(s*C.length));for(let T=0;T<S;T++){let N=C[T];x.add(N.id),w({id:N.id,hop:_.hop+1,deg:N.deg})}}return E}function Mu(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=Tu(e),m=[];for(let v of e.individuals){if((v.class||"")!=="Module")continue;let x=String(v.label),$=x.toLowerCase(),j=p.get(v.id)||[],E=new Set(j.map(S=>S.toLowerCase())),_=new Set;for(let S of j)for(let T of vu(S))_.add(T);let C=u?String((v.attributes||[]).find(S=>S.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:v,label:x,labelLc:$,defines:j,symSet:E,symComps:_,dotted:C})}let g=m.length||1,h=new Map,b=v=>{let x=0;for(let $ of m)($.labelLc.includes(v)||$.symComps.has(v)||$.symSet.has(v))&&x++;return x},y=v=>(h.has(v)||h.set(v,Ki(g,b(v))),h.get(v));for(let v of t)y(v);let w=[];for(let v of m){let x=0,$=0,j=0,E=[];for(let N of t){let R=h.get(N)||0;R&&(v.symSet.has(N)?(x+=R*Cu,j++):v.symComps.has(N)&&(E.push(R),j++),v.labelLc.includes(N)&&($+=R*lb))}E.sort((N,R)=>R-N);let _=0;for(let N=0;N<Math.min(E.length,db);N++)_+=E[N]*ub;let C=x+$+_;if(!C)continue;s&&(ys(v.labelLc)||hb(v.labelLc))?C*=fb:ys(v.labelLc)&&(C*=.4);let S=v.defines.filter(N=>{let R=N.toLowerCase(),A=vu(N);return t.some(O=>R===O||A.has(O))}),T=v.defines.length?j/v.defines.length:0;w.push({ind:v.ind,score:C,defineCount:v.defines.length,matching:S,density:T})}if(u&&d&&w.length){let v=String(d).toLowerCase(),x=_=>_!=null&&/[a-z0-9_./]/.test(_),$=_=>{for(let C=v.indexOf(_);C!==-1;C=v.indexOf(_,C+1))if(!x(v[C-1])&&!x(v[C+_.length]))return!0;return!1},j=new Map(m.map(_=>[_.ind.id,_])),E=0;for(let _ of w)E=Math.max(E,_.score);for(let _ of w){let C=j.get(_.ind.id);if(!C)continue;let S=0;for(let T of new Set([C.dotted,C.labelLc])){if(!T||T.split(/[./]+/).filter(Boolean).length<Ab||!$(T))continue;let N=[...new Set(T.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((A,O)=>O-A),R=0;for(let A=0;A<Math.min(N.length,Tb);A++)R+=N[A]*Rb;S=Math.max(S,R)}S&&(_.score+=Math.min(S*Cb,E*Ib))}}if(w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),x=new Map;for(let $ of ve(e,"imports"))!v.has($.subject)&&!v.has($.object)||(x.has($.subject)||x.set($.subject,new Set),x.has($.object)||x.set($.object,new Set),x.get($.subject).add($.object),x.get($.object).add($.subject));for(let $ of w){let j=0;for(let E of x.get($.ind.id)||[])j=Math.max(j,v.get(E)||0);$.score+=Math.min(j*pb,$.score*mb)}}if(o&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),x=new Map;for(let $ of["calls","callsSymbol"])for(let j of ve(e,$)){let E=Rn(e,j.subject),_=Rn(e,j.object);!E||!_||E===_||!v.has(E)&&!v.has(_)||(x.has(E)||x.set(E,new Set),x.has(_)||x.set(_,new Set),x.get(E).add(_),x.get(_).add(E))}for(let $ of w){let j=0;for(let E of x.get($.ind.id)||[])j=Math.max(j,v.get(E)||0);$.score+=Math.min(j*gb,$.score*bb)}}if(r&&w.length>1){let v=new Map(w.map($=>[$.ind.id,$.score])),x=new Map;for(let $ of e.individuals)($.class||"")==="Class"&&$.label&&x.set(String($.label),$);for(let $ of w){if(!vb($.ind.label))continue;let j=0;for(let E of ve(e,"inherits")){if(Rn(e,E.subject)!==$.ind.id||!$b(E.objectLabel))continue;let C=Rn(e,E.object);if(!C){let S=x.get(String(E.objectLabel||""));S&&(C=mn(e,S))}C&&(j=Math.max(j,v.get(C)||0))}$.score+=Math.min(j*wb,$.score*yb)}}if(l&&w.length&&e.proseIndex){let v=bs(e.proseIndex,t.join(" "),{limit:Sb});if(v.length){let x=new Map;for(let{id:$,score:j}of v){let E=Rn(e,$);E&&x.set(E,(x.get(E)||0)+j)}for(let $ of w){let j=x.get($.ind.id)||0;j&&($.score+=Math.min(j*xb,$.score*kb))}}}if(c&&w.length&&e.proseIndex){let v=new Map(w.map(j=>[j.ind.id,j])),x=new Map(m.map(j=>[j.ind.id,j])),$=new Map;for(let j of new Set(t)){let E=h.get(j)||0;if(!E)continue;let{ids:_}=ru(e.proseIndex,j);if(!_.length)continue;let C=new Set;for(let S of _){let T=Rn(e,S);if(!T||C.has(T)||(C.add(T),!v.has(T)))continue;let N=x.get(T);N&&(N.symSet.has(j)||N.symComps.has(j)||N.labelLc.includes(j))||$.set(T,($.get(T)||0)+E*_b)}}for(let j of w){let E=$.get(j.ind.id)||0;E&&(j.score+=Math.min(E*Eb,j.score*jb))}}return i&&w.length>1&&Wb(e,w,f),a&&w.length&&qb(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:Iu,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:Lu,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:Ou}),w.sort((v,x)=>x.score-v.score||x.density-v.density||v.defineCount-x.defineCount||String(v.ind.label).length-String(x.ind.label).length),w}function Pu(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 Mu(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function Vb(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 oa(e,{now:t=Date.now}={}){let n=String(e);if(n.length>$u)return{error:`name pattern is ${n.length} characters; the limit is ${$u}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=Vb(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>xu)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${xu}.`};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()+ku;else if(t()>a)throw new Tr(`name pattern "${n}" exceeded its ${ku}ms matching budget.`);return i.test(String(l).slice(0,Gb))}}}function Fu(e,t,{limit:n=Ir,kind:s="",decorator:o="",name:r=""}={}){let i=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),a=String(s||"").trim().toLowerCase(),l=String(o||"").trim().toLowerCase(),c=null;if(r){let p=oa(r);if(p.error)return p.error;c=p}if(a&&a!=="module")try{return Jb(e,i,{limit:n,kind:a,decFilter:l,nameRe:c})}catch(p){if(p instanceof Tr)return p.message;throw p}if(!i.length&&!c&&!l)return"empty query";let u=Mu(e,i);if(!u.length)return`no module matches "${t}". Try broader keywords, or tmct_describe <path> if you know where it lives.`;let d=u.slice(0,n),f=[`${u.length} module(s) match "${t}" (top ${d.length}):`];for(let{ind:p,defineCount:m,matching:g}of d){let h=g.length?` \u2014 matching: ${nt([...new Set(g)],cb)}`:"";f.push(`- ${p.label} (defines ${m} symbol(s))${h}`)}return f.push("Then tmct_describe <path> for the full sibling list + typed edges, or tmct_impact <path> for dependents."),f.join(`
4
+ `)}function ve(e,t){let n=Su.get(e);n||(n=new Map,Su.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Tn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Rn(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=yt(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function ra(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function Js(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function zu(e,t){let n=[`${t.label} \u2014 ${An(t.class)} (id: ${t.id})`],s=ve(e,"contains").filter(i=>i.subject===t.id);if(!s.length)return n.push("members: none recorded (empty class, or members not in the extracted graph). Use tmct_describe for its edges."),n.join(`
5
+ `);let o=[],r=[];for(let i of s){let a=e.byId.get(i.object),l=ra(a?yt(a):null),c=a?Js(a):"",u=`${i.objectLabel||i.object}${l}${c?` @${c}`:""}`;((a?.class||"")==="Attribute"?r:o).push(u)}return o.length&&n.push(`methods (${o.length}): ${nt(o,Eu)}`),r.length&&n.push(`attributes (${r.length}): ${nt(r,Eu)}`),n.push("Use tmct_snippet <Class.member> for an exact body."),n.join(`
6
+ `)}function Du(e,t){let n=yt(t),s=[`${t.label} \u2014 ${An(t.class)}${ra(n)}`],o=Ne(t,"params"),r=Ne(t,"returns");(o||r||(t.class||"")==="Method"||(t.class||"")==="Function")&&s.push(`signature: ${t.label}(${o})${r?` -> ${r}`:""}`);let i=[];Ne(t,"isStatic")&&i.push("static"),Ne(t,"isAbstract")&&i.push("abstract"),Ne(t,"isConstant")&&i.push("constant");let a=Ne(t,"visibility");a&&i.push(a),i.length&&s.push(`flags: ${i.join(", ")}`);let l=Js(t);l&&s.push(`decorators: @${l.split(", ").join(", @")}`);let c=Ne(t,"raises");c&&s.push(`raises: ${c}`);let u=Ne(t,"catches");u&&s.push(`catches: ${u}`);let d=Ne(t,"self_fields");d&&s.push(`self fields: ${d}`);let f=Ne(t,"value");f&&s.push(`value: ${f}`);let p=Ne(t,"doc");return p&&s.push(`doc: ${p}`),s.length===1&&s.push("(no signature detail recorded for this symbol \u2014 likely a module or attribute; use tmct_snippet for its source.)"),s.push("Use tmct_snippet for the exact body."),s.join(`
7
+ `)}function Uu(e,t){let n=ve(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 ${An(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${nt(s,ju)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Rr(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,ju)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
+ `)}function Bu(e,{pkg:t=""}={}){let n=Hn(t),s=e.individuals.filter(u=>(u.class||"")==="Module"&&(!n||Hn(u.label).startsWith(n)));if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=new Map;for(let u of s){let d=u.label.includes("/")?u.label.slice(0,u.label.lastIndexOf("/")):"(root)";o.set(d,(o.get(d)||0)+1)}let r=new Map;for(let u of ve(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,Kb).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})`),Hb)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
+ `)}function qu(e,t){let n=mn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||yt(t)?.path||n,o=[...new Set(ve(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,Wu,`
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
- ${qb}`}function Bu(e){let t=new Set,n=new Set;for(let o of ve(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!ys(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,zu,`
14
- `)}`:"every source module has at least one covering test module."}function Wu(e,t){let n=fn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ve(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,Lt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function qu(e,t){if(Gu.has(t.class)){let r=[...new Set(ve(e,"callsSymbol").filter(i=>i.object===t.id).map(i=>i.subjectLabel||i.subject))];return r.length?`${t.label} \u2014 called by ${r.length} symbol(s):
15
- ${nt(r,Po,`
16
- `)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try tmct_impact for the full reverse closure.`}let n=fn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(ve(e,"calls").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject))];return o.length?`${s} \u2014 called by ${o.length} module(s):
17
- ${nt(o,Po,`
18
- `)}`:`${s}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try tmct_impact for the full reverse closure.`}function Vu(e,t){if(Gu.has(t.class)){let r=[...new Set(ve(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,Po,`
20
- `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=fn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(ve(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,Po,`
22
- `)}`:`${s}: no recorded callees.`}function Hu(e,t){let n=e.byId.get(t.object),s=n?yt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function oa(e,t){if(!t?.id)return"";let n=ve(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${nt(n.map(s=>Hu(e,s)),Vb)}`:""}function Ku(e,t){let n=ve(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${An(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=>Hu(e,o));return`${t.label} \u2014 ${An(t.class)} calls ${n.length} in-repo symbol(s):
23
- ${nt(s,Po,`
24
- `)}`}function Yu(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Ne(s,"commitDate")||Ne(s,"date"),i=Ne(s,"commitAuthor")||Ne(s,"author"),a=Ne(s,"commitMessage")||Ne(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Xu(e,t){let n=fn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ve(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,Lt).map(a=>` ${Yu(e,a.subject,a.subjectLabel)}`),i=o.length>Lt?`
12
+ ${Yb}`}function Gu(e){let t=new Set,n=new Set;for(let o of ve(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!ys(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,Wu,`
14
+ `)}`:"every source module has at least one covering test module."}function Vu(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=ve(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,Lt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Ku(e,t){if(Hu.has(t.class)){let r=[...new Set(ve(e,"callsSymbol").filter(i=>i.object===t.id).map(i=>i.subjectLabel||i.subject))];return r.length?`${t.label} \u2014 called by ${r.length} symbol(s):
15
+ ${nt(r,Fo,`
16
+ `)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try tmct_impact for the full reverse closure.`}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(ve(e,"calls").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject))];return o.length?`${s} \u2014 called by ${o.length} module(s):
17
+ ${nt(o,Fo,`
18
+ `)}`:`${s}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try tmct_impact for the full reverse closure.`}function Yu(e,t){if(Hu.has(t.class)){let r=[...new Set(ve(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,Fo,`
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(ve(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,Fo,`
22
+ `)}`:`${s}: no recorded callees.`}function Xu(e,t){let n=e.byId.get(t.object),s=n?yt(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function ia(e,t){if(!t?.id)return"";let n=ve(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${nt(n.map(s=>Xu(e,s)),Xb)}`:""}function Ju(e,t){let n=ve(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${An(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=>Xu(e,o));return`${t.label} \u2014 ${An(t.class)} calls ${n.length} in-repo symbol(s):
23
+ ${nt(s,Fo,`
24
+ `)}`}function Qu(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Ne(s,"commitDate")||Ne(s,"date"),i=Ne(s,"commitAuthor")||Ne(s,"author"),a=Ne(s,"commitMessage")||Ne(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Zu(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=ve(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,Lt).map(a=>` ${Qu(e,a.subject,a.subjectLabel)}`),i=o.length>Lt?`
25
25
  \u2026+${o.length-Lt} more`:"";return`${s}: touched by ${o.length} recent commit(s):
26
26
  ${r.join(`
27
- `)}${i}`}function Ju(e,t){let n=ve(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${An(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,Lt).map(r=>` ${Yu(e,r.subject,r.subjectLabel)}`),o=n.length>Lt?`
27
+ `)}${i}`}function ed(e,t){let n=ve(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${An(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,Lt).map(r=>` ${Qu(e,r.subject,r.subjectLabel)}`),o=n.length>Lt?`
28
28
  \u2026+${n.length-Lt} more`:"";return`${t.label} \u2014 ${An(t.class)}: touched by ${n.length} commit(s):
29
29
  ${s.join(`
30
- `)}${o}`}function Qu(e,t){return Ju(e,t)}function Zu(e,t){return Ju(e,t)}function ra(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=ed[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!Js(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 Hb(e,t,{limit:n=Cr,kind:s,decFilter:o,nameRe:r}){if(!ed[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let a=ra(e,t,{kind:s,decFilter:o,nameRe:r});if(!a.length)return`no ${s} matches the given filters.`;let l=a.slice(0,n),c=[`${a.length} ${s}(s) match (top ${l.length}):`];for(let{ind:u}of l)c.push(`- ${u.label}${sa(yt(u))}`);return c.push("Then tmct_snippet <name> for the exact body, or tmct_describe for its edges."),c.join(`
31
- `)}function sw(e){return{paramCount:Ir(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function ow(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Ir(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:nw(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function rw(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Ir(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 iw(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let m of e)for(let p of Ji(m.decorators))r.set(p,(r.get(p)||0)+1);let i="",a=1;for(let[m,p]of r)p>a&&(a=p,i=m);let l=new Set(Ji(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(Eu(n)),d=s?.start??null;for(let m of e){let p=Ji(m.decorators).some(b=>c.has(b))?1:0,f=Eu(m.label).filter(b=>u.has(b)).length,g=rw(m,o),h=d!=null&&m.site?1/(1+Math.abs(m.site.start-d)):0;m._score=p*1e3+f*50+g+h}return[...e].sort((m,p)=>p._score-m._score||(m.site?.start||0)-(p.site?.start||0))}function Zs(e,t){let n=fn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=ve(e,"defines").filter(S=>S.subject===n),r=new Map;for(let S of ve(e,"callsSymbol"))r.has(S.subject)||r.set(S.subject,new Set),r.get(S.subject).add(S.object);let i=[],a=[],l=0;for(let S of o){let R=e.byId.get(S.object);if(!R)continue;let M=R.class||"",j=yt(R);M==="GlobalVariable"?(a.push({label:R.label,value:(R.attributes||[]).find(_=>_.key==="value")?.value||"",site:j}),j&&(l=Math.max(l,j.end))):(M==="Function"||M==="Class")&&(i.push({id:R.id,label:R.label,class:M,site:j,decorators:Js(R),raises:Ne(R,"raises"),doc:Ne(R,"doc"),params:Ne(R,"params"),returns:Ne(R,"returns"),callees:r.get(R.id)||new Set}),j&&(l=Math.max(l,j.end)))}let c=yt(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:Js(t),raises:Ne(t,"raises"),params:Ne(t,"params"),returns:Ne(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,m=u?sw(u):ow(i);i=iw(i,u||{label:t.label},m);let p=u?null:i.find(S=>S.site&&S.label!==t.label)||null,f=[...new Set(ve(e,"tests").filter(S=>S.object===n).map(S=>S.subjectLabel||S.subject))].slice(0,Jb),g=od(e,n).slice(0,Xb),h=ve(e,"reexports").filter(S=>S.subject===n).map(S=>S.objectLabel||S.object).slice(0,20),b=Ne(e.byId.get(n),"all"),y=ve(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(S=>S.object===t.id)?.subject||null);let $=null;if(w){let S=e.byId.get(w),R=y.filter(M=>M.subject===w).map(M=>{let j=e.byId.get(M.object);return{label:M.objectLabel||j?.label||M.object,class:j?.class||"",site:j?yt(j):null,decorators:j?Js(j):"",params:j?Ne(j,"params"):"",returns:j?Ne(j,"returns"):"",raises:j?Ne(j,"raises"):""}}).slice(0,Yb);$={className:S?.label||String(w).replace(/^fn:.*#/,""),members:R,total:y.filter(M=>M.subject===w).length}}let k=null;for(let S of[...i,...a])S.site&&(!k||S.site.start>k.start)&&(k=S.site);let x=k?{start:k.start,end:k.end}:null,v=u||p,A=v?.id?e.byId.get(v.id):null,T=A?oa(e,A):"",C=[];if(v?.callees)for(let S of v.callees){let R=e.byId.get(S),M=R?yt(R):null;if(M&&C.push({label:R.label,site:M}),C.length>=tw)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:f,cochange:g,exports:h,allExports:b,classMembers:$,insertion:l,insertionRegion:x,calleeBodies:C,callHint:T,siblingCap:Kb}}function $s(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 td(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 Or(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=Ir(s.params);(i>Qb||a>Zb||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),m=d?yt(d):null;if(m&&m.path!==e.moduleLabel){l=!0;break}}let c=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=ew;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:$s(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 ed(e,t)}function nd(e,t){return ed(e,t)}function aa(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=sd[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!Js(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 Jb(e,t,{limit:n=Ir,kind:s,decFilter:o,nameRe:r}){if(!sd[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let a=aa(e,t,{kind:s,decFilter:o,nameRe:r});if(!a.length)return`no ${s} matches the given filters.`;let l=a.slice(0,n),c=[`${a.length} ${s}(s) match (top ${l.length}):`];for(let{ind:u}of l)c.push(`- ${u.label}${ra(yt(u))}`);return c.push("Then tmct_snippet <name> for the exact body, or tmct_describe for its edges."),c.join(`
31
+ `)}function aw(e){return{paramCount:Or(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function cw(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Or(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:iw(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function lw(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Or(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 uw(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Zi(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(Zi(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(_u(n)),d=s?.start??null;for(let f of e){let p=Zi(f.decorators).some(b=>c.has(b))?1:0,m=_u(f.label).filter(b=>u.has(b)).length,g=lw(f,o),h=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+m*50+g+h}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function Zs(e,t){let n=mn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=ve(e,"defines").filter(S=>S.subject===n),r=new Map;for(let S of ve(e,"callsSymbol"))r.has(S.subject)||r.set(S.subject,new Set),r.get(S.subject).add(S.object);let i=[],a=[],l=0;for(let S of o){let T=e.byId.get(S.object);if(!T)continue;let N=T.class||"",R=yt(T);N==="GlobalVariable"?(a.push({label:T.label,value:(T.attributes||[]).find(A=>A.key==="value")?.value||"",site:R}),R&&(l=Math.max(l,R.end))):(N==="Function"||N==="Class")&&(i.push({id:T.id,label:T.label,class:N,site:R,decorators:Js(T),raises:Ne(T,"raises"),doc:Ne(T,"doc"),params:Ne(T,"params"),returns:Ne(T,"returns"),callees:r.get(T.id)||new Set}),R&&(l=Math.max(l,R.end)))}let c=yt(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:Js(t),raises:Ne(t,"raises"),params:Ne(t,"params"),returns:Ne(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?aw(u):cw(i);i=uw(i,u||{label:t.label},f);let p=u?null:i.find(S=>S.site&&S.label!==t.label)||null,m=[...new Set(ve(e,"tests").filter(S=>S.object===n).map(S=>S.subjectLabel||S.subject))].slice(0,tw),g=ad(e,n).slice(0,ew),h=ve(e,"reexports").filter(S=>S.subject===n).map(S=>S.objectLabel||S.object).slice(0,20),b=Ne(e.byId.get(n),"all"),y=ve(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(S=>S.object===t.id)?.subject||null);let v=null;if(w){let S=e.byId.get(w),T=y.filter(N=>N.subject===w).map(N=>{let R=e.byId.get(N.object);return{label:N.objectLabel||R?.label||N.object,class:R?.class||"",site:R?yt(R):null,decorators:R?Js(R):"",params:R?Ne(R,"params"):"",returns:R?Ne(R,"returns"):"",raises:R?Ne(R,"raises"):""}}).slice(0,Zb);v={className:S?.label||String(w).replace(/^fn:.*#/,""),members:T,total:y.filter(N=>N.subject===w).length}}let x=null;for(let S of[...i,...a])S.site&&(!x||S.site.start>x.start)&&(x=S.site);let $=x?{start:x.start,end:x.end}:null,j=u||p,E=j?.id?e.byId.get(j.id):null,_=E?ia(e,E):"",C=[];if(j?.callees)for(let S of j.callees){let T=e.byId.get(S),N=T?yt(T):null;if(N&&C.push({label:T.label,site:N}),C.length>=rw)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:m,cochange:g,exports:h,allExports:b,classMembers:v,insertion:l,insertionRegion:$,calleeBodies:C,callHint:_,siblingCap:Qb}}function $s(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 Lr(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=Or(s.params);(i>nw||a>sw||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?yt(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)>=ow;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:$s(o),topup:o!=="TINY"}}function rd(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 sd(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 id(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,135 +45,135 @@ ${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 od(e,t){let n=[];for(let s of ve(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 rd(e,t){let n=fn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=od(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,Qi).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
48
+ `)}function ad(e,t){let n=[];for(let s of ve(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 cd(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=ad(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>Qi?`
51
- \u2026+${o.length-Qi} more`:"")}function id(e,t){let n=fn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ve(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,Zi).map(i=>{let a=e.byId.get(i.object),l=a?yt(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 ld(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=ve(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,ta).map(i=>{let a=e.byId.get(i.object),l=a?yt(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>Zi?`
54
- \u2026+${o.length-Zi} more`:"")}var pu,Su,hu,eb,nb,Xi,sb,Cr,ob,rb,ib,Ru,ab,cb,lb,ub,db,pb,fb,mb,hb,gb,bb,wb,yb,vb,$b,xb,kb,Eb,Sb,jb,_b,Rb,Ab,Tb,Cb,gu,Ib,Ob,Au,Tu,Cu,Lb,Nb,Mb,Pb,Fb,wu,yu,Ub,vu,Ar,$u,xu,ku,Po,Ne,Wb,Gb,zu,qb,Lt,Gu,Vb,ed,Kb,Yb,Xb,Jb,Qb,Zb,ew,tw,Ji,Eu,Ir,nw,Qi,Zi,Te=L(()=>{qn();Xs();qi();Mo();vs();pu={"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: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"};Su=e=>/^(git|turn):/.test(String(e||""));hu=30,eb=8;nb=2,Xi=25,sb=3;Cr=10,ob=8,rb=3,ib=2,Ru=5,ab=4,cb=.2,lb=.35,ub=.15,db=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),pb=.2,fb=.35,mb=.2,hb=.35,gb=e=>/\.cs$/i.test(e),bb=e=>/^I[A-Z]/.test(String(e||"")),wb=.2,yb=.35,vb=50,$b=.2,xb=.35,kb=.5,Eb=Ru,Sb=3,jb=4,_b=1,Rb=.9,Ab=.5,Tb=.2,Cb=.35,gu=4,Ib=2,Ob=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],Au=3,Tu=12,Cu=.9,Lb=["imports","calls","callsSymbol","inherits"],Nb=.5,Mb=.6,Pb=.2,Fb=.35;wu=128,yu=4,Ub=64,vu=250,Ar=class extends Error{};$u=new WeakMap;xu=40,ku=40,Po=30;Ne=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";Wb=25,Gb=15;zu=40,qb="tests edges are recorded module to module, so this is module-grain coverage.";Lt=15;Gu=new Set(["Function","Method"]);Vb=8;ed={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};Kb=8,Yb=16,Xb=4,Jb=6,Qb=12,Zb=2,ew=8,tw=3,Ji=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),Eu=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Ir=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},nw=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};Qi=20;Zi=40});function Ve(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fd(e){let t=String(e||"");return ad&&(t=t.replace(ad," ")),t.replace(/\s+/g," ").trim()}function md(e){let t=String(e||"");t=t.replace(xw," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(vw);if(o&&(t=o[1].trim()),o=t.match($w),o&&(t=o[1].trim()),o=t.match(cd),o&&(t=o[1].trim()),o=t.match(ld),o&&(t=o[1].trim()),o=t.match(ud),o&&(t=o[1].trim()),o=t.match(dd),o&&(t=o[1].trim()),o=t.match(kw),o&&(t=o[1].trim()),o=t.match(Ew),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Sw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(jw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(_w),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Rw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Aw),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(Tw),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(Cw),o){let r=o[1].trim();yw(r)||(t=gw.test(r)||xs.test(r)?r:`describe ${r}`)}if(o=t.match(Iw),o){let r=o[1].trim();(xs.test(r)||Ow.test(r)||dd.test(r)||cd.test(r)||ud.test(r)||ld.test(r))&&(t=r)}if(t===s)break}return t}function Mw(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(Lw);if(o&&(t=o[1].trim()),o=t.match(Nw),o&&(t=o[1].trim()),t===s)break}return t}function Fw(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(Pw);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function Uw(e){let t=String(e||""),n=t.match(zw);if(n){let o=gd[n[1].toLowerCase()],r=hd[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(bd);return s?`which modules transitively import ${s[1].trim()}`:t}function Lr(e){return String(e||"").replace(cw,t=>Mi[t.toLowerCase()])}function ks(e){let t=Lr(e);return t=t.replace(lw,n=>Pi[n.toLowerCase()]),t=t.replace(uw,n=>Fi[n.toLowerCase()]),t=t.replace(dw,"with"),t=t.replace(pw,(n,s)=>`${s} for`),t=t.replace(fw,(n,s)=>`for ${s}`),t=t.replace(mw,(n,s)=>s),t=t.replace(Bw,"$1$2"),t=t.replace(Ul,"$1ing"),t=md(t),t=Fw(t),t=Mw(t),t=Uw(t),t=fd(t),t=Ht(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Fo(e){for(let t of[...Wl,...Bl]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function ia(e){for(let t of Ww){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function wd(e){let t=String(e||"").match(Gw);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var aw,cw,pd,lw,uw,dw,pw,fw,mw,hw,ad,gw,xs,bw,ww,yw,vw,$w,cd,ld,ud,xw,kw,Ew,Sw,jw,_w,Rw,Aw,Tw,Cw,Iw,Ow,dd,Lw,Nw,Pw,hd,gd,Dw,zw,bd,Bw,Ww,Gw,st,Yt,de,Hn=L(()=>{_n();aw=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Ve).join("|")+")\\b","gi"),cw=aw(Mi),pd=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Ve).join("|")+")\\b(?!\\.[a-z0-9])","gi"),lw=pd(Pi),uw=pd(Fi),dw=/(?<=^|\s)w\/(?=\s|$)/gi,pw=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,fw=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,mw=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,hw=Object.keys(ae).sort((e,t)=>t.length-e.length).map(Ve).join("|"),ad=Co.length?new RegExp("\\b("+[...Co].sort((e,t)=>t.length-e.length).map(Ve).join("|")+")\\b\\s*,?","gi"):null;gw=new RegExp("\\b(?:"+Object.keys(ae).sort((e,t)=>t.length-e.length).map(Ve).join("|")+")\\b","i"),xs=/^(?:which|what|who|whose|where|when|why|how)\b/i,bw=new Set(["modules","files","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),ww=/^(?:all\s+|the\s+)?(?:module|file|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,yw=e=>{if(ww.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return bw.has((t[t.length-1]||"").toLowerCase())},vw=/^(?: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,$w=/^(?: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,cd=/^(?:(?:ok(?:ay)?|aight|cool|alright|sure|right|fine|great|nice|got it|gotcha|sounds good|no worries|no problem)[\s,]+)+(.+)$/i,ld=/^(?: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,xw=/,?\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,kw=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,Ew=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,Sw=/^tell\s+me\s+(.+?)\??$/i,jw=/^do\s+you\s+know\s+(.+?)\??$/i,_w=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,Rw=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,Aw=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,Tw=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,Cw=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,Iw=/^(?:and|also|so|then|now|but)\s+(.+)$/i,Ow=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,dd=/^(?:(?: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;Lw=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,Nw=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;Pw=/^.+?(?:\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"}),gd=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),Dw="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",zw=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(gd).join("|")+")\\s+("+Object.keys(hd).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+Dw+")\\??$","i"),bd=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;Bw=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Dl.map(Ve).join("|")})(\\s*[?.!]*)$`,"i");Ww=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+(?:${Ni.map(Ve).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+(${hw})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);Gw=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"]),Yt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),de=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var vd,yd=L(()=>{vd={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","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","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","aditted","aerides","aerified","aerifies","aerify","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","benting","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","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","carving","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","centing","cercises","cere","cerise","cerises","certain","certaining","certains","certifies","certify","certing","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","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","dean","deaned","deaning","deans","dearie","dearies","debiled","debiling","debone","deboned","debones","deboning","debrises","debted","debting","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decode","decouple","decouples","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","deisting","deists","deitied","delfing","deliing","delivers","delling","demands","demised","demising","denied","denned","denning","dent","dented","dentine","dentined","dentines","denting","dentining","depart","depend","depended","deplane","deplanes","deplore","deplores","depone","deponed","deponing","depose","deposes","deprave","depraves","deprive","depriveds","deprives","derate","derates","derbies","deride","derides","deriding","derisive","derisives","deriveds","deriving","dermises","derpies","derrises","descends","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","dewied","dewiness","dewing","dexone","dexoned","dexones","dexoning","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","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","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","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","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","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","emotes","emsing","enated","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","enting","epopses","eposes","equally","equine","equines","erectly","eroses","ersing","ersted","ersting","erting","erudited","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","ferining","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","gent","genting","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","heaves","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helves","here","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","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","kepting","kerite","kerited","kerites","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","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lenting","leon","leones","leons","lesses","lessing","letting","levants","levees","levels","levited","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","mere","merelies","merely","merited","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","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","nerves","nervies","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","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","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","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","parves","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","pekans","pelling","pelting","pent","penting","percent","pere","pert","perting","perves","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","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","reaves","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeves","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","remove","removes","rend","rended","rends","renins","renises","rent","rentes","renting","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","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","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","salving","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarees","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","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","scruple","scruples","sculling","seaport","seaporting","seaports","seareds","seases","seating","seaxes","secluded","secting","secure","sedans","seined","seines","seining","selling","semited","send","sended","sends","sent","senting","septing","sequine","sequines","serifs","serined","serining","serves","sesses","sessing","sets","setting","severs","sexies","sexpot","sexpots","sexpotting","sexted","sexting","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","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shreds","shrews","shrive","shrives","shucks","sibs","sick","sicks","sics","sids","sieves","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sired","sirens","sires","sirred","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skives","skulls","slander","slanted","slates","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","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solves","sooned","sooted","sore","sorelies","sorely","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","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprigger","spriggers","sprits","spurge","squally","squares","squires","ssaing","sses","ssing","ssping","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starve","starves","states","staves","steads","steaked","steeds","stenting","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoves","streaked","stringer","stringers","strive","strives","suaves","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","surd","surded","sured","surelies","sures","surety","surf","surfed","surfer","surge","surged","surges","suring","surrey","survey","suses","sussing","suture","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","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","teraing","tercing","tereting","terming","terned","terning","terrifies","terrify","terses","tersing","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","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","vent","venting","verbified","verbifies","verbify","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","versified","versifier","versifiers","versifies","versify","versting","versts","verting","verves","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","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","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","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Cn(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 ca(e){return/^[a-z]+$/.test(e)&&!st.has(e)&&!aa.has(e)}function $d(e){return Xw(e)?null:la(e,Kw,Kn(e))}function la(e,t,n=Kn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Cn(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 Vw,Kn,aa,Hw,Kw,Yw,Xw,Do=L(()=>{_n();yd();Hn();Vw=["used"];Kn=e=>e.length<=5?1:2,aa=new Set([...Object.keys(ae),...Object.keys(Ue),...Object.keys(Wt),...Vw].flatMap(e=>e.split(" "))),Hw=4,Kw=[...new Set([...Object.keys(ae),...Object.keys(Wt)].flatMap(e=>e.split(" ")).filter(e=>e.length>=Hw))],Yw=new Set(vd.words),Xw=e=>Yw.has(e)});function eo(e){for(let t of ey){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Nr,Jw,Qw,Zw,ey,xd,Mr=L(()=>{_n();Hn();Nr=Object.keys(ae).sort((e,t)=>t.length-e.length).map(Ve).join("|"),Jw=Object.keys(Ue).sort((e,t)=>t.length-e.length).map(Ve).join("|"),Qw=Object.keys(Wt).sort((e,t)=>t.length-e.length).map(Ve).join("|"),Zw=ms.slice().sort((e,t)=>t.length-e.length).map(Ve).join("|"),ey=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Nr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=ae[t],s=e[1].trim(),o=e[3].trim();return To.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+(${Jw})\\s+(?:(${Qw})\\s+)?(${Nr})\\s+(.+?)\\??$`,"i"),build:e=>({shape:"reverse",entityType:Ue[e[1].toLowerCase()],modifier:e[2]?Wt[e[2].toLowerCase()]:"direct",kind:ae[e[3].toLowerCase()],object:e[4].trim()})},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Nr})\\??$`,"i"),build:e=>({shape:"forward",entityType:null,modifier:"direct",kind:ae[e[2].toLowerCase()],object:e[1].trim()})},{name:"meta-mean",re:new RegExp(`^what\\s+(?:does|do|is|are)\\s+(.+?)\\s+(?:${Zw})\\??$`,"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?)\\s+)?(.+?)\\??$","i"),build:e=>{let t=Ht(e[2].trim());if(!e[1]&&!Ue[t.toLowerCase()])return null;let n=t.toLowerCase();return e[1]&&zl.some(s=>n===s||n.startsWith(`${s} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:ps(t)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${on.map(Ve).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+(?:${Vt.map(Ve).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+)?(${Nr})\\??$`,"i"),build:e=>ae[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()})}];xd={id:"grammar",class:"graph-query",run(e){let t=eo(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function vt(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 zo(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(v=>v.toLowerCase());if(s.includes("where")&&!vt(s,ae)){let v=s.some(C=>on.includes(C)),A=new Set([...Vt,...on]),T=n.filter((C,S)=>!st.has(s[S])&&!A.has(s[S])).join(" ").trim();if(T){let C=v?"mentions":"where";return{shape:C,entityType:null,modifier:"direct",kind:C,object:T}}}if(new Set(["has","have","had"]).has(s[0])){let v=s.length;for(;v>1&&(s[v-1]==="ever"||s[v-1]==="been");)v-=1;if((v>1?ae[s[v-1]]:null)==="touches"){let T=n.slice(1,v-1).filter((C,S)=>!st.has(s[1+S])).join(" ").trim();if(T)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:T}}}let r=s,i=vt(s,ae);if(!i&&t){let v=s.map(A=>{if(!ca(A))return A;let T=t.lemma(A);return aa.has(T)?T:A});i=vt(v,ae),i&&(r=v)}let a=null;if(!i){let v=s.map(A=>A.length>=4&&ca(A)&&$d(A)||A);if(i=vt(v,ae),i){r=v;let A=s.slice(i.start,i.end).findIndex((C,S)=>C!==v[i.start+S]),T=i.start+Math.max(A,0);a={from:s[T],to:v[T]}}}if(!i)for(let v=0;v<s.length;v+=1){let A=fs[s[v]];if(!(A&&s[v]==="used"&&s[v+1]==="for")&&A&&s.slice(0,v).some(T=>ua.has(T))){i={kind:A,start:v,end:v+1};break}}if(!i)return null;let l=v=>a?{...v,fuzzyVerb:a}:v;if(t&&i.end-i.start===1){let v=i.start,A=s[v-1];if((A==="the"||A==="these"||A==="those")&&s[v+1]==="of"&&t.posTags(n)[v]==="NOUN"){let C=n.slice(v+2).filter((S,R)=>!st.has(s[v+2+R])).join(" ").trim();if(C)return l({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:C})}}let c=new Set,u=v=>{if(v)for(let A=v.start;A<v.end;A+=1)c.add(A)};u(i);for(let[v,A]of Object.entries(ae)){if(A!==i.kind)continue;let T=v.split(" "),C=i.end;if(T.every((S,R)=>r[C+R]===S)){u({start:C,end:C+T.length});break}}let d=vt(r,Ue,c);u(d);let m=vt(r,Wt,c);u(m);let p=(v,A)=>n.slice(v,A).filter((T,C)=>!c.has(v+C)&&!st.has(s[v+C])).join(" ").trim(),f=p(0,i.start),g=p(i.end,n.length),h=i.kind,b=d?Ue[r.slice(d.start,d.end).join(" ")]:null,y=m?Wt[r.slice(m.start,m.end).join(" ")]:"direct";if(h==="touches"&&s.includes("when")){let v=f||g;if(v)return l({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:v})}if(h==="touches"&&s.includes("who")&&s.includes("last")){let v=f||g;if(v)return l({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:v})}let w=s.indexOf("by"),$=s.slice(0,i.start).findIndex(v=>ua.has(v)),k=$>=0,x=k&&$>w;if(w>=0&&!c.has(w)&&k){let v=(C,S)=>n.slice(C,S).filter((R,M)=>{let j=C+M,_=s[j];return!c.has(j)&&!st.has(_)&&_!=="by"&&!ua.has(_)&&!ty.has(_)&&!ny.has(_)}).join(" ").trim(),[A,T]=x?[v($+1,n.length),v(w+1,$)]:[v(0,w),v(w+1,n.length)];if(A&&T)return l({shape:"ask",entityType:null,modifier:"direct",kind:h,subject:T,object:A});if(T)return l({shape:"forward",entityType:b,modifier:y,kind:h,object:T});if(A)return l({shape:"reverse",entityType:b,modifier:y,kind:h,object:A})}if(f&&g){let v=r.slice(i.start,i.end).join(" "),A=f,T=g;return To.includes(v)&&([A,T]=[T,A]),l({shape:"ask",entityType:null,modifier:"direct",kind:h,subject:A,object:T})}if(g){let v=d&&d.start>=i.end?null:b;return l({shape:"reverse",entityType:v,modifier:y,kind:h,object:g})}if(h==="inherits"&&!f&&d&&d.start===i.end){let v=r.slice(d.start,d.end).join(" ");if(v)return l({shape:"reverse",entityType:null,modifier:y,kind:h,object:v})}return f&&!g&&k&&i.end-i.start===1&&fs[s[i.start]]?f.split(/\s+/).length>1?null:l(h==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:h,object:f}:{shape:"reverse",entityType:b,modifier:y,kind:h,object:f}):f?l({shape:"forward",entityType:b,modifier:"direct",kind:h,object:f}):null}var ua,ty,ny,kd,Pr=L(()=>{_n();Hn();Do();ua=new Set(["is","are","was","were","be","been","being","get","gets","got"]),ty=new Set(["which","what","who","whom","whose"]),ny=new Set(jn.map(e=>e.toLowerCase()));kd={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=zo(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function oy(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)||Ed.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function ry(e,t=null){let n=Yt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!Ed.has(a)&&(sy.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=oy(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var Ed,sy,Sd,jd=L(()=>{_n();Hn();Mr();Pr();Ed=new Set([...st,...de(Gs),...de(Object.keys(ae)),...de(Object.keys(Ue)),...de(Object.keys(Wt)),...de(Object.keys(qe)),...de(hs),...de(gs),...de(Object.keys(Gn)),...de(Object.keys(dn)),...de(Object.keys(qs)),...de(jn),...de(Io),...de(ms),...de(Vt),...de(on),...de(Sn),...de(Object.keys(Hs))]),sy=new Set([...de(Co),...de(kr)]);Sd={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(eo(e))return null;let{text:n,dropped:s,maybeNoise:o}=ry(e,t.nlp||null);if(!s.length||!n)return null;let r=eo(n)||zo(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 _d=L(()=>{});var Rd=L(()=>{});function Td(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?to(e.subject)===to(t.subject)&&to(e.object)===to(t.object):to(e.object)===to(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=>!Cd(c))&&(n=n.filter(c=>!Cd(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 m of u){let p=d.find(f=>Td(f.parsed,m.parsed)&&f.via===m.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,m.confidence),Ad(m.parsed)<Ad(p.parsed)&&(p.parsed=m.parsed);continue}d.push({...m,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=>Td(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function cy(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 Id(e,{describe:t=cy,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 to,iy,Ad,ay,Cd,pa=L(()=>{to=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),iy=/^\s*(?:the|a|an)\s+/i,Ad=e=>[e?.subject,e?.object].filter(t=>iy.test(String(t||""))).length;ay=new Set(["fuzzy","lemma","spell"]),Cd=e=>ay.has(e.via)});function Fr(e){fa=e}function ma(){return typeof fa=="function"?fa():null}var fa,Uo=L(()=>{fa=null});function Nd(e,t={},n=uy){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 ly,uy,Md=L(()=>{Hn();Mr();Pr();jd();_d();Rd();pa();Uo();ly=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],uy=[xd,kd,Sd,...ly]});var Dr,Pd=L(()=>{Dr=(e,t,n)=>n});var _p={};Bn(_p,{DYNAMIC_TAIL_OK_RE:()=>La,applyNegationFrames:()=>Fo,ask:()=>Zn,classDisplayName:()=>Xn,degreeMetric:()=>wp,metaFallbackEntityAnswer:()=>dp,normalizeQuery:()=>ks,parseQuery:()=>qo,parseQueryFull:()=>Ea,render:()=>hn,rephraseHint:()=>Ta,resolveObject:()=>an,traverse:()=>Xt});function We(e,t){let n=Fd.get(e);n||(n=new Map,Fd.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Tn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Fe(e,t){let[n,s]=Zd[e]||["result","results"];return t===1?n:s}function Xn(e){let t=String(e||"");if(typeof pn=="function"){let n=pn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function Es(e){return py[e]||e}function by(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||gy.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return de(ms).includes(o)?t:e}function qo(e,{nlp:t=void 0}={}){return Ea(e,{nlp:t}).parsed}function Ea(e,{nlp:t=void 0}={}){let n=t===void 0?ma():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=ia(Fo(ks(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=yy(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=da(Nd(o,{nlp:n,raw:s}));return i?{parsed:by(i.parsed),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function ya(e,t){return t.length&&tp.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function oo(e,t){return eo(e)||zo(e,t)}function yy(e,t){let n=Yt(e),s=n.map(o=>o.toLowerCase());return Py(n,s)||Dy(n,s)||$y(n,s,t)||sp(e,t,0)||zy(n,s,t)||ky(n,s,t)||Ty(n,s,t,0)||Iy(n,s)||Ny(n,s,t)||Uy(n,s,t)||qy(n,s,t)||Hy(n,s,t,0)||Gy(n,s,t,0)||ja(n,s,t,0)||Sy(n,s,t)||cp(n,s,t,0)}function Ur(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function $y(e,t,n){if(!["do","does","did"].includes(t[0])||!vy.has(t[1]))return null;let s=Nt(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=vt(a,ae);if(!l)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((m,p)=>(p<l.start||p>=l.end)&&!st.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=ro(`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:Ur(o,{op:"difference",kind:"set",ast:d})}}function sp(e,t,n=0){let s=wd(e);if(!s)return null;let o=Nt(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=Yt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>qe[d]))return Ur(r,{op:"difference",kind:"qual",filters:a});let l=vt(a,ae);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,m)=>(m<l.start||m>=l.end)&&!st.has(a[m])&&a[m]!=="from").length)return Ur(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=ro(`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"}:Ur(r,{op:"difference",kind:"set",ast:u})}function ky(e,t,n){let s=0;for(;s<t.length&&xy.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=vt(r,ae);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 rp(e,t){let n=jt(t),s=n.filter(r=>!Qd.has(r)),o=op(e,s.length?s:n);return o.size===1?[...o][0]:null}function ro(e,t,n){if(n>ep)return{node:"miss",reason:"too deep to resolve"};let s=sp(e,t,n);if(s)return s;let o=Yt(e),r=o.map(c=>c.toLowerCase()),i=ja(o,r,t,n);if(i)return i;let a=cp(o,r,t,n);if(a)return a;let l=oo(e,t);return l?{node:"clause",clause:l}:null}function ja(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Sn.includes(t[o]),i=!r&&np(t[o]);if(!r&&!i||r&&o+1>=t.length||!Nt(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(m=>qe[m.toLowerCase()]))continue;let c=oo([...l,wa].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=ro(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 Sy(e,t,n){for(let s=0;s<t.length;s+=1){if(!Ey.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!ae[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),wa,...e.slice(s+1)],a=oo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===wa&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function Ty(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!jy.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(_y.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&&Ry.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&Ay.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Sn.includes(d)))return null;let l=Sa.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=ro(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=Nt(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function Iy(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!Cy.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 Ly(e){let t=new Set,n=[];for(let s of e){if(!s||!Oy.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function Ny(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(!Io.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let m=t.slice(0,d).join(" ");if(d===t.length-1&&(hs.includes(m)||gs.includes(m))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=hs.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=My(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=Ly(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function My(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&wy.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>qe[a]))return{type:"qual",filters:r};let i=oo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function Py(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?Nt(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 Fy(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=ps(n).slice(e.length).trim(),o=Yt(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 Dy(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(qe[t[c]]){n=c,s=t[c-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&fs[t[n]]){let c=o+1;for(;c<t.length&&(t[c]==="the"||t[c]==="a"||t[c]==="an");)c+=1;let u=t[c];if(u&&!Gl.has(u))return null}let r=Fy(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 zy(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=oo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function Uy(e,t,n){let s=hs.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&qe[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?Nt(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)&&!ip.has(d)),u;if(c){let d=ro(`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 Gy(e,t,n,s){let o=0,r=!1,i=null;for(let y of By){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&&_a.has(t[o]);)o+=1;let a=[];for(;o<t.length&&qe[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?Nt(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!ae[t[o]]&&!jn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${ap}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),m=t.slice(o).some(y=>!st.has(y)&&!ip.has(y)),p=t.slice(o),f=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),f=f.slice(1));let g=r&&Wy.has(p[0]);if(r&&(m&&!g||d.length===0))return null;let h,b=!1;if(m){let y=g?f:d,w=ro(`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"};h=w,b=!0}else h={node:"allOfClass",entityType:c},a.length&&(h={node:"qualifier",filters:a,inner:h});return{node:"list",entityType:c,base:h,scoped:b}}function qy(e,t,n){let s=null,o=-1;for(let f=0;f<t.length;f+=1){let g=t.slice(f,f+2).join(" ");if(Gn[g]){s=Gn[g],o=f;break}if(Gn[t[f]]){s=Gn[t[f]],o=f;break}}if(!s)return null;let r=null,i=null;for(let f=o;f<t.length;f+=1)if(dn[t[f]]){r=dn[t[f]],i=t[f];break}if(!r){for(let f=o-1;f>=0;f-=1)if(dn[t[f]]){r=dn[t[f]],i=t[f];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(f=>l.includes(f));!r&&(a||c)&&(r=dn.connections,i="connections");let u,d=null;for(let f of t){let g=Nt(f);if(g&&!g.placeholder){u=g.entityType,d=f;break}}if(!d&&(u=i?ql[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 m=["needs","need","needing","lacks","lack","lacking","misses","missing"],p=t.some(f=>m.includes(f))?s==="most"?"fewest":"most":s;return{node:"superlative",entityType:u,metric:r,metricNoun:i,extreme:p}}function Hy(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&_a.has(t[o]);)o+=1;if(o>=t.length)return null;let r=Nt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&Vy.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=Nt(t[t.length-1]);if(i&&!i.placeholder&&i.entityType!=="Change"){let a=e.slice(o,t.length-1).join(" ").trim();if(a)return{node:"find",entityType:i.entityType,term:a}}return t.some(a=>Sn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!ae[t[o]]&&!jn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${ap}`}:null}function Ky(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&_a.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Sn.includes(t[i])){s=i;break}if(s<0)return null;let o=Nt(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 Yy(e,t,n,s,o,r){let{branches:i,ops:a}=Br(n,s),l=null,c=[];for(let u=0;u<i.length;u+=1){let d=i[u],m=d.map(y=>y.toLowerCase()),p=u===0?"intersection":a[u-1],f=ya(d,m);if(f.blc.length&&f.blc.every(y=>qe[y])){c.push({op:p,kind:"qual",filters:f.blc});continue}if(m[0]==="of"||m[0]==="in"){c.push({op:p,kind:"set",ast:{node:"membership",entityType:e,term:d.slice(1).join(" ")}});continue}let g=d,h=vt(m,ae);h?l=d.slice(h.start,h.end):l&&(g=[...l,...d]);let b=lp(`${t} ${g.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 cp(e,t,n,s){let o=Ky(e,t);if(o){let{entityType:C,term:S,relIdx:R}=o,M=t.slice(R+1),j=e.slice(R+1);if(!M.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[R]}"`};let _=Yy(C,`which ${t[R-1]}`,M,j,n,s+1);if(_.miss)return{node:"miss",reason:_.miss};let O=[{op:"seed",kind:"set",ast:{node:"find",entityType:C,term:S}},..._.atoms];return O.length===1?O[0].ast:{node:"boolean",entityType:C,atoms:O}}let r=0;for(;r<t.length&&Sa.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&qe[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?Nt(t[r]):null;if(!l){let C=r+1<t.length?Nt(t[r+1]):null;if(Dd.has(t[r])&&C&&C.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(tp.has(t[r])){let S=r+1;S<t.length&&(t[S]==="the"||t[S]==="a"||t[S]==="an")&&(S+=1);let R=S+1<t.length?Nt(t[S+1]):null;if(Dd.has(t[S])&&R&&R.entityType==="Commit"&&S+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&C&&/^[a-z]+$/.test(t[r])&&!ae[t[r]]&&!st.has(t[r])&&!Oa.has(t[r])?{node:"find",entityType:C.entityType,term:e[r]}:null}let c=l.entityType,u=t[r];r+=1;let d=t.slice(r),m=e.slice(r),p=!1;d.length&&Sn.includes(d[0])&&(p=!0,d=d.slice(1),m=m.slice(1));let f=d[0]==="of"||d[0]==="in",g=d.length>0&&np(d[0]),h=m.length>0&&Br(d,m).branches.some(C=>{let{blc:S}=ya(C,C.map(R=>R.toLowerCase()));return S.length&&S.every(R=>qe[R])}),b=m.length>0?Br(d,m).branches:[],y=!1;if(b.length>1){let C=b[0].map(R=>R.toLowerCase()),S=vt(C,ae);S&&S.start===0&&(y=b.slice(1).every(R=>{let M=R.map(_=>_.toLowerCase()),j=vt(M,ae);return j&&j.start===0?j.kind===S.kind:!j}))}let w=!1;if(b.length>1){let C=b[0].map(R=>R.toLowerCase()),S=vt(C,ae);S&&S.start===0&&(w=b.slice(1).every(R=>{let M=R.map(_=>_.toLowerCase()),j=vt(M,ae);return!!j&&j.start===0&&j.end-j.start===1}))}if(!(a.length||p||f||g||h||y||w))return null;if(!m.length){let C={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:C,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let $=l.placeholder?"what":`which ${u}`,{branches:k,ops:x}=Br(d,m),v=null,A=[];for(let C=0;C<k.length;C+=1){let S=k[C],R=S.map(N=>N.toLowerCase()),M=C===0?"seed":x[C-1],j=ya(S,R);if(j.blc.length&&j.blc.every(N=>qe[N])){A.push({op:M,kind:"qual",filters:j.blc});continue}if(R[0]==="of"||R[0]==="in"){A.push({op:M,kind:"set",ast:{node:"membership",entityType:c,term:S.slice(1).join(" ")}});continue}let _=S,O=vt(R,ae);O?v=S.slice(O.start,O.end):v&&(_=[...v,...S]);let F=lp(`${$} ${_.join(" ")}`,n,s+1);if(!F||F.node==="miss")return{node:"miss",reason:F&&F.reason||"a clause in the combination didn't parse"};A.push({op:M,kind:"set",ast:F})}if(A[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let T;return A.length===1?T=A[0].ast:T={node:"boolean",entityType:c,atoms:A},a.length&&(T={node:"qualifier",filters:a,inner:T,entityType:c}),T}function lp(e,t,n){if(n>ep)return{node:"miss",reason:"too deep to resolve"};let s=Yt(e),o=s.map(a=>a.toLowerCase()),r=ja(s,o,t,n);if(r)return r;let i=oo(e,t);return i?{node:"clause",clause:i}:null}function Br(e,t){let n=Object.keys(qs).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(qs[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 up(e,t,n,s){let o=no[t];if(o&&Qn.has(n)){let u=We(e,o).filter(d=>s.has(d.object));return On(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>Qn.has(e.byId.get(u)?.class))?[...jt(t),o]:jt(t)).flatMap(u=>We(e,u)).filter(u=>s.has(u.object)),l=On(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")?Ca(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function Go(e,t,n){let s=jt(t).flatMap(o=>We(e,o)).filter(o=>n.has(o.subject));return On(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function On(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 Xy(e,t){let n=Vn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Vn(o.label).startsWith(s))}function va(e){let t=zd.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},zd.set(e,t),t}function so(e,t){return t?t.class==="Module"?t.id:va(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=>Jy.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=so(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Fe(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Dr("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 $a(e,t,n){let s=On(Vs.flatMap(o=>Go(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function Ra(e,t,n=null){let s=In(e,t,n);if(!(s.match&&s.tier===1)){let o=Xy(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 pp(e,t,n,s,o){let r=o||(()=>!0),i=$a(e,t,s).filter(r);if(i.length||!mp(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of fp(e,t)){let l=e.byId.get(a);if(!l)continue;let c=$a(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 Ss(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=va(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=so(e,t),o=va(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&ys(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function Aa(e){return We(e,"inherits")}function xa(e,t){return Aa(e).filter(n=>n.object===t).map(n=>n.subject)}function Ud(e,t){return Aa(e).filter(n=>n.subject===t).map(n=>n.object)}function Qy(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 fp(e,t){let n=new Set,s=[...Ud(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Ud(e,o))n.has(r)||s.push(r)}}return n}function mp(e,t){let n=Bd.get(e);if(n||(n=new Map,Bd.set(e,n)),n.has(t))return n.get(t);let s=Aa(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 Wd(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 qd(e){return e.slice().sort((t,n)=>Gd[n.via]-Gd[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Vd(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Kn(n);if(Cn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of js(e.label))if(Cn(o,n,s)<=s)return!0;return!1}function hp(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...js(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=mp(e,t),i=[];for(let l of s){let c=Wd(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...Qy(e,l.id)].some(d=>{let m=e.byId.get(d);return!!m&&!!Wd(m,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:qd(i),broad:[]};let a=new Map;for(let l of s)for(let c of fp(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&Vd(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&&Vd(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:qd([...a.values()])}}function rn(e,t,n){switch(t.node){case"clause":return Xt(e,t.clause,n).matches||[];case"allOfClass":return e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=hp(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(jt(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=In(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=rp(e,t.kind);if(!o)return[];let r=new Set(Go(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(rn(e,t.inner,n).map(o=>o.id));return up(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(rn(e,t.inner,n).map(o=>o.id));return Go(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=Ra(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 On(Vs.flatMap(l=>Go(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=pp(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?yp(e,t,n).matches:rn(e,t.inner,n).filter(o=>t.filters.every(r=>Ss(e,o,qe[r])));case"boolean":return gp(e,t,n);case"anaphora":return bp(e,t,n).matches;default:return[]}}function gp(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=rn(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>Ss(e,l,qe[c])),a=l=>o.filters.every(c=>{let u=Zy(qe[c]);return u?Ss(e,l,u):!Ss(e,l,qe[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(rn(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 rn(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function ev(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 bp(e,t,n){let o=ev(e,t.candidateTerms);if(!o){let c=n&&n.prev;if(!Array.isArray(c)||!c.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=c.map(u=>e.byId.get(u)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(c=>i.filters.every(u=>Ss(e,c,qe[u])));else if(i&&i.type==="clause"){let c=an(e,i.clause.object);if(!c.match)r=[];else{let u=no[i.clause.kind],d=[...jt(i.clause.kind),...u?[u]:[]],m=new Set(d.flatMap(p=>We(e,p)).filter(p=>p.object===c.match.id).map(p=>p.subject));r=r.filter(p=>m.has(p.id))}}let a=c=>c.length&&c.every(u=>u.class===c[0].class)?c[0].class:null,l=r.length?a(r):a(o);return t.mode==="count"?{compositeKind:"count",count:r.length,entityType:l,matches:[]}:{compositeKind:"set",matches:r,entityType:l}}function wp(e,t,n){let s=n.kind==="*"?tv:[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 nv(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 ov(e,t){let{op:n,pivotRaw:s}=t,o=l=>String((l.attributes||[]).find(c=>c.key==="date")?.value||"").slice(0,10),r=null,i=null;if(sv.test(s))r=s;else{let{match:l,ambiguous:c}=an(e,s,{expectedClass:"Commit"});l&&!c&&l.class==="Commit"&&o(l)&&(i=l.id,r=o(l))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let a=e.individuals.filter(l=>l.class==="Commit"&&l.id!==i&&o(l)).filter(l=>{let c=o(l);return n==="since"?c>=r:n==="before"?c<r:n==="after"?c>r:c===r}).sort((l,c)=>o(c).localeCompare(o(l)));return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:a}}function rv(e,t,n){let s=rn(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=up(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 iv(e,t){let n=e.individuals.filter(i=>i.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let i=new Set(We(e,"tests").map(a=>a.subject));n=n.filter(a=>!i.has(a.id)&&!ys(String(a.label).toLowerCase()))}let s=n.map(i=>({ind:i,score:wp(e,i,t.metric)})).sort((i,a)=>t.extreme==="most"?a.score-i.score:i.score-a.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(i=>i.score===o).map(i=>i.ind);return{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r}}function yp(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(p=>Ss(e,m,qe[p])):null,a=Ra(e,o.term,n&&n.contextId);if(a.kind==="dir"){let m;if(!r||r==="Module")m=a.mods;else{let p=new Set(a.mods.map(f=>f.id));m=On(Vs.flatMap(f=>Go(e,f,p))).filter(f=>f.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r}}if(a.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:l,inherited:c,viaLabel:u}=pp(e,a.id,a.entityClass,r,i),d=!l.length&&c.length>0;return{compositeKind:"membership",entityType:r,matches:d?c:l,inheritedNotOwn:d,viaLabel:u,ownerLabel:a.label}}function av(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&&so(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?Ca(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 cv(e,t,n){let s=so(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||$a(e,n.id).some(o=>o.id===t.id)}function lv(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=In(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 u=Ra(e,i,n.contextId);if(u.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!cv(e,a.match,u))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:u.kind==="dir"?i:u.label,matches:[]}}let l=Ss(e,a.match,qe[o]),c=r?!l:l;return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:c,matches:[a.match]}}function uv(e,t,n){let s=an(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=rn(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 dv(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return av(e,t);if(t.node==="qualCheck")return lv(e,t,n);if(t.node==="universal")return uv(e,t,n);if(t.node==="count")return{compositeKind:"count",count:rn(e,t.base,n).length,entityType:t.entityType,matches:[]};if(t.node==="list")return{compositeKind:"list",matches:rn(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="superlative")return iv(e,t);if(t.node==="temporal")return rv(e,t,n);if(t.node==="recentCommits")return nv(e);if(t.node==="commitFilter")return ov(e,t);if(t.node==="anaphora")return bp(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return yp(e,t,n);if(t.node==="find"){let{narrow:s,broad:o}=hp(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:s.length?s:o,broad:!s.length&&o.length>0}}return(t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length)?{compositeMiss:!0,reason:"no-prev",matches:[]}:{compositeKind:"set",matches:rn(e,t,n),entityType:t.entityType||null}}function vp(){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 pv(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=Vo(e);return n&&n!=="(unknown module)"?`${t} in ${n}`:t}function fv(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})`:""}. ${vp()}.`,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=Fe(t.entityType,1),o=Fe(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=Vo(i),l=i.class==="Module"?"":a&&a!=="(unknown module)"?`, ${Dr("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 ${Yn(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=Fe(t.entityType,t.total),o=my(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}: ${Yn(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Fe(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 ${Fe(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>Be?` \u2014 narrow with "${Fe(t.entityType,2)} in <module>"`:"";return{content:`${Yn(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?` (${Fe(t.entityType,2)})`:""}. ${Jn(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Fe(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Yn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Yn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Fe(t.entityType,1);if(!t.matches.length)return{content:`no ${Fe(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?pv(t.matches[0]):Yn(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Fe(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,Lt).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>Lt?` \u2026+${t.matches.length-Lt} 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,Lt).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>Lt?` \u2026+${t.matches.length-Lt} 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 ${Fe(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:`${Yn(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?Fe(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. ${Jn(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. ${Jn(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}}return t.matches.length?{content:`${Yn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`nothing in the index matches that${t.entityType?` (${Fe(t.entityType,2)})`:""}. ${Jn(n)}`,miss:!0,ambiguous:!1,matches:[]}}function Ta(){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). `+vp()}function Jn(e=null){return e&&ea(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 js(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Gr(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 $p(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function mv(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Bo(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(h=>h.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let h=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${h}`)||String(y.label).toLowerCase().startsWith(h)));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(h=>String(h.label).toLowerCase()===o||String(h.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let h of e.relations)for(let b of h.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(h=>h.trim()).filter(Boolean);if(u.length>1){let h=new Set;for(let b of u){let y=Bo(e,b,{expectedClass:n});y.match&&!y.ambiguous&&h.add(y.match.id)}if(h.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],m=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(m){let h=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(`.${h}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let h=[...js(s)],b=o.split(/\s+/).find(x=>x.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,k=$?mv(s):null;for(let x of r){let v=String(x.label||"").toLowerCase(),A=v.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(A===o){d.push({ind:x,score:5e3});continue}if(o.length>=4&&(A.startsWith(o)||A.endsWith(o))){d.push({ind:x,score:4e3-Math.abs(A.length-o.length)});continue}if($){let S=$p(x.label);if(S&&S===k){d.push({ind:x,score:5e3});continue}let R=/[/_-]/.test(x.label)||/\.[a-z0-9]+$/i.test(String(x.label||""));if(S&&R&&k.length>=4&&S.includes(k)){d.push({ind:x,score:2e3-Math.abs(S.length-k.length)});continue}}if(x.class==="Module"){let S=Gr(o);if(S!==o&&S===Gr(A)){let R=Kn(o);if(Cn(A,o,R)>R){d.push({ind:x,score:3e3-Math.abs(A.length-o.length)});continue}}}if(o.length>=4&&v.includes(o)){d.push({ind:x,score:1e3-Math.abs(v.length-o.length)});continue}let T=js(x.label),C=h.filter(S=>T.has(S)).length;C>0&&(!y||T.has(y))&&d.push({ind:x,score:C/h.length*10})}}if(d.sort((h,b)=>b.score-h.score),d.length){let[h,...b]=d,y=b.filter(w=>w.score===h.score);return{match:h.ind,candidates:b.slice(0,4).map(w=>w.ind),tier:3,ambiguous:y.length>0}}let p=m||o.includes("/"),f=null,g=!p&&typeof bs=="function"?bs(e.proseIndex,s).filter(h=>!n||e.byId.get(h.id)?.class===n):[];if(g.length){let[h,...b]=g,y=e.byId.get(h.id);if(y){let w=b.filter($=>$.score===h.score);if(f={match:y,candidates:b.slice(0,4).map($=>e.byId.get($.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!f.ambiguous&&h.via!=="spell")return f}}if(!i&&o.length>=4){let h=Kn(o),b=h+1,y=[];for(let w of r){let $=Cn(String(w.label||"").toLowerCase(),o,h);if($>0)for(let k of js(w.label)){if($<=0)break;$=Math.min($,Cn(k,o,h))}$<b?(b=$,y=[w]):$===b&&$<=h&&y.push(w)}if(b<=h&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=h&&y.length>1&&!f){let[w,...$]=y;return{match:w,candidates:$.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return f||{match:null,candidates:[],tier:null,ambiguous:!1}}function ga(e,t){let n=$p(t),s=[...js(t)],o=[];for(let r of js(e))n.includes(r)||s.some(i=>Gr(i)===Gr(r))||Wr.has(r)||Ep.has(r)||o.push(r);return o}function zr(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:mn(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 an(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(hv,"").trim(),i=r.match(gv);if(i){let a=r.slice(0,i.index).trim(),l=Ue[i[1].toLowerCase()];if(a&&l){let c=zr(Bo(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=zr(Bo(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return zr(Bo(e,t,n),t)}return zr(Bo(e,t,n),t)}function In(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 Ca(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 bv(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||Qn.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&&Qn.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 $v(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&Ia.has(Hd(s.label))).map(s=>({ind:s,named:n.has(Hd(s.label))?1:0,depth:String(s.label).split("/").length,fixture:vv(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 xv(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function Xt(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 dv(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let j=t.candidates.map(_=>{let O=Xt(e,_,{contextId:n,prev:s});return{parsed:_,result:O,rendered:hn(_,O,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:j}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let j=String(t.object||"").trim(),_=j.toLowerCase(),O=(e.individuals||[]).find(F=>{if(F.class!=="SchemaClass"&&F.class!=="SchemaPredicate")return!1;if(String(F.label).toLowerCase()===_)return!0;let N=(F.attributes||[]).find(U=>U.key==="token")?.value;return N&&String(N).toLowerCase()===_});if(!O){let F=dp(e,j);return F?{matches:[F.hit],objMatch:F.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:F.text,traversal:`schema lookup for "${j}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${j}"`,ambiguous:!1}}return{matches:[O],objMatch:O,candidates:[],traversal:`schema lookup for "${j}"`,ambiguous:!1}}if(r==="mentions"){let j=String(t.object||"").trim();return{matches:(typeof bs=="function"?bs(e.proseIndex,j):[]).map(F=>e.byId.get(F.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${j}"`}}if(r==="where"&&wv.test(String(t.object||"").trim())){let j=$v(e,t.object);return{matches:j,objMatch:j[0]||null,candidates:j.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...Ia].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!xv(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 j=In(e,t.subject,n),_=In(e,t.object,n);if(!j.match||!_.match||j.ambiguous||_.ambiguous)return{matches:[],objMatch:_.match,candidates:_.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(j.unresolvedPronoun||_.unresolvedPronoun)};let[O,F]=[j.match,_.match];i==="touches"&&F.class==="Commit"&&O.class!=="Commit"&&([O,F]=[F,O]);let N=no[i],U=[...new Set(N?[...jt(i),N]:jt(i))],G=U.flatMap(B=>We(e,B)).filter(B=>B.subject===O.id&&B.object===F.id);return{matches:G,answer:t.negated?G.length===0:G.length>0,objMatch:_.match,subjMatch:j.match,candidates:[],traversal:`${U.join("+")} edge from ${O.label} to ${F.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=In(e,t.object,n),t.altObject&&t.altObject!==t.object){let j=In(e,t.altObject,n),_=!!l.match&&!l.ambiguous,O=!!j.match&&!j.ambiguous;!_&&O?l=j:_&&O&&l.match.id!==j.match.id&&(l={...l,ambiguous:!0,candidates:[j.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let j=F=>F.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),_=j(String(t.object||"").trim().toLowerCase()),O=(e.individuals||[]).find(F=>{if(F.class!=="Module"||F.id===l.match.id)return!1;let N=String(F.label||"").toLowerCase().split("/").pop();return N!==j(N)&&j(N)===_});O&&(l={...l,ambiguous:!0,candidates:[O,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:m,matchedVia:p,unplacedWords:f,nearestLabel:g}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:m,unplacedWords:f,nearestLabel:g};if(d){let _=On([c,...u||[]]).slice(0,Be).map(O=>{let F=Xt(e,t,{contextId:n,prev:s,pinnedObjMatch:O});return{candidate:O,result:F,rendered:hn(t,F,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:_}}if(r==="where"){let j=(c.attributes||[]).find(_=>_.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:j,traversal:j?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let j=O=>String((O.attributes||[]).find(F=>F.key==="date")?.value||""),_;if(c.class==="Commit")_=[c];else{let O=["touches","touchesSymbol"].flatMap(N=>We(e,N)).filter(N=>N.object===c.id),F=new Set;_=[];for(let N of O){if(F.has(N.subject))continue;F.add(N.subject);let U=e.byId.get(N.subject);U&&U.class==="Commit"&&_.push(U)}_.sort((N,U)=>j(U).localeCompare(j(N)))}return{matches:_,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let j=N=>String((N.attributes||[]).find(U=>U.key==="date")?.value||""),_=["touches","touchesSymbol"].flatMap(N=>We(e,N)).filter(N=>N.object===c.id),O=new Set,F=[];for(let N of _){if(O.has(N.subject))continue;O.add(N.subject);let U=e.byId.get(N.subject);U&&U.class==="Commit"&&F.push(U)}return F.sort((N,U)=>j(U).localeCompare(j(N))),{matches:F,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return bv(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let j=no[i],O=!!(j&&c.class&&Qn.has(c.class))?[...new Set([...jt(i),j])]:jt(i);if(a&&a!=="Change"){let W=op(e,O),I=ha[a];if(W.size&&!W.has(a)&&!(I&&W.has(I)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...W],traversal:`${O.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${Xn(a)})`}}let N=O.flatMap(W=>We(e,W)).filter(W=>W.subject===c.id).map(W=>e.byId.get(W.object)).filter(Boolean),U=On(N),G=U,B="";if(a&&a!=="Change"){G=U.filter(I=>I.class===a);let W=ha[a];if(!G.length&&W){let I=U.filter(P=>P.class===W);I.length&&(G=I,B=`, widened to ${W} subjects (no ${a} recorded)`)}}return{matches:G,objMatch:c,candidates:u,traversal:`${O.join("+")} edges where subject = ${c.label}${B}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:Qs(e,c,{maxDepth:Kd}).flat().map(O=>e.byId.get(O.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Kd})`};let h=no[i]||jt(i).find(j=>Qd.has(j))||null,b=!!(c.class&&Qn.has(c.class));if(h&&(Qn.has(a)||b)){let j=We(e,h).filter(B=>B.object===c.id),_=On(j.map(B=>e.byId.get(B.subject)).filter(Boolean)),O=!a||a==="Change"?_:_.filter(B=>B.class===a),F="",N=ha[a];if(!O.length&&N){let B=_.filter(W=>W.class===N);B.length&&(O=B,F=`, widened to ${N} subjects (no ${a} recorded)`)}let U=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!We(e,"contains").some(B=>B.subject===c.id),G=U?e.byId.get(so(e,c)||""):null;if(O.length||!(U&&G))return{matches:O,objMatch:c,candidates:u,traversal:`${h} edges where object = ${c.label}${F}`,ambiguous:d,matchedVia:p}}let y=c,w=u,$=d,k=p,x="",v=rp(e,i);if(v&&y.class&&y.class!==v){let j=an(e,t.object,{expectedClass:v});if(j.match&&!j.ambiguous)y=j.match,w=j.candidates,$=j.ambiguous,k=j.matchedVia;else if(v==="Module"){let _=so(e,y),O=_&&e.byId.get(_);if(O)x=`, refined from ${y.label} to its containing module`,y=O;else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:k,wrongGrainMiss:!0,wantClass:v,traversal:`"${t.object}" resolved to ${Xn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Xn(v)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:k,wrongGrainMiss:!0,wantClass:v,traversal:`"${t.object}" resolved to ${Xn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Xn(v)})`}}let A=jt(i).flatMap(j=>We(e,j)).filter(j=>j.object===y.id);i==="cochange"&&(A=A.concat(jt(i).flatMap(j=>We(e,j)).filter(j=>j.subject===y.id).map(j=>({...j,subject:j.object,object:j.subject}))));let T="";if(!A.length&&y.class){let j=`ext:${String(y.label).toLowerCase()}`;A=jt(i).flatMap(_=>We(e,_)).filter(_=>String(_.object).toLowerCase()===j),A.length&&(T=` (by name, via unresolved ${j} references)`)}let C=[],S=new Set;for(let j of A){let _=e.byId.get(j.subject);_&&!S.has(_.id)&&(S.add(_.id),C.push(_))}let R,M="";if(!a||a==="Change")R=C;else{let j=C.filter(_=>_.class===a);if(j.length)R=j;else if(a!=="Module"&&C.some(_=>_.class==="Module")){let _=new Set(C.filter(O=>O.class==="Module").map(O=>O.id));R=Ca(e,_,a),M=`, then ${Xn(a)} defined in the matched module(s)`}else R=[]}return{matches:R,objMatch:y,candidates:w,traversal:`${jt(i).join("+")} edges where object = ${y.label}${T}${M}${x}`,ambiguous:$,matchedVia:k}}function Vo(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]:"(unknown module)"}function ba(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function kv(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function mn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function Wo(e){let t=e.object??e.subject??"?";return`${e.entityType?Fe(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function Yd(e){return Ao[e]?.bare||e}function Ev(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=Fe(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 ${Yd(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 ${Yd(o.kind)} ${JSON.stringify(String(r))}`}function xp(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(Wo).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>xp(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?Ev(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 ":""}${Es(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?Fe(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${Es(e.kind)}`:`${r}${Es(e.kind)} "${e.object}"`}return{english:o,machine:s}}function hn(e,t,n=null){let s=kp(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function kp(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${Ta()}`,miss:!0,ambiguous:!1};if(e.node)return fv(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 ${Wo(l.parsed)}: ${l.rendered.content}`).join(`
53
+ `)}`+(o.length>ta?`
54
+ \u2026+${o.length-ta} more`:"")}var hu,Ru,wu,ob,ib,Qi,ab,Ir,cb,lb,ub,Cu,db,pb,mb,fb,hb,gb,bb,wb,yb,vb,$b,xb,kb,Sb,Eb,jb,_b,Rb,Ab,Tb,Cb,Ib,Ob,Lb,Nb,yu,Mb,Pb,Iu,Ou,Lu,Fb,zb,Db,Ub,Bb,$u,xu,Gb,ku,Tr,Su,Eu,ju,Fo,Ne,Hb,Kb,Wu,Yb,Lt,Hu,Xb,sd,Qb,Zb,ew,tw,nw,sw,ow,rw,Zi,_u,Or,iw,ea,ta,Te=L(()=>{Vn();Xs();Hi();Po();vs();hu={"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: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"};Ru=e=>/^(git|turn):/.test(String(e||""));wu=30,ob=8;ib=2,Qi=25,ab=3;Ir=10,cb=8,lb=3,ub=2,Cu=5,db=4,pb=.2,mb=.35,fb=.15,hb=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),gb=.2,bb=.35,wb=.2,yb=.35,vb=e=>/\.cs$/i.test(e),$b=e=>/^I[A-Z]/.test(String(e||"")),xb=.2,kb=.35,Sb=50,Eb=.2,jb=.35,_b=.5,Rb=Cu,Ab=3,Tb=4,Cb=1,Ib=.9,Ob=.5,Lb=.2,Nb=.35,yu=4,Mb=2,Pb=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],Iu=3,Ou=12,Lu=.9,Fb=["imports","calls","callsSymbol","inherits"],zb=.5,Db=.6,Ub=.2,Bb=.35;$u=128,xu=4,Gb=64,ku=250,Tr=class extends Error{};Su=new WeakMap;Eu=40,ju=40,Fo=30;Ne=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";Hb=25,Kb=15;Wu=40,Yb="tests edges are recorded module to module, so this is module-grain coverage.";Lt=15;Hu=new Set(["Function","Method"]);Xb=8;sd={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};Qb=8,Zb=16,ew=4,tw=6,nw=12,sw=2,ow=8,rw=3,Zi=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),_u=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Or=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},iw=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;ta=40});function Ve(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function gd(e){let t=String(e||"");return ud&&(t=t.replace(ud," ")),t.replace(/\s+/g," ").trim()}function bd(e){let t=String(e||"");t=t.replace(jw," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(Sw);if(o&&(t=o[1].trim()),o=t.match(Ew),o&&(t=o[1].trim()),o=t.match(dd),o&&(t=o[1].trim()),o=t.match(pd),o&&(t=o[1].trim()),o=t.match(md),o&&(t=o[1].trim()),o=t.match(fd),o&&(t=o[1].trim()),o=t.match(_w),o&&(t=o[1].trim()),o=t.match(Rw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Aw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Tw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Cw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Iw),o&&xs.test(o[1].trim())&&(t=o[1].trim()),o=t.match(Ow),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(Lw),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(Nw),o){let r=o[1].trim();kw(r)||(t=vw.test(r)||xs.test(r)?r:`describe ${r}`)}if(o=t.match(Mw),o){let r=o[1].trim();(xs.test(r)||Pw.test(r)||fd.test(r)||dd.test(r)||md.test(r)||pd.test(r))&&(t=r)}if(t===s)break}return t}function Dw(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(Fw);if(o&&(t=o[1].trim()),o=t.match(zw),o&&(t=o[1].trim()),t===s)break}return t}function Bw(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(Uw);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function Gw(e){let t=String(e||""),n=t.match(qw);if(n){let o=yd[n[1].toLowerCase()],r=wd[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(vd);return s?`which modules transitively import ${s[1].trim()}`:t}function Nr(e){return String(e||"").replace(pw,t=>Fi[t.toLowerCase()])}function ks(e){let t=Nr(e);return t=t.replace(mw,n=>zi[n.toLowerCase()]),t=t.replace(fw,n=>Di[n.toLowerCase()]),t=t.replace(hw,"with"),t=t.replace(gw,(n,s)=>`${s} for`),t=t.replace(bw,(n,s)=>`for ${s}`),t=t.replace(ww,(n,s)=>s),t=t.replace(Vw,"$1$2"),t=t.replace(ql,"$1ing"),t=bd(t),t=Bw(t),t=Dw(t),t=Gw(t),t=gd(t),t=Kt(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function zo(e){for(let t of[...Vl,...Gl]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function ca(e){for(let t of Hw){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function $d(e){let t=String(e||"").match(Kw);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var dw,pw,hd,mw,fw,hw,gw,bw,ww,yw,ud,vw,xs,$w,xw,kw,Sw,Ew,dd,pd,md,jw,_w,Rw,Aw,Tw,Cw,Iw,Ow,Lw,Nw,Mw,Pw,fd,Fw,zw,Uw,wd,yd,Ww,qw,vd,Vw,Hw,Kw,st,Xt,de,Kn=L(()=>{_n();dw=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Ve).join("|")+")\\b","gi"),pw=dw(Fi),hd=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Ve).join("|")+")\\b(?!\\.[a-z0-9])","gi"),mw=hd(zi),fw=hd(Di),hw=/(?<=^|\s)w\/(?=\s|$)/gi,gw=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,bw=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,ww=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,yw=Object.keys(ae).sort((e,t)=>t.length-e.length).map(Ve).join("|"),ud=Io.length?new RegExp("\\b("+[...Io].sort((e,t)=>t.length-e.length).map(Ve).join("|")+")\\b\\s*,?","gi"):null;vw=new RegExp("\\b(?:"+Object.keys(ae).sort((e,t)=>t.length-e.length).map(Ve).join("|")+")\\b","i"),xs=/^(?:which|what|who|whose|where|when|why|how)\b/i,$w=new Set(["modules","files","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),xw=/^(?:all\s+|the\s+)?(?:module|file|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,kw=e=>{if(xw.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return $w.has((t[t.length-1]||"").toLowerCase())},Sw=/^(?: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,Ew=/^(?: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,dd=/^(?:(?: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,pd=/^(?: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,md=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,jw=/,?\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,_w=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,Rw=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,Aw=/^tell\s+me\s+(.+?)\??$/i,Tw=/^do\s+you\s+know\s+(.+?)\??$/i,Cw=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,Iw=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,Ow=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,Lw=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,Nw=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,Mw=/^(?:and|also|so|then|now|but)\s+(.+)$/i,Pw=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,fd=/^(?:(?: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;Fw=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,zw=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;Uw=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;wd=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"}),Ww="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",qw=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(yd).join("|")+")\\s+("+Object.keys(wd).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+Ww+")\\??$","i"),vd=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;Vw=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Bl.map(Ve).join("|")})(\\s*[?.!]*)$`,"i");Hw=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+(?:${Pi.map(Ve).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+(${yw})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);Kw=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"]),Xt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),de=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var kd,xd=L(()=>{kd={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","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","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","aditted","aerides","aerified","aerifies","aerify","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","benting","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","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","carving","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","centing","cercises","cere","cerise","cerises","certain","certaining","certains","certifies","certify","certing","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","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","dean","deaned","deaning","deans","dearie","dearies","debiled","debiling","debone","deboned","debones","deboning","debrises","debted","debting","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decode","decouple","decouples","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","deisting","deists","deitied","delfing","deliing","delivers","delling","demands","demised","demising","denied","denned","denning","dent","dented","dentine","dentined","dentines","denting","dentining","depart","depend","depended","deplane","deplanes","deplore","deplores","depone","deponed","deponing","depose","deposes","deprave","depraves","deprive","depriveds","deprives","derate","derates","derbies","deride","derides","deriding","derisive","derisives","deriveds","deriving","dermises","derpies","derrises","descends","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","dewied","dewiness","dewing","dexone","dexoned","dexones","dexoning","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","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","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","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","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","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","emotes","emsing","enated","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","enting","epopses","eposes","equally","equine","equines","erectly","eroses","ersing","ersted","ersting","erting","erudited","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","ferining","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","gent","genting","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","heaves","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helves","here","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","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","kepting","kerite","kerited","kerites","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","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lenting","leon","leones","leons","lesses","lessing","letting","levants","levees","levels","levited","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","mere","merelies","merely","merited","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","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","nerves","nervies","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","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","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","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","parves","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","pekans","pelling","pelting","pent","penting","percent","pere","pert","perting","perves","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","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","reaves","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeves","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","remove","removes","rend","rended","rends","renins","renises","rent","rentes","renting","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","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","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","salving","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarees","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","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","scruple","scruples","sculling","seaport","seaporting","seaports","seareds","seases","seating","seaxes","secluded","secting","secure","sedans","seined","seines","seining","selling","semited","send","sended","sends","sent","senting","septing","sequine","sequines","serifs","serined","serining","serves","sesses","sessing","sets","setting","severs","sexies","sexpot","sexpots","sexpotting","sexted","sexting","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","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shreds","shrews","shrive","shrives","shucks","sibs","sick","sicks","sics","sids","sieves","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sired","sirens","sires","sirred","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skives","skulls","slander","slanted","slates","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","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solves","sooned","sooted","sore","sorelies","sorely","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","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprigger","spriggers","sprits","spurge","squally","squares","squires","ssaing","sses","ssing","ssping","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starve","starves","states","staves","steads","steaked","steeds","stenting","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoves","streaked","stringer","stringers","strive","strives","suaves","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","surd","surded","sured","surelies","sures","surety","surf","surfed","surfer","surge","surged","surges","suring","surrey","survey","suses","sussing","suture","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","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","teraing","tercing","tereting","terming","terned","terning","terrifies","terrify","terses","tersing","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","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","vent","venting","verbified","verbifies","verbify","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","versified","versifier","versifiers","versifies","versify","versting","versts","verting","verves","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","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","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","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Cn(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 ua(e){return/^[a-z]+$/.test(e)&&!st.has(e)&&!la.has(e)}function Sd(e){return ey(e)?null:da(e,Qw,Yn(e))}function da(e,t,n=Yn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Cn(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 Xw,Yn,la,Jw,Qw,Zw,ey,Do=L(()=>{_n();xd();Kn();Xw=["used"];Yn=e=>e.length<=5?1:2,la=new Set([...Object.keys(ae),...Object.keys(Ue),...Object.keys(Wt),...Xw].flatMap(e=>e.split(" "))),Jw=4,Qw=[...new Set([...Object.keys(ae),...Object.keys(Wt)].flatMap(e=>e.split(" ")).filter(e=>e.length>=Jw))],Zw=new Set(kd.words),ey=e=>Zw.has(e)});function eo(e){for(let t of oy){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Mr,ty,ny,sy,pa,oy,Ed,Pr=L(()=>{_n();Kn();Mr=Object.keys(ae).sort((e,t)=>t.length-e.length).map(Ve).join("|"),ty=Object.keys(Ue).sort((e,t)=>t.length-e.length).map(Ve).join("|"),ny=Object.keys(Wt).sort((e,t)=>t.length-e.length).map(Ve).join("|"),sy=fs.slice().sort((e,t)=>t.length-e.length).map(Ve).join("|"),pa=(e,t)=>e==="defines"&&Co.has(t),oy=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Mr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=ae[t];if(pa(n,t))return null;let s=e[1].trim(),o=e[3].trim();return To.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+(${ty})\\s+(?:(${ny})\\s+)?(${Mr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=ae[t];return pa(n,t)?null:{shape:"reverse",entityType:Ue[e[1].toLowerCase()],modifier:e[2]?Wt[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Mr})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=ae[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+(?:${sy})\\??$`,"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=Kt(e[2].trim()),s=!/\s/.test(n);if(t==="the"&&!s||!t&&!Ue[n.toLowerCase()])return null;let o=n.toLowerCase();return t&&t!=="the"&&Wl.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:ms(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${rn.map(Ve).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+(?:${Ht.map(Ve).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+)?(${Mr})\\??$`,"i"),build:e=>ae[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()})}];Ed={id:"grammar",class:"graph-query",run(e){let t=eo(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function vt(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 Uo(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(E=>E.toLowerCase());if(s.includes("where")&&!vt(s,ae)){let E=s.some(S=>rn.includes(S)),_=new Set([...Ht,...rn]),C=n.filter((S,T)=>!st.has(s[T])&&!_.has(s[T])).join(" ").trim();if(C){let S=E?"mentions":"where";return{shape:S,entityType:null,modifier:"direct",kind:S,object:C}}}if(new Set(["has","have","had"]).has(s[0])){let E=s.length;for(;E>1&&(s[E-1]==="ever"||s[E-1]==="been");)E-=1;if((E>1?ae[s[E-1]]:null)==="touches"){let C=n.slice(1,E-1).filter((S,T)=>!st.has(s[1+T])).join(" ").trim();if(C)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:C}}}let r=s,i=vt(s,ae);if(!i&&t){let E=s.map(_=>{if(!ua(_))return _;let C=t.lemma(_);return la.has(C)?C:_});i=vt(E,ae),i&&(r=E)}let a=null;if(!i){let E=s.map(_=>_.length>=4&&ua(_)&&Sd(_)||_);if(i=vt(E,ae),i){r=E;let _=s.slice(i.start,i.end).findIndex((S,T)=>S!==E[i.start+T]),C=i.start+Math.max(_,0);a={from:s[C],to:E[C]}}}let l=!1;if(!i)for(let E=0;E<s.length;E+=1){let _=qn[s[E]];if(!(_&&s[E]==="used"&&s[E+1]==="for")&&_&&s.slice(0,E).some(C=>Fr.has(C))){i={kind:_,start:E,end:E+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&qn[s[i.start]]&&s.slice(0,i.start).some(E=>Fr.has(E))&&(l=!0);let c=E=>a?{...E,fuzzyVerb:a}:E;if(t&&i.end-i.start===1){let E=i.start,_=s[E-1];if((_==="the"||_==="these"||_==="those")&&s[E+1]==="of"&&t.posTags(n)[E]==="NOUN"){let S=n.slice(E+2).filter((T,N)=>!st.has(s[E+2+N])).join(" ").trim();if(S)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:S})}}let u=new Set,d=E=>{if(E)for(let _=E.start;_<E.end;_+=1)u.add(_)};d(i);for(let[E,_]of Object.entries(ae)){if(_!==i.kind)continue;let C=E.split(" "),S=i.end;if(C.every((T,N)=>r[S+N]===T)){d({start:S,end:S+C.length});break}}let f=vt(r,Ue,u);d(f);let p=vt(r,Wt,u);d(p);let m=(E,_)=>n.slice(E,_).filter((C,S)=>!u.has(E+S)&&!st.has(s[E+S])).join(" ").trim(),g=m(0,i.start),h=m(i.end,n.length),b=i.kind,y=f?Ue[r.slice(f.start,f.end).join(" ")]:null,w=p?Wt[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let E=g||h;if(E)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:E})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let E=g||h;if(E)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:E})}let v=s.indexOf("by"),x=s.slice(0,i.start).findIndex(E=>Fr.has(E)),$=x>=0,j=$&&x>v;if(v>=0&&!u.has(v)&&$){let E=(S,T)=>n.slice(S,T).filter((N,R)=>{let A=S+R,O=s[A];return!u.has(A)&&!st.has(O)&&O!=="by"&&!Fr.has(O)&&!ry.has(O)&&!iy.has(O)}).join(" ").trim(),[_,C]=j?[E(x+1,n.length),E(v+1,x)]:[E(0,v),E(v+1,n.length)];if(_&&C)return b==="defines"&&Co.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:C,object:_});if(C)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:C});if(_)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:_})}if(l&&v<0&&h&&s[i.start]==="called")return null;if(g&&h){let E=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Co.has(E))return null;let _=g,C=h;return To.includes(E)&&([_,C]=[C,_]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:_,object:C})}if(h){let E=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:E,modifier:w,kind:b,object:h})}if(b==="inherits"&&!g&&f&&f.start===i.end){let E=r.slice(f.start,f.end).join(" ");if(E)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:E})}return g&&!h&&$&&i.end-i.start===1&&qn[s[i.start]]?g.split(/\s+/).length>1?null:c(b==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:b,object:g}:{shape:"reverse",entityType:y,modifier:w,kind:b,object:g}):g?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:g}):null}var Fr,ry,iy,jd,zr=L(()=>{_n();Kn();Do();Fr=new Set(["is","are","was","were","be","been","being","get","gets","got"]),ry=new Set(["which","what","who","whom","whose"]),iy=new Set(jn.map(e=>e.toLowerCase()));jd={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=Uo(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function cy(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)||_d.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function ly(e,t=null){let n=Xt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!_d.has(a)&&(ay.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=cy(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var _d,ay,Rd,Ad=L(()=>{_n();Kn();Pr();zr();_d=new Set([...st,...de(qs),...de(Object.keys(ae)),...de(Object.keys(Ue)),...de(Object.keys(Wt)),...de(Object.keys(Ge)),...de(hs),...de(gs),...de(Object.keys(Gn)),...de(Object.keys(dn)),...de(Object.keys(Gs)),...de(jn),...de(Oo),...de(fs),...de(Ht),...de(rn),...de(En),...de(Object.keys(Hs))]),ay=new Set([...de(Io),...de(Sr)]);Rd={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(eo(e))return null;let{text:n,dropped:s,maybeNoise:o}=ly(e,t.nlp||null);if(!s.length||!n)return null;let r=eo(n)||Uo(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 Td=L(()=>{});var Cd=L(()=>{});function Od(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?to(e.subject)===to(t.subject)&&to(e.object)===to(t.object):to(e.object)===to(t.object)}function ma(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=>!Ld(c))&&(n=n.filter(c=>!Ld(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=>Od(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),Id(f.parsed)<Id(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=>Od(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function py(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 Nd(e,{describe:t=py,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 to,uy,Id,dy,Ld,fa=L(()=>{to=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),uy=/^\s*(?:the|a|an)\s+/i,Id=e=>[e?.subject,e?.object].filter(t=>uy.test(String(t||""))).length;dy=new Set(["fuzzy","lemma","spell"]),Ld=e=>dy.has(e.via)});function Dr(e){ha=e}function ga(){return typeof ha=="function"?ha():null}var ha,Bo=L(()=>{ha=null});function Fd(e,t={},n=fy){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 my,fy,zd=L(()=>{Kn();Pr();zr();Ad();Td();Cd();fa();Bo();my=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],fy=[Ed,jd,Rd,...my]});var Ur,Dd=L(()=>{Ur=(e,t,n)=>n});var Ap={};Bn(Ap,{DYNAMIC_TAIL_OK_RE:()=>Pa,applyNegationFrames:()=>zo,ask:()=>es,classDisplayName:()=>Jn,degreeMetric:()=>vp,metaFallbackEntityAnswer:()=>mp,normalizeQuery:()=>ks,parseQuery:()=>Vo,parseQueryFull:()=>ja,render:()=>hn,rephraseHint:()=>Oa,resolveObject:()=>an,traverse:()=>Gt});function We(e,t){let n=Ud.get(e);n||(n=new Map,Ud.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Tn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Fe(e,t){let[n,s]=np[e]||["result","results"];return t===1?n:s}function Jn(e){let t=String(e||"");if(typeof pn=="function"){let n=pn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function Ss(e){return gy[e]||e}function $y(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||vy.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return de(fs).includes(o)?t:e}function Vo(e,{nlp:t=void 0}={}){return ja(e,{nlp:t}).parsed}function ja(e,{nlp:t=void 0}={}){let n=t===void 0?ga():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=ca(zo(ks(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=ky(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=ma(Fd(o,{nlp:n,raw:s}));return i?{parsed:$y(i.parsed),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function $a(e,t){return t.length&&op.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function oo(e,t){return eo(e)||Uo(e,t)}function ky(e,t){let n=Xt(e),s=n.map(o=>o.toLowerCase());return Uy(n,s)||Wy(n,s)||Ey(n,s,t)||ip(e,t,0)||qy(n,s,t)||_y(n,s,t)||Ly(n,s,t,0)||My(n,s)||zy(n,s,t)||Gy(n,s,t)||Yy(n,s,t)||Jy(n,s,t,0)||Ky(n,s,t,0)||Ra(n,s,t,0)||Ay(n,s,t)||dp(n,s,t,0)}function Wr(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function Ey(e,t,n){if(!["do","does","did"].includes(t[0])||!Sy.has(t[1]))return null;let s=Nt(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=vt(a,ae);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=ro(`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:Wr(o,{op:"difference",kind:"set",ast:d})}}function ip(e,t,n=0){let s=$d(e);if(!s)return null;let o=Nt(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=Xt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ge[d]))return Wr(r,{op:"difference",kind:"qual",filters:a});let l=vt(a,ae);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 Wr(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=ro(`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"}:Wr(r,{op:"difference",kind:"set",ast:u})}function _y(e,t,n){let s=0;for(;s<t.length&&jy.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=vt(r,ae);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 ap(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 cp(e,t){let n=jt(t),s=n.filter(r=>!tp.has(r)),o=ap(e,s.length?s:n);return o.size===1?[...o][0]:null}function ro(e,t,n){if(n>sp)return{node:"miss",reason:"too deep to resolve"};let s=ip(e,t,n);if(s)return s;let o=Xt(e),r=o.map(c=>c.toLowerCase()),i=Ra(o,r,t,n);if(i)return i;let a=dp(o,r,t,n);if(a)return a;let l=oo(e,t);return l?{node:"clause",clause:l}:null}function Ra(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=En.includes(t[o]),i=!r&&rp(t[o]);if(!r&&!i||r&&o+1>=t.length||!Nt(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Ge[f.toLowerCase()]))continue;let c=oo([...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=ro(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 Ay(e,t,n){for(let s=0;s<t.length;s+=1){if(!Ry.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!ae[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),va,...e.slice(s+1)],a=oo(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 Ly(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!Ty.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(Cy.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&&Iy.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&Oy.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>En.includes(d)))return null;let l=_a.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=ro(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=Nt(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function My(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!Ny.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 Fy(e){let t=new Set,n=[];for(let s of e){if(!s||!Py.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function zy(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(!Oo.includes(t[d]))continue;if(t[d-1]==="of"){s=d,o=!0;break}let f=t.slice(0,d).join(" ");if(d===t.length-1&&(hs.includes(f)||gs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=hs.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=Dy(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=Fy(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function Dy(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&xy.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};let i=oo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function Uy(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?Nt(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 By(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=ms(n).slice(e.length).trim(),o=Xt(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 Wy(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&&qn[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&&!Hl.has(u))return null}let r=By(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 qy(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=oo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function Gy(e,t,n){let s=hs.find(d=>t.slice(0,d.split(" ").length).join(" ")===d);if(!s)return null;let o=s.split(" ").length;for(;o<t.length&&(t[o]==="the"||t[o]==="a"||t[o]==="all");)o+=1;let r=[];for(;o<t.length&&Ge[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?Nt(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)&&!lp.has(d)),u;if(c){let d=ro(`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 Ky(e,t,n,s){let o=0,r=!1,i=null;for(let y of Vy){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&&Aa.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?Nt(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!ae[t[o]]&&!jn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${up}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!st.has(y)&&!lp.has(y)),p=t.slice(o),m=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),m=m.slice(1));let g=r&&Hy.has(p[0]);if(r&&(f&&!g||d.length===0))return null;let h,b=!1;if(f){let y=g?m:d,w=ro(`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"};h=w,b=!0}else h={node:"allOfClass",entityType:c},a.length&&(h={node:"qualifier",filters:a,inner:h});return{node:"list",entityType:c,base:h,scoped:b}}function Yy(e,t,n){let s=null,o=-1;for(let m=0;m<t.length;m+=1){let g=t.slice(m,m+2).join(" ");if(Gn[g]){s=Gn[g],o=m;break}if(Gn[t[m]]){s=Gn[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(dn[t[m]]){r=dn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(dn[t[m]]){r=dn[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=dn.connections,i="connections");let u,d=null;for(let m of t){let g=Nt(m);if(g&&!g.placeholder){u=g.entityType,d=m;break}}if(!d&&(u=i?Kl[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 Jy(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&Aa.has(t[o]);)o+=1;if(o>=t.length)return null;let r=Nt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&Xy.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=Nt(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=>En.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!ae[t[o]]&&!jn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${up}`}:null}function Qy(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&Aa.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(En.includes(t[i])){s=i;break}if(s<0)return null;let o=Nt(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 Zy(e,t,n,s,o,r){let{branches:i,ops:a}=qr(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=$a(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 g=d,h=vt(f,ae);h?l=d.slice(h.start,h.end):l&&(g=[...l,...d]);let b=pp(`${t} ${g.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 dp(e,t,n,s){let o=Qy(e,t);if(o){let{entityType:C,term:S,relIdx:T}=o,N=t.slice(T+1),R=e.slice(T+1);if(!N.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[T]}"`};let A=Zy(C,`which ${t[T-1]}`,N,R,n,s+1);if(A.miss)return{node:"miss",reason:A.miss};let O=[{op:"seed",kind:"set",ast:{node:"find",entityType:C,term:S}},...A.atoms];return O.length===1?O[0].ast:{node:"boolean",entityType:C,atoms:O}}let r=0;for(;r<t.length&&_a.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?Nt(t[r]):null;if(!l){let C=r+1<t.length?Nt(t[r+1]):null;if(Bd.has(t[r])&&C&&C.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(op.has(t[r])){let S=r+1;S<t.length&&(t[S]==="the"||t[S]==="a"||t[S]==="an")&&(S+=1);let T=S+1<t.length?Nt(t[S+1]):null;if(Bd.has(t[S])&&T&&T.entityType==="Commit"&&S+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&C&&/^[a-z]+$/.test(t[r])&&!ae[t[r]]&&!st.has(t[r])&&!Ma.has(t[r])?{node:"find",entityType:C.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&&En.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let m=d[0]==="of"||d[0]==="in",g=d.length>0&&rp(d[0]),h=f.length>0&&qr(d,f).branches.some(C=>{let{blc:S}=$a(C,C.map(T=>T.toLowerCase()));return S.length&&S.every(T=>Ge[T])}),b=f.length>0?qr(d,f).branches:[],y=!1;if(b.length>1){let C=b[0].map(T=>T.toLowerCase()),S=vt(C,ae);S&&S.start===0&&(y=b.slice(1).every(T=>{let N=T.map(A=>A.toLowerCase()),R=vt(N,ae);return R&&R.start===0?R.kind===S.kind:!R}))}let w=!1;if(b.length>1){let C=b[0].map(T=>T.toLowerCase()),S=vt(C,ae);S&&S.start===0&&(w=b.slice(1).every(T=>{let N=T.map(A=>A.toLowerCase()),R=vt(N,ae);return!!R&&R.start===0&&R.end-R.start===1}))}if(!(a.length||p||m||g||h||y||w))return null;if(!f.length){let C={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:C,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let v=l.placeholder?"what":`which ${u}`,{branches:x,ops:$}=qr(d,f),j=null,E=[];for(let C=0;C<x.length;C+=1){let S=x[C],T=S.map(M=>M.toLowerCase()),N=C===0?"seed":$[C-1],R=$a(S,T);if(R.blc.length&&R.blc.every(M=>Ge[M])){E.push({op:N,kind:"qual",filters:R.blc});continue}if(T[0]==="of"||T[0]==="in"){E.push({op:N,kind:"set",ast:{node:"membership",entityType:c,term:S.slice(1).join(" ")}});continue}let A=S,O=vt(T,ae);O?j=S.slice(O.start,O.end):j&&(A=[...j,...S]);let F=pp(`${v} ${A.join(" ")}`,n,s+1);if(!F||F.node==="miss")return{node:"miss",reason:F&&F.reason||"a clause in the combination didn't parse"};E.push({op:N,kind:"set",ast:F})}if(E[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let _;return E.length===1?_=E[0].ast:_={node:"boolean",entityType:c,atoms:E},a.length&&(_={node:"qualifier",filters:a,inner:_,entityType:c}),_}function pp(e,t,n){if(n>sp)return{node:"miss",reason:"too deep to resolve"};let s=Xt(e),o=s.map(a=>a.toLowerCase()),r=Ra(s,o,t,n);if(r)return r;let i=oo(e,t);return i?{node:"clause",clause:i}:null}function qr(e,t){let n=Object.keys(Gs).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(Gs[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 Ta(e,t,n,s){let o=no[t];if(o&&Zn.has(n)){let u=We(e,o).filter(d=>s.has(d.object));return On(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>Zn.has(e.byId.get(u)?.class))?[...jt(t),o]:jt(t)).flatMap(u=>We(e,u)).filter(u=>s.has(u.object)),l=On(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")?La(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function tv(e,t){let n=new Set(Ta(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=ev.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function Go(e,t,n){let s=jt(t).flatMap(o=>We(e,o)).filter(o=>n.has(o.subject));return On(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function On(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 nv(e,t){let n=Hn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Hn(o.label).startsWith(s))}function xa(e){let t=Wd.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},Wd.set(e,t),t}function so(e,t){return t?t.class==="Module"?t.id:xa(e).moduleOfSymbol.get(t.id)||null:null}function mp(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>sv.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=so(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Fe(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Ur("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 ka(e,t,n){let s=On(Vs.flatMap(o=>Go(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function Ca(e,t,n=null){let s=In(e,t,n);if(!(s.match&&s.tier===1)){let o=nv(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 fp(e,t,n,s,o){let r=o||(()=>!0),i=ka(e,t,s).filter(r);if(i.length||!gp(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of hp(e,t)){let l=e.byId.get(a);if(!l)continue;let c=ka(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 Es(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=xa(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=so(e,t),o=xa(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&ys(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function Ia(e){return We(e,"inherits")}function Sa(e,t){return Ia(e).filter(n=>n.object===t).map(n=>n.subject)}function qd(e,t){return Ia(e).filter(n=>n.subject===t).map(n=>n.object)}function ov(e,t){let n=new Set,s=[...Sa(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Sa(e,o))n.has(r)||s.push(r)}}return n}function hp(e,t){let n=new Set,s=[...qd(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of qd(e,o))n.has(r)||s.push(r)}}return n}function gp(e,t){let n=Gd.get(e);if(n||(n=new Map,Gd.set(e,n)),n.has(t))return n.get(t);let s=Ia(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 Vd(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 Kd(e){return e.slice().sort((t,n)=>Hd[n.via]-Hd[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Yd(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Yn(n);if(Cn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of js(e.label))if(Cn(o,n,s)<=s)return!0;return!1}function bp(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...js(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=gp(e,t),i=[];for(let l of s){let c=Vd(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...ov(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Vd(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:Kd(i),broad:[]};let a=new Map;for(let l of s)for(let c of hp(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&Yd(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of Sa(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Yd(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Kd([...a.values()])}}function Jt(e,t,n){switch(t.node){case"clause":return Gt(e,t.clause,n).matches||[];case"allOfClass":return e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=bp(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(jt(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=In(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=cp(e,t.kind);if(!o)return[];let r=new Set(Go(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(Jt(e,t.inner,n).map(o=>o.id));return Ta(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(Jt(e,t.inner,n).map(o=>o.id));return Go(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=Ca(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 On(Vs.flatMap(l=>Go(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=fp(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?$p(e,t,n).matches:Jt(e,t.inner,n).filter(o=>t.filters.every(r=>Es(e,o,Ge[r])));case"boolean":return wp(e,t,n);case"anaphora":return yp(e,t,n).matches;default:return[]}}function wp(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=Jt(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>Es(e,l,Ge[c])),a=l=>o.filters.every(c=>{let u=rv(Ge[c]);return u?Es(e,l,u):!Es(e,l,Ge[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(Jt(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 Jt(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function iv(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 yp(e,t,n){let o=iv(e,t.candidateTerms);if(!o){let c=n&&n.prev;if(!Array.isArray(c)||!c.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=c.map(u=>e.byId.get(u)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(c=>i.filters.every(u=>Es(e,c,Ge[u])));else if(i&&i.type==="clause"){let c=an(e,i.clause.object);if(!c.match)r=[];else{let u=no[i.clause.kind],d=[...jt(i.clause.kind),...u?[u]:[]],f=new Set(d.flatMap(p=>We(e,p)).filter(p=>p.object===c.match.id).map(p=>p.subject));r=r.filter(p=>f.has(p.id))}}let a=c=>c.length&&c.every(u=>u.class===c[0].class)?c[0].class:null,l=r.length?a(r):a(o);return t.mode==="count"?{compositeKind:"count",count:r.length,entityType:l,matches:[]}:{compositeKind:"set",matches:r,entityType:l}}function vp(e,t,n){let s=n.kind==="*"?av:[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 cv(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 uv(e,t){let{op:n,pivotRaw:s}=t,o=l=>String((l.attributes||[]).find(c=>c.key==="date")?.value||"").slice(0,10),r=null,i=null;if(lv.test(s))r=s;else{let{match:l,ambiguous:c}=an(e,s,{expectedClass:"Commit"});l&&!c&&l.class==="Commit"&&o(l)&&(i=l.id,r=o(l))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let a=e.individuals.filter(l=>l.class==="Commit"&&l.id!==i&&o(l)).filter(l=>{let c=o(l);return n==="since"?c>=r:n==="before"?c<r:n==="after"?c>r:c===r}).sort((l,c)=>o(c).localeCompare(o(l)));return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:a}}function dv(e,t,n){let s=Jt(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=Ta(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 pv(e,t){let n=e.individuals.filter(i=>i.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let i=new Set(We(e,"tests").map(a=>a.subject));n=n.filter(a=>!i.has(a.id)&&!ys(String(a.label).toLowerCase()))}let s=n.map(i=>({ind:i,score:vp(e,i,t.metric)})).sort((i,a)=>t.extreme==="most"?a.score-i.score:i.score-a.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(i=>i.score===o).map(i=>i.ind);return{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r}}function $p(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?f=>s.filters.every(p=>Es(e,f,Ge[p])):null,a=Ca(e,o.term,n&&n.contextId);if(a.kind==="dir"){let f;if(!r||r==="Module")f=a.mods;else{let p=new Set(a.mods.map(m=>m.id));f=On(Vs.flatMap(m=>Go(e,m,p))).filter(m=>m.class===r)}return i&&(f=f.filter(i)),{compositeKind:"set",matches:f,entityType:r}}if(a.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:l,inherited:c,viaLabel:u}=fp(e,a.id,a.entityClass,r,i),d=!l.length&&c.length>0;return{compositeKind:"membership",entityType:r,matches:d?c:l,inheritedNotOwn:d,viaLabel:u,ownerLabel:a.label}}function mv(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&&so(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?La(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 fv(e,t,n){let s=so(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||ka(e,n.id).some(o=>o.id===t.id)}function hv(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=In(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 u=Ca(e,i,n.contextId);if(u.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!fv(e,a.match,u))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:u.kind==="dir"?i:u.label,matches:[]}}let l=Es(e,a.match,Ge[o]),c=r?!l:l;return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:c,matches:[a.match]}}function gv(e,t,n){let s=an(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=Jt(e,{node:"allOfClass",entityType:t.entityType},n),r=wp(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 bv(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(Jt(e,t.inner,n).map(s=>s.id));if(t.node==="clause"&&t.clause?.shape==="reverse"&&t.clause.kind==="touches"&&t.clause.entityType==="Commit"){let{objMatch:s,ambiguous:o}=Gt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function wv(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return mv(e,t);if(t.node==="qualCheck")return hv(e,t,n);if(t.node==="universal")return gv(e,t,n);if(t.node==="count"){let s=bv(e,t.base,n);return s?{compositeKind:"count",count:tv(e,s),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:Jt(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:Jt(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="superlative")return pv(e,t);if(t.node==="temporal")return dv(e,t,n);if(t.node==="recentCommits")return cv(e);if(t.node==="commitFilter")return uv(e,t);if(t.node==="anaphora")return yp(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return $p(e,t,n);if(t.node==="find"){let{narrow:s,broad:o}=bp(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:s.length?s:o,broad:!s.length&&o.length>0}}return(t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length)?{compositeMiss:!0,reason:"no-prev",matches:[]}:{compositeKind:"set",matches:Jt(e,t,n),entityType:t.entityType||null}}function xp(){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 yv(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=Ho(e);return n&&n!=="(unknown module)"?`${t} in ${n}`:t}function vv(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})`:""}. ${xp()}.`,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=Fe(t.entityType,1),o=Fe(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=Ho(i),l=i.class==="Module"?"":a&&a!=="(unknown module)"?`, ${Ur("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 ${Xn(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=Fe(t.entityType,t.total),o=wy(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}: ${Xn(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Fe(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 ${Fe(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>Be?` \u2014 narrow with "${Fe(t.entityType,2)} in <module>"`:"";return{content:`${Xn(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?` (${Fe(t.entityType,2)})`:""}. ${Qn(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Fe(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Xn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Xn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Fe(t.entityType,1);if(!t.matches.length)return{content:`no ${Fe(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?yv(t.matches[0]):Xn(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Fe(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,Lt).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>Lt?` \u2026+${t.matches.length-Lt} 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,Lt).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>Lt?` \u2026+${t.matches.length-Lt} 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 ${Fe(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:`${Xn(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?Fe(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. ${Qn(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. ${Qn(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}}return t.matches.length?{content:`${Xn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`nothing in the index matches that${t.entityType?` (${Fe(t.entityType,2)})`:""}. ${Qn(n)}`,miss:!0,ambiguous:!1,matches:[]}}function Oa(){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). `+xp()}function Qn(e=null){return e&&na(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 js(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Vr(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 kp(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function $v(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function Wo(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(h=>h.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let h=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${h}`)||String(y.label).toLowerCase().startsWith(h)));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(h=>String(h.label).toLowerCase()===o||String(h.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let h of e.relations)for(let b of h.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(h=>h.trim()).filter(Boolean);if(u.length>1){let h=new Set;for(let b of u){let y=Wo(e,b,{expectedClass:n});y.match&&!y.ambiguous&&h.add(y.match.id)}if(h.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],f=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(f){let h=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(`.${h}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let h=[...js(s)],b=o.split(/\s+/).find($=>$.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,v=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,x=v?$v(s):null;for(let $ of r){let j=String($.label||"").toLowerCase(),E=j.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(E===o){d.push({ind:$,score:5e3});continue}if(o.length>=4&&(E.startsWith(o)||E.endsWith(o))){d.push({ind:$,score:4e3-Math.abs(E.length-o.length)});continue}if(v){let S=kp($.label);if(S&&S===x){d.push({ind:$,score:5e3});continue}let T=/[/_-]/.test($.label)||/\.[a-z0-9]+$/i.test(String($.label||""));if(S&&T&&x.length>=4&&S.includes(x)){d.push({ind:$,score:2e3-Math.abs(S.length-x.length)});continue}}if($.class==="Module"){let S=Vr(o);if(S!==o&&S===Vr(E)){let T=Yn(o);if(Cn(E,o,T)>T){d.push({ind:$,score:3e3-Math.abs(E.length-o.length)});continue}}}if(o.length>=4&&j.includes(o)){d.push({ind:$,score:1e3-Math.abs(j.length-o.length)});continue}let _=js($.label),C=h.filter(S=>_.has(S)).length;C>0&&(!y||_.has(y))&&d.push({ind:$,score:C/h.length*10})}}if(d.sort((h,b)=>b.score-h.score),d.length){let[h,...b]=d,y=b.filter(w=>w.score===h.score);return{match:h.ind,candidates:b.slice(0,4).map(w=>w.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),m=null,g=!p&&typeof bs=="function"?bs(e.proseIndex,s).filter(h=>!n||e.byId.get(h.id)?.class===n):[];if(g.length){let[h,...b]=g,y=e.byId.get(h.id);if(y){let w=b.filter(v=>v.score===h.score);if(m={match:y,candidates:b.slice(0,4).map(v=>e.byId.get(v.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&h.via!=="spell")return m}}if(!i&&o.length>=4){let h=Yn(o),b=h+1,y=[];for(let w of r){let v=Cn(String(w.label||"").toLowerCase(),o,h);if(v>0)for(let x of js(w.label)){if(v<=0)break;v=Math.min(v,Cn(x,o,h))}v<b?(b=v,y=[w]):v===b&&v<=h&&y.push(w)}if(b<=h&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=h&&y.length>1&&!m){let[w,...v]=y;return{match:w,candidates:v.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function wa(e,t){let n=kp(t),s=[...js(t)],o=[];for(let r of js(e))n.includes(r)||s.some(i=>Vr(i)===Vr(r))||Gr.has(r)||jp.has(r)||o.push(r);return o}function Br(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(wa(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),wa(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:fn(s.slice(0,4).map(r=>r.label))}:e}let n=wa(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(xv,"").trim(),i=r.match(kv);if(i){let a=r.slice(0,i.index).trim(),l=Ue[i[1].toLowerCase()];if(a&&l){let c=Br(Wo(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Br(Wo(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Br(Wo(e,t,n),t)}return Br(Wo(e,t,n),t)}function In(e,t,n){if(qs.includes(String(t||"").trim().toLowerCase())){if(!n)return{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0};let s=e.byId.get(n);return s?{match:s,candidates:[],tier:1,ambiguous:!1}:{match:null,candidates:[],tier:null,ambiguous:!1,unresolvedPronoun:!0}}return an(e,t)}function La(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 Sv(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||Zn.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&&Zn.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 Rv(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&Na.has(Xd(s.label))).map(s=>({ind:s,named:n.has(Xd(s.label))?1:0,depth:String(s.label).split("/").length,fixture:_v(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 Av(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function Gt(e,t,{contextId:n=null,prev:s=null,pinnedObjMatch:o=null}={}){if(!t)return{matches:[],objMatch:null,candidates:[],traversal:null,ambiguous:!1};if(t.node)return wv(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let R=t.candidates.map(A=>{let O=Gt(e,A,{contextId:n,prev:s});return{parsed:A,result:O,rendered:hn(A,O,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:R}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let R=String(t.object||"").trim(),A=R.toLowerCase(),O=(e.individuals||[]).find(F=>{if(F.class!=="SchemaClass"&&F.class!=="SchemaPredicate")return!1;if(String(F.label).toLowerCase()===A)return!0;let M=(F.attributes||[]).find(B=>B.key==="token")?.value;return M&&String(M).toLowerCase()===A});if(!O){let F=mp(e,R);return F?{matches:[F.hit],objMatch:F.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:F.text,traversal:`schema lookup for "${R}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${R}"`,ambiguous:!1}}return{matches:[O],objMatch:O,candidates:[],traversal:`schema lookup for "${R}"`,ambiguous:!1}}if(r==="mentions"){let R=String(t.object||"").trim();return{matches:(typeof bs=="function"?bs(e.proseIndex,R):[]).map(F=>e.byId.get(F.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${R}"`}}if(r==="where"&&Ev.test(String(t.object||"").trim())){let R=Rv(e,t.object);return{matches:R,objMatch:R[0]||null,candidates:R.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...Na].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!Av(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 R=In(e,t.subject,n),A=In(e,t.object,n);if(!R.match||!A.match||R.ambiguous||A.ambiguous)return{matches:[],objMatch:A.match,candidates:A.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(R.unresolvedPronoun||A.unresolvedPronoun)};let[O,F]=[R.match,A.match];i==="touches"&&F.class==="Commit"&&O.class!=="Commit"&&([O,F]=[F,O]);let M=no[i],B=[...new Set(M?[...jt(i),M]:jt(i))],q=B.flatMap(U=>We(e,U)).filter(U=>U.subject===O.id&&U.object===F.id);return{matches:q,answer:t.negated?q.length===0:q.length>0,objMatch:A.match,subjMatch:R.match,candidates:[],traversal:`${B.join("+")} edge from ${O.label} to ${F.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=In(e,t.object,n),t.altObject&&t.altObject!==t.object){let R=In(e,t.altObject,n),A=!!l.match&&!l.ambiguous,O=!!R.match&&!R.ambiguous;!A&&O?l=R:A&&O&&l.match.id!==R.match.id&&(l={...l,ambiguous:!0,candidates:[R.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let R=F=>F.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),A=R(String(t.object||"").trim().toLowerCase()),O=(e.individuals||[]).find(F=>{if(F.class!=="Module"||F.id===l.match.id)return!1;let M=String(F.label||"").toLowerCase().split("/").pop();return M!==R(M)&&R(M)===A});O&&(l={...l,ambiguous:!0,candidates:[O,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:m,nearestLabel:g}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:m,nearestLabel:g};if(d){let A=On([c,...u||[]]).slice(0,Be).map(O=>{let F=Gt(e,t,{contextId:n,prev:s,pinnedObjMatch:O});return{candidate:O,result:F,rendered:hn(t,F,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:A}}if(r==="where"){let R=(c.attributes||[]).find(A=>A.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:R,traversal:R?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let R=O=>String((O.attributes||[]).find(F=>F.key==="date")?.value||""),A;if(c.class==="Commit")A=[c];else{let O=["touches","touchesSymbol"].flatMap(M=>We(e,M)).filter(M=>M.object===c.id),F=new Set;A=[];for(let M of O){if(F.has(M.subject))continue;F.add(M.subject);let B=e.byId.get(M.subject);B&&B.class==="Commit"&&A.push(B)}A.sort((M,B)=>R(B).localeCompare(R(M)))}return{matches:A,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let R=M=>String((M.attributes||[]).find(B=>B.key==="date")?.value||""),A=["touches","touchesSymbol"].flatMap(M=>We(e,M)).filter(M=>M.object===c.id),O=new Set,F=[];for(let M of A){if(O.has(M.subject))continue;O.add(M.subject);let B=e.byId.get(M.subject);B&&B.class==="Commit"&&F.push(B)}return F.sort((M,B)=>R(B).localeCompare(R(M))),{matches:F,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return Sv(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let R=no[i],O=!!(R&&c.class&&Zn.has(c.class))?[...new Set([...jt(i),R])]:jt(i);if(a&&a!=="Change"){let W=ap(e,O),I=ba[a];if(W.size&&!W.has(a)&&!(I&&W.has(I)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...W],traversal:`${O.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${Jn(a)})`}}let M=O.flatMap(W=>We(e,W)).filter(W=>W.subject===c.id).map(W=>e.byId.get(W.object)).filter(Boolean),B=On(M),q=B,U="";if(a&&a!=="Change"){q=B.filter(I=>I.class===a);let W=ba[a];if(!q.length&&W){let I=B.filter(P=>P.class===W);I.length&&(q=I,U=`, widened to ${W} subjects (no ${a} recorded)`)}}return{matches:q,objMatch:c,candidates:u,traversal:`${O.join("+")} edges where subject = ${c.label}${U}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:Qs(e,c,{maxDepth:Jd}).flat().map(O=>e.byId.get(O.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Jd})`};let h=no[i]||jt(i).find(R=>tp.has(R))||null,b=!!(c.class&&Zn.has(c.class));if(h&&(Zn.has(a)||b)){let R=We(e,h).filter(U=>U.object===c.id),A=On(R.map(U=>e.byId.get(U.subject)).filter(Boolean)),O=!a||a==="Change"?A:A.filter(U=>U.class===a),F="",M=ba[a];if(!O.length&&M){let U=A.filter(W=>W.class===M);U.length&&(O=U,F=`, widened to ${M} subjects (no ${a} recorded)`)}let B=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!We(e,"contains").some(U=>U.subject===c.id),q=B?e.byId.get(so(e,c)||""):null;if(O.length||!(B&&q))return{matches:O,objMatch:c,candidates:u,traversal:`${h} edges where object = ${c.label}${F}`,ambiguous:d,matchedVia:p}}let y=c,w=u,v=d,x=p,$="",j=cp(e,i);if(j&&y.class&&y.class!==j){let R=an(e,t.object,{expectedClass:j});if(R.match&&!R.ambiguous)y=R.match,w=R.candidates,v=R.ambiguous,x=R.matchedVia;else if(j==="Module"){let A=so(e,y),O=A&&e.byId.get(A);if(O)$=`, refined from ${y.label} to its containing module`,y=O;else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:x,wrongGrainMiss:!0,wantClass:j,traversal:`"${t.object}" resolved to ${Jn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Jn(j)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:v,matchedVia:x,wrongGrainMiss:!0,wantClass:j,traversal:`"${t.object}" resolved to ${Jn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Jn(j)})`}}let E=jt(i).flatMap(R=>We(e,R)).filter(R=>R.object===y.id);i==="cochange"&&(E=E.concat(jt(i).flatMap(R=>We(e,R)).filter(R=>R.subject===y.id).map(R=>({...R,subject:R.object,object:R.subject}))));let _="";if(!E.length&&y.class){let R=`ext:${String(y.label).toLowerCase()}`;E=jt(i).flatMap(A=>We(e,A)).filter(A=>String(A.object).toLowerCase()===R),E.length&&(_=` (by name, via unresolved ${R} references)`)}let C=[],S=new Set;for(let R of E){let A=e.byId.get(R.subject);A&&!S.has(A.id)&&(S.add(A.id),C.push(A))}let T,N="";if(!a||a==="Change")T=C;else{let R=C.filter(A=>A.class===a);if(R.length)T=R;else if(a!=="Module"&&C.some(A=>A.class==="Module")){let A=new Set(C.filter(O=>O.class==="Module").map(O=>O.id));T=La(e,A,a),N=`, then ${Jn(a)} defined in the matched module(s)`}else T=[]}return{matches:T,objMatch:y,candidates:w,traversal:`${jt(i).join("+")} edges where object = ${y.label}${_}${N}${$}`,ambiguous:v,matchedVia:x}}function Ho(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]:"(unknown module)"}function ya(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function Tv(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function fn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function qo(e){let t=e.object??e.subject??"?";return`${e.entityType?Fe(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function Qd(e){return Ao[e]?.bare||e}function Cv(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=Fe(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 ${Qd(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 ${Qd(o.kind)} ${JSON.stringify(String(r))}`}function Sp(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(qo).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>Sp(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?Cv(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 ":""}${Ss(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?Fe(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${Ss(e.kind)}`:`${r}${Ss(e.kind)} "${e.object}"`}return{english:o,machine:s}}function hn(e,t,n=null){let s=Ep(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function Ep(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${Oa()}`,miss:!0,ambiguous:!1};if(e.node)return vv(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 ${qo(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(Wo),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${Wo(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(Wo),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?Fe(t.objMatch.class,1):"term",a=Fe(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=>Fe(a,2));return{content:`${t.objMatch.label}'s "${Es(e.kind)}" relation in this index never produces ${Fe(e.entityType,2)} \u2014 only ${mn(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=(t.objMatch.attributes||[]).find(l=>l.key==="doc")?.value||"",a=t.objMatch.class==="SchemaClass"?"a class in the graph's schema":"a predicate (relation) in the graph's schema";return{content:`${t.objMatch.label} is ${a}: ${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,Be).map(l=>`${l.label} (${Fe(l.class,1)})`),a=t.matches.length>Be?`, \u2026and ${t.matches.length-Be} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${mn(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 ${mn([...Ia])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,Be).map(d=>d.label),c=a.length>Be?`, \u2026and ${a.length-Be} more`:"",u=a.length?` \u2014 also matched: ${mn(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&&Zd[e.entityType]?Fe(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=mn(t.unplacedWords.map(m=>`"${m}"`)),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. ${Jn(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(h=>h.class==="Commit")){let h=y=>!["Commit","Session","Source","Utterance"].includes(y?.class),b=i.filter(h);b.length&&(i=b,a?.length&&(a=a.filter(y=>h(y.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let h=String(e.object||"").toLowerCase(),b=new Set(pn(String(e.object||"")).filter(x=>x.length>=3)),y=new Set(i.map(x=>x.id)),w=null,$=0,k=1/0;if(b.size)for(let x of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(x.class)||y.has(x.id))continue;let v=pn(String(x.label)).filter(T=>b.has(T)).length;if(!v||v<$)continue;let A=Cn(String(x.label).toLowerCase(),h,8);(v>$||A<k)&&(w=x,$=v,k=A)}if(w&&(i=[...i,w],a)){let x=Xt(n,e,{pinnedObjMatch:w});a=[...a,{candidate:w,result:x,rendered:hn(e,x,n)}]}}let l=i.length&&i.every(h=>h.class==="Commit")?"commit":"module",c=i.slice(0,Be).map(h=>h.label),u=i.length>Be?`, \u2026and ${i.length-Be} more`:"",d=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${mn(c)}${u}? Try one of those. If you're not sure, narrow it to one name.`,m=String(e.object||""),p=m?new RegExp(`\\b${Ve(m)}\\b`,"gi"):null,f=h=>p?h.rendered.content.replace(p,h.candidate.label):h.rendered.content;return{content:a&&a.length?`${d}
58
- ${a.map((h,b)=>`${b+1}) ${h.candidate.label}: ${f(h)}`).join(`
59
- `)}`:d,miss:!1,ambiguous:!0,candidates:i.map(h=>h.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 l=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${ba(i)} is defined in ${a[1]} at ${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}return{content:`${ba(i)} is defined in ${Vo(i)} (no line span recorded in this index).`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${Jn(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(m=>m.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(m=>m.key==="message")?.value||"",u=String(l).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${Dr("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. ${Jn(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,Be)){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])=>`${Fe(u,d.length)} ${mn(d)}`),c=t.matches.length>Be?`; \u2026and ${t.matches.length-Be} 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(Vs.includes(e.kind)&&n&&t.objMatch)for(let a of Vs){if(a===e.kind)continue;let l={...e,kind:a},c=Xt(n,l,{pinnedObjMatch:t.objMatch});if(c?.matches?.length&&!c.ambiguous)return kp(l,c,n)}return{content:`${t.objMatch.label} has no ${Es(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}return e.kind==="tests"&&!e.entityType?{content:`No tests cover ${String(e.object||"").replace(hy,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1}:{content:`No ${Fe(e.entityType||"Module",2)} found whose module directly ${Es(e.kind)} ${e.object}. ${Jn(n)}`,miss:!0,ambiguous:!1}}if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!Qn.has(i.class))){let i=t.matches.slice(0,Be).map(l=>l.class==="Commit"?kv(l):l.label),a=t.matches.length>Be?`, \u2026and ${t.matches.length-Be} 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,Be)){let a=Vo(i);s.has(a)||s.set(a,[]),s.get(a).push(ba(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=mn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>Be?` \u2026and ${t.matches.length-Be} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function Sp(e){if(e.length<4||_v.has(e))return null;let t=Kn(e),n=t+1,s=null,o=!1;for(let r of jv){let i=Cn(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 Xd(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous)return!1;let n=e.match.class;if(n!=="SchemaClass"&&n!=="SchemaPredicate")return!1;let s=String(t||"").trim().toLowerCase(),o=Sp(s);return!!o&&o!==s&&!!Ue[o]}function jp(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=In(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Xd(s,t.object))return!1;if(t.shape==="ask"){let o=In(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Xd(o,t.subject))}return!0}function Rv(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return Vl.includes(t)}function Av(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Fo(ks(String(t||""))),i=Yt(r);if(!i.length)return null;let a=[],l=[],c=S=>{let R=an(e,S);return!!R.match&&R.tier!=null&&R.tier<=2},u=S=>{let R=an(e,S);return!!R.match&&R.tier!=null&&R.tier<=3},d=S=>{let R=String(S||"").trim().toLowerCase();return Gs.includes(R)?!0:Yt(R).some(M=>{let j=M.toLowerCase();return!Wr.has(j)&&!ka.has(j)})},m=new Set(["reverse","forward","where","when","ask"]),p=S=>{let R=S.join(" "),M=qo(R,{nlp:n});return jp(e,M,s)!==!0||M&&!M.node&&m.has(M.shape)&&(M.object!=null&&!d(M.object)||M.shape==="ask"&&M.subject!=null&&!d(M.subject))||hn(M,Xt(e,M,{contextId:s,prev:o}),e).miss?null:{parsed:M,text:R}},f=S=>({parsed:S.parsed,from:r,to:S.text,dropped:[...a],steps:l}),g=0,h=Math.max(i.length,1)+12;for(;g<h;g+=1){let S=-1;for(let j=0;j<i.length;j+=1){let _=i[j].toLowerCase();if(Oa.has(_)&&!Wr.has(_)&&!c(i[j])){S=j;break}}if(S<0)break;let R=i[S];i=i.filter((j,_)=>_!==S),a.push(R),l.push(`strip noise "${R}" \u2192 "${i.join(" ")}"`);let M=p(i);if(M)return f(M)}let b=qo(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&m.has(b.shape))for(let S of[b.object,b.subject])for(let R of Yt(String(S||"").toLowerCase()))y.add(R);let w=[],$=[],k=[];for(let S of i){let R=S.toLowerCase();if(!/^[a-z]+$/.test(R)||Wr.has(R)||ka.has(R)||u(S)){w.push(S);continue}let j=Sp(R);if(j&&j!==R){w.push(j),k.push(`${S}\u2192${j}`);continue}if(y.has(R)){w.push(S);continue}$.push(S)}if((k.length||$.length)&&w.length){i=w,a.push(...$),k.length&&l.push(`fuzzy-correct ${JSON.stringify(k)} \u2192 "${i.join(" ")}"`),$.length&&l.push(`drop unmatched ${JSON.stringify($)} \u2192 "${i.join(" ")}"`);let S=p(i);if(S)return f(S)}let x=!1,v=i.map(S=>{let R=S.toLowerCase();return Hs[R]&&!u(S)?(x=!0,Hs[R]):S});if(x){l.push(`normalise synonyms \u2192 "${v.join(" ")}"`);let S=p(v);if(S)return f(S)}let A=Yt(r).map(S=>S.toLowerCase()),T=[],C=[];for(let S of A){if(Ep.has(S))continue;let R=Ue[S];R&&R!=="Change"?T.push(S):C.push(S)}if(T.length===1&&C.length===0){let S=p(["count",T[0]]);if(S)return l.push(`bare kind "${T[0]}" \u2192 count`),f(S)}return null}function Cv(e,t){let n=String(t||"");if(!e||!Jd.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(Jd,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return Tv.test(a)?`${a} touched`:i}function Iv(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 Ov(e,t){let n=Iv(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function Mv(e,t){let n=String(t||"").trim(),s=n.match(Lv),o=s?null:n.match(Nv),r=s||o;if(!r||!La.test(r[2]||"")||Ue[r[1].toLowerCase()])return null;let i=Ov(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 Zn(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(Rv(t))return{content:Ta(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=Cv(e,t);let r=Ea(t,{nlp:s}),i=r.parsed,a=i,l=null;if(jp(e,i,n)===!1){let m=Av(e,t,{nlp:s,contextId:n,prev:o});m&&(a=m.parsed,l={from:m.from,to:m.to,dropped:m.dropped,steps:m.steps})}let c=Xt(e,a,{contextId:n,prev:o}),u=hn(a,c,e);if(u.miss&&!u.ambiguous){let m=Mv(e,t);if(m){let p=Xt(e,m,{contextId:n,prev:o}),f=hn(m,p,e);f.miss||(a=m,c=p,u=f,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Lr(String(t||"")).trim().match(Pv)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let f=qo(`what is a ${p}`,{nlp:s});f?.shape==="meta"&&(c=Xt(e,f,{contextId:n,prev:o}),u=hn(f,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=ks(String(t||"")).match(Fv)?.[1]?.trim();if(p){let f=qo(`what is a ${p}`,{nlp:s});if(f?.shape==="meta"){let g=Xt(e,f,{contextId:n,prev:o}),h=hn(f,g,e);!h.miss&&!h.ambiguous&&(c=g,u=h)}}}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 m=r.alternates.map(p=>{let f=Xt(e,p.parsed,{contextId:n,prev:o}),g=hn(p.parsed,f,e);return g.miss?null:{a:p,text:g.content}}).filter(Boolean);if(m.length){let p=Id(m.map(f=>f.a),{answerFor:f=>m.find(g=>g.a===f)?.text||null});d=`${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(qo),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${qo(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(qo),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?Fe(t.objMatch.class,1):"term",a=Fe(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=>Fe(a,2));return{content:`${t.objMatch.label}'s "${Ss(e.kind)}" relation in this index never produces ${Fe(e.entityType,2)} \u2014 only ${fn(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=(t.objMatch.attributes||[]).find(l=>l.key==="doc")?.value||"",a=t.objMatch.class==="SchemaClass"?"a class in the graph's schema":"a predicate (relation) in the graph's schema";return{content:`${t.objMatch.label} is ${a}: ${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,Be).map(l=>`${l.label} (${Fe(l.class,1)})`),a=t.matches.length>Be?`, \u2026and ${t.matches.length-Be} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${fn(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 ${fn([...Na])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,Be).map(d=>d.label),c=a.length>Be?`, \u2026and ${a.length-Be} more`:"",u=a.length?` \u2014 also matched: ${fn(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&&np[e.entityType]?Fe(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=fn(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. ${Qn(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(h=>h.class==="Commit")){let h=y=>!["Commit","Session","Source","Utterance"].includes(y?.class),b=i.filter(h);b.length&&(i=b,a?.length&&(a=a.filter(y=>h(y.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let h=String(e.object||"").toLowerCase(),b=new Set(pn(String(e.object||"")).filter($=>$.length>=3)),y=new Set(i.map($=>$.id)),w=null,v=0,x=1/0;if(b.size)for(let $ of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes($.class)||y.has($.id))continue;let j=pn(String($.label)).filter(_=>b.has(_)).length;if(!j||j<v)continue;let E=Cn(String($.label).toLowerCase(),h,8);(j>v||E<x)&&(w=$,v=j,x=E)}if(w&&(i=[...i,w],a)){let $=Gt(n,e,{pinnedObjMatch:w});a=[...a,{candidate:w,result:$,rendered:hn(e,$,n)}]}}let l=i.length&&i.every(h=>h.class==="Commit")?"commit":"module",c=i.slice(0,Be).map(h=>h.label),u=i.length>Be?`, \u2026and ${i.length-Be} more`:"",d=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${fn(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${Ve(f)}\\b`,"gi"):null,m=h=>p?h.rendered.content.replace(p,h.candidate.label):h.rendered.content;return{content:a&&a.length?`${d}
58
+ ${a.map((h,b)=>`${b+1}) ${h.candidate.label}: ${m(h)}`).join(`
59
+ `)}`:d,miss:!1,ambiguous:!0,candidates:i.map(h=>h.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 l=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${ya(i)} is defined in ${a[1]} at ${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}return{content:`${ya(i)} is defined in ${Ho(i)} (no line span recorded in this index).`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${Qn(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} ${Ur("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. ${Qn(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,Be)){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])=>`${Fe(u,d.length)} ${fn(d)}`),c=t.matches.length>Be?`; \u2026and ${t.matches.length-Be} 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(Vs.includes(e.kind)&&n&&t.objMatch)for(let a of Vs){if(a===e.kind)continue;let l={...e,kind:a},c=Gt(n,l,{pinnedObjMatch:t.objMatch});if(c?.matches?.length&&!c.ambiguous)return Ep(l,c,n)}return{content:`${t.objMatch.label} has no ${Ss(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}return e.kind==="tests"&&!e.entityType?{content:`No tests cover ${String(e.object||"").replace(yy,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1}:{content:`No ${Fe(e.entityType||"Module",2)} found whose module directly ${Ss(e.kind)} ${e.object}. ${Qn(n)}`,miss:!0,ambiguous:!1}}if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!Zn.has(i.class))){let i=t.matches.slice(0,Be).map(l=>l.class==="Commit"?Tv(l):l.label),a=t.matches.length>Be?`, \u2026and ${t.matches.length-Be} 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,Be)){let a=Ho(i);s.has(a)||s.set(a,[]),s.get(a).push(ya(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=fn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>Be?` \u2026and ${t.matches.length-Be} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function _p(e){if(e.length<4||Lv.has(e))return null;let t=Yn(e),n=t+1,s=null,o=!1;for(let r of Ov){let i=Cn(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 Zd(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous)return!1;let n=e.match.class;if(n!=="SchemaClass"&&n!=="SchemaPredicate")return!1;let s=String(t||"").trim().toLowerCase(),o=_p(s);return!!o&&o!==s&&!!Ue[o]}function Rp(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=In(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||Zd(s,t.object))return!1;if(t.shape==="ask"){let o=In(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!Zd(o,t.subject))}return!0}function Nv(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return Yl.includes(t)}function Mv(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=zo(ks(String(t||""))),i=Xt(r);if(!i.length)return null;let a=[],l=[],c=S=>{let T=an(e,S);return!!T.match&&T.tier!=null&&T.tier<=2},u=S=>{let T=an(e,S);return!!T.match&&T.tier!=null&&T.tier<=3},d=S=>{let T=String(S||"").trim().toLowerCase();return qs.includes(T)?!0:Xt(T).some(N=>{let R=N.toLowerCase();return!Gr.has(R)&&!Ea.has(R)})},f=new Set(["reverse","forward","where","when","ask"]),p=S=>{let T=S.join(" "),N=Vo(T,{nlp:n});return Rp(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))||hn(N,Gt(e,N,{contextId:s,prev:o}),e).miss?null:{parsed:N,text:T}},m=S=>({parsed:S.parsed,from:r,to:S.text,dropped:[...a],steps:l}),g=0,h=Math.max(i.length,1)+12;for(;g<h;g+=1){let S=-1;for(let R=0;R<i.length;R+=1){let A=i[R].toLowerCase();if(Ma.has(A)&&!Gr.has(A)&&!c(i[R])){S=R;break}}if(S<0)break;let T=i[S];i=i.filter((R,A)=>A!==S),a.push(T),l.push(`strip noise "${T}" \u2192 "${i.join(" ")}"`);let N=p(i);if(N)return m(N)}let b=Vo(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let S of[b.object,b.subject])for(let T of Xt(String(S||"").toLowerCase()))y.add(T);let w=[],v=[],x=[];for(let S of i){let T=S.toLowerCase();if(!/^[a-z]+$/.test(T)||Gr.has(T)||Ea.has(T)||u(S)){w.push(S);continue}let R=_p(T);if(R&&R!==T){w.push(R),x.push(`${S}\u2192${R}`);continue}if(y.has(T)){w.push(S);continue}v.push(S)}if((x.length||v.length)&&w.length){i=w,a.push(...v),x.length&&l.push(`fuzzy-correct ${JSON.stringify(x)} \u2192 "${i.join(" ")}"`),v.length&&l.push(`drop unmatched ${JSON.stringify(v)} \u2192 "${i.join(" ")}"`);let S=p(i);if(S)return m(S)}let $=!1,j=i.map(S=>{let T=S.toLowerCase();return Hs[T]&&!u(S)?($=!0,Hs[T]):S});if($){l.push(`normalise synonyms \u2192 "${j.join(" ")}"`);let S=p(j);if(S)return m(S)}let E=Xt(r).map(S=>S.toLowerCase()),_=[],C=[];for(let S of E){if(jp.has(S))continue;let T=Ue[S];T&&T!=="Change"?_.push(S):C.push(S)}if(_.length===1&&C.length===0){let S=p(["count",_[0]]);if(S)return l.push(`bare kind "${_[0]}" \u2192 count`),m(S)}return null}function Fv(e,t){let n=String(t||"");if(!e||!ep.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(ep,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return Pv.test(a)?`${a} touched`:i}function zv(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 Dv(e,t){let n=zv(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function Wv(e,t){let n=String(t||"").trim(),s=n.match(Uv),o=s?null:n.match(Bv),r=s||o;if(!r||!Pa.test(r[2]||"")||Ue[r[1].toLowerCase()])return null;let i=Dv(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 es(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(Nv(t))return{content:Oa(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=Fv(e,t);let r=ja(t,{nlp:s}),i=r.parsed,a=i,l=null;if(Rp(e,i,n)===!1){let f=Mv(e,t,{nlp:s,contextId:n,prev:o});f&&(a=f.parsed,l={from:f.from,to:f.to,dropped:f.dropped,steps:f.steps})}let c=Gt(e,a,{contextId:n,prev:o}),u=hn(a,c,e);if(u.miss&&!u.ambiguous){let f=Wv(e,t);if(f){let p=Gt(e,f,{contextId:n,prev:o}),m=hn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Nr(String(t||"")).trim().match(qv)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=Vo(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=Gt(e,m,{contextId:n,prev:o}),u=hn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=ks(String(t||"")).match(Gv)?.[1]?.trim();if(p){let m=Vo(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let g=Gt(e,m,{contextId:n,prev:o}),h=hn(m,g,e);!h.miss&&!h.ambiguous&&(c=g,u=h)}}}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=Gt(e,p.parsed,{contextId:n,prev:o}),g=hn(p.parsed,m,e);return g.miss?null:{a:p,text:g.content}}).filter(Boolean);if(f.length){let p=Nd(f.map(m=>m.a),{answerFor:m=>f.find(g=>g.a===m)?.text||null});d=`${d}
60
60
  ${p.join(`
61
- `)}`}}if(!u.ambiguous&&c.objMatch&&Array.isArray(c.candidates)&&c.candidates.length){let m=new Set((c.matches||[]).map(f=>f&&f.id)),p=c.candidates.filter(f=>f&&f.id&&f.id!==c.objMatch.id&&!m.has(f.id));if(p.length){let f=p.slice(0,3).map(b=>b.label).filter(Boolean),g=p.length-f.length,h=f.join(", ")+(g>0?`, +${g} more`:"");d=`${d}
62
- (answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${h})`}}return{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:xp(a),matches:(c.matches||[]).map(m=>({id:m.id,label:m.label,type:m.class,module:m.class?Vo(m):void 0})),traversal:c.traversal||null,miss:!!u.miss,ambiguous:!!u.ambiguous,relaxed:l,matchedVia:c.matchedVia||null,...u.ambiguous?{candidates:u.candidates,candidateParses:u.candidateParses}:{}}}}var Fd,no,Qn,ha,dy,jt,Qd,Be,Zd,py,fy,my,hy,gy,ep,wa,wy,Sa,tp,Nt,np,vy,xy,Ey,jy,_y,Ry,Ay,Cy,Oy,ip,_a,By,ap,Wy,Vy,Dd,zd,Jy,Bd,Gd,Zy,tv,sv,Yn,hv,gv,wv,Ia,yv,Hd,vv,Kd,Wr,ka,Oa,Ep,Sv,jv,_v,Jd,Tv,Lv,Nv,La,Pv,Fv,es=L(()=>{Te();qi();_n();Hn();Do();Mr();Pr();Md();pa();qn();Pd();Uo();Fd=new WeakMap;no={calls:"callsSymbol",touches:"touchesSymbol"},Qn=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),ha={Function:"Method",Method:"Function"},dy={uses:["imports","calls","callsSymbol"]},jt=e=>dy[e]||[e],Qd=new Set(Object.values(no)),Be=12,Zd={Function:["function","functions"],Method:["method","methods"],Class:["class","classes"],Module:["module","modules"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Change:["change","changes"],Fact:["fact","facts"],Utterance:["utterance","utterances"],Session:["session","sessions"],Source:["source","sources"],Rule:["rule","rules"]};py={cochange:"cochanges",reexports:"export"};fy={imports:"import",calls:"call",callsSymbol:"call",inherits:"inherit from",contains:"contain",tests:"test",touches:"touch",cochange:"cochange",reexports:"export",uses:"use"},my=e=>fy[e]||Es(e),hy=new RegExp(`^(?:${Object.keys(ae).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),gy=new Set(["imports"]);ep=4,wa="zzinnerset",wy=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),Sa=new Set(["which","what","who","list","show","find","give","me","us","all"]),tp=new Set(["are","is","was","were"]);Nt=e=>Ue[e]?{entityType:Ue[e],placeholder:!1}:jn.includes(e)?{entityType:null,placeholder:!0}:null,np=e=>!!ae[e]&&e.endsWith("ing");vy=new Set(["all","every","each"]);xy=new Set(["what","which","thing","things","one","ones","stuff"]);Ey=new Set(["those","them"]);jy=new Set(["did","was","were","do","does","has","have","had"]),_y=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),Ry=new Set(["last","recently","ever","get","got","been","then","now","already"]),Ay=new Set(["the","a","an","all","those","these","any"]);Cy=new Set(["since","before","after","on"]);Oy=/\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/;ip=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);_a=new Set(["the","a","an","all","me","us"]),By=[...gs].sort((e,t)=>t.split(" ").length-e.split(" ").length),ap="functions, classes, methods, modules, attributes, variables, or commits",Wy=new Set(["in","inside","under"]);Vy=new Set(["called","named","about","like","containing","matching","with"]);Dd=new Set(["recent","latest","newest"]);zd=new WeakMap;Jy=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);Bd=new WeakMap;Gd={label:3,chain:2,attr:1};Zy=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;tv=["imports","calls","callsSymbol","inherits","contains","tests"];sv=/^\d{4}-\d{2}-\d{2}$/;Yn=e=>mn(e.slice(0,Be).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>Be?`, \u2026and ${e.length-Be} more`:"");hv=/^(?:the|a|an)\s+/i,gv=new RegExp(`\\s+(${Object.keys(Ue).join("|")})$`,"i");wv=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,Ia=new Set(["index","main","app","server","cli","__main__"]),yv=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Hd=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),vv=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>yv.has(t));Kd=8;Wr=new Set([...de(Object.keys(ae)),...de(Object.keys(Ue)),...de(Object.keys(Wt)),...de(Object.keys(qe)),...de(hs),...de(Object.keys(Gn)),...de(Object.keys(dn)),...de(Object.keys(qs)),...de(jn),...de(Io),...de(ms),...de(Vt),...de(on),...de(Sn),...de(Object.keys(Hs))]),ka=new Set([...st,...Sa,...Gs]),Oa=new Set(de(kr)),Ep=new Set([...Oa,...ka]),Sv=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],jv=[...new Set([...de(Object.keys(ae)),...Object.keys(Ue),...Sv])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!st.has(e)),_v=new Set(["impact","impacts","impacted"]);Jd=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,Tv=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;Lv=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,Nv=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,La=/^(?: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;Pv=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Fv=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i});function ts(e,t,n,s){let o=Math.max(1,t),r=Math.min(e.length,n),i=!1;s!=null&&r-o+1>s&&(r=o+s-1,i=!0);let a=e.slice(o-1,r).map((l,c)=>`${o+c} ${l}`).join(`
63
- `);return{start:o,end:r,text:a,truncated:i}}async function Ln({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Bt(t),a=Bt(i,n);if(a!==i&&!a.startsWith(i+Nl))throw new Ie(`refusing to read outside the repository root: ${n}`);let c=(await e(a,"utf8")).split(`
64
- `);return s==null||o==null?{lines:c}:{lines:c,...ts(c,s,o,r)}}var qr=L(()=>{De();It()});function mt(e){return{ok:!0,value:e}}function ht(e,{detail:t="",term:n=null}={}){if(!Ye[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 Vr(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 Ma,Dv,Ye,Pa,x_,Rp,Fa,zv,gn,Na,$t,k_,Ap=L(()=>{Ma="1.1.0",Dv="urn:tmct:core",Ye=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),Pa=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports"]),x_=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"}),Rp=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),Fa=Object.freeze(Object.values(Rp).flat()),zv=Object.freeze(new Set(Rp.source));gn="Individual",Na="Edge",$t="concurrent-safe: reads immutable graph truth; no shared mutable state",k_=Object.freeze({version:Ma,ontology:Dv,missReasons:Object.values(Ye),edgeKinds:[...Pa],types:{Individual:{fields:{id:"string (opaque provider id)",label:"string (human/display name)",class:"string \u2014 a tmct: class token (module|class|function|method|attribute|variable|commit|test|\u2026)",attributes:"Array<{ key: string, value: string, prop: string|null }> \u2014 prop is the SEON/mgx token grounding the value"}},Edge:{fields:{subject:"string (individual id)",object:"string (individual id)",predicate:"string \u2014 the relation predicate",prop:"string|null \u2014 the SEON/mgx property token; see edgeKinds \u2192 tmct: mapping",subjectLabel:"string? (additive)",objectLabel:"string? (additive)",weight:"number? (additive; e.g. cochange coupling)"}},Result:{shape:"{ ok: true, value: T } | { ok: false, miss: Miss }"},Miss:{shape:"{ reason: MISS_REASONS, detail: string, term: string|null }"}},capabilitiesModel:"A provider advertises `capabilities: string[]` (service names it implements). A service outside the set is negotiated away to miss(CAPABILITY_ABSENT) \u2014 never an error. snippet may be advertised yet answer miss(NO_SOURCE) when no working tree exists (it has nothing useful without fs); context is graph-only-capable since INTERFACE_VERSION 1.1.0 \u2014 it returns a real hit (graph-only bundle) for any resolvable symbol even with no working tree, only escalating NO_SOURCE-style behavior to richer body text when source-capable.",services:{resolve:{group:"resolution",args:{term:"string"},result:`{ match: ${gn}, candidates: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"The resolveSymbol seam: map a free term to an individual + runner-up candidates. Every id-taking service consumes a resolved id."},describe:{group:"resolution",args:{id:"string"},result:`{ individual: ${gn}, out: ${Na}[], incoming: ${Na}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${gn}[], attributes: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${gn}[], subclasses: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"Forward bases + the transitive reverse inheritance closure (who extends this)."},exports:{group:"resolution",args:{moduleId:"string"},result:`{ exports: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,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:$t,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: ${Na}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,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:$t,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:$t,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:$t,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:$t,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${gn}[] }`,misses:[],concurrency:$t,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:$t,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:$t,purpose:"The commits that touched an individual (tmct:commit individuals via tmct:touches)."},search:{group:"search",args:{query:"string",kind:"string?",name:"string?",decorator:"string?"},result:`{ results: ${gn}[] }`,misses:[],concurrency:$t,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:$t,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function Uv(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(Vr(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(Vr(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function Bv(e,t){for(let n of e.relations)if(Tn(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function Gv(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Ln({readFile:n,repoRoot:s,path:e.moduleLabel}))}catch{o=null}if(!o)return"";let r=[];if(t.anchor&&e.anchor?.site){let{start:i,end:a}=e.anchor.site;r.push(`
65
- ## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(ts(o,i,a,Da).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,l=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
66
- ## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${l} @ ${e.moduleLabel}:${i}-${a}`),r.push(ts(o,i,a,Da).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=Wv;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 Ln({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=ts(u,l,a.site.end,i);r.push(`
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),g=p.length-m.length,h=m.join(", ")+(g>0?`, +${g} more`:"");d=`${d}
62
+ (answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${h})`}}return{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:Sp(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?Ho(f):void 0})),traversal:c.traversal||null,miss:!!u.miss,ambiguous:!!u.ambiguous,relaxed:l,matchedVia:c.matchedVia||null,...u.ambiguous?{candidates:u.candidates,candidateParses:u.candidateParses}:{}}}}var Ud,no,Zn,ba,hy,jt,tp,Be,np,gy,by,wy,yy,vy,sp,va,xy,_a,op,Nt,rp,Sy,jy,Ry,Ty,Cy,Iy,Oy,Ny,Py,lp,Aa,Vy,up,Hy,Xy,Bd,ev,Wd,sv,Gd,Hd,rv,av,lv,Xn,xv,kv,Ev,Na,jv,Xd,_v,Jd,Gr,Ea,Ma,jp,Iv,Ov,Lv,ep,Pv,Uv,Bv,Pa,qv,Gv,ts=L(()=>{Te();Hi();_n();Kn();Do();Pr();zr();zd();fa();Vn();Dd();Bo();Ud=new WeakMap;no={calls:"callsSymbol",touches:"touchesSymbol"},Zn=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),ba={Function:"Method",Method:"Function"},hy={uses:["imports","calls","callsSymbol"]},jt=e=>hy[e]||[e],tp=new Set(Object.values(no)),Be=12,np={Function:["function","functions"],Method:["method","methods"],Class:["class","classes"],Module:["module","modules"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Change:["change","changes"],Fact:["fact","facts"],Utterance:["utterance","utterances"],Session:["session","sessions"],Source:["source","sources"],Rule:["rule","rules"]};gy={cochange:"cochanges",reexports:"export"};by={imports:"import",calls:"call",callsSymbol:"call",inherits:"inherit from",contains:"contain",tests:"test",touches:"touch",cochange:"cochange",reexports:"export",uses:"use"},wy=e=>by[e]||Ss(e),yy=new RegExp(`^(?:${Object.keys(ae).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),vy=new Set(["imports"]);sp=4,va="zzinnerset",xy=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),_a=new Set(["which","what","who","list","show","find","give","me","us","all"]),op=new Set(["are","is","was","were"]);Nt=e=>Ue[e]?{entityType:Ue[e],placeholder:!1}:jn.includes(e)?{entityType:null,placeholder:!0}:null,rp=e=>!!ae[e]&&e.endsWith("ing");Sy=new Set(["all","every","each"]);jy=new Set(["what","which","thing","things","one","ones","stuff"]);Ry=new Set(["those","them"]);Ty=new Set(["did","was","were","do","does","has","have","had"]),Cy=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),Iy=new Set(["last","recently","ever","get","got","been","then","now","already"]),Oy=new Set(["the","a","an","all","those","these","any"]);Ny=new Set(["since","before","after","on"]);Py=/\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/;lp=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);Aa=new Set(["the","a","an","all","me","us"]),Vy=[...gs].sort((e,t)=>t.split(" ").length-e.split(" ").length),up="functions, classes, methods, modules, attributes, variables, or commits",Hy=new Set(["in","inside","under"]);Xy=new Set(["called","named","about","like","containing","matching","with"]);Bd=new Set(["recent","latest","newest"]);ev=/^git:(.+)$/i;Wd=new WeakMap;sv=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);Gd=new WeakMap;Hd={label:3,chain:2,attr:1};rv=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;av=["imports","calls","callsSymbol","inherits","contains","tests"];lv=/^\d{4}-\d{2}-\d{2}$/;Xn=e=>fn(e.slice(0,Be).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>Be?`, \u2026and ${e.length-Be} more`:"");xv=/^(?:the|a|an)\s+/i,kv=new RegExp(`\\s+(${Object.keys(Ue).join("|")})$`,"i");Ev=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,Na=new Set(["index","main","app","server","cli","__main__"]),jv=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Xd=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),_v=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>jv.has(t));Jd=8;Gr=new Set([...de(Object.keys(ae)),...de(Object.keys(Ue)),...de(Object.keys(Wt)),...de(Object.keys(Ge)),...de(hs),...de(Object.keys(Gn)),...de(Object.keys(dn)),...de(Object.keys(Gs)),...de(jn),...de(Oo),...de(fs),...de(Ht),...de(rn),...de(En),...de(Object.keys(Hs))]),Ea=new Set([...st,..._a,...qs]),Ma=new Set(de(Sr)),jp=new Set([...Ma,...Ea]),Iv=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],Ov=[...new Set([...de(Object.keys(ae)),...Object.keys(Ue),...Iv])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!st.has(e)),Lv=new Set(["impact","impacts","impacted"]);ep=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,Pv=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;Uv=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,Bv=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,Pa=/^(?: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;qv=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Gv=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i});function ns(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 Ln({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Bt(t),a=Bt(i,n);if(a!==i&&!a.startsWith(i+Fl))throw new Ie(`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,...ns(c,s,o,r)}}var Hr=L(()=>{ze();It()});function ft(e){return{ok:!0,value:e}}function ht(e,{detail:t="",term:n=null}={}){if(!Ye[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 Kr(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 za,Vv,Ye,Da,A_,Tp,Ua,Hv,gn,Fa,$t,T_,Cp=L(()=>{za="1.1.0",Vv="urn:tmct:core",Ye=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),Da=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports"]),A_=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"}),Tp=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),Ua=Object.freeze(Object.values(Tp).flat()),Hv=Object.freeze(new Set(Tp.source));gn="Individual",Fa="Edge",$t="concurrent-safe: reads immutable graph truth; no shared mutable state",T_=Object.freeze({version:za,ontology:Vv,missReasons:Object.values(Ye),edgeKinds:[...Da],types:{Individual:{fields:{id:"string (opaque provider id)",label:"string (human/display name)",class:"string \u2014 a tmct: class token (module|class|function|method|attribute|variable|commit|test|\u2026)",attributes:"Array<{ key: string, value: string, prop: string|null }> \u2014 prop is the SEON/mgx token grounding the value"}},Edge:{fields:{subject:"string (individual id)",object:"string (individual id)",predicate:"string \u2014 the relation predicate",prop:"string|null \u2014 the SEON/mgx property token; see edgeKinds \u2192 tmct: mapping",subjectLabel:"string? (additive)",objectLabel:"string? (additive)",weight:"number? (additive; e.g. cochange coupling)"}},Result:{shape:"{ ok: true, value: T } | { ok: false, miss: Miss }"},Miss:{shape:"{ reason: MISS_REASONS, detail: string, term: string|null }"}},capabilitiesModel:"A provider advertises `capabilities: string[]` (service names it implements). A service outside the set is negotiated away to miss(CAPABILITY_ABSENT) \u2014 never an error. snippet may be advertised yet answer miss(NO_SOURCE) when no working tree exists (it has nothing useful without fs); context is graph-only-capable since INTERFACE_VERSION 1.1.0 \u2014 it returns a real hit (graph-only bundle) for any resolvable symbol even with no working tree, only escalating NO_SOURCE-style behavior to richer body text when source-capable.",services:{resolve:{group:"resolution",args:{term:"string"},result:`{ match: ${gn}, candidates: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"The resolveSymbol seam: map a free term to an individual + runner-up candidates. Every id-taking service consumes a resolved id."},describe:{group:"resolution",args:{id:"string"},result:`{ individual: ${gn}, out: ${Fa}[], incoming: ${Fa}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${gn}[], attributes: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${gn}[], subclasses: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,purpose:"Forward bases + the transitive reverse inheritance closure (who extends this)."},exports:{group:"resolution",args:{moduleId:"string"},result:`{ exports: ${gn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,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:$t,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: ${Fa}[] }`,misses:["UNRESOLVED_TERM"],concurrency:$t,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:$t,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:$t,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:$t,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:$t,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${gn}[] }`,misses:[],concurrency:$t,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:$t,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:$t,purpose:"The commits that touched an individual (tmct:commit individuals via tmct:touches)."},search:{group:"search",args:{query:"string",kind:"string?",name:"string?",decorator:"string?"},result:`{ results: ${gn}[] }`,misses:[],concurrency:$t,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:$t,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function Kv(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(Kr(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(Kr(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function Yv(e,t){for(let n of e.relations)if(Tn(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function Jv(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Ln({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(ns(o,i,a,Ba).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(ns(o,i,a,Ba).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=Xv;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 Ln({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=ns(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 Hr(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:Ma,capabilities:[...Fa],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(Ye.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return ht(Ye.UNRESOLVED_TERM,{term:c});let{out:d,incoming:m}=Uv(e,c);return mt({individual:bn(u),out:d,incoming:m})},members(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let d=ve(e,"contains").filter(f=>f.subject===c),m=[],p=[];for(let f of d){let g=i.get(f.object),h=g?bn(g):{id:f.object,label:f.objectLabel||f.object,class:"Entity",attributes:[]};(g?.class||"")==="Attribute"?p.push(h):m.push(h)}return mt({methods:m,attributes:p})},subclasses(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let d=ve(e,"inherits"),m=d.filter(b=>b.subject===c).map(b=>i.get(b.object)?bn(i.get(b.object)):{id:b.object,label:b.objectLabel||b.object,class:"Class",attributes:[]}),p=new Map;for(let b of d)p.has(b.object)||p.set(b.object,[]),p.get(b.object).push(b.subject);let f=new Set([c]),g=[],h=[c];for(let b=0;b<8&&h.length;b+=1){let y=[];for(let w of h)for(let $ of p.get(w)||[]){if(f.has($))continue;f.add($);let k=i.get($);g.push(k?bn(k):{id:$,label:$,class:"Class",attributes:[]}),y.push($)}h=y}return mt({bases:m,subclasses:g})},exports(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let m=ve(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:m})},signature(c){let u=a(c);if(!u)return ht(Ye.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,f]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Mt(u,p)&&d.push(f);let m=Mt(u,"visibility");return m&&d.push(m),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:m=0}={}){if(!Pa.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let f=Bv(e,u),g=ve(e,u).filter(h=>h.subject===c).map(h=>Vr(h,f));return g=d==null?g.slice(m):g.slice(m,m+d),mt({kind:u,edges:g})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return ht(Ye.UNRESOLVED_TERM,{term:c});let m=u==null?Qs(e,d):Qs(e,d,{maxDepth:u}),p=m.reduce((f,g)=>f+g.length,0);return mt({total:p,levels:m})},async snippet(c){let u=a(c);if(!u)return ht(Ye.UNRESOLVED_TERM,{term:c});let d=yt(u);if(!l.sourceAccess)return ht(Ye.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(Ye.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let m=await Ln({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Da});return mt({path:d.path,span:{start:d.start,end:d.end},body:m.text})}catch(m){return ht(Ye.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${m?.message||m}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=Gt(e,String(c??""));if(!d)return ht(Ye.UNRESOLVED_TERM,{term:String(c??"")});let m=Zs(e,d),p=String(u||"auto").trim().toLowerCase(),f,g;p==="min"?(f="TINY",g=$s("TINY")):p==="full"?(f="FULL",g=$s("FULL")):{tier:f,mask:g}=Or(m,e,{});let h=sd(m,g);if(!l.sourceAccess)return mt({text:h,tier:f});let b=await Gv(m,g,{readFile:s,repoRoot:n});return mt({text:b?`${h}
69
- ${b}`:h,tier:f})},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))),m=new Map;for(let b of d){let y=b.label.includes("/")?b.label.slice(0,b.label.lastIndexOf("/")):"(root)";m.set(y,(m.get(y)||0)+1)}let p=new Set(d.map(b=>b.id)),f=new Map;for(let b of ve(e,"imports"))p.has(b.object)&&f.set(b.object,(f.get(b.object)||0)+1);let g=[...f.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),h=[...m.entries()].sort((b,y)=>y[1]-b[1]);return mt({modules:d.length,packages:h,hubs:g})},untested(){let c=new Set(ve(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 m=d.class||"Entity";c.set(m,(c.get(m)||0)+1)}let u=[...c.entries()].map(([d,m])=>({class:d,count:m})).sort((d,m)=>m.count-d.count||d.class.localeCompare(m.class));return mt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let d=[...ve(e,"touches"),...ve(e,"touchesSymbol")].filter(f=>f.object===c),m=new Set,p=[];for(let f of d){if(m.has(f.subject))continue;m.add(f.subject);let g=i.get(f.subject);p.push({id:f.subject,label:f.subjectLabel||g?.label||f.subject,author:g?Mt(g,"author")??Mt(g,"commitAuthor"):null,date:g?Mt(g,"date")??Mt(g,"commitDate"):null,message:g?Mt(g,"message")??Mt(g,"commitMessage"):null})}return mt({commits:p})},search(c,{kind:u="",name:d="",decorator:m="",limit:p=Cr,offset:f=0}={}){let g=String(c||""),h=String(u||"").trim().toLowerCase(),b=String(d||"").trim(),y=String(m||"").trim().toLowerCase(),w;if(h&&h!=="module"){let k=null;if(b){let v=na(b);if(v.error)return ht(Ye.UNRESOLVED_TERM,{term:b,detail:v.error});k=v}let x=g.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=ra(e,x,{kind:h,decFilter:y,nameRe:k}).map(v=>v.ind)}catch(v){return ht(Ye.UNRESOLVED_TERM,{term:b,detail:String(v?.message||v)})}}else{let k=new Map;for(let x of e.individuals)(x.class||"")==="Module"&&k.set(x.label,x);w=Lu(e,g).map(({path:x})=>k.get(x)).filter(Boolean)}let $=w.slice(f,f+p).map(bn);return mt({results:$})},ask(c){if(typeof r!="function")return ht(Ye.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 Fa){let u=l[c];typeof u=="function"&&(l[c]=(...d)=>{let m=performance.now(),p=u.apply(l,d);return p&&typeof p.then=="function"?p.then(f=>(Tp(o,c,performance.now()-m,f),f)):(Tp(o,c,performance.now()-m,p),p)})}return l}function Tp(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:qv(s)})}catch{}}function qv(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,Da,Wv,Kr=L(()=>{Te();qr();Ap();Mt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Da=200,Wv=120});async function Ho(e,t){let n=await t.fetchEntities(e),s=Tr(n);if(!s.individuals.length){let o=new Ie(`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 Yr=L(()=>{It();Te()});function ot(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Ie(`${t} is required`);return n}function wt(e,t,n){let{match:s,candidates:o}=Gt(e.graph,t);if(!s)throw new Ie(`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 Ko,Xe,He=L(()=>{It();Te();Ko=200;Xe=e=>(t,{graph:n,svc:s})=>{let{match:o}=wt(s,ot(t,"symbol"),"symbol");return e(n,o)}});async function Cp(e,{config:t,source:n=Ys,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Ie("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,l=!!e?.untuned,c=!!e?.max,u=await Ho(t,n),d=we(we(t.graphFile)),m=Hr(u,{sourceAccess:!0,repoRoot:d,readFile:ze,tel:o,ask:Zn}),{match:p}=wt(m,r,"symbol"),f=Zs(u,p),g,h,b=!1;a||i==="min"?(g="TINY",h=$s("TINY")):c||i==="full"?(g="FULL",h=$s("FULL"),b=!0):{tier:g,mask:h,topup:b}=Or(f,u,{untuned:l}),s&&!c&&(h=td(h));let y=null;if(f.moduleLabel)try{({lines:y}=await Ln({readFile:ze,repoRoot:d,path:f.moduleLabel}))}catch{y=null}let w=x=>y&&y[x-1]!=null?y[x-1].trim():"",$=(x,v)=>ts(y,x,v,Ko).text,k=[`Edit context for ${f.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(h.anchor&&f.anchor?.site&&y){let{start:x,end:v}=f.anchor.site;k.push(`
70
- ## anchor: ${f.anchor.label} (${f.anchor.class}) @ ${f.moduleLabel}:${x}-${v}`),k.push($(x,v)),f.callHint&&k.push(f.callHint)}if(h.registration&&f.globals.length){k.push(`
71
- ## registration / module globals (replicate this pattern):`);for(let x of f.globals)k.push(` ${x.label} = ${x.value}${x.site?` [:${x.site.start}]`:""}`)}if(h.exemplar&&f.exemplar?.site&&y){let{start:x,end:v}=f.exemplar.site,A=f.exemplar.decorators?` @${f.exemplar.decorators}`:"";k.push(`
72
- ## closest example (full body) \u2014 copy this style: ${f.exemplar.label} (${f.exemplar.class})${A} @ ${f.moduleLabel}:${x}-${v}`),k.push($(x,v)),f.callHint&&k.push(f.callHint)}if(h.inlinedCallees&&f.calleeBodies.length&&y){let x=120;for(let v of f.calleeBodies){if(x<=0)break;let A=v.site.start,C=v.site.path===f.moduleLabel&&y?y:await Ln({readFile:ze,repoRoot:d,path:v.site.path}).then(R=>R.lines).catch(()=>null);if(!C)continue;let S=ts(C,A,v.site.end,x);k.push(`
73
- ## inlined callee body (depth-1 in-repo call): ${v.label} @ ${v.site.path}:${A}-${v.site.end}`),k.push(S.text),x-=S.end-A+1}}if(h.classMembers&&f.classMembers&&f.classMembers.members.length){k.push(`
74
- ## members of ${f.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 f.classMembers.members){let v=String(x.label).split(".").pop(),A=x.params!=null&&x.params!==""?`(${x.params})${x.returns?` -> ${x.returns}`:""}`:"",T=x.decorators?`@${x.decorators} `:"",C=x.raises?` raises=${x.raises}`:"";k.push(` ${x.class} ${v}${x.site?` :${x.site.start}`:""} ${T}${v}${A}${C}`)}}if(h.siblings&&f.siblings.length){k.push(`
75
- ## sibling symbols to copy the style of (most relevant first; ${f.siblings.length} total):`);for(let x of f.siblings.slice(0,f.siblingCap)){let v=x.site?w(x.site.start):"",A=x.decorators?`@${x.decorators} `:"",T=x.raises?` raises=${x.raises}`:"";k.push(` ${x.class} ${x.label}${x.site?` :${x.site.start}`:""} ${A}${v}${T}`)}f.siblings.length>f.siblingCap&&k.push(` \u2026+${f.siblings.length-f.siblingCap} more (use tmct_search kind=function or tmct_snippet <name> for any of them)`)}if(h.allExports&&f.allExports&&k.push(`
68
+ `)}function Yr(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:za,capabilities:[...Ua],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=qt(e,String(c??""));return u?ft({match:bn(u),candidates:d.map(bn)}):ht(Ye.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return ht(Ye.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=Kv(e,c);return ft({individual:bn(u),out:d,incoming:f})},members(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let d=ve(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let g=i.get(m.object),h=g?bn(g):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(g?.class||"")==="Attribute"?p.push(h):f.push(h)}return ft({methods:f,attributes:p})},subclasses(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let d=ve(e,"inherits"),f=d.filter(b=>b.subject===c).map(b=>i.get(b.object)?bn(i.get(b.object)):{id:b.object,label:b.objectLabel||b.object,class:"Class",attributes:[]}),p=new Map;for(let b of d)p.has(b.object)||p.set(b.object,[]),p.get(b.object).push(b.subject);let m=new Set([c]),g=[],h=[c];for(let b=0;b<8&&h.length;b+=1){let y=[];for(let w of h)for(let v of p.get(w)||[]){if(m.has(v))continue;m.add(v);let x=i.get(v);g.push(x?bn(x):{id:v,label:v,class:"Class",attributes:[]}),y.push(v)}h=y}return ft({bases:f,subclasses:g})},exports(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let f=ve(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 ft({exports:f})},signature(c){let u=a(c);if(!u)return ht(Ye.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),ft({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(!Da.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let m=Yv(e,u),g=ve(e,u).filter(h=>h.subject===c).map(h=>Kr(h,m));return g=d==null?g.slice(f):g.slice(f,f+d),ft({kind:u,edges:g})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return ht(Ye.UNRESOLVED_TERM,{term:c});let f=u==null?Qs(e,d):Qs(e,d,{maxDepth:u}),p=f.reduce((m,g)=>m+g.length,0);return ft({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return ht(Ye.UNRESOLVED_TERM,{term:c});let d=yt(u);if(!l.sourceAccess)return ht(Ye.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(Ye.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await Ln({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Ba});return ft({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return ht(Ye.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${f?.message||f}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=qt(e,String(c??""));if(!d)return ht(Ye.UNRESOLVED_TERM,{term:String(c??"")});let f=Zs(e,d),p=String(u||"auto").trim().toLowerCase(),m,g;p==="min"?(m="TINY",g=$s("TINY")):p==="full"?(m="FULL",g=$s("FULL")):{tier:m,mask:g}=Lr(f,e,{});let h=id(f,g);if(!l.sourceAccess)return ft({text:h,tier:m});let b=await Jv(f,g,{readFile:s,repoRoot:n});return ft({text:b?`${h}
69
+ ${b}`:h,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 ve(e,"imports"))p.has(b.object)&&m.set(b.object,(m.get(b.object)||0)+1);let g=[...m.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),h=[...f.entries()].sort((b,y)=>y[1]-b[1]);return ft({modules:d.length,packages:h,hubs:g})},untested(){let c=new Set(ve(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 ft({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 ft({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return ht(Ye.UNRESOLVED_TERM,{term:c});let d=[...ve(e,"touches"),...ve(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 g=i.get(m.subject);p.push({id:m.subject,label:m.subjectLabel||g?.label||m.subject,author:g?Mt(g,"author")??Mt(g,"commitAuthor"):null,date:g?Mt(g,"date")??Mt(g,"commitDate"):null,message:g?Mt(g,"message")??Mt(g,"commitMessage"):null})}return ft({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Ir,offset:m=0}={}){let g=String(c||""),h=String(u||"").trim().toLowerCase(),b=String(d||"").trim(),y=String(f||"").trim().toLowerCase(),w;if(h&&h!=="module"){let x=null;if(b){let j=oa(b);if(j.error)return ht(Ye.UNRESOLVED_TERM,{term:b,detail:j.error});x=j}let $=g.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=aa(e,$,{kind:h,decFilter:y,nameRe:x}).map(j=>j.ind)}catch(j){return ht(Ye.UNRESOLVED_TERM,{term:b,detail:String(j?.message||j)})}}else{let x=new Map;for(let $ of e.individuals)($.class||"")==="Module"&&x.set($.label,$);w=Pu(e,g).map(({path:$})=>x.get($)).filter(Boolean)}let v=w.slice(m,m+p).map(bn);return ft({results:v})},ask(c){if(typeof r!="function")return ht(Ye.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return ft({content:u,tmct_ask:d})}};if(o)for(let c of Ua){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=>(Ip(o,c,performance.now()-f,m),m)):(Ip(o,c,performance.now()-f,p),p)})}return l}function Ip(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:Qv(s)})}catch{}}function Qv(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,Ba,Xv,Xr=L(()=>{Te();Hr();Cp();Mt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Ba=200,Xv=120});async function Ko(e,t){let n=await t.fetchEntities(e),s=Cr(n);if(!s.individuals.length){let o=new Ie(`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 Jr=L(()=>{It();Te()});function ot(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Ie(`${t} is required`);return n}function wt(e,t,n){let{match:s,candidates:o}=qt(e.graph,t);if(!s)throw new Ie(`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 Yo,Xe,He=L(()=>{It();Te();Yo=200;Xe=e=>(t,{graph:n,svc:s})=>{let{match:o}=wt(s,ot(t,"symbol"),"symbol");return e(n,o)}});async function Op(e,{config:t,source:n=Ys,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Ie("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,l=!!e?.untuned,c=!!e?.max,u=await Ko(t,n),d=we(we(t.graphFile)),f=Yr(u,{sourceAccess:!0,repoRoot:d,readFile:De,tel:o,ask:es}),{match:p}=wt(f,r,"symbol"),m=Zs(u,p),g,h,b=!1;a||i==="min"?(g="TINY",h=$s("TINY")):c||i==="full"?(g="FULL",h=$s("FULL"),b=!0):{tier:g,mask:h,topup:b}=Lr(m,u,{untuned:l}),s&&!c&&(h=od(h));let y=null;if(m.moduleLabel)try{({lines:y}=await Ln({readFile:De,repoRoot:d,path:m.moduleLabel}))}catch{y=null}let w=$=>y&&y[$-1]!=null?y[$-1].trim():"",v=($,j)=>ns(y,$,j,Yo).text,x=[`Edit context for ${m.moduleLabel} [${g}${s?" secondary":""}] \u2014 assembled from the typed graph + that file. You do NOT need to Read it; write the new code directly after reviewing this.`];if(h.anchor&&m.anchor?.site&&y){let{start:$,end:j}=m.anchor.site;x.push(`
70
+ ## anchor: ${m.anchor.label} (${m.anchor.class}) @ ${m.moduleLabel}:${$}-${j}`),x.push(v($,j)),m.callHint&&x.push(m.callHint)}if(h.registration&&m.globals.length){x.push(`
71
+ ## registration / module globals (replicate this pattern):`);for(let $ of m.globals)x.push(` ${$.label} = ${$.value}${$.site?` [:${$.site.start}]`:""}`)}if(h.exemplar&&m.exemplar?.site&&y){let{start:$,end:j}=m.exemplar.site,E=m.exemplar.decorators?` @${m.exemplar.decorators}`:"";x.push(`
72
+ ## closest example (full body) \u2014 copy this style: ${m.exemplar.label} (${m.exemplar.class})${E} @ ${m.moduleLabel}:${$}-${j}`),x.push(v($,j)),m.callHint&&x.push(m.callHint)}if(h.inlinedCallees&&m.calleeBodies.length&&y){let $=120;for(let j of m.calleeBodies){if($<=0)break;let E=j.site.start,C=j.site.path===m.moduleLabel&&y?y:await Ln({readFile:De,repoRoot:d,path:j.site.path}).then(T=>T.lines).catch(()=>null);if(!C)continue;let S=ns(C,E,j.site.end,$);x.push(`
73
+ ## inlined callee body (depth-1 in-repo call): ${j.label} @ ${j.site.path}:${E}-${j.site.end}`),x.push(S.text),$-=S.end-E+1}}if(h.classMembers&&m.classMembers&&m.classMembers.members.length){x.push(`
74
+ ## members of ${m.classMembers.className} (the edit likely lives INSIDE this class \u2014 copy a member's shape, do not read the class body):`);for(let $ of m.classMembers.members){let j=String($.label).split(".").pop(),E=$.params!=null&&$.params!==""?`(${$.params})${$.returns?` -> ${$.returns}`:""}`:"",_=$.decorators?`@${$.decorators} `:"",C=$.raises?` raises=${$.raises}`:"";x.push(` ${$.class} ${j}${$.site?` :${$.site.start}`:""} ${_}${j}${E}${C}`)}}if(h.siblings&&m.siblings.length){x.push(`
75
+ ## sibling symbols to copy the style of (most relevant first; ${m.siblings.length} total):`);for(let $ of m.siblings.slice(0,m.siblingCap)){let j=$.site?w($.site.start):"",E=$.decorators?`@${$.decorators} `:"",_=$.raises?` raises=${$.raises}`:"";x.push(` ${$.class} ${$.label}${$.site?` :${$.site.start}`:""} ${E}${j}${_}`)}m.siblings.length>m.siblingCap&&x.push(` \u2026+${m.siblings.length-m.siblingCap} more (use tmct_search kind=function or tmct_snippet <name> for any of them)`)}if(h.allExports&&m.allExports&&x.push(`
76
76
  ## module __all__ \u2014 this module curates its public API; ADD your new public symbol to this list so it is importable:
77
- ${f.allExports}`),h.reexports&&f.exports&&f.exports.length&&k.push(`
78
- ## re-exported symbols (resolved __all__ \u2192 defining module): ${f.exports.join(", ")}`),h.insertionRegion&&f.insertionRegion&&y){let x=f.insertionRegion.start,v=Math.min(y.length,x+40-1);k.push(`
79
- ## insertion region (write your new sibling here) \u2014 ${f.moduleLabel}:${x}-${v}`),k.push(y.slice(x-1,v).map((A,T)=>`${x+T} ${A}`).join(`
80
- `))}else f.insertion&&k.push(`
81
- ## insert the new sibling after line ~${f.insertion} (end of the last top-level definition).`);return h.tests&&f.tests.length&&k.push(`
82
- ## covering tests: ${f.tests.join(", ")}`),h.cochange&&f.cochange&&f.cochange.length&&k.push(`
83
- ## usually changed together (consider editing these too): ${f.cochange.map(x=>`${x.label} (\xD7${x.weight})`).join(", ")}`),k.push(`
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 ${f.moduleLabel}.`),g!=="FULL"&&k.push(`(bundle tier ${g}; for any omitted sections run tmct_context_more {"symbol":"${r}"}, or tmct_context with depth="full".)`),{text:k.join(`
85
- `),tier:g,topup:b}}async function za(e,{config:t,source:n,tel:s}){return(await Cp(e,{config:t,source:n,tel:s})).text}var Ua=L(()=>{St();De();It();qr();Lo();Te();es();Kr();Yr();He();za.ownsGraphLoad=!0});function Ip(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"symbol"),"symbol");return nd(Zs(t,s))}var Op=L(()=>{Te();He()});function Lp(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 Yo(e){return Lp(e).toString(16).padStart(8,"0")}function Hv(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,k=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+$+i[w-7]+k>>>0}let[d,m,p,f,g,h,b,y]=r;for(let w=0;w<64;w+=1){let $=a(g,6)^a(g,11)^a(g,25),k=g&h^~g&b,x=y+$+k+Vv[w]+i[w]>>>0,v=a(d,2)^a(d,13)^a(d,22),A=d&m^d&p^m&p,T=v+A>>>0;y=b,b=h,h=g,g=f+x>>>0,f=p,p=m,m=d,d=x+T>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+m>>>0,r[2]=r[2]+p>>>0,r[3]=r[3]+f>>>0,r[4]=r[4]+g>>>0,r[5]=r[5]+h>>>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 Kv(e,t){let n=Hv(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function Q(e){let t=Nn(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 Mn(e){let t=Nn(e);return Xv.get(t)??t}function pe(e,t,n){return Xo(Q(e),Mn(t),Q(n))}var Vv,Yv,Nn,Xv,Xo,cn=L(()=>{Vv=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]);Yv=2e3,Nn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,Yv);Xv=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"]]);Xo=(e,t,n)=>`fact:${Kv(`${e}\0${t}\0${n}`,8)}`});var Jt={};Bn(Jt,{CARDINALITY_RULE_CONFIDENCE:()=>s$,CAX_DW_RULE:()=>Wa,CAX_DW_RULE_CONFIDENCE:()=>qa,CAX_MAXC0_RULE_CONFIDENCE:()=>r$,CLS_SVF1_RULE:()=>Va,CLS_SVF1_RULE_CONFIDENCE:()=>Ka,DEFAULT_MAX_ENVIRONMENTS:()=>Xr,DISJOINT_PREDICATE:()=>io,ENTAILED_DISJOINT_PROVENANCE:()=>Ga,ENTAILED_PROVENANCE:()=>Pp,ENTAILED_SCM_SVF_PROVENANCE:()=>Ja,ENTAILED_SVF1_PROVENANCE:()=>Ha,ENTAILED_TYPE_PROVENANCE:()=>Dp,ON_PROPERTY_PREDICATE:()=>wn,SCM_SVF_RULE:()=>Xa,SCM_SVF_RULE_CONFIDENCE:()=>Qa,SOME_VALUES_FROM_PREDICATE:()=>yn,SUBCLASS_PREDICATE:()=>Pe,TYPE_PREDICATE:()=>_t,buildCardinalityRestrictions:()=>n$,buildRelevanceFrontier:()=>Ba,deriveDisjointViolations:()=>Wp,deriveSomeValuesFromApplication:()=>Gp,deriveSomeValuesFromSubsumption:()=>qp,deriveSubClassClosure:()=>zp,deriveSubClassClosureDelta:()=>Up,deriveTypePropagation:()=>Bp,entailedTrustFrom:()=>Qv,findConsistencyViolations:()=>a$,findIsaChain:()=>Za,proveCardinalityAtLeast:()=>o$,proveMaxCardinalityZeroDenial:()=>i$,retractSubClassOf:()=>p$,syllogise:()=>c$});function Np(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 Qv(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 Pn(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=Q(s);o&&n.add(o)}return n.size?n:null}function zp(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}${Ce}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:Pn(s),a=(u,d,m)=>!i||i.has(u)||i.has(d)||i.has(m),l=[],c=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[p,f]of r)for(let g of f){let h=r.get(g);if(h)for(let b of h){if(p===b)continue;let y=`${p}${Ce}${b}`;o.has(y)||c.has(y)||a(p,g,b)&&d.push([p,g,b,y])}}if(!d.length)break;d.sort((p,f)=>p[0].localeCompare(f[0])||p[2].localeCompare(f[2])||p[1].localeCompare(f[1]));let m=!1;for(let[p,f,g,h]of d)if(!c.has(h)){if(l.length>=n)break;c.add(h),l.push({subject:p,object:g,via:f}),r.has(p)||r.set(p,new Set),r.get(p).add(g),m=!0}if(l.length>=n||!m)break}return l}function Up(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[f,g]of e||[])!f||!g||f===g||(r.add(`${f}${Ce}${g}`),i.has(f)||i.set(f,new Set),i.get(f).add(g),a.has(g)||a.set(g,new Set),a.get(g).add(f));let l=[],c=new Set;for(let[f,g]of t||[]){if(!f||!g||f===g)continue;let h=`${f}${Ce}${g}`;c.has(h)||(c.add(h),l.push([f,g]))}let u=o instanceof Set?o.size?o:null:Pn(o),d=(f,g,h)=>!u||u.has(f)||u.has(g)||u.has(h),m=[],p=new Set;for(let f=0;f<n&&l.length;f+=1){let g=[],h=(w,$,k)=>{if(w===k)return;let x=`${w}${Ce}${k}`;r.has(x)||p.has(x)||d(w,$,k)&&g.push([w,$,k,x])};for(let[w,$]of l){for(let k of i.get($)||[])h(w,$,k);for(let k of a.get(w)||[])h(k,w,$)}if(!g.length)break;g.sort((w,$)=>w[0].localeCompare($[0])||w[2].localeCompare($[2])||w[1].localeCompare($[1]));let b=!1,y=[];for(let[w,$,k,x]of g)if(!p.has(x)){if(m.length>=s)break;p.add(x),m.push({subject:w,object:k,via:$}),i.has(w)||i.set(w,new Set),i.get(w).add(k),a.has(k)||a.set(k,new Set),a.get(k).add(w),y.push([w,k]),b=!0}if(m.length>=s||!b)break;l=y}return m}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 Zv(e){return vn((e||[]).map(([t,n])=>[n,t]))}function Ba(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(ns(c.predicate)?n.push([c.subject,c.object]):Rs(c.predicate)?s.push([c.subject,c.object]):ao(c.predicate)?o.set(c.subject,c.object):Qo(c.predicate)&&r.set(c.subject,c.object));let i=Zv(n),a=new Set;for(let c of t||[]){let u=Q(c);if(u){a.add(u);for(let d of i(u))a.add(d)}}let l=new Set(a);for(let[c,u]of s)a.has(u)&&l.add(c);for(let[c,u]of r)o.has(c)&&a.has(u)&&l.add(c);return l}function Bp(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=vn(t),i=new Set,a=new Set;for(let[p,f]of o||[])p&&f&&i.add(`${p}${Ce}${f}`);let l=s instanceof Set?s.size?s:null:Pn(s),c=(p,f,g)=>!l||l.has(p)||l.has(f)||l.has(g),u=[];for(let[p,f]of e||[]){if(!p||!f)continue;let g=`${p}${Ce}${f}`;if(!a.has(g)){a.add(g);for(let h of r(f)){if(h===f||h===p)continue;let b=`${p}${Ce}${h}`;i.has(b)||c(p,f,h)&&u.push([p,f,h,b])}}}u.sort((p,f)=>p[0].localeCompare(f[0])||p[2].localeCompare(f[2])||p[1].localeCompare(f[1]));let d=[],m=new Set;for(let[p,f,g,h]of u)if(!m.has(h)){if(d.length>=n)break;m.add(h),d.push({subject:p,object:g,via:f})}return d}function Wp(e,t,n,{budget:s=50,focus:o=null}={}){let r=vn(t),i=new Map,a=new Set;for(let[f,g]of n||[])!f||!g||f===g||(a.add(`${f}${Ce}${g}`),a.add(`${g}${Ce}${f}`),i.has(f)||i.set(f,new Set),i.get(f).add(g),i.has(g)||i.set(g,new Set),i.get(g).add(f));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:Pn(o),u=(f,g,h)=>!c||c.has(f)||c.has(g)||c.has(h),d=[];for(let[f,g]of e||[]){if(!f||!g)continue;let h=`${f}${Ce}${g}`;if(!l.has(h)){l.add(h);for(let b of[g,...r(g)]){let y=i.get(b);if(y)for(let w of y){if(w===f)continue;let $=`${f}${Ce}${w}`;a.has($)||u(f,g,w)&&d.push([f,g,b,w,$])}}}}d.sort((f,g)=>f[0].localeCompare(g[0])||f[3].localeCompare(g[3])||f[2].localeCompare(g[2])||f[1].localeCompare(g[1]));let m=[],p=new Set;for(let[f,g,h,b,y]of d)if(!p.has(y)){if(m.length>=s)break;p.add(y),m.push({subject:f,object:b,viaType:g,viaClass:h})}return m}function Gp(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=vn(n),a=new Map;for(let h of s||[]){if(!h||!h.restriction||!h.property||!h.target)continue;let b=`${h.property}${Ce}${h.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(h.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[h,b]of t||[])!h||!b||(l.add(`${h}${Ce}${b}`),c.has(h)||c.set(h,new Set),c.get(h).add(b));let u=r instanceof Set?r.size?r:null:Pn(r),d=(h,b,y)=>!u||u.has(h)||u.has(b)||u.has(y),m=new Set,p=[];for(let[h,b,y]of e||[]){if(!h||!b||!y)continue;let w=Q(b),$=`${h}${Ce}${w}${Ce}${y}`;if(m.has($))continue;m.add($);let k=c.get(y);if(k)for(let x of k)for(let v of[x,...i(x)]){let A=a.get(`${w}${Ce}${v}`);if(A)for(let T of A){if(h===T)continue;let C=`${h}${Ce}${T}`;l.has(C)||d(h,y,T)&&p.push([h,b,w,y,x,v,T,C])}}}p.sort((h,b)=>h[0].localeCompare(b[0])||h[6].localeCompare(b[6])||h[1].localeCompare(b[1])||h[3].localeCompare(b[3]));let f=[],g=new Set;for(let[h,b,y,w,$,k,x,v]of p)if(!g.has(v)){if(f.length>=o)break;g.add(v),f.push({subject:h,object:x,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:$,viaTarget:k})}return f}function n$(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(ao(r.predicate))t.set(r.subject,r.object);else if(Jv(r.predicate))s.set(r.subject,r.object);else{let i=t$[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)!==e$)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 qp(e,t,{budget:n=50,focus:s=null}={}){let o=vn(t),r=new Map;for(let m of e||[]){if(!m||!m.restriction||!m.property||!m.target)continue;let p=Q(m.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:m.restriction,target:m.target})}let i=new Set;for(let[m,p]of t||[])m&&p&&i.add(`${m}${Ce}${p}`);let a=s instanceof Set?s.size?s:null:Pn(s),l=(m,p)=>!a||a.has(m)||a.has(p),c=[];for(let[,m]of r)if(!(m.length<2))for(let p of m)for(let f of m){if(p.restriction===f.restriction||p.target===f.target||!o(p.target).has(f.target))continue;let g=`${p.restriction}${Ce}${f.restriction}`;i.has(g)||l(p.restriction,f.restriction)&&c.push([p.restriction,f.restriction,p.target,f.target,g])}c.sort((m,p)=>m[0].localeCompare(p[0])||m[1].localeCompare(p[1]));let u=[],d=new Set;for(let[m,p,f,g,h]of c)if(!d.has(h)){if(u.length>=n)break;d.add(h),u.push({subject:m,object:p,viaY1:f,viaY2:g})}return u}function Vp(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:Pn(r),l=m=>!a||a.has(n)||a.has(m),c=new Map;for(let[m,p]of e||[])!m||!p||(c.has(m)||c.set(m,new Set),c.get(m).add(p));let u=new Map((t||[]).map(m=>[m.restriction,m])),d=0;for(let m of[n,...i(n)]){if(d>=o)break;if(d+=1,!!l(m))for(let p of c.get(m)||[]){let f=u.get(p);if(f&&s(f))return{viaClass:m,viaRestriction:p,record:f}}}return null}function o$(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Vp(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 i$(e,t,n,s,o={}){if(!s)return null;let r=Vp(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 a$(e,t,n,{budget:s=50,focus:o=null}={}){let r=vn(t),i=new Map;for(let[p,f]of n||[])!p||!f||p===f||(i.has(p)||i.set(p,new Set),i.get(p).add(f),i.has(f)||i.set(f,new Set),i.get(f).add(p));if(!i.size)return[];let a=new Map;for(let[p,f]of e||[])!p||!f||(a.has(p)||a.set(p,new Set),a.get(p).add(f));let l=o instanceof Set?o.size?o:null:Pn(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,f]of a){if(!c(p))continue;let g=[...f].sort();for(let h=0;h<g.length;h+=1)for(let b=h+1;b<g.length;b+=1){let[y,w]=[g[h],g[b]],$=[y,...r(y)],k=[w,...r(w)],x=null;for(let A of $){let T=i.get(A);if(T){for(let C of k)if(T.has(C)){x=[A,C];break}if(x)break}}if(!x)continue;let v=`${p}${Ce}${y}${Ce}${w}`;d.has(v)||(d.add(v),u.push([p,y,w,x[0],x[1]]))}}u.sort((p,f)=>p[0].localeCompare(f[0])||p[1].localeCompare(f[1])||p[2].localeCompare(f[2]));let m=[];for(let[p,f,g,h,b]of u){if(m.length>=s)break;m.push({subject:p,classA:f,classB:g,viaA:h,viaB:b})}return m}async function c$(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=Xr,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=Np(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",m=await l(e),p=c(m),f=p.filter(E=>ns(E.predicate)).map(E=>[E.subject,E.object]),g=p.filter(E=>Rs(E.predicate)).map(E=>[E.subject,E.object]),h=p.filter(E=>_s(E.predicate)).map(E=>[E.subject,E.object]),b=new Map,y=new Map,w=[];for(let E of p){let ie=String(E.predicate||"").trim().toLowerCase();ao(E.predicate)?b.set(E.subject,E.object):Qo(E.predicate)?y.set(E.subject,E.object):Ya.has(ie)||w.push([E.subject,E.predicate,E.object])}let $=[];for(let[E,ie]of b){let Ee=y.get(E);Ee&&$.push({restriction:E,property:ie,target:Ee})}let k=Pn(s),x=o&&k?Ba(p,[...k]):k,v=x===null&&d?await a.loadSyllogiseState(e):null,A=new Set(p.map(E=>E.id)),T=Array.isArray(v?.factIds)?v.factIds.filter(E=>!A.has(E)):[],C=v&&Array.isArray(v.factIds)&&!T.length&&!i?"delta":"full",S=C==="delta"?new Set(v.factIds):null,R=C==="delta"?p.filter(E=>!S.has(E.id)):p,M=R.length,j=new Map;for(let E of p)j.set(`${E.subject}${Ce}${E.predicate}${Ce}${E.object}`,E.trust);let _=(E,ie,Ee)=>j.get(`${E}${Ce}${ie}${Ce}${Ee}`),O=(E,ie,Ee)=>j.has(`${E}${Ce}${ie}${Ce}${Ee}`),F=E=>E.filter(ie=>typeof ie=="number"),N=C==="delta"&&!R.length,U=C==="delta"?R.filter(E=>ns(E.predicate)).map(E=>[E.subject,E.object]):[],G=C==="delta"?U.length?Up(f,U,{depth:t,budget:n,focus:x}):[]:zp(f,{depth:t,budget:n,focus:x}),B=f.concat(G.map(E=>[E.subject,E.object])),W=x,I=null;if(C==="delta"&&!N){let E=p.concat(G.map(Ee=>({subject:Ee.subject,predicate:Pe,object:Ee.object}))),ie=[];for(let Ee of R)ie.push(Ee.subject,Ee.object);I=Ba(E,ie),W=I}let P=E=>!I||I.has(E),D=I?g.filter(([E,ie])=>P(E)||P(ie)):g,V=new Set;if(I)for(let E of R)_s(E.predicate)&&(V.add(E.subject),V.add(E.object));let K=I&&V.size?vn(B):null,q=I?g.filter(([E,ie])=>P(E)||P(ie)||K&&[...K(ie)].some(Ee=>V.has(Ee))):g,ee=new Set;if(I){for(let E of R)if(ao(E.predicate)||Qo(E.predicate)){let ie=b.get(E.subject);ie&&ee.add(Q(ie))}}let re=I?w.filter(([E,ie,Ee])=>P(E)||P(Ee)||ee.has(Q(ie))):w,Se=Math.max(0,n-G.length),ce=Se>0&&!N?Bp(D,B,{budget:Se,focus:W,presentTypeEdges:g}):[],$e=Math.max(0,n-G.length-ce.length),te=$e>0&&!N?Wp(q,B,h,{budget:$e,focus:W}):[],Y=Math.max(0,n-G.length-ce.length-te.length),Z=Y>0&&$.length&&!N?Gp(re,g,B,$,{budget:Y,focus:W}):[],ke=Math.max(0,n-G.length-ce.length-te.length-Z.length),Oe=ke>0&&$.length>1&&!N?qp($,B,{budget:ke,focus:W}):[],H=new Map($.map(E=>[E.restriction,E])),oe=[...G.map(E=>({subject:E.subject,predicate:Pe,object:E.object,provenance:Pp,justification:[[pe(E.subject,Pe,E.via),pe(E.via,Pe,E.object)]]})),...ce.map(E=>({subject:E.subject,predicate:_t,object:E.object,provenance:Dp,justification:[[pe(E.subject,_t,E.via),pe(E.via,Pe,E.object)]]})),...te.map(E=>{let ie=O(E.viaClass,io,E.object),[Ee,En]=ie?[E.viaClass,E.object]:[E.object,E.viaClass],Ws=F([_(E.subject,_t,E.viaType),_(Ee,io,En),...E.viaClass!==E.viaType?[_(E.viaType,Pe,E.viaClass)]:[]]);return{subject:E.subject,predicate:io,object:E.object,provenance:Ga,justification:[[pe(E.subject,_t,E.viaType),pe(Ee,io,En),...E.viaClass!==E.viaType?[pe(E.viaType,Pe,E.viaClass)]:[]]],...Ws.length?{premiseTrusts:Ws,ruleConfidence:qa}:{}}}),...Z.map(E=>{let ie=F([_(E.subject,E.viaProperty,E.viaValue),_(E.viaValue,_t,E.viaType),_(E.object,wn,E.viaPropertyKey),_(E.object,yn,E.viaTarget),...E.viaType!==E.viaTarget?[_(E.viaType,Pe,E.viaTarget)]:[]]);return{subject:E.subject,predicate:_t,object:E.object,provenance:Ha,justification:[[pe(E.subject,E.viaProperty,E.viaValue),pe(E.viaValue,_t,E.viaType),pe(E.object,wn,E.viaPropertyKey),pe(E.object,yn,E.viaTarget),...E.viaType!==E.viaTarget?[pe(E.viaType,Pe,E.viaTarget)]:[]]],...ie.length?{premiseTrusts:ie,ruleConfidence:Ka}:{}}}),...Oe.map(E=>{let ie=H.get(E.subject),Ee=H.get(E.object),En=F([ie&&_(E.subject,wn,ie.property),_(E.subject,yn,E.viaY1),Ee&&_(E.object,wn,Ee.property),_(E.object,yn,E.viaY2),_(E.viaY1,Pe,E.viaY2)]);return{subject:E.subject,predicate:Pe,object:E.object,provenance:Ja,justification:[[...ie?[pe(E.subject,wn,ie.property)]:[],pe(E.subject,yn,E.viaY1),...Ee?[pe(E.object,wn,Ee.property)]:[],pe(E.object,yn,E.viaY2),pe(E.viaY1,Pe,E.viaY2)]],...En.length?{premiseTrusts:En,ruleConfidence:Qa}:{}}})],fe=oe.map(E=>({id:pe(E.subject,E.predicate,E.object),subject:E.subject,predicate:E.predicate,object:E.object,environments:E.justification,write:E})),se=Kp(p.concat(fe.map(E=>({id:E.id,subject:E.subject,predicate:E.predicate,object:E.object})))),Me=new Map(p.map(E=>[E.id,E])),le=E=>ns(E)||Rs(E)||_s(E),je=E=>C!=="delta"||I!==null&&(I.has(E.subject)||I.has(E.object)),me=p.filter(E=>le(E.predicate)&&Hp(E.provenance)&&Jo(E).length<r&&je(E)).map(E=>({id:E.id,subject:E.subject,predicate:E.predicate,object:E.object,environments:Jo(E),provenance:E.provenance})),Dt=[...fe,...me].sort((E,ie)=>E.subject.localeCompare(ie.subject)||E.predicate.localeCompare(ie.predicate)||E.object.localeCompare(ie.object)),nn=0,Qe=!1,ln=0;for(let E of Dt){if(ln>=n){Qe=!0;break}ln+=1;let ie=se(E,{maxEnvironments:r+1}),{kept:Ee,truncated:En}=u$(E.environments,ie,r);if(En&&(Qe=!0),!(Ee.length<=E.environments.length)){if(nn+=Ee.length-E.environments.length,E.write){E.write.justification=Ee;continue}oe.push({subject:E.subject,predicate:E.predicate,object:E.object,justification:Ee,...Yp(E.provenance,Ee,Ws=>Me.get(Ws)?.trust)||{}})}}let{ids:qt}=await u(e,oe),zt=[],Tt=0;for(let E of G)zt.push({id:qt[Tt],subject:E.subject,object:E.object,via:E.via,rule:Mp}),Tt+=1;for(let E of ce)zt.push({id:qt[Tt],subject:E.subject,object:E.object,via:E.via,rule:Fp}),Tt+=1;for(let E of te)zt.push({id:qt[Tt],subject:E.subject,object:E.object,via:E.viaClass,rule:Wa}),Tt+=1;for(let E of Z)zt.push({id:qt[Tt],subject:E.subject,object:E.object,via:E.viaValue,rule:Va}),Tt+=1;for(let E of Oe)zt.push({id:qt[Tt],subject:E.subject,object:E.object,via:E.viaY1,rule:Xa}),Tt+=1;let wr=zt.length>=n;if(x===null&&d&&!wr){let E=new Set(A);for(let ie of qt)E.add(ie);await a.saveSyllogiseState(e,{version:1,factIds:[...E].sort(),completedAt:new Date().toISOString()})}return{derived:zt,count:zt.length,budget:n,depth:t,truncated:wr,mode:C,deltaSize:M,environmentsAdded:nn,alternatesTruncated:Qe}}function Hp(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function l$(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();ns(u.predicate)?t.push([u.subject,u.object]):Rs(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):_s(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)):ao(u.predicate)?o.set(u.subject,u.object):Qo(u.predicate)?r.set(u.subject,u.object):Ya.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([Q(u.predicate),u.object]))}let a=vn(t),l=(u,d)=>u!==d&&a(u).has(d),c=u=>{let d=o.get(u),m=r.get(u);return d&&m?{property:Q(d),target:m}:null};return u=>{if(ns(u.predicate)){if(l(u.subject,u.object))return!0;let d=c(u.subject),m=c(u.object);return!!(d&&m&&d.property===m.property&&l(d.target,m.target))}if(Rs(u.predicate)){for(let m of n.get(u.subject)||[])if(l(m,u.object))return!0;let d=c(u.object);if(d){for(let[m,p]of i.get(u.subject)||[])if(m===d.property){for(let f of n.get(p)||[])if(f===d.target||l(f,d.target))return!0}}return!1}if(_s(u.predicate)){for(let d of n.get(u.subject)||[])for(let m of[d,...a(d)])if(s.get(m)?.has(u.object))return!0;return!1}return!0}}function Kp(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 f=String(p.predicate||"").trim().toLowerCase();ns(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)):Rs(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):_s(p.predicate)?(r.add(`${p.subject}${Ce}${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)):ao(p.predicate)?a.set(p.subject,p.object):Qo(p.predicate)?l.set(p.subject,p.object):Ya.has(f)||(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,m=p=>{let f=a.get(p),g=l.get(p);return f&&g?{property:f,propertyKey:Q(f),target:g}:null};return(p,{maxEnvironments:f=Xr}={})=>{let g=[],h=new Set,b=y=>{if(g.length>=f||p.id&&y.includes(p.id)||!y.every($=>t.has($)))return;let w=[...y].sort().join(" ");h.has(w)||(h.add(w),g.push(y))};if(ns(p.predicate)){for(let y of[...d(p.subject)].sort()){if(g.length>=f)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([pe(p.subject,Pe,y),pe(y,Pe,p.object)])}if(g.length<f){let y=m(p.subject),w=m(p.object);y&&w&&y.propertyKey===w.propertyKey&&y.target!==w.target&&d(y.target).has(w.target)&&b([pe(p.subject,wn,y.property),pe(p.subject,yn,y.target),pe(p.object,wn,w.property),pe(p.object,yn,w.target),pe(y.target,Pe,w.target)])}return g}if(Rs(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(g.length>=f)break;w!==p.object&&d(w).has(p.object)&&b([pe(p.subject,_t,w),pe(w,Pe,p.object)])}let y=m(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([$])=>Q($)===y.propertyKey).sort(($,k)=>$[0].localeCompare(k[0])||$[1].localeCompare(k[1]));for(let[$,k]of w){if(g.length>=f)break;for(let x of[...o.get(k)||[]].sort()){if(g.length>=f)break;x!==y.target&&!d(x).has(y.target)||b([pe(p.subject,$,k),pe(k,_t,x),pe(p.object,wn,y.propertyKey),pe(p.object,yn,y.target),...x!==y.target?[pe(x,Pe,y.target)]:[]])}}}return g}if(_s(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(g.length>=f)break;let k=r.has(`${$}${Ce}${p.object}`),[x,v]=k?[$,p.object]:[p.object,$];b([pe(p.subject,_t,w),pe(x,io,v),...$!==w?[pe(w,Pe,$)]:[]])}return g}return g}}function u$(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 Yp(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=d$.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 p$(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=Xr,store:i}={}){let{loadMemory:a,readFactRows:l,removeFacts:c}=Np(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),u=typeof i?.appendFacts=="function"?i.appendFacts:null,d=Q(t),m=Q(n),p=pe(d,Pe,m),f=await a(e),g=l(f),h=new Map(g.map(C=>[C.id,C]));if(!h.has(p))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let b=g.filter(C=>Jo(C).length&&Hp(C.provenance)),y=new Map;for(let C of b)for(let S of Jo(C))for(let R of S)y.has(R)||y.set(R,new Set),y.get(R).add(C.id);let w=new Set([p]),$=[p],k=new Map,x=!1,v=0,A=[p];for(;v<o;v+=1){let C=new Set;for(let N of A)for(let U of y.get(N)||[])w.has(U)||C.add(U);let S=[...C].map(N=>h.get(N)).sort((N,U)=>N.subject.localeCompare(U.subject)||N.predicate.localeCompare(U.predicate)||N.object.localeCompare(U.object));if(!S.length)break;let R=g.filter(N=>!w.has(N.id)&&!C.has(N.id)),M=new Set(R.map(N=>N.id)),j=Kp(R),_=l$(R),O=!1,F=!1;A=[];for(let N of S){if(w.size>=s){F=!0;break}let U=Jo(N),G=U.filter(W=>W.every(I=>M.has(I)));if(G.length){G.length!==U.length&&k.set(N.id,G);continue}let B=j(N,{maxEnvironments:r});if(B.length){k.set(N.id,B);continue}_(N)||(w.add(N.id),$.push(N.id),A.push(N.id),O=!0)}if(F){x=!0;break}if(!O)break}!x&&v>=o&&(x=b.some(C=>!w.has(C.id)&&C.justification.some(S=>w.has(S))));let{removed:T}=await c(e,$);if(u){let C=[...k.entries()].filter(([S])=>!w.has(S)).sort((S,R)=>S[0].localeCompare(R[0])).map(([S,R])=>{let M=h.get(S);return{subject:M.subject,predicate:M.predicate,object:M.object,justification:R,...Yp(M.provenance,R,j=>h.get(j)?.trust)||{}}});C.length&&await u(e,C)}return{retracted:T,count:T.length,budget:s,depth:o,truncated:x,found:!0}}function Za(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:_t,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Pe,object:c}]});let l=new Set([e]);for(let c=1;c<=o&&a.length;c+=1){for(let{node:d,path:m}of a)if(r.has(d))return m;if(c===o)break;let u=[];for(let{node:d,path:m}of a)if(!l.has(d)){l.add(d);for(let p of i.get(d)||[])l.has(p)||u.push({node:p,path:[...m,{subject:d,predicate:Pe,object:p}]})}a=u}return null}var Pe,Mp,Pp,_t,Fp,Dp,io,Wa,Ga,qa,wn,yn,Va,Ha,Ka,Xr,Ce,ns,Rs,_s,ao,Qo,Jv,Ya,e$,t$,Xa,Ja,Qa,s$,r$,Jo,d$,Pt=L(()=>{cn();Pe="rdfs:subClassOf",Mp="subClassOf",Pp=`entailed:${Mp}`,_t="rdf:type",Fp="type",Dp=`entailed:${Fp}`,io="owl:disjointWith",Wa="disjointWith",Ga=`entailed:${Wa}`,qa=.95,wn="owl:onProperty",yn="owl:someValuesFrom",Va="someValuesFrom",Ha=`entailed:${Va}`,Ka=.95,Xr=4,Ce="\u241F",ns=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Rs=e=>String(e||"").trim().toLowerCase()==="rdf:type",_s=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",ao=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Qo=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",Jv=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Ya=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);e$="has",t$={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Xa="someValuesFromSubsumption",Ja=`entailed:${Xa}`,Qa=.95;s$=.95;r$=.95;Jo=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);d$=new Map([[Ga,qa],[Ha,Ka],[Ja,Qa]])});function po(e){let t=String(e||""),n=Xp.get(t);return n||(t.startsWith(ec)?co+t.slice(ec.length):t)}function Jp(e){let t=String(e||""),n=f$.get(t);return n||(t.startsWith(co)?ec+t.slice(co.length):null)}function ef(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Za(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function Zr(e,t,n,{maxHops:s=3}={}){let o=uo(e),r=uo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Zp(i),c=i.filter(b=>(b.predicate===Qr||b.predicate===lo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===lo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=ef(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,m=u.filter(b=>b.hops===d),p=m.filter(b=>b.polarity==="positive").map(b=>b.fact),f=m.filter(b=>b.polarity==="negative").map(b=>b.fact),g=f.length&&!p.length?"negative":"positive",h=u.find(b=>b.hops>d&&b.polarity!==g)||null;return{verdict:p.length&&f.length?"both":f.length?"no":"yes",hops:d,positive:p,negative:f,chain:u[0].chain,overrides:h?{fact:h.fact,chain:h.chain}:null,baseRate:null}}function nc(e,t,n,{maxHops:s=3}={}){let o=uo(e),r=uo(t),i=Array.isArray(n)?n:[],a=i.filter(g=>g.predicate===Pe||g.predicate===_t),l=a.filter(g=>o.has(g.subject)).map(g=>g.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(g=>g.object===c&&!o.has(g.subject)).map(g=>g.subject))],d=g=>{let h=i.find(b=>b.subject===g&&r.has(b.object)&&(b.predicate===Qr||b.predicate===lo));return h?{name:g,polarity:h.predicate===lo?"negative":"positive",fact:h}:{name:g,polarity:"unknown",fact:null}},m=u.map(d),{typeEdges:p,subClassEdges:f}=Zp(i);return{klass:c,kinds:u.length,positive:m.filter(g=>g.polarity==="positive"),negative:m.filter(g=>g.polarity==="negative"),unknown:m.filter(g=>g.polarity==="unknown"),chain:ef(o,c,p,f,s)}}function sc(e,t,{exclude:n=[],maxHops:s=3}={}){let o=uo(e),r=uo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==Qr||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),Zr(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(m$)}var co,ec,Jr,Xp,f$,Qp,Qr,lo,tc,m$,uo,Zp,oc=L(()=>{Pt();co="mgxneg:",ec="mgx:",Jr="mgxneg:subClassOf",Xp=new Map([[Pe,Jr]]),f$=new Map([...Xp].map(([e,t])=>[t,e]));Qp=e=>String(e||"").startsWith(co),Qr="mgx:capableOf",lo=po(Qr),tc=6,m$=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),uo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Zp=e=>({typeEdges:e.filter(t=>t.predicate===_t).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Pe).map(t=>[t.subject,t.object])})});function fo(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function w$(e,t){(!e?.class||!h$.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function y$(e,t){for(let s of["rdf:subject","rdf:predicate","rdf:object"])ei(fo(e,s))||t.push(`a Fact needs a non-empty ${s}`);for(let s of["rdf:subject","rdf:object"]){let o=fo(e,s);o!==void 0&&b$.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=fo(e,"mgx:factProvenance");n!==void 0&&!ei(n)&&t.push("mgx:factProvenance, when present, must be non-empty")}function v$(e,t){ei(fo(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=fo(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 g$[n])ei(fo(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function $$(e){let t=[];return w$(e,t),e?.class==="Fact"&&y$(e,t),e?.class==="Rule"&&v$(e,t),{ok:t.length===0,violations:t}}function rc(e){let t=$$(e);if(!t.ok){let n=new Error(`SHACL validation failed for ${e?.class} "${e?.id}": ${t.violations.join(" | ")}`);throw n.violations=t.violations,n}}var h$,tf,g$,b$,ei,nf=L(()=>{h$=new Set(["Utterance","Fact","Session","Source","Rule"]),tf=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),g$={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"]},b$=/[.!?]\s+\w/;ei=e=>typeof e=="string"&&e.trim().length>0});var sf={};Bn(sf,{access:()=>E$,appendFile:()=>_$,basename:()=>W$,copyFile:()=>L$,createInterface:()=>K$,createReadStream:()=>M$,createRequire:()=>x$,createWriteStream:()=>P$,default:()=>X$,dirname:()=>z$,existsSync:()=>F$,fileURLToPath:()=>q$,isAbsolute:()=>B$,join:()=>D$,mkdir:()=>R$,mkdtemp:()=>A$,randomBytes:()=>V$,readFile:()=>S$,readFileSync:()=>k$,readdir:()=>N$,rename:()=>T$,resolve:()=>U$,rm:()=>I$,sep:()=>G$,spawnSync:()=>H$,stat:()=>O$,tmpdir:()=>Y$,unlink:()=>C$,writeFile:()=>j$});var rt,x$,k$,E$,S$,j$,_$,R$,A$,T$,C$,I$,O$,L$,N$,M$,P$,F$,D$,z$,U$,B$,W$,G$,q$,V$,H$,K$,Y$,X$,of=L(()=>{rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},x$=rt("createRequire"),k$=rt("readFileSync"),E$=rt("access"),S$=rt("readFile"),j$=rt("writeFile"),_$=rt("appendFile"),R$=rt("mkdir"),A$=rt("mkdtemp"),T$=rt("rename"),C$=rt("unlink"),I$=rt("rm"),O$=rt("stat"),L$=rt("copyFile"),N$=rt("readdir"),M$=rt("createReadStream"),P$=rt("createWriteStream"),F$=()=>!1,D$=(...e)=>e.join("/"),z$=e=>String(e).replace(/\/[^/]*$/,""),U$=(...e)=>e.join("/"),B$=e=>String(e).startsWith("/"),W$=e=>String(e).split("/").pop(),G$="/",q$=e=>String(e),V$=rt("randomBytes"),H$=rt("spawnSync"),K$=rt("createInterface"),Y$=()=>"/tmp",X$={}});var J$,Zo,ic=L(()=>{J$=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,Zo=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(J$);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 Q$(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function Z$(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+=`
77
+ ${m.allExports}`),h.reexports&&m.exports&&m.exports.length&&x.push(`
78
+ ## re-exported symbols (resolved __all__ \u2192 defining module): ${m.exports.join(", ")}`),h.insertionRegion&&m.insertionRegion&&y){let $=m.insertionRegion.start,j=Math.min(y.length,$+40-1);x.push(`
79
+ ## insertion region (write your new sibling here) \u2014 ${m.moduleLabel}:${$}-${j}`),x.push(y.slice($-1,j).map((E,_)=>`${$+_} ${E}`).join(`
80
+ `))}else m.insertion&&x.push(`
81
+ ## insert the new sibling after line ~${m.insertion} (end of the last top-level definition).`);return h.tests&&m.tests.length&&x.push(`
82
+ ## covering tests: ${m.tests.join(", ")}`),h.cochange&&m.cochange&&m.cochange.length&&x.push(`
83
+ ## usually changed together (consider editing these too): ${m.cochange.map($=>`${$.label} (\xD7${$.weight})`).join(", ")}`),x.push(`
84
+ You now have the snippet, the sibling style, the registration anchor and the tests. Write the new code with Edit/Write \u2014 do NOT Read ${m.moduleLabel}.`),g!=="FULL"&&x.push(`(bundle tier ${g}; for any omitted sections run tmct_context_more {"symbol":"${r}"}, or tmct_context with depth="full".)`),{text:x.join(`
85
+ `),tier:g,topup:b}}async function Wa(e,{config:t,source:n,tel:s}){return(await Op(e,{config:t,source:n,tel:s})).text}var qa=L(()=>{Et();ze();It();Hr();No();Te();ts();Xr();Jr();He();Wa.ownsGraphLoad=!0});function Lp(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"symbol"),"symbol");return rd(Zs(t,s))}var Np=L(()=>{Te();He()});function Mp(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 Xo(e){return Mp(e).toString(16).padStart(8,"0")}function e$(e){let t=new TextEncoder().encode(String(e)),n=t.length*8,s=new Uint8Array((t.length+8>>6)+1<<6);s.set(t),s[t.length]=128;let o=new DataView(s.buffer);o.setUint32(s.length-8,Math.floor(n/4294967296)),o.setUint32(s.length-4,n>>>0);let r=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),i=new Uint32Array(64),a=(u,d)=>u>>>d|u<<32-d;for(let u=0;u<s.length;u+=64){for(let w=0;w<16;w+=1)i[w]=o.getUint32(u+w*4);for(let w=16;w<64;w+=1){let v=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,x=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+v+i[w-7]+x>>>0}let[d,f,p,m,g,h,b,y]=r;for(let w=0;w<64;w+=1){let v=a(g,6)^a(g,11)^a(g,25),x=g&h^~g&b,$=y+v+x+Zv[w]+i[w]>>>0,j=a(d,2)^a(d,13)^a(d,22),E=d&f^d&p^f&p,_=j+E>>>0;y=b,b=h,h=g,g=m+$>>>0,m=p,p=f,f=d,d=$+_>>>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]+g>>>0,r[5]=r[5]+h>>>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 t$(e,t){let n=e$(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function Q(e){let t=Nn(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 Mn(e){let t=Nn(e);return s$.get(t)??t}function pe(e,t,n){return Jo(Q(e),Mn(t),Q(n))}var Zv,n$,Nn,s$,Jo,cn=L(()=>{Zv=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]);n$=2e3,Nn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,n$);s$=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"]]);Jo=(e,t,n)=>`fact:${t$(`${e}\0${t}\0${n}`,8)}`});var Qt={};Bn(Qt,{CARDINALITY_RULE_CONFIDENCE:()=>u$,CAX_DW_RULE:()=>Va,CAX_DW_RULE_CONFIDENCE:()=>Ka,CAX_MAXC0_RULE_CONFIDENCE:()=>p$,CLS_SVF1_RULE:()=>Ya,CLS_SVF1_RULE_CONFIDENCE:()=>Ja,DEFAULT_MAX_ENVIRONMENTS:()=>Qr,DISJOINT_PREDICATE:()=>io,ENTAILED_DISJOINT_PROVENANCE:()=>Ha,ENTAILED_PROVENANCE:()=>zp,ENTAILED_SCM_SVF_PROVENANCE:()=>ec,ENTAILED_SVF1_PROVENANCE:()=>Xa,ENTAILED_TYPE_PROVENANCE:()=>Up,ON_PROPERTY_PREDICATE:()=>wn,SCM_SVF_RULE:()=>Za,SCM_SVF_RULE_CONFIDENCE:()=>tc,SOME_VALUES_FROM_PREDICATE:()=>yn,SUBCLASS_PREDICATE:()=>Pe,TYPE_PREDICATE:()=>_t,buildCardinalityRestrictions:()=>l$,buildRelevanceFrontier:()=>Ga,deriveDisjointViolations:()=>Gp,deriveSomeValuesFromApplication:()=>Vp,deriveSomeValuesFromSubsumption:()=>Hp,deriveSubClassClosure:()=>Bp,deriveSubClassClosureDelta:()=>Wp,deriveTypePropagation:()=>qp,entailedTrustFrom:()=>r$,findConsistencyViolations:()=>f$,findIsaChain:()=>nc,proveCardinalityAtLeast:()=>d$,proveMaxCardinalityZeroDenial:()=>m$,retractSubClassOf:()=>y$,syllogise:()=>h$});function Pp(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 r$(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 Pn(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=Q(s);o&&n.add(o)}return n.size?n:null}function Bp(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}${Ce}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:Pn(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 g of m){let h=r.get(g);if(h)for(let b of h){if(p===b)continue;let y=`${p}${Ce}${b}`;o.has(y)||c.has(y)||a(p,g,b)&&d.push([p,g,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,g,h]of d)if(!c.has(h)){if(l.length>=n)break;c.add(h),l.push({subject:p,object:g,via:m}),r.has(p)||r.set(p,new Set),r.get(p).add(g),f=!0}if(l.length>=n||!f)break}return l}function Wp(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[m,g]of e||[])!m||!g||m===g||(r.add(`${m}${Ce}${g}`),i.has(m)||i.set(m,new Set),i.get(m).add(g),a.has(g)||a.set(g,new Set),a.get(g).add(m));let l=[],c=new Set;for(let[m,g]of t||[]){if(!m||!g||m===g)continue;let h=`${m}${Ce}${g}`;c.has(h)||(c.add(h),l.push([m,g]))}let u=o instanceof Set?o.size?o:null:Pn(o),d=(m,g,h)=>!u||u.has(m)||u.has(g)||u.has(h),f=[],p=new Set;for(let m=0;m<n&&l.length;m+=1){let g=[],h=(w,v,x)=>{if(w===x)return;let $=`${w}${Ce}${x}`;r.has($)||p.has($)||d(w,v,x)&&g.push([w,v,x,$])};for(let[w,v]of l){for(let x of i.get(v)||[])h(w,v,x);for(let x of a.get(w)||[])h(x,w,v)}if(!g.length)break;g.sort((w,v)=>w[0].localeCompare(v[0])||w[2].localeCompare(v[2])||w[1].localeCompare(v[1]));let b=!1,y=[];for(let[w,v,x,$]of g)if(!p.has($)){if(f.length>=s)break;p.add($),f.push({subject:w,object:x,via:v}),i.has(w)||i.set(w,new Set),i.get(w).add(x),a.has(x)||a.set(x,new Set),a.get(x).add(w),y.push([w,x]),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 i$(e){return vn((e||[]).map(([t,n])=>[n,t]))}function Ga(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(ss(c.predicate)?n.push([c.subject,c.object]):Rs(c.predicate)?s.push([c.subject,c.object]):ao(c.predicate)?o.set(c.subject,c.object):Zo(c.predicate)&&r.set(c.subject,c.object));let i=i$(n),a=new Set;for(let c of t||[]){let u=Q(c);if(u){a.add(u);for(let d of i(u))a.add(d)}}let l=new Set(a);for(let[c,u]of s)a.has(u)&&l.add(c);for(let[c,u]of r)o.has(c)&&a.has(u)&&l.add(c);return l}function qp(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}${Ce}${m}`);let l=s instanceof Set?s.size?s:null:Pn(s),c=(p,m,g)=>!l||l.has(p)||l.has(m)||l.has(g),u=[];for(let[p,m]of e||[]){if(!p||!m)continue;let g=`${p}${Ce}${m}`;if(!a.has(g)){a.add(g);for(let h of r(m)){if(h===m||h===p)continue;let b=`${p}${Ce}${h}`;i.has(b)||c(p,m,h)&&u.push([p,m,h,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,g,h]of u)if(!f.has(h)){if(d.length>=n)break;f.add(h),d.push({subject:p,object:g,via:m})}return d}function Gp(e,t,n,{budget:s=50,focus:o=null}={}){let r=vn(t),i=new Map,a=new Set;for(let[m,g]of n||[])!m||!g||m===g||(a.add(`${m}${Ce}${g}`),a.add(`${g}${Ce}${m}`),i.has(m)||i.set(m,new Set),i.get(m).add(g),i.has(g)||i.set(g,new Set),i.get(g).add(m));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:Pn(o),u=(m,g,h)=>!c||c.has(m)||c.has(g)||c.has(h),d=[];for(let[m,g]of e||[]){if(!m||!g)continue;let h=`${m}${Ce}${g}`;if(!l.has(h)){l.add(h);for(let b of[g,...r(g)]){let y=i.get(b);if(y)for(let w of y){if(w===m)continue;let v=`${m}${Ce}${w}`;a.has(v)||u(m,g,w)&&d.push([m,g,b,w,v])}}}}d.sort((m,g)=>m[0].localeCompare(g[0])||m[3].localeCompare(g[3])||m[2].localeCompare(g[2])||m[1].localeCompare(g[1]));let f=[],p=new Set;for(let[m,g,h,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:m,object:b,viaType:g,viaClass:h})}return f}function Vp(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=vn(n),a=new Map;for(let h of s||[]){if(!h||!h.restriction||!h.property||!h.target)continue;let b=`${h.property}${Ce}${h.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(h.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[h,b]of t||[])!h||!b||(l.add(`${h}${Ce}${b}`),c.has(h)||c.set(h,new Set),c.get(h).add(b));let u=r instanceof Set?r.size?r:null:Pn(r),d=(h,b,y)=>!u||u.has(h)||u.has(b)||u.has(y),f=new Set,p=[];for(let[h,b,y]of e||[]){if(!h||!b||!y)continue;let w=Q(b),v=`${h}${Ce}${w}${Ce}${y}`;if(f.has(v))continue;f.add(v);let x=c.get(y);if(x)for(let $ of x)for(let j of[$,...i($)]){let E=a.get(`${w}${Ce}${j}`);if(E)for(let _ of E){if(h===_)continue;let C=`${h}${Ce}${_}`;l.has(C)||d(h,y,_)&&p.push([h,b,w,y,$,j,_,C])}}}p.sort((h,b)=>h[0].localeCompare(b[0])||h[6].localeCompare(b[6])||h[1].localeCompare(b[1])||h[3].localeCompare(b[3]));let m=[],g=new Set;for(let[h,b,y,w,v,x,$,j]of p)if(!g.has(j)){if(m.length>=o)break;g.add(j),m.push({subject:h,object:$,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:v,viaTarget:x})}return m}function l$(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(ao(r.predicate))t.set(r.subject,r.object);else if(o$(r.predicate))s.set(r.subject,r.object);else{let i=c$[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)!==a$)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 Hp(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=Q(f.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:f.restriction,target:f.target})}let i=new Set;for(let[f,p]of t||[])f&&p&&i.add(`${f}${Ce}${p}`);let a=s instanceof Set?s.size?s:null:Pn(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 g=`${p.restriction}${Ce}${m.restriction}`;i.has(g)||l(p.restriction,m.restriction)&&c.push([p.restriction,m.restriction,p.target,m.target,g])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,m,g,h]of c)if(!d.has(h)){if(u.length>=n)break;d.add(h),u.push({subject:f,object:p,viaY1:m,viaY2:g})}return u}function Kp(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:Pn(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 d$(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Kp(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 m$(e,t,n,s,o={}){if(!s)return null;let r=Kp(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 f$(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:Pn(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,m]of a){if(!c(p))continue;let g=[...m].sort();for(let h=0;h<g.length;h+=1)for(let b=h+1;b<g.length;b+=1){let[y,w]=[g[h],g[b]],v=[y,...r(y)],x=[w,...r(w)],$=null;for(let E of v){let _=i.get(E);if(_){for(let C of x)if(_.has(C)){$=[E,C];break}if($)break}}if(!$)continue;let j=`${p}${Ce}${y}${Ce}${w}`;d.has(j)||(d.add(j),u.push([p,y,w,$[0],$[1]]))}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[1].localeCompare(m[1])||p[2].localeCompare(m[2]));let f=[];for(let[p,m,g,h,b]of u){if(f.length>=s)break;f.push({subject:p,classA:m,classB:g,viaA:h,viaB:b})}return f}async function h$(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=Qr,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=Pp(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(k=>ss(k.predicate)).map(k=>[k.subject,k.object]),g=p.filter(k=>Rs(k.predicate)).map(k=>[k.subject,k.object]),h=p.filter(k=>_s(k.predicate)).map(k=>[k.subject,k.object]),b=new Map,y=new Map,w=[];for(let k of p){let ie=String(k.predicate||"").trim().toLowerCase();ao(k.predicate)?b.set(k.subject,k.object):Zo(k.predicate)?y.set(k.subject,k.object):Qa.has(ie)||w.push([k.subject,k.predicate,k.object])}let v=[];for(let[k,ie]of b){let Se=y.get(k);Se&&v.push({restriction:k,property:ie,target:Se})}let x=Pn(s),$=o&&x?Ga(p,[...x]):x,j=$===null&&d?await a.loadSyllogiseState(e):null,E=new Set(p.map(k=>k.id)),_=Array.isArray(j?.factIds)?j.factIds.filter(k=>!E.has(k)):[],C=j&&Array.isArray(j.factIds)&&!_.length&&!i?"delta":"full",S=C==="delta"?new Set(j.factIds):null,T=C==="delta"?p.filter(k=>!S.has(k.id)):p,N=T.length,R=new Map;for(let k of p)R.set(`${k.subject}${Ce}${k.predicate}${Ce}${k.object}`,k.trust);let A=(k,ie,Se)=>R.get(`${k}${Ce}${ie}${Ce}${Se}`),O=(k,ie,Se)=>R.has(`${k}${Ce}${ie}${Ce}${Se}`),F=k=>k.filter(ie=>typeof ie=="number"),M=C==="delta"&&!T.length,B=C==="delta"?T.filter(k=>ss(k.predicate)).map(k=>[k.subject,k.object]):[],q=C==="delta"?B.length?Wp(m,B,{depth:t,budget:n,focus:$}):[]:Bp(m,{depth:t,budget:n,focus:$}),U=m.concat(q.map(k=>[k.subject,k.object])),W=$,I=null;if(C==="delta"&&!M){let k=p.concat(q.map(Se=>({subject:Se.subject,predicate:Pe,object:Se.object}))),ie=[];for(let Se of T)ie.push(Se.subject,Se.object);I=Ga(k,ie),W=I}let P=k=>!I||I.has(k),z=I?g.filter(([k,ie])=>P(k)||P(ie)):g,V=new Set;if(I)for(let k of T)_s(k.predicate)&&(V.add(k.subject),V.add(k.object));let K=I&&V.size?vn(U):null,G=I?g.filter(([k,ie])=>P(k)||P(ie)||K&&[...K(ie)].some(Se=>V.has(Se))):g,ee=new Set;if(I){for(let k of T)if(ao(k.predicate)||Zo(k.predicate)){let ie=b.get(k.subject);ie&&ee.add(Q(ie))}}let re=I?w.filter(([k,ie,Se])=>P(k)||P(Se)||ee.has(Q(ie))):w,Ee=Math.max(0,n-q.length),ce=Ee>0&&!M?qp(z,U,{budget:Ee,focus:W,presentTypeEdges:g}):[],$e=Math.max(0,n-q.length-ce.length),te=$e>0&&!M?Gp(G,U,h,{budget:$e,focus:W}):[],Y=Math.max(0,n-q.length-ce.length-te.length),Z=Y>0&&v.length&&!M?Vp(re,g,U,v,{budget:Y,focus:W}):[],ke=Math.max(0,n-q.length-ce.length-te.length-Z.length),Oe=ke>0&&v.length>1&&!M?Hp(v,U,{budget:ke,focus:W}):[],H=new Map(v.map(k=>[k.restriction,k])),oe=[...q.map(k=>({subject:k.subject,predicate:Pe,object:k.object,provenance:zp,justification:[[pe(k.subject,Pe,k.via),pe(k.via,Pe,k.object)]]})),...ce.map(k=>({subject:k.subject,predicate:_t,object:k.object,provenance:Up,justification:[[pe(k.subject,_t,k.via),pe(k.via,Pe,k.object)]]})),...te.map(k=>{let ie=O(k.viaClass,io,k.object),[Se,Sn]=ie?[k.viaClass,k.object]:[k.object,k.viaClass],Ws=F([A(k.subject,_t,k.viaType),A(Se,io,Sn),...k.viaClass!==k.viaType?[A(k.viaType,Pe,k.viaClass)]:[]]);return{subject:k.subject,predicate:io,object:k.object,provenance:Ha,justification:[[pe(k.subject,_t,k.viaType),pe(Se,io,Sn),...k.viaClass!==k.viaType?[pe(k.viaType,Pe,k.viaClass)]:[]]],...Ws.length?{premiseTrusts:Ws,ruleConfidence:Ka}:{}}}),...Z.map(k=>{let ie=F([A(k.subject,k.viaProperty,k.viaValue),A(k.viaValue,_t,k.viaType),A(k.object,wn,k.viaPropertyKey),A(k.object,yn,k.viaTarget),...k.viaType!==k.viaTarget?[A(k.viaType,Pe,k.viaTarget)]:[]]);return{subject:k.subject,predicate:_t,object:k.object,provenance:Xa,justification:[[pe(k.subject,k.viaProperty,k.viaValue),pe(k.viaValue,_t,k.viaType),pe(k.object,wn,k.viaPropertyKey),pe(k.object,yn,k.viaTarget),...k.viaType!==k.viaTarget?[pe(k.viaType,Pe,k.viaTarget)]:[]]],...ie.length?{premiseTrusts:ie,ruleConfidence:Ja}:{}}}),...Oe.map(k=>{let ie=H.get(k.subject),Se=H.get(k.object),Sn=F([ie&&A(k.subject,wn,ie.property),A(k.subject,yn,k.viaY1),Se&&A(k.object,wn,Se.property),A(k.object,yn,k.viaY2),A(k.viaY1,Pe,k.viaY2)]);return{subject:k.subject,predicate:Pe,object:k.object,provenance:ec,justification:[[...ie?[pe(k.subject,wn,ie.property)]:[],pe(k.subject,yn,k.viaY1),...Se?[pe(k.object,wn,Se.property)]:[],pe(k.object,yn,k.viaY2),pe(k.viaY1,Pe,k.viaY2)]],...Sn.length?{premiseTrusts:Sn,ruleConfidence:tc}:{}}})],me=oe.map(k=>({id:pe(k.subject,k.predicate,k.object),subject:k.subject,predicate:k.predicate,object:k.object,environments:k.justification,write:k})),se=Xp(p.concat(me.map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object})))),Me=new Map(p.map(k=>[k.id,k])),le=k=>ss(k)||Rs(k)||_s(k),je=k=>C!=="delta"||I!==null&&(I.has(k.subject)||I.has(k.object)),fe=p.filter(k=>le(k.predicate)&&Yp(k.provenance)&&Qo(k).length<r&&je(k)).map(k=>({id:k.id,subject:k.subject,predicate:k.predicate,object:k.object,environments:Qo(k),provenance:k.provenance})),zt=[...me,...fe].sort((k,ie)=>k.subject.localeCompare(ie.subject)||k.predicate.localeCompare(ie.predicate)||k.object.localeCompare(ie.object)),sn=0,Qe=!1,ln=0;for(let k of zt){if(ln>=n){Qe=!0;break}ln+=1;let ie=se(k,{maxEnvironments:r+1}),{kept:Se,truncated:Sn}=b$(k.environments,ie,r);if(Sn&&(Qe=!0),!(Se.length<=k.environments.length)){if(sn+=Se.length-k.environments.length,k.write){k.write.justification=Se;continue}oe.push({subject:k.subject,predicate:k.predicate,object:k.object,justification:Se,...Jp(k.provenance,Se,Ws=>Me.get(Ws)?.trust)||{}})}}let{ids:Vt}=await u(e,oe),Dt=[],Tt=0;for(let k of q)Dt.push({id:Vt[Tt],subject:k.subject,object:k.object,via:k.via,rule:Fp}),Tt+=1;for(let k of ce)Dt.push({id:Vt[Tt],subject:k.subject,object:k.object,via:k.via,rule:Dp}),Tt+=1;for(let k of te)Dt.push({id:Vt[Tt],subject:k.subject,object:k.object,via:k.viaClass,rule:Va}),Tt+=1;for(let k of Z)Dt.push({id:Vt[Tt],subject:k.subject,object:k.object,via:k.viaValue,rule:Ya}),Tt+=1;for(let k of Oe)Dt.push({id:Vt[Tt],subject:k.subject,object:k.object,via:k.viaY1,rule:Za}),Tt+=1;let yr=Dt.length>=n;if($===null&&d&&!yr){let k=new Set(E);for(let ie of Vt)k.add(ie);await a.saveSyllogiseState(e,{version:1,factIds:[...k].sort(),completedAt:new Date().toISOString()})}return{derived:Dt,count:Dt.length,budget:n,depth:t,truncated:yr,mode:C,deltaSize:N,environmentsAdded:sn,alternatesTruncated:Qe}}function Yp(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function g$(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();ss(u.predicate)?t.push([u.subject,u.object]):Rs(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):_s(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)):ao(u.predicate)?o.set(u.subject,u.object):Zo(u.predicate)?r.set(u.subject,u.object):Qa.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([Q(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:Q(d),target:f}:null};return u=>{if(ss(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(Rs(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(_s(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 Xp(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();ss(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)):Rs(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):_s(p.predicate)?(r.add(`${p.subject}${Ce}${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)):ao(p.predicate)?a.set(p.subject,p.object):Zo(p.predicate)?l.set(p.subject,p.object):Qa.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),g=l.get(p);return m&&g?{property:m,propertyKey:Q(m),target:g}:null};return(p,{maxEnvironments:m=Qr}={})=>{let g=[],h=new Set,b=y=>{if(g.length>=m||p.id&&y.includes(p.id)||!y.every(v=>t.has(v)))return;let w=[...y].sort().join(" ");h.has(w)||(h.add(w),g.push(y))};if(ss(p.predicate)){for(let y of[...d(p.subject)].sort()){if(g.length>=m)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([pe(p.subject,Pe,y),pe(y,Pe,p.object)])}if(g.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([pe(p.subject,wn,y.property),pe(p.subject,yn,y.target),pe(p.object,wn,w.property),pe(p.object,yn,w.target),pe(y.target,Pe,w.target)])}return g}if(Rs(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(g.length>=m)break;w!==p.object&&d(w).has(p.object)&&b([pe(p.subject,_t,w),pe(w,Pe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([v])=>Q(v)===y.propertyKey).sort((v,x)=>v[0].localeCompare(x[0])||v[1].localeCompare(x[1]));for(let[v,x]of w){if(g.length>=m)break;for(let $ of[...o.get(x)||[]].sort()){if(g.length>=m)break;$!==y.target&&!d($).has(y.target)||b([pe(p.subject,v,x),pe(x,_t,$),pe(p.object,wn,y.propertyKey),pe(p.object,yn,y.target),...$!==y.target?[pe($,Pe,y.target)]:[]])}}}return g}if(_s(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let v of[w,...u(w)])(i.get(v)||new Set).has(p.object)&&y.push([w,v]);y.sort((w,v)=>w[0].localeCompare(v[0])||w[1].localeCompare(v[1]));for(let[w,v]of y){if(g.length>=m)break;let x=r.has(`${v}${Ce}${p.object}`),[$,j]=x?[v,p.object]:[p.object,v];b([pe(p.subject,_t,w),pe($,io,j),...v!==w?[pe(w,Pe,v)]:[]])}return g}return g}}function b$(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 Jp(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=w$.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 y$(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=Qr,store:i}={}){let{loadMemory:a,readFactRows:l,removeFacts:c}=Pp(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),u=typeof i?.appendFacts=="function"?i.appendFacts:null,d=Q(t),f=Q(n),p=pe(d,Pe,f),m=await a(e),g=l(m),h=new Map(g.map(C=>[C.id,C]));if(!h.has(p))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let b=g.filter(C=>Qo(C).length&&Yp(C.provenance)),y=new Map;for(let C of b)for(let S of Qo(C))for(let T of S)y.has(T)||y.set(T,new Set),y.get(T).add(C.id);let w=new Set([p]),v=[p],x=new Map,$=!1,j=0,E=[p];for(;j<o;j+=1){let C=new Set;for(let M of E)for(let B of y.get(M)||[])w.has(B)||C.add(B);let S=[...C].map(M=>h.get(M)).sort((M,B)=>M.subject.localeCompare(B.subject)||M.predicate.localeCompare(B.predicate)||M.object.localeCompare(B.object));if(!S.length)break;let T=g.filter(M=>!w.has(M.id)&&!C.has(M.id)),N=new Set(T.map(M=>M.id)),R=Xp(T),A=g$(T),O=!1,F=!1;E=[];for(let M of S){if(w.size>=s){F=!0;break}let B=Qo(M),q=B.filter(W=>W.every(I=>N.has(I)));if(q.length){q.length!==B.length&&x.set(M.id,q);continue}let U=R(M,{maxEnvironments:r});if(U.length){x.set(M.id,U);continue}A(M)||(w.add(M.id),v.push(M.id),E.push(M.id),O=!0)}if(F){$=!0;break}if(!O)break}!$&&j>=o&&($=b.some(C=>!w.has(C.id)&&C.justification.some(S=>w.has(S))));let{removed:_}=await c(e,v);if(u){let C=[...x.entries()].filter(([S])=>!w.has(S)).sort((S,T)=>S[0].localeCompare(T[0])).map(([S,T])=>{let N=h.get(S);return{subject:N.subject,predicate:N.predicate,object:N.object,justification:T,...Jp(N.provenance,T,R=>h.get(R)?.trust)||{}}});C.length&&await u(e,C)}return{retracted:_,count:_.length,budget:s,depth:o,truncated:$,found:!0}}function nc(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:_t,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Pe,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:Pe,object:p}]})}a=u}return null}var Pe,Fp,zp,_t,Dp,Up,io,Va,Ha,Ka,wn,yn,Ya,Xa,Ja,Qr,Ce,ss,Rs,_s,ao,Zo,o$,Qa,a$,c$,Za,ec,tc,u$,p$,Qo,w$,Pt=L(()=>{cn();Pe="rdfs:subClassOf",Fp="subClassOf",zp=`entailed:${Fp}`,_t="rdf:type",Dp="type",Up=`entailed:${Dp}`,io="owl:disjointWith",Va="disjointWith",Ha=`entailed:${Va}`,Ka=.95,wn="owl:onProperty",yn="owl:someValuesFrom",Ya="someValuesFrom",Xa=`entailed:${Ya}`,Ja=.95,Qr=4,Ce="\u241F",ss=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Rs=e=>String(e||"").trim().toLowerCase()==="rdf:type",_s=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",ao=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Zo=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",o$=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Qa=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);a$="has",c$={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Za="someValuesFromSubsumption",ec=`entailed:${Za}`,tc=.95;u$=.95;p$=.95;Qo=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);w$=new Map([[Ha,Ka],[Xa,Ja],[ec,tc]])});function po(e){let t=String(e||""),n=Qp.get(t);return n||(t.startsWith(sc)?co+t.slice(sc.length):t)}function Zp(e){let t=String(e||""),n=v$.get(t);return n||(t.startsWith(co)?sc+t.slice(co.length):null)}function nm(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=nc(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function ti(e,t,n,{maxHops:s=3}={}){let o=uo(e),r=uo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=tm(i),c=i.filter(b=>(b.predicate===ei||b.predicate===lo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===lo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=nm(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:rc(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),g=m.length&&!p.length?"negative":"positive",h=u.find(b=>b.hops>d&&b.polarity!==g)||null;return{verdict:p.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:p,negative:m,chain:u[0].chain,overrides:h?{fact:h.fact,chain:h.chain}:null,baseRate:null}}function rc(e,t,n,{maxHops:s=3}={}){let o=uo(e),r=uo(t),i=Array.isArray(n)?n:[],a=i.filter(g=>g.predicate===Pe||g.predicate===_t),l=a.filter(g=>o.has(g.subject)).map(g=>g.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(g=>g.object===c&&!o.has(g.subject)).map(g=>g.subject))],d=g=>{let h=i.find(b=>b.subject===g&&r.has(b.object)&&(b.predicate===ei||b.predicate===lo));return h?{name:g,polarity:h.predicate===lo?"negative":"positive",fact:h}:{name:g,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=tm(i);return{klass:c,kinds:u.length,positive:f.filter(g=>g.polarity==="positive"),negative:f.filter(g=>g.polarity==="negative"),unknown:f.filter(g=>g.polarity==="unknown"),chain:nm(o,c,p,m,s)}}function ic(e,t,{exclude:n=[],maxHops:s=3}={}){let o=uo(e),r=uo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==ei||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),ti(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort($$)}var co,sc,Zr,Qp,v$,em,ei,lo,oc,$$,uo,tm,ac=L(()=>{Pt();co="mgxneg:",sc="mgx:",Zr="mgxneg:subClassOf",Qp=new Map([[Pe,Zr]]),v$=new Map([...Qp].map(([e,t])=>[t,e]));em=e=>String(e||"").startsWith(co),ei="mgx:capableOf",lo=po(ei),oc=6,$$=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),uo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),tm=e=>({typeEdges:e.filter(t=>t.predicate===_t).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Pe).map(t=>[t.subject,t.object])})});function mo(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function E$(e,t){(!e?.class||!x$.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function j$(e,t){for(let s of["rdf:subject","rdf:predicate","rdf:object"])ni(mo(e,s))||t.push(`a Fact needs a non-empty ${s}`);for(let s of["rdf:subject","rdf:object"]){let o=mo(e,s);o!==void 0&&S$.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=mo(e,"mgx:factProvenance");n!==void 0&&!ni(n)&&t.push("mgx:factProvenance, when present, must be non-empty")}function _$(e,t){ni(mo(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=mo(e,"mgx:ruleKind");if(!n||!sm.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...sm].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of k$[n])ni(mo(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function R$(e){let t=[];return E$(e,t),e?.class==="Fact"&&j$(e,t),e?.class==="Rule"&&_$(e,t),{ok:t.length===0,violations:t}}function cc(e){let t=R$(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 x$,sm,k$,S$,ni,om=L(()=>{x$=new Set(["Utterance","Fact","Session","Source","Rule"]),sm=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),k$={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"]},S$=/[.!?]\s+\w/;ni=e=>typeof e=="string"&&e.trim().length>0});var rm={};Bn(rm,{access:()=>C$,appendFile:()=>L$,basename:()=>X$,copyFile:()=>U$,createInterface:()=>tx,createReadStream:()=>W$,createRequire:()=>A$,createWriteStream:()=>q$,default:()=>sx,dirname:()=>H$,existsSync:()=>G$,fileURLToPath:()=>Q$,isAbsolute:()=>Y$,join:()=>V$,mkdir:()=>N$,mkdtemp:()=>M$,randomBytes:()=>Z$,readFile:()=>I$,readFileSync:()=>T$,readdir:()=>B$,rename:()=>P$,resolve:()=>K$,rm:()=>z$,sep:()=>J$,spawnSync:()=>ex,stat:()=>D$,tmpdir:()=>nx,unlink:()=>F$,writeFile:()=>O$});var rt,A$,T$,C$,I$,O$,L$,N$,M$,P$,F$,z$,D$,U$,B$,W$,q$,G$,V$,H$,K$,Y$,X$,J$,Q$,Z$,ex,tx,nx,sx,im=L(()=>{rt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},A$=rt("createRequire"),T$=rt("readFileSync"),C$=rt("access"),I$=rt("readFile"),O$=rt("writeFile"),L$=rt("appendFile"),N$=rt("mkdir"),M$=rt("mkdtemp"),P$=rt("rename"),F$=rt("unlink"),z$=rt("rm"),D$=rt("stat"),U$=rt("copyFile"),B$=rt("readdir"),W$=rt("createReadStream"),q$=rt("createWriteStream"),G$=()=>!1,V$=(...e)=>e.join("/"),H$=e=>String(e).replace(/\/[^/]*$/,""),K$=(...e)=>e.join("/"),Y$=e=>String(e).startsWith("/"),X$=e=>String(e).split("/").pop(),J$="/",Q$=e=>String(e),Z$=rt("randomBytes"),ex=rt("spawnSync"),tx=rt("createInterface"),nx=()=>"/tmp",sx={}});var ox,er,lc=L(()=>{ox=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,er=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(ox);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 rx(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function ix(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 ue,As=L(()=>{ue=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=Q$(n.toml,n.ptr),r=Z$(n.toml,s,o);super(`Invalid TOML document: ${t}
87
+ `))}return o}var ue,As=L(()=>{ue=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=rx(n.toml,n.ptr),r=ix(n.toml,s,o);super(`Invalid TOML document: ${t}
88
88
 
89
- ${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function ti(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 si(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
- `))l=l&&3;else{if(n<" "&&n!==" "||n==="\x7F")throw new ue("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 m=0;m<d;m++,c++){let p=e.charCodeAt(c+1),f=p>=48&&p<=57?p-48:p>=65&&p<=70?p-65+10:p>=97&&p<=102?p-97+10:-1;if(f<0)throw new ue("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});u=u<<4|f}if(u<0||u>1114111||u>=55296&&u<=57343)throw new ue("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 ue("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new ue("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new ue("unfinished string",{toml:e,ptr:t})}function rf(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=ex.test(e);if(o||tx.test(e)){if(nx.test(e))throw new ue("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new ue("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new ue("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new Zo(e);if(!r.isValid())throw new ue("invalid value",{toml:t,ptr:n});return r}var ex,tx,nx,ac=L(()=>{ic();As();ex=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,tx=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,nx=/^[+-]?0[0-9_]/});function ni(e,t=0,n=e.length){let s=e.indexOf(`
95
- `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function mo(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
93
+ `))l=l&&3;else{if(n<" "&&n!==" "||n==="\x7F")throw new ue("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 ue("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 ue("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 ue("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new ue("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new ue("unfinished string",{toml:e,ptr:t})}function am(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=ax.test(e);if(o||cx.test(e)){if(lx.test(e))throw new ue("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new ue("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new ue("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new er(e);if(!r.isValid())throw new ue("invalid value",{toml:t,ptr:n});return r}var ax,cx,lx,uc=L(()=>{lc();As();ax=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,cx=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,lx=/^[+-]?0[0-9_]/});function oi(e,t=0,n=e.length){let s=e.indexOf(`
95
+ `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function fo(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
96
96
  `)return n;if(s==="\r"&&e[n+1]===`
97
97
  `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new ue("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=mo(e,t)}return t}function af(e,t,n,s,o=!1){if(!s)return t=ni(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=ni(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
99
+ `);)t++;if(s||o!=="#")break;t=fo(e,t)}return t}function cm(e,t,n,s,o=!1){if(!s)return t=oi(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=oi(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 ue("cannot find end of structure",{toml:e,ptr:t})}var si=L(()=>{As();});function sx(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(mo(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function er(e,t,n,s,o){if(s===0)throw new ue("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?lf(e,t,s,o):cf(e,t,s,o);if(n){if(c=$n(e,c),e[c]===",")c++;else if(e[c]!==n)throw new ue("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=ti(e,t);if(n){if(c=$n(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
- `&&e[c]!=="\r")throw new ue("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=af(e,t,",",n),a=sx(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new ue("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++),[rf(a[0],e,t,o),i]}var cc=L(()=>{ac();lc();si();As();});function oi(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new ue("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 ue("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=ti(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=ni(c);if(u>-1)throw new ue("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new ue("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new ue("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(!ox.test(a))throw new ue("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 cf(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new ue("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=mo(e,t);else if(i!==" "&&i!==" "&&i!==`
103
- `&&i!=="\r"){let a,l=o,c=!1,[u,d]=oi(e,t-1);for(let f=0;f<u.length;f++){if(f&&(l=c?l[a]:l[a]={}),a=u[f],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||r.has(l[a])))throw new ue("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 ue("trying to redefine an already defined value",{toml:e,ptr:t});let[m,p]=er(e,d,"}",n-1,s);r.add(m),l[a]=m,t=p}}if(!i)throw new ue("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function lf(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new ue("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=mo(e,t);else if(r!==" "&&r!==" "&&r!==`
104
- `&&r!=="\r"){let i=er(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new ue("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var ox,lc=L(()=>{ac();cc();si();As();ox=/^[a-zA-Z0-9-_]+[ \t]*$/});function uf(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 ho(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=oi(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new ue("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=uf(c[0],s,o,l?2:1);if(!u)throw new ue("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=oi(e,a),c=uf(l[0],r,i,0);if(!c)throw new ue("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=er(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 ue("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=$n(e,a)}return s}var df=L(()=>{lc();cc();si();As();});var pf=L(()=>{});var ri=L(()=>{df();pf();ic();As();});var hf={};Bn(hf,{CONFIG_FILE:()=>ai,loadTomlConfig:()=>uc,mergeEffective:()=>mf,normalizeConfig:()=>ff});async function uc(e,{file:t}={}){let n=t||J(e,ai),s;try{s=await ze(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return ho(s)}catch(o){throw new Error(`Invalid ${ai} at ${n}: ${o&&o.message?o.message:o}`)}}async function rx(e,t){let n;if(Array.isArray(e))n=e;else{let o=Bt(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(Bt(t,r))}return s}async function ff(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await rx(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Bt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Bt(s,String(n.graph_file))),n.graph_files!==void 0){let y=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=y.map(w=>Bt(s,String(w)))}let r=n.corpus||{};r.tier!==void 0&&(o.corpus={tier:r.tier});let i=n.seed||{},a={};i.enabled!==void 0&&(a.enabled=i.enabled),i.limit!==void 0&&(a.limit=i.limit),Object.keys(a).length&&(o.seed=a),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);let l=n.index||{},c={};l.languages!==void 0&&(c.languages=l.languages),l.exclude!==void 0&&(c.exclude=l.exclude),l.secret_exclude!==void 0&&(c.secretExclude=l.secret_exclude),l.history_depth!==void 0&&(c.historyDepth=l.history_depth),l.include_text!==void 0&&(c.includeText=l.include_text),l.include_structure!==void 0&&(c.includeStructure=l.include_structure),l.respect_gitignore!==void 0&&(c.respectGitignore=l.respect_gitignore),l.markdown_sections!==void 0&&(c.markdownSections=l.markdown_sections),l.vue!==void 0&&(c.vue=l.vue),Object.keys(c).length&&(o.index=c);let u=n.tune||{},d={};u.score_gap_k!==void 0&&(d.scoreGapK=u.score_gap_k),u.literal_mention!==void 0&&(d.literalMention=u.literal_mention),u.demote_non_prod!==void 0&&(d.demoteNonProd=u.demote_non_prod),u.call_adjacency!==void 0&&(d.callAdjacency=u.call_adjacency),u.impl_of_interface!==void 0&&(d.implOfInterface=u.impl_of_interface),u.beam_search!==void 0&&(d.beamSearch=u.beam_search),u.beam_width!==void 0&&(d.beamWidth=u.beam_width),u.prose_layers!==void 0&&(d.proseLayers=u.prose_layers);let m=u.expansion||{},p={};m.strategy!==void 0&&(p.strategy=m.strategy),m.nodes!==void 0&&(p.nodes=m.nodes),m.q!==void 0&&(p.q=m.q),m.depth!==void 0&&(p.depth=m.depth),Object.keys(p).length&&(d.expansion=p),Object.keys(d).length&&(o.tune=d);let f=n.telemetry||{};f.enabled!==void 0&&(o.telemetry={enabled:f.enabled});let g=n.memory||{},h={};g.retention_versions!==void 0&&(h.retentionVersions=g.retention_versions),g.backend!==void 0&&(h.backend=g.backend),Object.keys(h).length&&(o.memory=h);let b=[];for(let[y,w]of ix)n[y]&&n[y][w]!==void 0&&b.push(`${y}.${w}`);return o.unwired=b,o}function ii(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:ii(o,r,n)}return n}function mf({args:e={},toml:t=null,defaults:n={}}={}){let s=ii(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?ii(o):{},i=ii(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 ai,ix,ci=L(()=>{St();De();ri();ai="tmct.toml";ix=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var rs={};Bn(rs,{CANONICALISED_FROM_PROP:()=>$c,CAPABLE_OF_PREDICATE:()=>If,CREATED_AT_PROP:()=>Ot,DEFAULT_RETENTION:()=>mc,FACT_CLASS:()=>ss,HAS_A_PREDICATE:()=>Ls,IN_REPLY_TO_PROP:()=>vc,MEMORY_DIR_REL:()=>sr,MEMORY_GRAPH_REL:()=>gc,MEMORY_MANIFEST_REL:()=>Ef,MEMORY_SESSION_CLASS:()=>wc,MULTI_VALUED_PREDICATES:()=>Of,OPERATOR_SOURCE_ID:()=>li,RULE_CLASS:()=>bo,RULE_KIND_ACTION_CONSTRAINT:()=>Rc,RULE_KIND_ACTION_EFFECT:()=>ur,RULE_KIND_ACTION_PRECOND:()=>hi,RULE_KIND_ACTION_SIGNATURE:()=>_c,RULE_KIND_COMPOSE2:()=>cr,RULE_KIND_FILTER:()=>lr,RULE_KIND_PROP:()=>yo,RULE_KIND_RECURSIVE:()=>jc,SAID_IN_SESSION_PROP:()=>yc,SOURCE_CLASS:()=>go,SOURCE_RELIABILITY_PROP:()=>wf,STATED_BY_PROP:()=>Dn,SYLLOGISE_STATE_REL:()=>Sc,UPDATED_AT_PROP:()=>ws,UTTERANCE_CLASS:()=>bc,appendCanonicalisedFromEdges:()=>zx,appendFact:()=>Ux,appendFacts:()=>ar,appendRule:()=>Ac,appendUtterance:()=>Dx,appendUtterances:()=>Af,closeSqliteMemoryStore:()=>$f,createInMemoryStore:()=>pi,createSqliteMemoryStore:()=>vf,emptyMemory:()=>or,factIdForTriple:()=>pe,findContradictions:()=>Lf,findRuleByName:()=>Tc,findRulesByName:()=>Vx,isMemoryOrSqliteHandle:()=>kc,loadMemory:()=>Qt,loadSyllogiseState:()=>jx,normFactPredicate:()=>Mn,normFactTerm:()=>Q,openConfiguredMemoryBackend:()=>os,openMemoryBackend:()=>xf,provSourceClassFor:()=>Cx,provenanceTagToSource:()=>No,readFactRows:()=>Zt,readRuleRows:()=>Cc,removeFacts:()=>Hx,resolveMemoryGraphFile:()=>tr,resolveRelationChase:()=>Ic,resolveRelationChaseReverse:()=>Cf,saveSyllogiseState:()=>_x,snapshotMemory:()=>kx});function or(){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:lx.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function tr(e,t=null){if(wo(e)||Ts(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?J(e,gc):J(e,sr,`graph.v${t}.json`)}function wo(e){return!!e&&typeof e=="object"&&e.backend===xc}function Ts(e){return!!e&&typeof e=="object"&&e.backend===yf}function kc(e){return wo(e)||Ts(e)}function pi(){return{backend:xc,payload:or()}}function px(){if(bf)return;bf=!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 vf(e){px();let{DatabaseSync:t}=await Promise.resolve().then(()=>(of(),sf)),n=new t(e);return n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(ux),{backend:yf,db:n,dbPath:e}}function $f(e){Ts(e)&&e.db.close()}async function xf(e,t){if(t===xc)return{dir:pi(),close:async()=>{}};let n=J(e,".tmct","memory","graph.sqlite"),s=r=>Ml(r).then(()=>!0,()=>!1);!await s(n)&&await s(J(e,gc))&&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 Wn(we(n),{recursive:!0});let o=await vf(n);return{dir:o,close:async()=>$f(o)}}async function os(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(ci(),hf));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return xf(e,n)}function fx(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=mx(e),e.cachedDataVersion=t),Fn(e.cachedPayload)}function mx(e){let t=e.db,n=or(),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 hx(e,t){let n=Fn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function gx(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function bx(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 wx(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,Fn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function yx(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function vx(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function $x(e,t){let n=e.db,s=or(),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=Fn(t.generated_at??s.generated_at),o.memory=Fn(t.memory??s.memory),o.prefixes=Fn(t.prefixes??s.prefixes),o.vocabulary=Fn(t.vocabulary??s.vocabulary),o.classes=Fn(t.classes??s.classes),o.proseIndex=Fn(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 k=JSON.stringify($),x=i.get($.id);if(x&&x.json===k)continue;let v=x?x.ord:l++;c.run($.id,v,$.class??null,$.label??null,k),o&&hx(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&&gx(o,u);let m=n.prepare("SELECT ord FROM relations WHERE prop = ?"),f=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,g=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),h=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 k=h.all($.prop),x=new Map(k.map(S=>[`${S.subject}\0${S.object}`,S])),v=new Set,A=o?bx(o,$.prop):null;for(let S of $.examples||[]){let R=`${S.subject}\0${S.object}`;v.add(R);let M=Object.keys(S).filter(F=>!dx.has(F)),j=M.length?JSON.stringify(Object.fromEntries(M.map(F=>[F,S[F]]))):null,_=x.get(R);_&&(_.subject_label??null)===(S.subjectLabel??null)&&(_.object_label??null)===(S.objectLabel??null)&&(_.extra??null)===(j??null)||(b.run($.prop,S.subject,S.object,S.subjectLabel??null,S.objectLabel??null,j),A&&wx(A,S,M))}for(let S of x.keys()){if(v.has(S))continue;let[R,M]=S.split("\0");y.run($.prop,R,M)}A&&yx(A,v);let T=Number.isFinite($.count)?$.count:($.examples||[]).length,C=m.get($.prop)?.ord??f++;g.run($.prop,C,$.predicate??null,T),A&&(A.predicate=$.predicate??null,A.count=T)}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&&vx(o,w),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,r}}async function kf(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await $r(n,t),await xr(n,e)}async function Ec(e,t){await kf(e,JSON.stringify(t))}async function kx(e,{retentionVersions:t}={}){if(kc(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=tr(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=xx(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??mc}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??mc);let i=r.version,a=tr(e,i);await Wn(we(a),{recursive:!0}),await kf(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await Pl(tr(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await Ec(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Qt(e){if(wo(e))return dc(e.payload);if(Ts(e))return dc(fx(e));let t;try{t=await ze(fc(e),"utf8")}catch(n){if(n?.code==="ENOENT")return or();throw n}return dc(JSON.parse(t))}function dc(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==ss||!Ex.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Xo(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 Sx(e,t){if(wo(e)){e.payload=t;return}if(Ts(e)){$x(e,t);return}await Wn(we(fc(e)),{recursive:!0}),await Ec(fc(e),t)}async function jx(e){if(wo(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Ts(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Sf);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(J(e,Sc),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function _x(e,t){if(wo(e)){e.syllogiseState=structuredClone(t);return}if(Ts(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Sf,JSON.stringify(t));return}let n=J(e,Sc);await Wn(we(n),{recursive:!0}),await Ec(n,t)}function Rx(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===go&&n.set(r.id,r));let o=(e.objectProperties||[]).find(r=>r?.prop===Dn);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 Is(e,t){let n=await Qt(e);Rx(n);let s=await t(n)??n;return Nx(s),Px(s),s.proseIndex=tu(s.individuals),await Sx(e,s),s}function rr(e,t){return e?.attributes?.find(n=>n?.prop===Ot)?.value||t||ui()}function nr(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Ax(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${li}:${e.sessionId}`:li,type:"operator"};case"teach":return{id:e.sessionId?`${pc}:${e.sessionId}`:pc,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:${Yo(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 Cx(e){return Tx[e]||null}function Ix(e,t,n){let s=Ax(t);if(!s)return null;let o=Cs(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=rr(r,t?.createdAt||n),a={id:s.id,label:jf(s.id),class:go,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Ot,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=ir(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function Ox(e){let t=Cs(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===go&&(n[s.id]=s);return n}function Lx(e,t){let n=Cs(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===Dn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function _f(e,t,n=Date.now(),s={}){let o=Lx(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Ot)?.value||"",{score:i,inputs:a}=cu({sourceIds:o,createdAt:r},Ox(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});nr(t,jr,"trustScore",String(i)),nr(t,Gi,"trustInputs",JSON.stringify(a)),nr(t,ws,"updatedAt",new Date(n).toISOString())}function mi(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Ot)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=No(i);if(!a)continue;let l=Ix(e,a,r);l&&di(e,{predicate:"statedBy",prop:Dn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:jf(l)})}_f(e,t,n,s)}function Nx(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===Dn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==ss||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(mi(e,r,o),s=!0);s&&Os(e)}function Px(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=Zt(e),n=new Set;for(let a of Lf(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(!Mx(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=Cs(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(nr(c,wf,"sourceReliability",String(lu(l))),nr(c,ws,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===Dn),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let l=o?o.individualsById.get(a):e.individuals.find(c=>c?.id===a);l&&_f(e,l)}}function ir(e,t){let n=Cs(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 di(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(l=>l?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===Dn?Cs(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||ui()}),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||ui();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 Os(e){let t=[wc,bc,ss,go,bo];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 Fx(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:wc,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Ot,key:"createdAt",value:n||ui()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Rf(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!cx.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=Nn(n),d=`utt:${o}#${c}#${t}`,m=fi(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=Sr({doc:u}),f=e.individuals.find(y=>y?.id===d),g=rr(f,l||c),h={id:d,label:m,class:bc,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:Ot,key:"createdAt",value:g},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};ir(e,h);let b=Fx(e,o,r);if(di(e,{predicate:"saidInSession",prop:yc},{subject:d,object:b,subjectLabel:m,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&di(e,{predicate:"inReplyTo",prop:vc},{subject:d,object:a,subjectLabel:m,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function Dx(e,t){let n;return await Is(e,s=>{n=Rf(s,t),Os(s)}),{id:n}}async function Af(e,t){let n=[];return t?.length?(await Is(e,s=>{for(let o of t)n.push(Rf(s,o));Os(s)}),{ids:n}):{ids:n}}async function zx(e,t){t?.length&&await Is(e,n=>{for(let s of t)di(n,{predicate:"canonicalisedFrom",prop:$c},{subject:s.factId,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}async function Ux(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",quantifier:i="",premiseTrusts:a,ruleConfidence:l}={}){let c=Q(t),u=Mn(n),d=Q(s);if(!c||!u||!d)throw new Error("a fact needs subject, predicate and object");let m=Xo(c,u,d),p=`${c} ${u} ${d}`,f=Sr({doc:p}),g=Nn(i);return await Is(e,async h=>{let b=h.individuals.find(A=>A?.id===m),y=b?.attributes?.find(A=>A?.prop==="mgx:factProvenance")?.value||"",w=[...new Set([...y.split(" | "),Nn(o)].filter(Boolean))],$=rr(b,r),k=b?.attributes?.find(A=>A?.prop==="mgx:factQuantifier")?.value||"",x=g||k,v={id:m,label:fi(p),class:ss,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:Ot,key:"createdAt",value:$},...w.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.join(" | ")}]:[],...f.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:f.join(" ")}]:[],...x?[{prop:"mgx:factQuantifier",key:"quantifier",value:x}]:[]]};await rc(v),ir(h,v),mi(h,h.individuals.find(A=>A?.id===m),void 0,{premiseTrusts:a,ruleConfidence:l}),Os(h)}),{id:m}}function Bx(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 ar(e,t){let n=[],s=0;for(let r of t||[]){let i=Q(r?.subject),a=Mn(r?.predicate),l=Q(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:Xo(i,a,l),s:i,p:a,o:l,text:c,tokens:Sr({doc:c}),provenance:Nn(r?.provenance),createdAt:r?.createdAt||"",quantifier:Nn(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:Bx(r?.justification)})}let o=[];return n.length?(await Is(e,r=>{let i=Cs(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 m=a.get(d.id),p=m?.attributes?.find($=>$?.prop==="mgx:factProvenance")?.value||"",f=[...new Set([...p.split(" | "),d.provenance].filter(Boolean))],g=rr(m,d.createdAt),h=m?.attributes?.find($=>$?.prop==="mgx:factQuantifier")?.value||"",b=d.quantifier||h,y={id:d.id,label:fi(d.text),class:ss,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:Ot,key:"createdAt",value:g},...f.length?[{prop:"mgx:factProvenance",key:"provenance",value:f.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=ir(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)mi(r,a.get(d),void 0,u.get(d));Os(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function Ac(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=Tf[n];if(!i)throw new Error(`a rule kind must be one of ${Wx.join(", ")}, got ${JSON.stringify(n)}`);let a=Q(t);if(!a)throw new Error("a rule needs a name");let l=Gx[n]||new Set,c=i.map(([p])=>Q(s?.[p])),u=i.filter(([p],f)=>!l.has(p)&&!c[f]);if(u.length)throw new Error(`a ${n} rule needs ${u.map(([p])=>p).join(" + ")}`);if(n===ur){let p=c[i.findIndex(([g])=>g==="objectRole")],f=c[i.findIndex(([g])=>g==="value")];if(!p&&!f)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=qx(n,a,c),m=fi(`${a} = ${n}(${c.join(", ")})`);return await Is(e,async p=>{let f=p.individuals.find(w=>w?.id===d),g=f?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",h=[...new Set([...g.split(" | "),Nn(o)].filter(Boolean))],b=rr(f,r),y={id:d,label:m,class:bo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:gi,key:"ruleName",value:a},{prop:yo,key:"ruleKind",value:n},...i.map(([w,$],k)=>({prop:$,key:w,value:c[k],skip:!c[k]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...$})=>$),{prop:Ot,key:"createdAt",value:b},...h.length?[{prop:"mgx:factProvenance",key:"provenance",value:h.join(" | ")}]:[]]};await rc(y),ir(p,y),mi(p,p.individuals.find(w=>w?.id===d)),Os(p)}),{id:d}}function Tc(e,t){let n=Q(t);return(e?.individuals||[]).find(s=>s?.class===bo&&(s.attributes||[]).find(o=>o?.prop===gi)?.value===n)}function Vx(e,t){let n=Q(t),s=o=>(o.attributes||[]).find(r=>r?.prop===yo)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===bo&&(o.attributes||[]).find(r=>r?.prop===gi)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Cc(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==bo)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(yo),r=Tf[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(gi)||"",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 Ic(e,t,n,s,o){let{relationFactsFor:r,renderFactLine:i,factPhrase:a,factTermVariants:l,byTrust:c,rows:u,HAS_PROPERTY_PREDICATE:d,findActionPath:m}=o,p=String(t||"").trim().toLowerCase(),f=l(Q,n),g=l(Q,s),h=r(p).filter(w=>f.has(w.fact.subject)&&g.has(w.fact.object));if(h.length){let w=h.slice().sort(($,k)=>c($.fact,k.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map($=>`${a($)}${$.provenance?` (source: ${$.provenance})`:""}`)]}}let b=Tc(e,p),y=b?.attributes?.find(w=>w.prop===yo)?.value;if(b&&y===cr){let w=b.attributes.find(M=>M.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(M=>M.prop==="mgx:ruleBase2")?.value,k=Q(n),x=Q(s);if(!w||!$||!k||!x)return null;let C=m({entity:k,hopsTaken:0},M=>M.hopsTaken===2&&M.entity===x,M=>{if(M.hopsTaken>=2)return[];let j=M.hopsTaken===0?w:$;return r(j).filter(_=>_.fact.subject===M.entity).map(_=>({action:_,nextState:{entity:_.fact.object,hopsTaken:M.hopsTaken+1}}))},{maxDepth:2,stateKey:M=>`${M.entity}#${M.hopsTaken}`});if(!C)return null;let S=new Set,R=[];for(let M of C.actions){R.push(i(M.fact));for(let j of M.aliasFacts){let _=j.id||`${j.subject}|${j.predicate}|${j.object}`;S.has(_)||(S.add(_),R.push(`${a(j)}${j.provenance?` (source: ${j.provenance})`:""}`))}}return{citation:R}}if(b&&y===lr){let w=b.attributes.find(T=>T.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(T=>T.prop==="mgx:ruleFilterProperty")?.value;if(!w||!$)return null;let k=await Ic(e,w,n,s,o);if(!k)return null;let x=Q(n),v=Q($),A=u.find(T=>T.predicate===d&&T.subject===x&&Q(T.object)===v);return A?{citation:[...k.citation,i(A)]}:null}return null}async function Cf(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:l,rows:c,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,m=String(t||"").trim().toLowerCase(),p=a(Q,n),f=o(m).filter(b=>p.has(b.fact.object));if(f.length){let b=new Map;for(let y of f)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((k,x)=>l(k.fact,x.fact))[0];return{subject:y,citation:[r($.fact),...$.aliasFacts.map(k=>`${i(k)}${k.provenance?` (source: ${k.provenance})`:""}`)]}})}let g=Tc(e,m),h=g?.attributes?.find(b=>b.prop===yo)?.value;if(g&&h===cr){let b=g.attributes.find(v=>v.prop==="mgx:ruleBase1")?.value,y=g.attributes.find(v=>v.prop==="mgx:ruleBase2")?.value,w=Q(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},v=>{if(v.hopsTaken>=2)return[];let A=v.hopsTaken===0?y:b;return o(A).filter(T=>T.fact.object===v.entity).map(T=>({action:T,nextState:{entity:T.fact.subject,hopsTaken:v.hopsTaken+1}}))},{maxDepth:2,stateKey:v=>`${v.entity}#${v.hopsTaken}`}).filter(v=>v.node.hopsTaken===2).map(({node:v,path:A})=>{let T=new Set,C=[];for(let S of A.actions.slice().reverse()){C.push(r(S.fact));for(let R of S.aliasFacts){let M=R.id||`${R.subject}|${R.predicate}|${R.object}`;T.has(M)||(T.add(M),C.push(`${i(R)}${R.provenance?` (source: ${R.provenance})`:""}`))}}return{subject:v.entity,citation:C}})}if(g&&h===lr){let b=g.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=g.attributes.find(x=>x.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await Cf(e,b,n,s),$=Q(y),k=[];for(let x of w){let v=Q(x.subject),A=c.find(T=>T.predicate===u&&T.subject===v&&Q(T.object)===$);A&&k.push({subject:x.subject,citation:[...x.citation,r(A)]})}return k}return[]}function Zt(e){let t=e?.individuals||[],n=new Map(t.filter(i=>i?.class===go).map(i=>[i.id,i])),s=(e?.objectProperties||[]).find(i=>i?.prop===Dn),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!==ss)continue;let a=f=>(i.attributes||[]).find(g=>g?.key===f)?.value||"",l=o.get(i.id)||[],c=l.map(f=>(n.get(f)?.attributes||[]).find(g=>g?.prop==="mgx:sourceType")?.value).filter(Boolean),u=a("justification"),d=[];if(u)for(let f of u.split(" | ")){let g=f.split(" ").filter(Boolean);g.length&&d.push(g)}let m=[],p=new Set;for(let f of d)for(let g of f)p.has(g)||(p.add(g),m.push(g));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(f=>f?.prop===jr)?.value)||0,environments:d,justification:m})}return r}async function Hx(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Is(e,o=>{if(o.individuals=(o.individuals||[]).filter(i=>i?.class===ss&&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}Os(o)}),{removed:s}):{removed:s}}function Lf(e,{floor:t=Kx}={}){let n=Zt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(Of.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 sr,gc,bc,ss,wc,go,bo,yc,vc,ax,Dn,$c,wf,li,pc,cx,gf,lx,fc,xc,yf,ux,dx,bf,Fn,Ef,mc,xx,Ex,Sc,Sf,hc,Cs,fi,ui,jf,Tx,Mx,cr,lr,jc,_c,hi,ur,Rc,Wx,gi,yo,Tf,Gx,qx,Kx,Ls,If,Of,Ke=L(()=>{St();De();qn();cn();cn();Xs();Xs();oc();nf();sr=J(".tmct","memory"),gc=J(sr,"graph.json"),bc="Utterance",ss="Fact",wc="Session",go="Source",bo="Rule",yc="mgx:saidInSession",vc="mgx:inReplyTo",ax="mgx:derivedFrom",Dn="mgx:statedBy",$c="mgx:canonicalisedFrom",wf="mgx:sourceReliability",li="src:operator-chat",pc="src:teach-chat",cx=new Set(["visitor","tmct"]),gf=48,lx=[{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:yc,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:vc,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:Ot,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:ws,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:ax,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:Dn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:$c,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:jr,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:Gi,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:co,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)"}];fc=e=>tr(e),xc="memory",yf="sqlite";ux=`
101
+ `))return r}}throw new ue("cannot find end of structure",{toml:e,ptr:t})}var ri=L(()=>{As();});function ux(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(fo(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function tr(e,t,n,s,o){if(s===0)throw new ue("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?um(e,t,s,o):lm(e,t,s,o);if(n){if(c=$n(e,c),e[c]===",")c++;else if(e[c]!==n)throw new ue("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=si(e,t);if(n){if(c=$n(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
+ `&&e[c]!=="\r")throw new ue("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=cm(e,t,",",n),a=ux(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new ue("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++),[am(a[0],e,t,o),i]}var dc=L(()=>{uc();pc();ri();As();});function ii(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new ue("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 ue("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=si(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=oi(c);if(u>-1)throw new ue("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new ue("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new ue("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(!dx.test(a))throw new ue("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 lm(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new ue("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=fo(e,t);else if(i!==" "&&i!==" "&&i!==`
103
+ `&&i!=="\r"){let a,l=o,c=!1,[u,d]=ii(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 ue("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 ue("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=tr(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new ue("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function um(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new ue("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=fo(e,t);else if(r!==" "&&r!==" "&&r!==`
104
+ `&&r!=="\r"){let i=tr(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new ue("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var dx,pc=L(()=>{uc();dc();ri();As();dx=/^[a-zA-Z0-9-_]+[ \t]*$/});function dm(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 ho(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=ii(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new ue("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=dm(c[0],s,o,l?2:1);if(!u)throw new ue("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=ii(e,a),c=dm(l[0],r,i,0);if(!c)throw new ue("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=tr(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 ue("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=$n(e,a)}return s}var pm=L(()=>{pc();dc();ri();As();});var mm=L(()=>{});var ai=L(()=>{pm();mm();lc();As();});var gm={};Bn(gm,{CONFIG_FILE:()=>li,loadTomlConfig:()=>mc,mergeEffective:()=>hm,normalizeConfig:()=>fm});async function mc(e,{file:t}={}){let n=t||J(e,li),s;try{s=await De(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return ho(s)}catch(o){throw new Error(`Invalid ${li} at ${n}: ${o&&o.message?o.message:o}`)}}async function px(e,t){let n;if(Array.isArray(e))n=e;else{let o=Bt(t,String(e));n=(await De(o,"utf8")).split(`
106
+ `)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(Bt(t,r))}return s}async function fm(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await px(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Bt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Bt(s,String(n.graph_file))),n.graph_files!==void 0){let y=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=y.map(w=>Bt(s,String(w)))}let r=n.corpus||{};r.tier!==void 0&&(o.corpus={tier:r.tier});let i=n.seed||{},a={};i.enabled!==void 0&&(a.enabled=i.enabled),i.limit!==void 0&&(a.limit=i.limit),Object.keys(a).length&&(o.seed=a),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);let l=n.index||{},c={};l.languages!==void 0&&(c.languages=l.languages),l.exclude!==void 0&&(c.exclude=l.exclude),l.secret_exclude!==void 0&&(c.secretExclude=l.secret_exclude),l.history_depth!==void 0&&(c.historyDepth=l.history_depth),l.include_text!==void 0&&(c.includeText=l.include_text),l.include_structure!==void 0&&(c.includeStructure=l.include_structure),l.respect_gitignore!==void 0&&(c.respectGitignore=l.respect_gitignore),l.markdown_sections!==void 0&&(c.markdownSections=l.markdown_sections),l.vue!==void 0&&(c.vue=l.vue),Object.keys(c).length&&(o.index=c);let u=n.tune||{},d={};u.score_gap_k!==void 0&&(d.scoreGapK=u.score_gap_k),u.literal_mention!==void 0&&(d.literalMention=u.literal_mention),u.demote_non_prod!==void 0&&(d.demoteNonProd=u.demote_non_prod),u.call_adjacency!==void 0&&(d.callAdjacency=u.call_adjacency),u.impl_of_interface!==void 0&&(d.implOfInterface=u.impl_of_interface),u.beam_search!==void 0&&(d.beamSearch=u.beam_search),u.beam_width!==void 0&&(d.beamWidth=u.beam_width),u.prose_layers!==void 0&&(d.proseLayers=u.prose_layers);let f=u.expansion||{},p={};f.strategy!==void 0&&(p.strategy=f.strategy),f.nodes!==void 0&&(p.nodes=f.nodes),f.q!==void 0&&(p.q=f.q),f.depth!==void 0&&(p.depth=f.depth),Object.keys(p).length&&(d.expansion=p),Object.keys(d).length&&(o.tune=d);let m=n.telemetry||{};m.enabled!==void 0&&(o.telemetry={enabled:m.enabled});let g=n.memory||{},h={};g.retention_versions!==void 0&&(h.retentionVersions=g.retention_versions),g.backend!==void 0&&(h.backend=g.backend),Object.keys(h).length&&(o.memory=h);let b=[];for(let[y,w]of mx)n[y]&&n[y][w]!==void 0&&b.push(`${y}.${w}`);return o.unwired=b,o}function ci(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:ci(o,r,n)}return n}function hm({args:e={},toml:t=null,defaults:n={}}={}){let s=ci(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?ci(o):{},i=ci(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 li,mx,ui=L(()=>{Et();ze();ai();li="tmct.toml";mx=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var is={};Bn(is,{CANONICALISED_FROM_PROP:()=>Sc,CAPABLE_OF_PREDICATE:()=>Om,CREATED_AT_PROP:()=>Ot,DEFAULT_RETENTION:()=>bc,FACT_CLASS:()=>os,HAS_A_PREDICATE:()=>Ls,IN_REPLY_TO_PROP:()=>kc,MEMORY_DIR_REL:()=>or,MEMORY_GRAPH_REL:()=>yc,MEMORY_MANIFEST_REL:()=>Em,MEMORY_SESSION_CLASS:()=>$c,MULTI_VALUED_PREDICATES:()=>Lm,OPERATOR_SOURCE_ID:()=>di,RULE_CLASS:()=>bo,RULE_KIND_ACTION_CONSTRAINT:()=>Cc,RULE_KIND_ACTION_EFFECT:()=>dr,RULE_KIND_ACTION_PRECOND:()=>bi,RULE_KIND_ACTION_SIGNATURE:()=>Tc,RULE_KIND_COMPOSE2:()=>lr,RULE_KIND_FILTER:()=>ur,RULE_KIND_PROP:()=>yo,RULE_KIND_RECURSIVE:()=>Ac,SAID_IN_SESSION_PROP:()=>xc,SOURCE_CLASS:()=>go,SOURCE_RELIABILITY_PROP:()=>ym,STATED_BY_PROP:()=>zn,SYLLOGISE_STATE_REL:()=>Rc,UPDATED_AT_PROP:()=>ws,UTTERANCE_CLASS:()=>vc,appendCanonicalisedFromEdges:()=>Hx,appendFact:()=>Kx,appendFacts:()=>cr,appendRule:()=>Ic,appendUtterance:()=>Vx,appendUtterances:()=>Tm,closeSqliteMemoryStore:()=>xm,createInMemoryStore:()=>fi,createSqliteMemoryStore:()=>$m,emptyMemory:()=>rr,factIdForTriple:()=>pe,findContradictions:()=>Nm,findRuleByName:()=>Oc,findRulesByName:()=>Zx,isMemoryOrSqliteHandle:()=>jc,loadMemory:()=>Zt,loadSyllogiseState:()=>Ox,normFactPredicate:()=>Mn,normFactTerm:()=>Q,openConfiguredMemoryBackend:()=>rs,openMemoryBackend:()=>km,provSourceClassFor:()=>Fx,provenanceTagToSource:()=>Mo,readFactRows:()=>en,readRuleRows:()=>Lc,removeFacts:()=>ek,resolveMemoryGraphFile:()=>nr,resolveRelationChase:()=>Nc,resolveRelationChaseReverse:()=>Im,saveSyllogiseState:()=>Lx,snapshotMemory:()=>Tx});function rr(){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:gx.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function nr(e,t=null){if(wo(e)||Ts(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?J(e,yc):J(e,or,`graph.v${t}.json`)}function wo(e){return!!e&&typeof e=="object"&&e.backend===Ec}function Ts(e){return!!e&&typeof e=="object"&&e.backend===vm}function jc(e){return wo(e)||Ts(e)}function fi(){return{backend:Ec,payload:rr()}}function yx(){if(wm)return;wm=!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 $m(e){yx();let{DatabaseSync:t}=await Promise.resolve().then(()=>(im(),rm)),n=new t(e);return n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(bx),{backend:vm,db:n,dbPath:e}}function xm(e){Ts(e)&&e.db.close()}async function km(e,t){if(t===Ec)return{dir:fi(),close:async()=>{}};let n=J(e,".tmct","memory","graph.sqlite"),s=r=>zl(r).then(()=>!0,()=>!1);!await s(n)&&await s(J(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 Wn(we(n),{recursive:!0});let o=await $m(n);return{dir:o,close:async()=>xm(o)}}async function rs(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(ui(),gm));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return km(e,n)}function vx(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=$x(e),e.cachedDataVersion=t),Fn(e.cachedPayload)}function $x(e){let t=e.db,n=rr(),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 xx(e,t){let n=Fn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function kx(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function Sx(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 Ex(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,Fn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function jx(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function _x(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function Rx(e,t){let n=e.db,s=rr(),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=Fn(t.generated_at??s.generated_at),o.memory=Fn(t.memory??s.memory),o.prefixes=Fn(t.prefixes??s.prefixes),o.vocabulary=Fn(t.vocabulary??s.vocabulary),o.classes=Fn(t.classes??s.classes),o.proseIndex=Fn(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 v of t.individuals||[]){u.add(v.id);let x=JSON.stringify(v),$=i.get(v.id);if($&&$.json===x)continue;let j=$?$.ord:l++;c.run(v.id,j,v.class??null,v.label??null,x),o&&xx(o,v)}let d=n.prepare("DELETE FROM individuals WHERE id = ?");for(let v of n.prepare("SELECT id FROM individuals").all())u.has(v.id)||d.run(v.id);o&&kx(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,g=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),h=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 v of t.objectProperties||[]){w.add(v.prop);let x=h.all(v.prop),$=new Map(x.map(S=>[`${S.subject}\0${S.object}`,S])),j=new Set,E=o?Sx(o,v.prop):null;for(let S of v.examples||[]){let T=`${S.subject}\0${S.object}`;j.add(T);let N=Object.keys(S).filter(F=>!wx.has(F)),R=N.length?JSON.stringify(Object.fromEntries(N.map(F=>[F,S[F]]))):null,A=$.get(T);A&&(A.subject_label??null)===(S.subjectLabel??null)&&(A.object_label??null)===(S.objectLabel??null)&&(A.extra??null)===(R??null)||(b.run(v.prop,S.subject,S.object,S.subjectLabel??null,S.objectLabel??null,R),E&&Ex(E,S,N))}for(let S of $.keys()){if(j.has(S))continue;let[T,N]=S.split("\0");y.run(v.prop,T,N)}E&&jx(E,j);let _=Number.isFinite(v.count)?v.count:(v.examples||[]).length,C=f.get(v.prop)?.ord??m++;g.run(v.prop,C,v.predicate??null,_),E&&(E.predicate=v.predicate??null,E.count=_)}for(let v of n.prepare("SELECT prop FROM relations").all())w.has(v.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run(v.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run(v.prop));o&&_x(o,w),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,r}}async function Sm(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await xr(n,t),await kr(n,e)}async function _c(e,t){await Sm(e,JSON.stringify(t))}async function Tx(e,{retentionVersions:t}={}){if(jc(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=nr(e),s;try{s=await De(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=Ax(e),r;try{r=JSON.parse(await De(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??bc}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??bc);let i=r.version,a=nr(e,i);await Wn(we(a),{recursive:!0}),await Sm(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await Dl(nr(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await _c(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Zt(e){if(wo(e))return fc(e.payload);if(Ts(e))return fc(vx(e));let t;try{t=await De(gc(e),"utf8")}catch(n){if(n?.code==="ENOENT")return rr();throw n}return fc(JSON.parse(t))}function fc(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==os||!Cx.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Jo(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 Ix(e,t){if(wo(e)){e.payload=t;return}if(Ts(e)){Rx(e,t);return}await Wn(we(gc(e)),{recursive:!0}),await _c(gc(e),t)}async function Ox(e){if(wo(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Ts(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(jm);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await De(J(e,Rc),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function Lx(e,t){if(wo(e)){e.syllogiseState=structuredClone(t);return}if(Ts(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(jm,JSON.stringify(t));return}let n=J(e,Rc);await Wn(we(n),{recursive:!0}),await _c(n,t)}function Nx(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===go&&n.set(r.id,r));let o=(e.objectProperties||[]).find(r=>r?.prop===zn);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[wc]={individualsById:t,sourcesById:n,statedByBySubject:s},e[wc]}async function Is(e,t){let n=await Zt(e);Nx(n);let s=await t(n)??n;return Bx(s),qx(s),s.proseIndex=ou(s.individuals),await Ix(e,s),s}function ir(e,t){return e?.attributes?.find(n=>n?.prop===Ot)?.value||t||pi()}function sr(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function Mx(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${di}:${e.sessionId}`:di,type:"operator"};case"teach":return{id:e.sessionId?`${hc}:${e.sessionId}`:hc,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:${Xo(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 Fx(e){return Px[e]||null}function zx(e,t,n){let s=Mx(t);if(!s)return null;let o=Cs(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=ir(r,t?.createdAt||n),a={id:s.id,label:_m(s.id),class:go,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Ot,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=ar(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function Dx(e){let t=Cs(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===go&&(n[s.id]=s);return n}function Ux(e,t){let n=Cs(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===zn)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function Rm(e,t,n=Date.now(),s={}){let o=Ux(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Ot)?.value||"",{score:i,inputs:a}=du({sourceIds:o,createdAt:r},Dx(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});sr(t,_r,"trustScore",String(i)),sr(t,Vi,"trustInputs",JSON.stringify(a)),sr(t,ws,"updatedAt",new Date(n).toISOString())}function gi(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Ot)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Mo(i);if(!a)continue;let l=zx(e,a,r);l&&mi(e,{predicate:"statedBy",prop:zn},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:_m(l)})}Rm(e,t,n,s)}function Bx(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===zn),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==os||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(gi(e,r,o),s=!0);s&&Os(e)}function qx(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=en(e),n=new Set;for(let a of Nm(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(!Wx(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=Cs(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(sr(c,ym,"sourceReliability",String(pu(l))),sr(c,ws,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===zn),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&&Rm(e,l)}}function ar(e,t){let n=Cs(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 mi(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===zn?Cs(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||pi()}),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||pi();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 Os(e){let t=[$c,vc,os,go,bo];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 Gx(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:$c,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Ot,key:"createdAt",value:n||pi()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Am(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!hx.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=Nn(n),d=`utt:${o}#${c}#${t}`,f=hi(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=jr({doc:u}),m=e.individuals.find(y=>y?.id===d),g=ir(m,l||c),h={id:d,label:f,class:vc,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:Ot,key:"createdAt",value:g},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};ar(e,h);let b=Gx(e,o,r);if(mi(e,{predicate:"saidInSession",prop:xc},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&mi(e,{predicate:"inReplyTo",prop:kc},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function Vx(e,t){let n;return await Is(e,s=>{n=Am(s,t),Os(s)}),{id:n}}async function Tm(e,t){let n=[];return t?.length?(await Is(e,s=>{for(let o of t)n.push(Am(s,o));Os(s)}),{ids:n}):{ids:n}}async function Hx(e,t){t?.length&&await Is(e,n=>{for(let s of t)mi(n,{predicate:"canonicalisedFrom",prop:Sc},{subject:s.factId,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}async function Kx(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",quantifier:i="",premiseTrusts:a,ruleConfidence:l}={}){let c=Q(t),u=Mn(n),d=Q(s);if(!c||!u||!d)throw new Error("a fact needs subject, predicate and object");let f=Jo(c,u,d),p=`${c} ${u} ${d}`,m=jr({doc:p}),g=Nn(i);return await Is(e,async h=>{let b=h.individuals.find(E=>E?.id===f),y=b?.attributes?.find(E=>E?.prop==="mgx:factProvenance")?.value||"",w=[...new Set([...y.split(" | "),Nn(o)].filter(Boolean))],v=ir(b,r),x=b?.attributes?.find(E=>E?.prop==="mgx:factQuantifier")?.value||"",$=g||x,j={id:f,label:hi(p),class:os,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:Ot,key:"createdAt",value:v},...w.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.join(" | ")}]:[],...m.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:m.join(" ")}]:[],...$?[{prop:"mgx:factQuantifier",key:"quantifier",value:$}]:[]]};await cc(j),ar(h,j),gi(h,h.individuals.find(E=>E?.id===f),void 0,{premiseTrusts:a,ruleConfidence:l}),Os(h)}),{id:f}}function Yx(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 cr(e,t){let n=[],s=0;for(let r of t||[]){let i=Q(r?.subject),a=Mn(r?.predicate),l=Q(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:Jo(i,a,l),s:i,p:a,o:l,text:c,tokens:jr({doc:c}),provenance:Nn(r?.provenance),createdAt:r?.createdAt||"",quantifier:Nn(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:Yx(r?.justification)})}let o=[];return n.length?(await Is(e,r=>{let i=Cs(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(v=>v?.prop==="mgx:factProvenance")?.value||"",m=[...new Set([...p.split(" | "),d.provenance].filter(Boolean))],g=ir(f,d.createdAt),h=f?.attributes?.find(v=>v?.prop==="mgx:factQuantifier")?.value||"",b=d.quantifier||h,y={id:d.id,label:hi(d.text),class:os,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:Ot,key:"createdAt",value:g},...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(v=>v.join(" ")).join(" | ")}]:[]]},w=ar(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)gi(r,a.get(d),void 0,u.get(d));Os(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function Ic(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=Cm[n];if(!i)throw new Error(`a rule kind must be one of ${Xx.join(", ")}, got ${JSON.stringify(n)}`);let a=Q(t);if(!a)throw new Error("a rule needs a name");let l=Jx[n]||new Set,c=i.map(([p])=>Q(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===dr){let p=c[i.findIndex(([g])=>g==="objectRole")],m=c[i.findIndex(([g])=>g==="value")];if(!p&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=Qx(n,a,c),f=hi(`${a} = ${n}(${c.join(", ")})`);return await Is(e,async p=>{let m=p.individuals.find(w=>w?.id===d),g=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",h=[...new Set([...g.split(" | "),Nn(o)].filter(Boolean))],b=ir(m,r),y={id:d,label:f,class:bo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:wi,key:"ruleName",value:a},{prop:yo,key:"ruleKind",value:n},...i.map(([w,v],x)=>({prop:v,key:w,value:c[x],skip:!c[x]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...v})=>v),{prop:Ot,key:"createdAt",value:b},...h.length?[{prop:"mgx:factProvenance",key:"provenance",value:h.join(" | ")}]:[]]};await cc(y),ar(p,y),gi(p,p.individuals.find(w=>w?.id===d)),Os(p)}),{id:d}}function Oc(e,t){let n=Q(t);return(e?.individuals||[]).find(s=>s?.class===bo&&(s.attributes||[]).find(o=>o?.prop===wi)?.value===n)}function Zx(e,t){let n=Q(t),s=o=>(o.attributes||[]).find(r=>r?.prop===yo)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===bo&&(o.attributes||[]).find(r=>r?.prop===wi)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function Lc(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==bo)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(yo),r=Cm[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(wi)||"",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 Nc(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(Q,n),g=l(Q,s),h=r(p).filter(w=>m.has(w.fact.subject)&&g.has(w.fact.object));if(h.length){let w=h.slice().sort((v,x)=>c(v.fact,x.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map(v=>`${a(v)}${v.provenance?` (source: ${v.provenance})`:""}`)]}}let b=Oc(e,p),y=b?.attributes?.find(w=>w.prop===yo)?.value;if(b&&y===lr){let w=b.attributes.find(N=>N.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(N=>N.prop==="mgx:ruleBase2")?.value,x=Q(n),$=Q(s);if(!w||!v||!x||!$)return null;let C=f({entity:x,hopsTaken:0},N=>N.hopsTaken===2&&N.entity===$,N=>{if(N.hopsTaken>=2)return[];let R=N.hopsTaken===0?w:v;return r(R).filter(A=>A.fact.subject===N.entity).map(A=>({action:A,nextState:{entity:A.fact.object,hopsTaken:N.hopsTaken+1}}))},{maxDepth:2,stateKey:N=>`${N.entity}#${N.hopsTaken}`});if(!C)return null;let S=new Set,T=[];for(let N of C.actions){T.push(i(N.fact));for(let R of N.aliasFacts){let A=R.id||`${R.subject}|${R.predicate}|${R.object}`;S.has(A)||(S.add(A),T.push(`${a(R)}${R.provenance?` (source: ${R.provenance})`:""}`))}}return{citation:T}}if(b&&y===ur){let w=b.attributes.find(_=>_.prop==="mgx:ruleBase1")?.value,v=b.attributes.find(_=>_.prop==="mgx:ruleFilterProperty")?.value;if(!w||!v)return null;let x=await Nc(e,w,n,s,o);if(!x)return null;let $=Q(n),j=Q(v),E=u.find(_=>_.predicate===d&&_.subject===$&&Q(_.object)===j);return E?{citation:[...x.citation,i(E)]}:null}return null}async function Im(e,t,n,s){let{relationFactsFor:o,renderFactLine:r,factPhrase:i,factTermVariants:a,byTrust:l,rows:c,HAS_PROPERTY_PREDICATE:u,findReachableSet:d}=s,f=String(t||"").trim().toLowerCase(),p=a(Q,n),m=o(f).filter(b=>p.has(b.fact.object));if(m.length){let b=new Map;for(let y of m)b.has(y.fact.subject)||b.set(y.fact.subject,[]),b.get(y.fact.subject).push(y);return[...b.entries()].map(([y,w])=>{let v=w.slice().sort((x,$)=>l(x.fact,$.fact))[0];return{subject:y,citation:[r(v.fact),...v.aliasFacts.map(x=>`${i(x)}${x.provenance?` (source: ${x.provenance})`:""}`)]}})}let g=Oc(e,f),h=g?.attributes?.find(b=>b.prop===yo)?.value;if(g&&h===lr){let b=g.attributes.find(j=>j.prop==="mgx:ruleBase1")?.value,y=g.attributes.find(j=>j.prop==="mgx:ruleBase2")?.value,w=Q(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},j=>{if(j.hopsTaken>=2)return[];let E=j.hopsTaken===0?y:b;return o(E).filter(_=>_.fact.object===j.entity).map(_=>({action:_,nextState:{entity:_.fact.subject,hopsTaken:j.hopsTaken+1}}))},{maxDepth:2,stateKey:j=>`${j.entity}#${j.hopsTaken}`}).filter(j=>j.node.hopsTaken===2).map(({node:j,path:E})=>{let _=new Set,C=[];for(let S of E.actions.slice().reverse()){C.push(r(S.fact));for(let T of S.aliasFacts){let N=T.id||`${T.subject}|${T.predicate}|${T.object}`;_.has(N)||(_.add(N),C.push(`${i(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{subject:j.entity,citation:C}})}if(g&&h===ur){let b=g.attributes.find($=>$.prop==="mgx:ruleBase1")?.value,y=g.attributes.find($=>$.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await Im(e,b,n,s),v=Q(y),x=[];for(let $ of w){let j=Q($.subject),E=c.find(_=>_.predicate===u&&_.subject===j&&Q(_.object)===v);E&&x.push({subject:$.subject,citation:[...$.citation,r(E)]})}return x}return[]}function en(e){let t=e?.individuals||[],n=new Map(t.filter(i=>i?.class===go).map(i=>[i.id,i])),s=(e?.objectProperties||[]).find(i=>i?.prop===zn),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!==os)continue;let a=m=>(i.attributes||[]).find(g=>g?.key===m)?.value||"",l=o.get(i.id)||[],c=l.map(m=>(n.get(m)?.attributes||[]).find(g=>g?.prop==="mgx:sourceType")?.value).filter(Boolean),u=a("justification"),d=[];if(u)for(let m of u.split(" | ")){let g=m.split(" ").filter(Boolean);g.length&&d.push(g)}let f=[],p=new Set;for(let m of d)for(let g of m)p.has(g)||(p.add(g),f.push(g));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===_r)?.value)||0,environments:d,justification:f})}return r}async function ek(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Is(e,o=>{if(o.individuals=(o.individuals||[]).filter(i=>i?.class===os&&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}Os(o)}),{removed:s}):{removed:s}}function Nm(e,{floor:t=tk}={}){let n=en(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(Lm.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 or,yc,vc,os,$c,go,bo,xc,kc,fx,zn,Sc,ym,di,hc,hx,bm,gx,gc,Ec,vm,bx,wx,wm,Fn,Em,bc,Ax,Cx,Rc,jm,wc,Cs,hi,pi,_m,Px,Wx,lr,ur,Ac,Tc,bi,dr,Cc,Xx,wi,yo,Cm,Jx,Qx,tk,Ls,Om,Lm,Ke=L(()=>{Et();ze();Vn();cn();cn();Xs();Xs();ac();om();or=J(".tmct","memory"),yc=J(or,"graph.json"),vc="Utterance",os="Fact",$c="Session",go="Source",bo="Rule",xc="mgx:saidInSession",kc="mgx:inReplyTo",fx="mgx:derivedFrom",zn="mgx:statedBy",Sc="mgx:canonicalisedFrom",ym="mgx:sourceReliability",di="src:operator-chat",hc="src:teach-chat",hx=new Set(["visitor","tmct"]),bm=48,gx=[{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:xc,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:kc,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:Ot,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:ws,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:fx,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:zn,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:Sc,predicate:"canonicalisedFrom",note:"subPropertyOf derivedFrom: a canonical Fact cleaned from a raw Block/Source, never replacing it"},{prop:"mgx:sourceType",note:"a Source's kind: operator | teach | provider | corpus | corpusWeak | reference | referenceLive | extracted | optimisticExtract | web | entailed (the trust-prior key)"},{prop:"mgx:sourceUrl",note:"a web Source's URL"},{prop:"mgx:sourceRule",note:"an entailed Source's rule id"},{prop:"mgx:sourceReliability",note:"actor-level (session-scoped) trust nudge in [0.5,1.5], neutral 1.0 when absent \u2014 materialised by recomputeSourceReliability from a session's asserted-vs-contradicted track record (memory/trust.mjs's sessionReliabilityFrom); folds into computeTrust's per-source prior"},{prop:_r,note:"materialised trust cache in [0,1] \u2014 pure function of a fact's Sources + createdAt (memory/trust.mjs); invalidated when a statedBy edge is added"},{prop:Vi,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:co,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=>nr(e),Ec="memory",vm="sqlite";bx=`
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
- `,dx=new Set(["subject","object","subjectLabel","objectLabel"]),bf=!1;Fn=e=>e===void 0?e:structuredClone(e);Ef=J(sr,"manifest.json"),mc=5,xx=e=>J(e,Ef);Ex=/^fact:[0-9a-f]{8}$/;Sc=J(sr,"syllogise-state.json"),Sf="syllogiseState";hc=Symbol("mutateMemory lookup index");Cs=e=>e?.[hc]||null;fi=e=>e.length>gf?e.slice(0,gf-1)+"\u2026":e,ui=()=>new Date().toISOString();jf=e=>String(e).replace(/^src:/,""),Tx=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"}});Mx=e=>typeof e=="string"&&(e.startsWith(`${li}:`)||e.startsWith(`${pc}:`));cr="compose2",lr="filter",jc="recursive",_c="action-signature",hi="action-precond",ur="action-effect",Rc="action-constraint",Wx=Object.freeze([cr,lr,jc,_c,hi,ur,Rc]),gi="mgx:ruleName",yo="mgx:ruleKind",Tf={[cr]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[lr]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[jc]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[_c]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[hi]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[ur]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[Rc]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},Gx={[hi]:new Set(["value","negate"]),[ur]:new Set(["objectRole","value"])},qx=(e,t,n)=>`rule:${Yo([e,t,...n].join("\0"))}`;Kx=.5,Ls="mgx:hasA",If="mgx:capableOf",Of=new Set([Ls,If].flatMap(e=>[e,po(e)]))});async function xn(e){try{let{dir:t,close:n}=await os(we(we(e.graphFile)));try{return Zt(await Qt(t))}finally{await n()}}catch{return[]}}function Mf(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 bi(e,t){let n=Q(t),s=e.filter(a=>Nf.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,Ns),i=o.length>Ns?`
113
+ `,wx=new Set(["subject","object","subjectLabel","objectLabel"]),wm=!1;Fn=e=>e===void 0?e:structuredClone(e);Em=J(or,"manifest.json"),bc=5,Ax=e=>J(e,Em);Cx=/^fact:[0-9a-f]{8}$/;Rc=J(or,"syllogise-state.json"),jm="syllogiseState";wc=Symbol("mutateMemory lookup index");Cs=e=>e?.[wc]||null;hi=e=>e.length>bm?e.slice(0,bm-1)+"\u2026":e,pi=()=>new Date().toISOString();_m=e=>String(e).replace(/^src:/,""),Px=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"}});Wx=e=>typeof e=="string"&&(e.startsWith(`${di}:`)||e.startsWith(`${hc}:`));lr="compose2",ur="filter",Ac="recursive",Tc="action-signature",bi="action-precond",dr="action-effect",Cc="action-constraint",Xx=Object.freeze([lr,ur,Ac,Tc,bi,dr,Cc]),wi="mgx:ruleName",yo="mgx:ruleKind",Cm={[lr]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[ur]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[Ac]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[Tc]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[bi]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[dr]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[Cc]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},Jx={[bi]:new Set(["value","negate"]),[dr]:new Set(["objectRole","value"])},Qx=(e,t,n)=>`rule:${Xo([e,t,...n].join("\0"))}`;tk=.5,Ls="mgx:hasA",Om="mgx:capableOf",Lm=new Set([Ls,Om].flatMap(e=>[e,po(e)]))});async function xn(e){try{let{dir:t,close:n}=await rs(we(we(e.graphFile)));try{return en(await Zt(t))}finally{await n()}}catch{return[]}}function Pm(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 yi(e,t){let n=Q(t),s=e.filter(a=>Mm.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,Ns),i=o.length>Ns?`
114
114
  \u2026+${o.length-Ns} 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
- (${Mf(s)})`}function wi(e,t){let n=Q(t),s=e.filter(a=>Nf.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,Ns).join(", ")}`),r.length){let a=r.length>Ns?`, +${r.length-Ns} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,Ns).join(", ")}${a}`)}return i.push(`(${Mf(s)})`),i.join(`
118
- `)}var Nf,Ns,vo=L(()=>{De();Ke();Nf=new Set(["rdfs:subClassOf","rdf:type"]),Ns=40});async function Pf(e,{graph:t,svc:n,config:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=Gt(n.graph,o);if(r)return ta(t,r,{candidates:i});let a=wi(await xn(s),o);if(a)return a;wt(n,o,"symbol")}var Ff=L(()=>{Te();vo();He()});async function Df(e,{graph:t,svc:n,repoRoot:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=wt(n,o,"symbol"),a=yt(r);if(!a)throw new Ie(`"${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 Ln({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Ko})}catch(h){throw h instanceof Ie?h:new Ie(`could not read ${a.path} (${h?.code||h?.message||h})`)}let{text:c,truncated:u}=l,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,m=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,p=u?`
119
- \u2026 (truncated to ${Ko} lines; full span ${d})`:"",f=i.length?`
120
- (other matches: ${i.map(h=>h.label).join(", ")})`:"",g=oa(t,r);return`${m}
117
+ (${Pm(s)})`}function vi(e,t){let n=Q(t),s=e.filter(a=>Mm.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,Ns).join(", ")}`),r.length){let a=r.length>Ns?`, +${r.length-Ns} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,Ns).join(", ")}${a}`)}return i.push(`(${Pm(s)})`),i.join(`
118
+ `)}var Mm,Ns,vo=L(()=>{ze();Ke();Mm=new Set(["rdfs:subClassOf","rdf:type"]),Ns=40});async function Fm(e,{graph:t,svc:n,config:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=qt(n.graph,o);if(r)return sa(t,r,{candidates:i});let a=vi(await xn(s),o);if(a)return a;wt(n,o,"symbol")}var zm=L(()=>{Te();vo();He()});async function Dm(e,{graph:t,svc:n,repoRoot:s}){let o=ot(e,"symbol"),{match:r,candidates:i}=wt(n,o,"symbol"),a=yt(r);if(!a)throw new Ie(`"${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 Ln({readFile:De,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Yo})}catch(h){throw h instanceof Ie?h:new Ie(`could not read ${a.path} (${h?.code||h?.message||h})`)}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 ${Yo} lines; full span ${d})`:"",m=i.length?`
120
+ (other matches: ${i.map(h=>h.label).join(", ")})`:"",g=ia(t,r);return`${f}
121
121
  ${c}${p}${g?`
122
- ${g}`:""}${f}`}var zf=L(()=>{St();It();qr();Te();He()});var Uf,Bf=L(()=>{Te();He();Uf=Xe(Pu)});function Wf(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"module"),"module");return ju(t,s)}var Gf=L(()=>{Te();He()});async function qf(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Ie("query is required");let r=Nu(t,s,{kind:o,decorator:String(e?.decorator||"").trim(),name:String(e?.name||"").trim()});if(!o&&/^no module matches/.test(r)){let i=wi(await xn(n),s);if(i)return i}return r}var Vf=L(()=>{It();Te();vo()});async function Hf(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=Gt(n.graph,o);if(r)return Mu(t,r);let i=bi(await xn(s),o);if(i)return i;wt(n,o,"class")}var Kf=L(()=>{Te();vo();He()});async function Yf(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=Gt(n.graph,o);if(r)return Fu(t,r);let i=bi(await xn(s),o);if(i)return i;wt(n,o,"class")}var Xf=L(()=>{Te();vo();He()});function Jx(e,{conceptBase:t="concept:",relationMap:n=Xx}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=h=>{r.has(h)||r.set(h,h)},a=h=>{let b=h;for(;r.get(b)!==b;)b=r.get(b);for(;r.get(h)!==b;){let y=r.get(h);r.set(h,b),h=y}return b},l=(h,b)=>{let y=a(h),w=a(b);y!==w&&(y<w?r.set(w,y):r.set(y,w))},c=[];for(let h of e){let b=h.predicate;if(!s.has(b)&&!o.has(b))continue;let y=Q(h.subject),w=Q(h.object);!y||!w||(i(y),i(w),s.has(b)?l(y,w):c.push({s:y,o:w}))}let u=h=>t+h.replace(/ /g,"_"),d=new Map;for(let h of r.keys()){let b=a(h);d.has(b)||d.set(b,new Set),d.get(b).add(h)}let m=[];for(let[h,b]of d){let y=[...b].sort();m.push({id:u(h),prefLabel:h,altLabels:y.filter(w=>w!==h)})}m.sort((h,b)=>h.id<b.id?-1:h.id>b.id?1:0);let p=new Set,f=[];for(let{s:h,o:b}of c){let y=u(a(h)),w=u(a(b));if(y===w)continue;let $=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has($)||(p.add($),f.push({subject:y,object:w}))}return f.sort((h,b)=>`${h.subject}${h.object}`<`${b.subject}${b.object}`?-1:1),{concepts:m,related:f,conceptIdForTerm:h=>{let b=Q(h);return r.has(b)?u(a(b)):null},namespace:Yx}}function Oc(e,t,n={}){let s=Jx(e,n),o=s.conceptIdForTerm(t);if(!o)return null;let r=new Map(s.concepts.map(u=>[u.id,u])),i=r.get(o),a=Q(t),l=[i.prefLabel,...i.altLabels].filter(u=>u!==a),c=s.related.filter(u=>u.subject===o||u.object===o).map(u=>r.get(u.subject===o?u.object:u.subject)).filter(Boolean);return{conceptId:o,prefLabel:i.prefLabel,altLabels:i.altLabels,synonyms:l,related:c}}var Yx,Xx,Lc=L(()=>{cn();Yx="http://www.w3.org/2004/02/skos/core#",Xx={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function Nc(e,{config:t}){let n=ot(e,"term"),s=Oc(await xn(t),n);if(!s)throw new Ie(`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 Jf=L(()=>{It();Lc();vo();He();Nc.ownsGraphLoad=!0});function Qf(e,{graph:t}){return Du(t,{pkg:String(e?.package||"").trim()})}var Zf=L(()=>{Te()});function em(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"module"),"module");return id(t,s)}var tm=L(()=>{Te();He()});function nm(e,{graph:t}){return Bu(t)}var sm=L(()=>{Te()});function om(e,{graph:t}){let{content:n,tmct_ask:s}=Zn(t,ot(e,"query"));return`${n}
122
+ ${g}`:""}${m}`}var Um=L(()=>{Et();It();Hr();Te();He()});var Bm,Wm=L(()=>{Te();He();Bm=Xe(Du)});function qm(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"module"),"module");return Au(t,s)}var Gm=L(()=>{Te();He()});async function Vm(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Ie("query is required");let r=Fu(t,s,{kind:o,decorator:String(e?.decorator||"").trim(),name:String(e?.name||"").trim()});if(!o&&/^no module matches/.test(r)){let i=vi(await xn(n),s);if(i)return i}return r}var Hm=L(()=>{It();Te();vo()});async function Km(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=qt(n.graph,o);if(r)return zu(t,r);let i=yi(await xn(s),o);if(i)return i;wt(n,o,"class")}var Ym=L(()=>{Te();vo();He()});async function Xm(e,{graph:t,svc:n,config:s}){let o=ot(e,"class"),{match:r}=qt(n.graph,o);if(r)return Uu(t,r);let i=yi(await xn(s),o);if(i)return i;wt(n,o,"class")}var Jm=L(()=>{Te();vo();He()});function ok(e,{conceptBase:t="concept:",relationMap:n=sk}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=h=>{r.has(h)||r.set(h,h)},a=h=>{let b=h;for(;r.get(b)!==b;)b=r.get(b);for(;r.get(h)!==b;){let y=r.get(h);r.set(h,b),h=y}return b},l=(h,b)=>{let y=a(h),w=a(b);y!==w&&(y<w?r.set(w,y):r.set(y,w))},c=[];for(let h of e){let b=h.predicate;if(!s.has(b)&&!o.has(b))continue;let y=Q(h.subject),w=Q(h.object);!y||!w||(i(y),i(w),s.has(b)?l(y,w):c.push({s:y,o:w}))}let u=h=>t+h.replace(/ /g,"_"),d=new Map;for(let h of r.keys()){let b=a(h);d.has(b)||d.set(b,new Set),d.get(b).add(h)}let f=[];for(let[h,b]of d){let y=[...b].sort();f.push({id:u(h),prefLabel:h,altLabels:y.filter(w=>w!==h)})}f.sort((h,b)=>h.id<b.id?-1:h.id>b.id?1:0);let p=new Set,m=[];for(let{s:h,o:b}of c){let y=u(a(h)),w=u(a(b));if(y===w)continue;let v=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has(v)||(p.add(v),m.push({subject:y,object:w}))}return m.sort((h,b)=>`${h.subject}${h.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:m,conceptIdForTerm:h=>{let b=Q(h);return r.has(b)?u(a(b)):null},namespace:nk}}function Mc(e,t,n={}){let s=ok(e,n),o=s.conceptIdForTerm(t);if(!o)return null;let r=new Map(s.concepts.map(u=>[u.id,u])),i=r.get(o),a=Q(t),l=[i.prefLabel,...i.altLabels].filter(u=>u!==a),c=s.related.filter(u=>u.subject===o||u.object===o).map(u=>r.get(u.subject===o?u.object:u.subject)).filter(Boolean);return{conceptId:o,prefLabel:i.prefLabel,altLabels:i.altLabels,synonyms:l,related:c}}var nk,sk,Pc=L(()=>{cn();nk="http://www.w3.org/2004/02/skos/core#",sk={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function Fc(e,{config:t}){let n=ot(e,"term"),s=Mc(await xn(t),n);if(!s)throw new Ie(`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 Qm=L(()=>{It();Pc();vo();He();Fc.ownsGraphLoad=!0});function Zm(e,{graph:t}){return Bu(t,{pkg:String(e?.package||"").trim()})}var ef=L(()=>{Te()});function tf(e,{graph:t,svc:n}){let{match:s}=wt(n,ot(e,"module"),"module");return ld(t,s)}var nf=L(()=>{Te();He()});function sf(e,{graph:t}){return Gu(t)}var of=L(()=>{Te()});function rf(e,{graph:t}){let{content:n,tmct_ask:s}=es(t,ot(e,"query"));return`${n}
124
124
 
125
125
  ---tmct_ask---
126
- ${JSON.stringify(s,null,2)}`}var rm=L(()=>{It();es();He()});var im,am=L(()=>{Te();He();im=Xe(Uu)});var cm,lm=L(()=>{Te();He();cm=Xe(Wu)});var um,dm=L(()=>{Te();He();um=Xe(Xu)});var pm,fm=L(()=>{Te();He();pm=Xe(Qu)});var mm,hm=L(()=>{Te();He();mm=Xe(Zu)});var gm,bm=L(()=>{Te();He();gm=Xe(qu)});var wm,ym=L(()=>{Te();He();wm=Xe(Vu)});var vm,$m=L(()=>{Te();He();vm=Xe(Ku)});var xm,km=L(()=>{Te();He();xm=Xe(rd)});function Qx(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function Zx(e){let t=(e||[]).map(Qx);return t.map(n=>JSON.stringify(n)).join(`
126
+ ${JSON.stringify(s,null,2)}`}var af=L(()=>{It();ts();He()});var cf,lf=L(()=>{Te();He();cf=Xe(qu)});var uf,df=L(()=>{Te();He();uf=Xe(Vu)});var pf,mf=L(()=>{Te();He();pf=Xe(Zu)});var ff,hf=L(()=>{Te();He();ff=Xe(td)});var gf,bf=L(()=>{Te();He();gf=Xe(nd)});var wf,yf=L(()=>{Te();He();wf=Xe(Ku)});var vf,$f=L(()=>{Te();He();vf=Xe(Yu)});var xf,kf=L(()=>{Te();He();xf=Xe(Ju)});var Sf,Ef=L(()=>{Te();He();Sf=Xe(cd)});function rk(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function ik(e){let t=(e||[]).map(rk);return t.map(n=>JSON.stringify(n)).join(`
127
127
  `)+(t.length?`
128
- `:"")}function Em(e){return Zx(Zt(e))}var Sm=L(()=>{Ke()});async function Mc(e,{config:t}){let{dir:n,close:s}=await os(we(we(t.graphFile)));try{return Em(await Qt(n))||"(the memory store holds no facts to export)"}finally{await s()}}var jm=L(()=>{Sm();De();Ke();Mc.ownsGraphLoad=!0});async function Pc(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 os(we(we(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 jf(e){return ik(en(e))}var _f=L(()=>{Ke()});async function zc(e,{config:t}){let{dir:n,close:s}=await rs(we(we(t.graphFile)));try{return jf(await Zt(n))||"(the memory store holds no facts to export)"}finally{await s()}}var Rf=L(()=>{_f();ze();Ke();zc.ownsGraphLoad=!0});async function Dc(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 rs(we(we(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 _m=L(()=>{De();Ke();Pc.ownsGraphLoad=!0});var ek,Rm=L(()=>{Ua();Op();Ff();zf();Bf();Gf();Vf();Kf();Xf();Jf();Zf();tm();sm();rm();am();lm();dm();fm();hm();bm();ym();$m();km();jm();_m();ek=Object.freeze({tmct_context:za,tmct_context_more:Ip,tmct_describe:Pf,tmct_snippet:Df,tmct_signature:Uf,tmct_impact:Wf,tmct_search:qf,tmct_members:Hf,tmct_subclasses:Yf,tmct_related:Nc,tmct_architecture:Qf,tmct_exports:em,tmct_untested:nm,tmct_ask:om,tmct_tests_for:im,tmct_history:cm,tmct_file_history:um,tmct_method_history:pm,tmct_class_history:mm,tmct_callers:gm,tmct_callees:wm,tmct_calls:vm,tmct_cochanges:xm,tmct_export:Mc,tmct_ingest:Pc})});var yi,Fc=L(()=>{yi=()=>{}});var Dc=L(()=>{});var vi,zc=L(()=>{vi=()=>({relations:[],constructions:[]})});var Am,Tm=L(()=>{St();De();Xl();It();Lo();es();Kr();Yr();Rm();Uo();Fc();Dc();zc();Yr();Ua();Fr(void 0);yi(vi);Am=Yl.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var it,lC,uC,dC,pC,fC,mC,hC,gC,bC,wC,yC,vC,$C,xC,kC,EC,tk,SC,jC,Cm=L(()=>{it=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},lC=it("createRequire"),uC=it("readFileSync"),dC=it("access"),pC=it("readFile"),fC=it("writeFile"),mC=it("appendFile"),hC=it("mkdir"),gC=it("mkdtemp"),bC=it("rename"),wC=it("unlink"),yC=it("rm"),vC=it("stat"),$C=it("copyFile"),xC=it("readdir"),kC=it("createReadStream"),EC=it("createWriteStream"),tk=it("randomBytes"),SC=it("spawnSync"),jC=it("createInterface")});var $i=L(()=>{Cm()});var at,TC,CC,IC,OC,LC,NC,MC,PC,FC,DC,zC,UC,BC,WC,GC,qC,Ft,VC,HC,KC,is=L(()=>{at=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},TC=at("createRequire"),CC=at("readFileSync"),IC=at("access"),OC=at("readFile"),LC=at("writeFile"),NC=at("appendFile"),MC=at("mkdir"),PC=at("mkdtemp"),FC=at("rename"),DC=at("unlink"),zC=at("rm"),UC=at("stat"),BC=at("copyFile"),WC=at("readdir"),GC=at("createReadStream"),qC=at("createWriteStream"),Ft=e=>String(e),VC=at("randomBytes"),HC=at("spawnSync"),KC=at("createInterface")});var nk,Im,ZC,eI,tI,Bc=L(()=>{St();is();De();nk={},Im=J(we(Ft(nk.url)),"..","..",".."),ZC=J(Im,"data","templates","responses.jsonl"),eI=J(Im,"data","phrasebook","software-phrases.txt"),tI=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function ok(e,t={}){let n=sk.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function rk(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>ok(s,t))):1}function Je(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:rk(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 sk,Om=L(()=>{sk=/^src:corpus:(.+)$/});var ct,oI,$o,rI,iI,aI,cI,lI,uI,dI,pI,fI,mI,hI,gI,ik,ak,bI,wI,yI,Ms=L(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},oI=ct("createRequire"),$o=ct("readFileSync"),rI=ct("access"),iI=ct("readFile"),aI=ct("writeFile"),cI=ct("appendFile"),lI=ct("mkdir"),uI=ct("mkdtemp"),dI=ct("rename"),pI=ct("unlink"),fI=ct("rm"),mI=ct("stat"),hI=ct("copyFile"),gI=ct("readdir"),ik=ct("createReadStream"),ak=ct("createWriteStream"),bI=ct("randomBytes"),wI=ct("spawnSync"),yI=ct("createInterface")});function Lm(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 dk(e=lk){let t=ho($o(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function Wc(){if(xi===null)try{xi=dk()}catch{xi=[]}return xi}var pk,ck,lk,uk,_I,xi,Gc=L(()=>{Ms();is();De();ri();Bc();pk={},ck=we(Ft(pk.url)),lk=J(ck,"..","..","data","templates","grammar-rules.toml"),uk=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),_I=Object.freeze(new Set(uk.filter(e=>e!=="prose")));xi=null});var lt,Nm,AI,TI,CI,II,OI,LI,NI,MI,PI,FI,DI,zI,UI,BI,WI,GI,qI,VI,Mm=L(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Nm=lt("createRequire"),AI=lt("readFileSync"),TI=lt("access"),CI=lt("readFile"),II=lt("writeFile"),OI=lt("appendFile"),LI=lt("mkdir"),NI=lt("mkdtemp"),MI=lt("rename"),PI=lt("unlink"),FI=lt("rm"),DI=lt("stat"),zI=lt("copyFile"),UI=lt("readdir"),BI=lt("createReadStream"),WI=lt("createWriteStream"),GI=lt("randomBytes"),qI=lt("spawnSync"),VI=lt("createInterface")});function fk(){if(dr!==void 0)return dr;try{let e=Pm?Pm():mk();dr=e&&e.winkNLP&&e.model?e:null}catch{dr=null}return dr}function mk(){let e=Nm(hk.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function qc(){if(xo!==void 0)return xo;let e=fk();if(!e)return xo=null,null;try{xo=e.winkNLP(e.model)}catch{xo=null}return xo}var hk,Pm,dr,xo,Vc=L(()=>{Mm();hk={}});var Fm=L(()=>{Vc()});var zm,Dm=L(()=>{zm={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 wk(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 Um(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!yk.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(!vk.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 Ps(e,t=bk){if(!e&&Hc.has(t))return Hc.get(t);let n=zm,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Um(s,n),e?(Um(s,e),s):(Hc.set(t,s),s)}function pr(e,t,n={}){return $k(e,t,n)[0]??null}function $k(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 wk(s))l(e.nouns.get(c));return i}var bk,eO,tO,nO,yk,vk,Hc,ko=L(()=>{Dm();bk="tmct:",eO=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),tO=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),nO=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});yk=new Set(["data","object"]),vk=new Set(["subclass","data"]);Hc=new Map});var Bm=L(()=>{});var aO,cO,lO,xk,uO,dO,pO,Wm=L(()=>{es();Te();aO=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),cO=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),lO=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`]}),xk=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"}),uO=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"]}),dO=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"}}),pO=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`}]})});var ki=L(()=>{cn();ko();Wm()});var Ei,Si=L(()=>{Ei=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var Ek,SO,Gm=L(()=>{Ms();Si();is();De();ki();Ek={},SO=J(we(Ft(Ek.url)),"..","..","..")});var qm=L(()=>{cn();ko();ki()});var Sk,Kc=L(()=>{cn();ko();Sk=Object.freeze({fanoutLimit:5,depthLimit:1,minIntervalMs:2e3})});var Yc=L(()=>{cn()});var jk,HO,Vm=L(()=>{Ms();Si();is();De();Yc();cn();jk={},HO=J(we(Ft(jk.url)),"..","..","..")});var YO,XO,JO,Hm=L(()=>{YO=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),XO=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"})}),JO=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 Xc(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 Ym(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 Km(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 Jc(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,Jc(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function _k(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 Rk(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=Km(e,n),c=Km(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 g of l){let h=s.get(g);if(h){for(let b of c)if(h.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(g=>c.has(g));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=g=>Jc(g,n,o,new Set),m=u[0],p=d(m);for(let g of u){let h=d(g);(h>p||h===p&&g<m)&&(m=g,p=h)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:m};if(a){let g=a.get(m);return typeof g=="number"&&g<r?{distinct:!0,reason:"low-ic",lcs:m}:{distinct:!1,reason:"shared-lineage",lcs:m}}return 2*p/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:m}:{distinct:!1,reason:"shared-lineage",lcs:m}}function Xm(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||Xc(t),c=_k(s),u=new Map,d=new Map(a.map(y=>[y,y])),m=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let $=m(y),k=m(w);$!==k&&d.set($<k?k:$,$<k?$:k)},f=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let $=Rk(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});f.push({a:a[y],b:a[w],...$}),$.distinct||p(a[y],a[w])}let g=new Map;for(let y of a){let w=m(y);g.has(w)||g.set(w,[]),g.get(w).push(y)}let h=y=>Jc(y,l,u,new Set),b=[...g.values()].map(y=>{let w=[...y].sort(),$=w[0],k=h($);for(let x of w){let v=h(x);v>k&&(k=v,$=x)}return{objects:w,label:$}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:f}}var Jm=L(()=>{Pt()});function Qc(e){return typeof e=="string"&&Ak.test(e)}function Qm(e){return!!e&&typeof e=="object"&&Fs(e.s)}function Zc(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Qc(e.world)&&Fs(e.subject)&&Fs(e.predicate)&&Fs(e.object)}function el(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Qc(e.world)||!Fs(e.name)||!Ck.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(Fs)}function tl(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Qc(e.world)&&Fs(e.opening)}function Zm(e){return Zc(e)||el(e)||tl(e)}function eh(e){let t=e||[],n=t.filter(c=>c.predicate===Ik).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 m=d,p=1;for(;s.has(m);)p+=1,m=`${d}-${p}`;s.add(m),l.push(a(m,"rdf:type",d)),l.push(a(m,"rdf:type","portable")),l.push(a(m,"mgx:located-in",u))}return l.length?[...t,...l]:t}var Ak,Tk,Ck,Fs,Ik,fr=L(()=>{Ak=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Tk=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),Ck=new Set(Tk),Fs=e=>typeof e=="string"&&e.trim()!=="";Ik="mgx:default-contains"});var Ok,Lk,Nk,Mk,Pk,Fk,Dk,zk,Uk,uL,Bk,th,dL,pL,nh=L(()=>{ko();Do();Ok="subClassOf",Lk="typeAssertion",Nk="relation",Mk="someValuesFrom",Pk="cardinality",Fk="disjointWith",Dk="possessive",zk="adjective",Uk="capability",uL=Object.freeze([Ok,Lk,Nk,Mk,Pk,Fk,Dk,zk,Uk]),Bk=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine"]),th=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"]]),dL=Math.max(...[...th.keys()].map(e=>e.split(" ").length)),pL=[...new Set([...Bk,...[...th.keys()].map(e=>e.split(" ")[0])])]});var Ds=L(()=>{});var nl=L(()=>{Te();es();Ds()});function kt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:as.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 Wk,as,_e,hr,gt,Rt,en,Gk,qk,xt,Vk,Hk,sh,yL,vL,$L,oh=L(()=>{Wk=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),as=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),_e=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),hr=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:as.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Rt=()=>Object.freeze({type:as.Precondition,pred:hr.graphLoaded}),en=(e,t)=>Object.freeze({type:as.Precondition,pred:hr.resolves,param:e,as:t}),Gk=e=>Object.freeze({type:as.Precondition,pred:hr.anyPresent,params:Object.freeze([...e])}),qk=()=>Object.freeze({type:as.Precondition,pred:hr.memoryFacts}),xt=(e,t=null)=>Object.freeze({type:as.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});Vk=Object.freeze([kt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[gt("query",_e.Query,{required:!1,note:"required unless a kind filter is given"}),gt("kind",_e.Kind,{required:!1}),gt("name",_e.Query,{required:!1}),gt("decorator",_e.Query,{required:!1})],preconditions:[Rt(),Gk(["query","kind"])],add:[xt("matches","query")]}),kt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("description","symbol")]}),kt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("signature","symbol")]}),kt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[gt("module",_e.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Rt(),en("module",_e.Symbol)],add:[xt("impact","module")]}),kt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[gt("class",_e.Class,{arg:"class"})],preconditions:[Rt(),en("class",_e.Class)],add:[xt("members","class")]}),kt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[gt("class",_e.Class,{arg:"class"})],preconditions:[Rt(),en("class",_e.Class)],add:[xt("subclasses","class")]}),kt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[gt("module",_e.Module)],preconditions:[Rt(),en("module",_e.Module)],add:[xt("exports","module")]}),kt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("callers","symbol")]}),kt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("callees","symbol")]}),kt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("calls","symbol")]}),kt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("tests","symbol")]}),kt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Rt()],add:[xt("untested",null)]}),kt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("history","symbol")]}),kt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),en("symbol",_e.Symbol)],add:[xt("cochanges","symbol")]}),kt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[gt("package",_e.Package,{required:!1})],preconditions:[Rt()],add:[xt("architecture","package")]}),kt({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[gt("term",_e.Query,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[qk()],add:[xt("related","term")]})]),Hk=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),sh=Vk,yL=Hk(sh),vL=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"}),$L=Object.freeze({prefixes:Wk,vocab:as,kinds:_e,precond:hr,get capabilities(){return sh}})});var rh=L(()=>{oh()});var ih=L(()=>{Xs()});function Yk(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||J(Kk,"corpus","worlds")}function ah(e){try{return Ei($o(e))}catch{return null}}function ch(e){if(sl.has(e))return sl.get(e);let t=null,n=ah(J(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return sl.set(e,t),t}function Xk(e,t){let n=ch(e);if(!n)return null;let s=n[String(t??"")];if(!Qm(s))return null;let o=`${e}\0${t}`;if(ol.has(o))return ol.get(o);let r=null,i=ah(J(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(!Zm(d)||d.world!==t)continue;Zc(d)?a.push(d):el(d)?l.push(d):tl(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:eh(a),rules:l,meta:c})}return ol.set(o,r),r}var Qk,Kk,sl,ol,Jk,LL,rl=L(()=>{Ms();Si();is();De();fr();Qk={},Kk=J(we(Ft(Qk.url)),"..","..","..");sl=new Map,ol=new Map;Jk=e=>({list:async()=>{let t=ch(e());return t?Object.keys(t).sort():null},load:async t=>Xk(e(),t)}),LL=Jk(()=>Yk())});var WL,lh=L(()=>{St();De();qn();Mo();Xs();Ke();WL=J(".tmct","memory","blocks")});var uh=L(()=>{Ds()});var ph=L(()=>{qn();Mo();Ds()});var il=L(()=>{qn();Mo();Ds()});var fh=L(()=>{il();qn();vs();Ds()});var mh=L(()=>{});var hh=L(()=>{uh();ph();il();fh();mh();Ds()});var gh=L(()=>{lh();Ke();Kr();Gc();hh();nl()});var wh=L(()=>{fr();nh();nl();rh();ih();rl();Ke();gh()});var ji,XN,JN,QN,Eo=L(()=>{ji=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})}),XN=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"}),JN=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),QN=Object.freeze({max_depth:"maxDepth"})});var sE,yh,t0,al=L(()=>{Eo();sE=Object.freeze({x:2,y:2}),yh=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})}),t0=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 vh=L(()=>{});var $h=L(()=>{al();vs();Ke();fr();vh();cn();Eo()});var T0,xh=L(()=>{al();$h();fr();rl();Ke();Eo();T0=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,I0,O0,L0,N0,M0,P0,F0,D0,z0,U0,B0,W0,G0,q0,V0,H0,K0,Y0,X0,kh=L(()=>{ut=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},I0=ut("createRequire"),O0=ut("readFileSync"),L0=ut("access"),N0=ut("readFile"),M0=ut("writeFile"),P0=ut("appendFile"),F0=ut("mkdir"),D0=ut("mkdtemp"),z0=ut("rename"),U0=ut("unlink"),B0=ut("rm"),W0=ut("stat"),G0=ut("copyFile"),q0=ut("readdir"),V0=ut("createReadStream"),H0=ut("createWriteStream"),K0=ut("randomBytes"),Y0=ut("spawnSync"),X0=ut("createInterface")});var dt,Q0,Z0,e1,t1,n1,s1,o1,r1,i1,a1,c1,l1,u1,d1,p1,f1,m1,h1,lE,Eh=L(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Q0=dt("createRequire"),Z0=dt("readFileSync"),e1=dt("access"),t1=dt("readFile"),n1=dt("writeFile"),s1=dt("appendFile"),o1=dt("mkdir"),r1=dt("mkdtemp"),i1=dt("rename"),a1=dt("unlink"),c1=dt("rm"),l1=dt("stat"),u1=dt("copyFile"),d1=dt("readdir"),p1=dt("createReadStream"),f1=dt("createWriteStream"),m1=dt("randomBytes"),h1=dt("spawnSync"),lE=dt("createInterface")});var pt,b1,w1,y1,v1,$1,x1,k1,E1,S1,j1,_1,R1,A1,T1,C1,I1,O1,Sh,L1,cl=L(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},b1=pt("createRequire"),w1=pt("readFileSync"),y1=pt("access"),v1=pt("readFile"),$1=pt("writeFile"),x1=pt("appendFile"),k1=pt("mkdir"),E1=pt("mkdtemp"),S1=pt("rename"),j1=pt("unlink"),_1=pt("rm"),R1=pt("stat"),A1=pt("copyFile"),T1=pt("readdir"),C1=pt("createReadStream"),I1=pt("createWriteStream"),O1=pt("randomBytes"),Sh=pt("spawnSync"),L1=pt("createInterface")});var jh=L(()=>{cl();De();St();De();ci();It()});var _h=L(()=>{});var uE,Rh=L(()=>{St();De();Ke();_h();uE=J(".tmct","sessions")});var Th=L(()=>{St();De();$i()});var ft,tM,nM,sM,oM,rM,iM,aM,cM,lM,uM,dM,pM,fM,mM,hM,gM,bM,wM,dE,Ch=L(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},tM=ft("createRequire"),nM=ft("readFileSync"),sM=ft("access"),oM=ft("readFile"),rM=ft("writeFile"),iM=ft("appendFile"),aM=ft("mkdir"),cM=ft("mkdtemp"),lM=ft("rename"),uM=ft("unlink"),dM=ft("rm"),pM=ft("stat"),fM=ft("copyFile"),mM=ft("readdir"),hM=ft("createReadStream"),gM=ft("createWriteStream"),bM=ft("randomBytes"),wM=ft("spawnSync"),dE=ft("createInterface")});var fE,So,Ih,pE,Oh,_M,zn,RM,_i,AM,Lh=L(()=>{Ms();St();Ch();is();De();ri();Ke();fE={},So=J(we(Ft(fE.url)),"..","..",".."),Ih=J(So,"corpus","conceptnet","slice.jsonl"),pE=J(So,"src","adapters","corpus","conceptnet-map.toml"),Oh=J(So,"corpus","seon","concepts.jsonl"),_M=J(So,"corpus","seon","definitions.jsonl"),zn=J(So,"corpus","tier2"),RM=J(zn,"manifest.json"),_i=J(So,"corpus","wordnet"),AM=J(_i,"manifest.json")});function gE(){return{seon:{kind:"corpus",active:!1,corpusPath:Oh,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:Ih,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:hE},human:{kind:"corpus",active:!0,corpusPath:J(zn,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:J(zn,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:J(zn,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:J(zn,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:J(zn,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:J(zn,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:J(zn,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:J(_i,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:J(_i,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:J(mE,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var bE,mE,zM,hE,UM,Nh=L(()=>{De();St();is();ci();Lh();bE={},mE=J(we(Ft(bE.url)),"..","..","corpus","namenet"),zM=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),hE=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];UM=Object.freeze(gE())});var Mh=L(()=>{});var Ph=L(()=>{De();Ms();St();kh();Eh();cl();It();jh();Te();Rh();$i();Th();Lo();Nh();ll();Eo();Kc();Mh()});var Fh={};Bn(Fh,{proseLemma:()=>wE});function wE(){if(zs!==void 0)return zs;try{let e=qc();if(!e)return zs=null,zs;let t=e.its,n=new Map;zs=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{zs=null}return zs}var zs,Dh=L(()=>{Vc()});function vl(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 ${Ri(e.entityType)}`;if(t==="list")return`list/enumerate ${Ri(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${Ri(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 vl(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&&tn[o]?tn[o]:`filter/traverse ${Ri(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&&tn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?tn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function Sl(e){let t=new Map;for(let n of e)t.has(Bh(n))||t.set(Bh(n),n);return t}function pl(e,t=br){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),Us(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function fl(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function _l(e){let t=String(e||"").trim();return/[a-z]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(ses|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 Ls;if(t==="can")return"mgx:capableOf";try{let{proseLemma:n}=await Promise.resolve().then(()=>(Dh(),Fh)),s=n(),o=s?s(t):t;return o==="have"?Ls:Mn(`mgx:${o}`)}catch{return Mn(`mgx:${t}`)}}function AE(e,t){let n=String(t||"").match(RE);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function gr(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(es(),_p)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function IE(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 lg(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(_o[e])return _o[e];let t=String(e||""),n=Jp(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",lg(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:(${Rl})-([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?`${IE(i[1])}${i[2]?` ${i[2]}`:""}`:e}function wl(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function LE(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of OE)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 ne(e){let t=e.provenance?` (source: ${e.provenance})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${At(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${At(e)}${t}`:e.provenance.includes("corpus:")?`${At(e)}${t}`:e.provenance.includes("reference:")?`${At(e)}${t}`:`i learned: ${At(e)}${t}`}function qh(e,t,n){let s=ne(e);if(!Un.has(e.predicate)||!n.has(e.subject))return s;let o=Ym(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(NE);return i?s.slice(0,i.index)+r+i[0]:s+r}function Vh(e,t,n,{indent:s=""}={}){let o=t.filter(k=>k.predicate===br).map(k=>[k.subject,k.object]),r=Xc(o),i=e.map(k=>`${s}${qh(k,r,n)}`),a=e.filter(k=>Un.has(k.predicate)&&n.has(k.subject)),l=[...new Set(a.map(k=>k.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(k=>k.predicate==="owl:disjointWith").map(k=>[k.subject,k.object]),{split:u,clusters:d}=Xm(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let m=a[0].subject,p=new Map;for(let k of d)for(let x of k.objects)p.set(x,k);let f=e.filter(k=>!(Un.has(k.predicate)&&n.has(k.subject))),g=[],h=[],b=0,y=k=>{let x=qh(k,r,n);return b<Re?(b+=1,`${s}${x}`):(h.push(x),null)};for(let k of d){let x=a.filter(v=>p.get(v.object)===k).map(y).filter(Boolean);x.length&&g.push(`${s}${m}, the ${k.label}:
130
+ `)}`:c}finally{await i()}}var Af=L(()=>{ze();Ke();Dc.ownsGraphLoad=!0});var ak,Tf=L(()=>{qa();Np();zm();Um();Wm();Gm();Hm();Ym();Jm();Qm();ef();nf();of();af();lf();df();mf();hf();bf();yf();$f();kf();Ef();Rf();Af();ak=Object.freeze({tmct_context:Wa,tmct_context_more:Lp,tmct_describe:Fm,tmct_snippet:Dm,tmct_signature:Bm,tmct_impact:qm,tmct_search:Vm,tmct_members:Km,tmct_subclasses:Xm,tmct_related:Fc,tmct_architecture:Zm,tmct_exports:tf,tmct_untested:sf,tmct_ask:rf,tmct_tests_for:cf,tmct_history:uf,tmct_file_history:pf,tmct_method_history:ff,tmct_class_history:gf,tmct_callers:wf,tmct_callees:vf,tmct_calls:xf,tmct_cochanges:Sf,tmct_export:zc,tmct_ingest:Dc})});var $i,Uc=L(()=>{$i=()=>{}});var Bc=L(()=>{});var xi,Wc=L(()=>{xi=()=>({relations:[],constructions:[]})});var Cf,If=L(()=>{Et();ze();Zl();It();No();ts();Xr();Jr();Tf();Bo();Uc();Bc();Wc();Jr();qa();Dr(void 0);$i(xi);Cf=Ql.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var it,gC,bC,wC,yC,vC,$C,xC,kC,SC,EC,jC,_C,RC,AC,TC,CC,ck,IC,OC,Of=L(()=>{it=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},gC=it("createRequire"),bC=it("readFileSync"),wC=it("access"),yC=it("readFile"),vC=it("writeFile"),$C=it("appendFile"),xC=it("mkdir"),kC=it("mkdtemp"),SC=it("rename"),EC=it("unlink"),jC=it("rm"),_C=it("stat"),RC=it("copyFile"),AC=it("readdir"),TC=it("createReadStream"),CC=it("createWriteStream"),ck=it("randomBytes"),IC=it("spawnSync"),OC=it("createInterface")});var ki=L(()=>{Of()});var at,PC,FC,zC,DC,UC,BC,WC,qC,GC,VC,HC,KC,YC,XC,JC,QC,Ft,ZC,eI,tI,as=L(()=>{at=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},PC=at("createRequire"),FC=at("readFileSync"),zC=at("access"),DC=at("readFile"),UC=at("writeFile"),BC=at("appendFile"),WC=at("mkdir"),qC=at("mkdtemp"),GC=at("rename"),VC=at("unlink"),HC=at("rm"),KC=at("stat"),YC=at("copyFile"),XC=at("readdir"),JC=at("createReadStream"),QC=at("createWriteStream"),Ft=e=>String(e),ZC=at("randomBytes"),eI=at("spawnSync"),tI=at("createInterface")});var lk,Lf,iI,aI,cI,Gc=L(()=>{Et();as();ze();lk={},Lf=J(we(Ft(lk.url)),"..","..",".."),iI=J(Lf,"data","templates","responses.jsonl"),aI=J(Lf,"data","phrasebook","software-phrases.txt"),cI=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function dk(e,t={}){let n=uk.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function pk(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>dk(s,t))):1}function Je(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:pk(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 uk,Nf=L(()=>{uk=/^src:corpus:(.+)$/});var ct,dI,$o,pI,mI,fI,hI,gI,bI,wI,yI,vI,$I,xI,kI,mk,fk,SI,EI,jI,Ms=L(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},dI=ct("createRequire"),$o=ct("readFileSync"),pI=ct("access"),mI=ct("readFile"),fI=ct("writeFile"),hI=ct("appendFile"),gI=ct("mkdir"),bI=ct("mkdtemp"),wI=ct("rename"),yI=ct("unlink"),vI=ct("rm"),$I=ct("stat"),xI=ct("copyFile"),kI=ct("readdir"),mk=ct("createReadStream"),fk=ct("createWriteStream"),SI=ct("randomBytes"),EI=ct("spawnSync"),jI=ct("createInterface")});function Mf(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 wk(e=gk){let t=ho($o(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function Vc(){if(Si===null)try{Si=wk()}catch{Si=[]}return Si}var yk,hk,gk,bk,LI,Si,Hc=L(()=>{Ms();as();ze();ai();Gc();yk={},hk=we(Ft(yk.url)),gk=J(hk,"..","..","data","templates","grammar-rules.toml"),bk=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),LI=Object.freeze(new Set(bk.filter(e=>e!=="prose")));Si=null});var lt,Pf,MI,PI,FI,zI,DI,UI,BI,WI,qI,GI,VI,HI,KI,YI,XI,JI,QI,ZI,Ff=L(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Pf=lt("createRequire"),MI=lt("readFileSync"),PI=lt("access"),FI=lt("readFile"),zI=lt("writeFile"),DI=lt("appendFile"),UI=lt("mkdir"),BI=lt("mkdtemp"),WI=lt("rename"),qI=lt("unlink"),GI=lt("rm"),VI=lt("stat"),HI=lt("copyFile"),KI=lt("readdir"),YI=lt("createReadStream"),XI=lt("createWriteStream"),JI=lt("randomBytes"),QI=lt("spawnSync"),ZI=lt("createInterface")});function vk(){if(pr!==void 0)return pr;try{let e=zf?zf():$k();pr=e&&e.winkNLP&&e.model?e:null}catch{pr=null}return pr}function $k(){let e=Pf(xk.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function Kc(){if(xo!==void 0)return xo;let e=vk();if(!e)return xo=null,null;try{xo=e.winkNLP(e.model)}catch{xo=null}return xo}var xk,zf,pr,xo,Yc=L(()=>{Ff();xk={}});var Df=L(()=>{Yc()});var Bf,Uf=L(()=>{Bf={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 Ek(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 Wf(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!jk.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(!_k.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 Ps(e,t=Sk){if(!e&&Xc.has(t))return Xc.get(t);let n=Bf,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Wf(s,n),e?(Wf(s,e),s):(Xc.set(t,s),s)}function mr(e,t,n={}){return Rk(e,t,n)[0]??null}function Rk(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 Ek(s))l(e.nouns.get(c));return i}var Sk,aO,cO,lO,jk,_k,Xc,ko=L(()=>{Uf();Sk="tmct:",aO=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),cO=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),lO=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});jk=new Set(["data","object"]),_k=new Set(["subclass","data"]);Xc=new Map});var qf=L(()=>{});var fO,hO,gO,Ak,bO,wO,yO,Gf=L(()=>{ts();Te();fO=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),hO=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),gO=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`]}),Ak=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"}),bO=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"]}),wO=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"}}),yO=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`}]})});var Ei=L(()=>{cn();ko();Gf()});var ji,_i=L(()=>{ji=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var Ck,IO,Vf=L(()=>{Ms();_i();as();ze();Ei();Ck={},IO=J(we(Ft(Ck.url)),"..","..","..")});var Hf=L(()=>{cn();ko();Ei()});var Ik,Jc=L(()=>{cn();ko();Ik=Object.freeze({fanoutLimit:5,depthLimit:1,minIntervalMs:2e3})});var Qc=L(()=>{cn()});var Ok,eL,Kf=L(()=>{Ms();_i();as();ze();Qc();cn();Ok={},eL=J(we(Ft(Ok.url)),"..","..","..")});var nL,sL,oL,Yf=L(()=>{nL=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),sL=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"})}),oL=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 Zc(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 Jf(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 Xf(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 el(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,el(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function Lk(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 Nk(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=Xf(e,n),c=Xf(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 g of l){let h=s.get(g);if(h){for(let b of c)if(h.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(g=>c.has(g));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=g=>el(g,n,o,new Set),f=u[0],p=d(f);for(let g of u){let h=d(g);(h>p||h===p&&g<f)&&(f=g,p=h)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let g=a.get(f);return typeof g=="number"&&g<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 Qf(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||Zc(t),c=Lk(s),u=new Map,d=new Map(a.map(y=>[y,y])),f=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let v=f(y),x=f(w);v!==x&&d.set(v<x?x:v,v<x?v:x)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let v=Nk(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...v}),v.distinct||p(a[y],a[w])}let g=new Map;for(let y of a){let w=f(y);g.has(w)||g.set(w,[]),g.get(w).push(y)}let h=y=>el(y,l,u,new Set),b=[...g.values()].map(y=>{let w=[...y].sort(),v=w[0],x=h(v);for(let $ of w){let j=h($);j>x&&(x=j,v=$)}return{objects:w,label:v}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:m}}var Zf=L(()=>{Pt()});function tl(e){return typeof e=="string"&&Mk.test(e)}function eh(e){return!!e&&typeof e=="object"&&Fs(e.s)}function nl(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&tl(e.world)&&Fs(e.subject)&&Fs(e.predicate)&&Fs(e.object)}function sl(e){if(!e||typeof e!="object"||e.kind!=="rule"||!tl(e.world)||!Fs(e.name)||!Fk.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(Fs)}function ol(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&tl(e.world)&&Fs(e.opening)}function th(e){return nl(e)||sl(e)||ol(e)}function nh(e){let t=e||[],n=t.filter(c=>c.predicate===zk).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 Mk,Pk,Fk,Fs,zk,fr=L(()=>{Mk=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Pk=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),Fk=new Set(Pk),Fs=e=>typeof e=="string"&&e.trim()!=="";zk="mgx:default-contains"});var Dk,Uk,Bk,Wk,qk,Gk,Vk,Hk,Kk,bL,Yk,sh,wL,yL,oh=L(()=>{ko();Do();Dk="subClassOf",Uk="typeAssertion",Bk="relation",Wk="someValuesFrom",qk="cardinality",Gk="disjointWith",Vk="possessive",Hk="adjective",Kk="capability",bL=Object.freeze([Dk,Uk,Bk,Wk,qk,Gk,Vk,Hk,Kk]),Yk=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine"]),sh=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"]]),wL=Math.max(...[...sh.keys()].map(e=>e.split(" ").length)),yL=[...new Set([...Yk,...[...sh.keys()].map(e=>e.split(" ")[0])])]});var zs=L(()=>{});var rl=L(()=>{Te();ts();zs()});function kt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:cs.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 Xk,cs,_e,gr,gt,Rt,tn,Jk,Qk,xt,Zk,eS,rh,jL,_L,RL,ih=L(()=>{Xk=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),cs=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),_e=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),gr=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:cs.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Rt=()=>Object.freeze({type:cs.Precondition,pred:gr.graphLoaded}),tn=(e,t)=>Object.freeze({type:cs.Precondition,pred:gr.resolves,param:e,as:t}),Jk=e=>Object.freeze({type:cs.Precondition,pred:gr.anyPresent,params:Object.freeze([...e])}),Qk=()=>Object.freeze({type:cs.Precondition,pred:gr.memoryFacts}),xt=(e,t=null)=>Object.freeze({type:cs.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});Zk=Object.freeze([kt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[gt("query",_e.Query,{required:!1,note:"required unless a kind filter is given"}),gt("kind",_e.Kind,{required:!1}),gt("name",_e.Query,{required:!1}),gt("decorator",_e.Query,{required:!1})],preconditions:[Rt(),Jk(["query","kind"])],add:[xt("matches","query")]}),kt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("description","symbol")]}),kt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("signature","symbol")]}),kt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[gt("module",_e.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Rt(),tn("module",_e.Symbol)],add:[xt("impact","module")]}),kt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[gt("class",_e.Class,{arg:"class"})],preconditions:[Rt(),tn("class",_e.Class)],add:[xt("members","class")]}),kt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[gt("class",_e.Class,{arg:"class"})],preconditions:[Rt(),tn("class",_e.Class)],add:[xt("subclasses","class")]}),kt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[gt("module",_e.Module)],preconditions:[Rt(),tn("module",_e.Module)],add:[xt("exports","module")]}),kt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("callers","symbol")]}),kt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("callees","symbol")]}),kt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("calls","symbol")]}),kt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("tests","symbol")]}),kt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Rt()],add:[xt("untested",null)]}),kt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("history","symbol")]}),kt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[gt("symbol",_e.Symbol)],preconditions:[Rt(),tn("symbol",_e.Symbol)],add:[xt("cochanges","symbol")]}),kt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[gt("package",_e.Package,{required:!1})],preconditions:[Rt()],add:[xt("architecture","package")]}),kt({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[gt("term",_e.Query,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[Qk()],add:[xt("related","term")]})]),eS=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),rh=Zk,jL=eS(rh),_L=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"}),RL=Object.freeze({prefixes:Xk,vocab:cs,kinds:_e,precond:gr,get capabilities(){return rh}})});var ah=L(()=>{ih()});var ch=L(()=>{Xs()});function nS(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||J(tS,"corpus","worlds")}function lh(e){try{return ji($o(e))}catch{return null}}function uh(e){if(il.has(e))return il.get(e);let t=null,n=lh(J(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return il.set(e,t),t}function sS(e,t){let n=uh(e);if(!n)return null;let s=n[String(t??"")];if(!eh(s))return null;let o=`${e}\0${t}`;if(al.has(o))return al.get(o);let r=null,i=lh(J(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(!th(d)||d.world!==t)continue;nl(d)?a.push(d):sl(d)?l.push(d):ol(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:nh(a),rules:l,meta:c})}return al.set(o,r),r}var rS,tS,il,al,oS,UL,cl=L(()=>{Ms();_i();as();ze();fr();rS={},tS=J(we(Ft(rS.url)),"..","..","..");il=new Map,al=new Map;oS=e=>({list:async()=>{let t=uh(e());return t?Object.keys(t).sort():null},load:async t=>sS(e(),t)}),UL=oS(()=>nS())});var XL,dh=L(()=>{Et();ze();Vn();Po();Xs();Ke();XL=J(".tmct","memory","blocks")});var ph=L(()=>{zs()});var fh=L(()=>{Vn();Po();zs()});var ll=L(()=>{Vn();Po();zs()});var hh=L(()=>{ll();Vn();vs();zs()});var gh=L(()=>{});var bh=L(()=>{ph();fh();ll();hh();gh();zs()});var wh=L(()=>{dh();Ke();Xr();Hc();bh();rl()});var vh=L(()=>{fr();oh();rl();ah();ch();cl();Ke();wh()});var Ri,s0,o0,r0,So=L(()=>{Ri=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})}),s0=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"}),o0=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),r0=Object.freeze({max_depth:"maxDepth"})});var uS,$h,c0,ul=L(()=>{So();uS=Object.freeze({x:2,y:2}),$h=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})}),c0=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 xh=L(()=>{});var kh=L(()=>{ul();vs();Ke();fr();xh();cn();So()});var P0,Sh=L(()=>{ul();kh();fr();cl();Ke();So();P0=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,z0,D0,U0,B0,W0,q0,G0,V0,H0,K0,Y0,X0,J0,Q0,Z0,e1,t1,n1,s1,Eh=L(()=>{ut=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},z0=ut("createRequire"),D0=ut("readFileSync"),U0=ut("access"),B0=ut("readFile"),W0=ut("writeFile"),q0=ut("appendFile"),G0=ut("mkdir"),V0=ut("mkdtemp"),H0=ut("rename"),K0=ut("unlink"),Y0=ut("rm"),X0=ut("stat"),J0=ut("copyFile"),Q0=ut("readdir"),Z0=ut("createReadStream"),e1=ut("createWriteStream"),t1=ut("randomBytes"),n1=ut("spawnSync"),s1=ut("createInterface")});var dt,r1,i1,a1,c1,l1,u1,d1,p1,m1,f1,h1,g1,b1,w1,y1,v1,$1,x1,gS,jh=L(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},r1=dt("createRequire"),i1=dt("readFileSync"),a1=dt("access"),c1=dt("readFile"),l1=dt("writeFile"),u1=dt("appendFile"),d1=dt("mkdir"),p1=dt("mkdtemp"),m1=dt("rename"),f1=dt("unlink"),h1=dt("rm"),g1=dt("stat"),b1=dt("copyFile"),w1=dt("readdir"),y1=dt("createReadStream"),v1=dt("createWriteStream"),$1=dt("randomBytes"),x1=dt("spawnSync"),gS=dt("createInterface")});var pt,S1,E1,j1,_1,R1,A1,T1,C1,I1,O1,L1,N1,M1,P1,F1,z1,D1,_h,U1,dl=L(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},S1=pt("createRequire"),E1=pt("readFileSync"),j1=pt("access"),_1=pt("readFile"),R1=pt("writeFile"),A1=pt("appendFile"),T1=pt("mkdir"),C1=pt("mkdtemp"),I1=pt("rename"),O1=pt("unlink"),L1=pt("rm"),N1=pt("stat"),M1=pt("copyFile"),P1=pt("readdir"),F1=pt("createReadStream"),z1=pt("createWriteStream"),D1=pt("randomBytes"),_h=pt("spawnSync"),U1=pt("createInterface")});var Rh=L(()=>{dl();ze();Et();ze();ui();It()});var Ah=L(()=>{});var bS,Th=L(()=>{Et();ze();Ke();Ah();bS=J(".tmct","sessions")});var Ih=L(()=>{Et();ze();ki()});var mt,cM,lM,uM,dM,pM,mM,fM,hM,gM,bM,wM,yM,vM,$M,xM,kM,SM,EM,wS,Oh=L(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},cM=mt("createRequire"),lM=mt("readFileSync"),uM=mt("access"),dM=mt("readFile"),pM=mt("writeFile"),mM=mt("appendFile"),fM=mt("mkdir"),hM=mt("mkdtemp"),gM=mt("rename"),bM=mt("unlink"),wM=mt("rm"),yM=mt("stat"),vM=mt("copyFile"),$M=mt("readdir"),xM=mt("createReadStream"),kM=mt("createWriteStream"),SM=mt("randomBytes"),EM=mt("spawnSync"),wS=mt("createInterface")});var vS,Eo,Lh,yS,Nh,LM,Dn,NM,Ai,MM,Mh=L(()=>{Ms();Et();Oh();as();ze();ai();Ke();vS={},Eo=J(we(Ft(vS.url)),"..","..",".."),Lh=J(Eo,"corpus","conceptnet","slice.jsonl"),yS=J(Eo,"src","adapters","corpus","conceptnet-map.toml"),Nh=J(Eo,"corpus","seon","concepts.jsonl"),LM=J(Eo,"corpus","seon","definitions.jsonl"),Dn=J(Eo,"corpus","tier2"),NM=J(Dn,"manifest.json"),Ai=J(Eo,"corpus","wordnet"),MM=J(Ai,"manifest.json")});function kS(){return{seon:{kind:"corpus",active:!1,corpusPath:Nh,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:Lh,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:xS},human:{kind:"corpus",active:!0,corpusPath:J(Dn,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:J(Dn,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:J(Dn,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:J(Dn,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:J(Dn,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:J(Dn,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:J(Dn,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:J(Ai,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:J(Ai,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:J($S,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var SS,$S,HM,xS,KM,Ph=L(()=>{ze();Et();as();ui();Mh();SS={},$S=J(we(Ft(SS.url)),"..","..","corpus","namenet"),HM=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),xS=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];KM=Object.freeze(kS())});var Fh=L(()=>{});var zh=L(()=>{ze();Ms();Et();Eh();jh();dl();It();Rh();Te();Th();ki();Ih();No();Ph();pl();So();Jc();Fh()});var Dh={};Bn(Dh,{proseLemma:()=>ES});function ES(){if(Ds!==void 0)return Ds;try{let e=Kc();if(!e)return Ds=null,Ds;let t=e.its,n=new Map;Ds=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{Ds=null}return Ds}var Ds,Uh=L(()=>{Yc()});function kl(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 ${Ti(e.entityType)}`;if(t==="list")return`list/enumerate ${Ti(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${Ti(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 kl(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&&nn[o]?nn[o]:`filter/traverse ${Ti(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&&nn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?nn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function Rl(e){let t=new Map;for(let n of e)t.has(qh(n))||t.set(qh(n),n);return t}function hl(e,t=wr){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),Us(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function gl(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function Tl(e){let t=String(e||"").trim();return/[a-z]ies$/i.test(t)?`${t.slice(0,-3)}y`:/(ses|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 yl(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return Ls;if(t==="can")return"mgx:capableOf";try{let{proseLemma:n}=await Promise.resolve().then(()=>(Uh(),Dh)),s=n(),o=s?s(t):t;return o==="have"?Ls:Mn(`mgx:${o}`)}catch{return Mn(`mgx:${t}`)}}function MS(e,t){let n=String(t||"").match(NS);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function br(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(ts(),Ap)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function zS(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 mg(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 fg(e){if(_o[e])return _o[e];let t=String(e||""),n=Zp(t);if(n){let a=fg(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",mg(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:(${Cl})-([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?`${zS(i[1])}${i[2]?` ${i[2]}`:""}`:e}function $l(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function US(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of DS)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 ne(e){let t=e.provenance?` (source: ${e.provenance})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${At(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${At(e)}${t}`:e.provenance.includes("corpus:")?`${At(e)}${t}`:e.provenance.includes("reference:")?`${At(e)}${t}`:`i learned: ${At(e)}${t}`}function Hh(e,t,n){let s=ne(e);if(!Un.has(e.predicate)||!n.has(e.subject))return s;let o=Jf(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(BS);return i?s.slice(0,i.index)+r+i[0]:s+r}function Kh(e,t,n,{indent:s=""}={}){let o=t.filter(x=>x.predicate===wr).map(x=>[x.subject,x.object]),r=Zc(o),i=e.map(x=>`${s}${Hh(x,r,n)}`),a=e.filter(x=>Un.has(x.predicate)&&n.has(x.subject)),l=[...new Set(a.map(x=>x.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(x=>x.predicate==="owl:disjointWith").map(x=>[x.subject,x.object]),{split:u,clusters:d}=Qf(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let x of d)for(let $ of x.objects)p.set($,x);let m=e.filter(x=>!(Un.has(x.predicate)&&n.has(x.subject))),g=[],h=[],b=0,y=x=>{let $=Hh(x,r,n);return b<Re?(b+=1,`${s}${$}`):(h.push($),null)};for(let x of d){let $=a.filter(j=>p.get(j.object)===x).map(y).filter(Boolean);$.length&&g.push(`${s}${f}, the ${x.label}:
132
+ ${$.join(`
133
+ `)}`)}if(m.length){let x=m.map(y).filter(Boolean);x.length&&g.push(`${s}also about ${f}:
132
134
  ${x.join(`
133
- `)}`)}if(f.length){let k=f.map(y).filter(Boolean);k.length&&g.push(`${s}also about ${m}:
134
- ${k.join(`
135
135
  `)}`)}let w=h.length?`
136
- ${s}\u2026and ${h.length} more \u2014 say 'more' to see them.`:"",$={text:g.join(`
137
- `)+w,replace:!0,...h.length?{pending:{items:h,noun:"facts"}}:{}};return{lines:i,grouped:$}}function jo(e){let t=Wc().find(n=>n.kind==="article");return t&&Lm(String(e||""),t)?"an":"a"}function dg(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${ne(e)}; ${ne(t)}. To settle it, say "forget that ${e.subject} is ${jo(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${ne(t)}`,replace:!0}:e?{text:`yes \u2014 ${ne(e)}`,replace:!0}:null}function ME(e,t){let n=s=>`${At(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 ${jo(e.object)} ${e.object}".`,replace:!0}}function Ai(e){let t=o=>`${At(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(()=>(Ke(),rs)),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 bt(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Ke(),rs)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function PE(e){if(!Ti)try{Ti=Ps().nounPlurals}catch{Ti=new Map}return Ti.get(e)??null}function Ii(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return pr(Ps(),t)?.lemma||t}catch{return t}}function FE(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return Ii(e);let n=Ii(_l(t[1]));return`${jo(n)} ${n}`}function X(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(DE,"").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=PE(i);a&&s.add(e(a))}return s}function Hh(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 mg(e){let t=String(e).match(zE);return t?[t[0],t[2],t[1]]:null}function hg(e){let t=String(e||"").replace(WE,"");if(t!==e){let s=t.match(Bs);if(s)return s}let n=String(e||"").match(GE);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Bs):null}function kl(e){return String(e||"").replace(/^(?:can't|cannot|can not)\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 sS(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=>`${At(s)}${s.provenance?` (source: ${s.provenance})`:""}`).join("; ")}function Yh(e,t,n,{maxHops:s=3}={}){let o=X(Q,e),r=X(Q,t),i=Zr(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?sS(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:
136
+ ${s}\u2026and ${h.length} more \u2014 say 'more' to see them.`:"",v={text:g.join(`
137
+ `)+w,replace:!0,...h.length?{pending:{items:h,noun:"facts"}}:{}};return{lines:i,grouped:v}}function jo(e){let t=Vc().find(n=>n.kind==="article");return t&&Mf(String(e||""),t)?"an":"a"}function hg(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${ne(e)}; ${ne(t)}. To settle it, say "forget that ${e.subject} is ${jo(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${ne(t)}`,replace:!0}:e?{text:`yes \u2014 ${ne(e)}`,replace:!0}:null}function WS(e,t){let n=s=>`${At(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 ${jo(e.object)} ${e.object}".`,replace:!0}}function Ci(e){let t=o=>`${At(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 xl(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Ke(),is)),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 bt(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Ke(),is)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function qS(e){if(!Ii)try{Ii=Ps().nounPlurals}catch{Ii=new Map}return Ii.get(e)??null}function Li(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return mr(Ps(),t)?.lemma||t}catch{return t}}function GS(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return Li(e);let n=Li(Tl(t[1]));return`${jo(n)} ${n}`}function X(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(VS,"").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=qS(i);a&&s.add(e(a))}return s}function Yh(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){let t=String(e).match(HS);return t?[t[0],t[2],t[1]]:null}function yg(e){let t=String(e||"").replace(XS,"");if(t!==e){let s=t.match(Bs);if(s)return s}let n=String(e||"").match(JS);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Bs):null}function jl(e){return String(e||"").replace(/^(?:can't|cannot|can not)\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 uE(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=>`${At(s)}${s.provenance?` (source: ${s.provenance})`:""}`).join("; ")}function Jh(e,t,n,{maxHops:s=3}={}){let o=X(Q,e),r=X(Q,t),i=ti(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?uE(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:
138
138
  ${[...i.negative,...i.positive].map(ne).join(`
139
- `)}`,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 ${ne(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${ne(i.overrides.fact)}`),{text:c,replace:!0}}return null}function Xh(e,t,n,{maxHops:s=3}={}){let o=X(Q,e),r=X(Q,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,tc).map(m=>ne(m.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
139
+ `)}`,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 ${ne(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${ne(i.overrides.fact)}`),{text:c,replace:!0}}return null}function Qh(e,t,n,{maxHops:s=3}={}){let o=X(Q,e),r=X(Q,t),i=rc(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=>ne(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
140
140
  ${d.join(`
141
- `)}`,replace:!0,miss:!0}}let c=sc(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,tc),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)`:""}:
141
+ `)}`,replace:!0,miss:!0}}let c=ic(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)`:""}:
142
142
  ${u.map(ne).join(`
143
- `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(ne),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function iS(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 kn(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 bg(e,t,n,s,o={},r=null,i=null){return wg(await pS(e,t,n,s,o,r,i),n,t)}function wg(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=vl(t?.parsed);if(!o&&e.generalVerbQuery&&(o=zh),!o){let r=s.match($l),i=r?null:s.match(fg)||mg(s),a=r?r[2]:i?i[1]:null;a&&!xl.has(a.toLowerCase())&&(o=zh)}if(!o){let r=s.match(vg);r&&(o=vl({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function pS(e,t,n,s,o={},r=null,i=null){let a;try{({normFactTerm:a}=await Promise.resolve().then(()=>(Ke(),rs)))}catch{return null}let l=String(t).trim(),c=l.match(JE);if(c){let _=X(a,c[1]),O=(await bt(e,r)).filter(F=>F.predicate==="mgx:usedFor"&&_.has(F.object));if(O.length){let N=Je(kn(O),o).map(ne),U=N.slice(0,Re),G=N.slice(Re),B=G.length?`
144
- \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
145
- `)+B,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}for(let{predicate:_,re:O}of cS){let F=l.match(O);if(!F)continue;let N=X(a,F[1]),U=(await bt(e,r)).filter(D=>D.predicate===_&&N.has(D.object));if(!U.length)continue;let B=Je(kn(U),o).map(ne),W=B.slice(0,Re),I=B.slice(Re),P=I.length?`
143
+ `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(ne),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function mE(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 kn(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 $g(e,t,n,s,o={},r=null,i=null){return xg(await yE(e,t,n,s,o,r,i),n,t)}function xg(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=kl(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Bh),!o){let r=s.match(Sl),i=r?null:s.match(bg)||wg(s),a=r?r[2]:i?i[1]:null;a&&!El.has(a.toLowerCase())&&(o=Bh)}if(!o){let r=s.match(Sg);r&&(o=kl({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function yE(e,t,n,s,o={},r=null,i=null){let a;try{({normFactTerm:a}=await Promise.resolve().then(()=>(Ke(),is)))}catch{return null}let l=String(t).trim(),c=l.match(oE);if(c){let A=X(a,c[1]),O=(await bt(e,r)).filter(F=>F.predicate==="mgx:usedFor"&&A.has(F.object));if(O.length){let M=Je(kn(O),o).map(ne),B=M.slice(0,Re),q=M.slice(Re),U=q.length?`
144
+ \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
145
+ `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}}for(let{predicate:A,re:O}of hE){let F=l.match(O);if(!F)continue;let M=X(a,F[1]),B=(await bt(e,r)).filter(z=>z.predicate===A&&M.has(z.object));if(!B.length)continue;let U=Je(kn(B),o).map(ne),W=U.slice(0,Re),I=U.slice(Re),P=I.length?`
146
146
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:W.join(`
147
- `)+P,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let u=l.match(oS),d=u?null:l.match(rS),m=u?u[1]:d?.[2],p=u?u[2]:d?.[1],f=m&&p?iS(p):null;if(f){let _=`mgx:${f.replace(/\s+/g,"-")}-than`,O=await bt(e,r),F=X(a,m),N=[...F].sort((B,W)=>B.length-W.length)[0],U=B=>F.has(B)||B.startsWith(`${N}-`)||B.startsWith(`${N} `)||O.some(W=>Un.has(W.predicate)&&W.subject===B&&F.has(W.object)),G=kn(O.filter(B=>B.predicate===_&&Us(B))).filter(B=>B.subject!==B.object&&U(B.subject)&&U(B.object));if(G.length){let B=new Set,W=new Map;for(let K of G)B.add(K.subject),B.add(K.object),W.set(K.object,(W.get(K.object)||0)+1),W.has(K.subject)||W.set(K.subject,W.get(K.subject)||0);let I=new Map(W),P=[],D=null;for(;I.size;){let K=[...I.keys()].filter(ee=>I.get(ee)===0);if(K.length!==1){D=K.length===0?{text:`I can't order the ${N}s \u2014 the "${f} than" facts I have loop back on themselves, so no ${p} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${p} ${N} from what I know \u2014 nothing compares ${K[0]} and ${K[1]}. Teach me, e.g. "${K[0]} is ${f} than ${K[1]}".`,replace:!0,miss:!0};break}let q=K[0];P.push(q),I.delete(q);for(let ee of G)ee.subject===q&&I.has(ee.object)&&I.set(ee.object,I.get(ee.object)-1)}if(D)return D;let V=P.slice(0,-1).map((K,q)=>G.find(ee=>ee.subject===K&&ee.object===P[q+1]));if(V.every(Boolean)){let K=V.map(q=>`${At(q)}${q.provenance?` (source: ${q.provenance})`:""}`).join("; ");return{text:`${P[0]} \u2014 ${K}; so ${P[0]} is the ${p} ${N}`,replace:!0}}}}let g=s?l.match(QE):null;if(g){let _=X(a,g[1]),O=(await bt(e,r)).filter(F=>Kh.test(F.predicate)&&_.has(F.subject));if(O.length){let N=Je(kn(O),o).map(ne),U=N.slice(0,Re),G=N.slice(Re),B=G.length?`
148
- \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
149
- `)+B,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}let h=l.match(ZE);if(h){let _=h[1].toLowerCase(),O=X(a,h[2].replace(/^(?:an?|the)\s+/i,"").trim()),F=(await bt(e,r)).filter(N=>Kh.test(N.predicate)&&N.predicate.endsWith(`-${_}`)&&O.has(N.object));if(F.length){let U=Je(kn(F),o).map(ne),G=U.slice(0,Re),B=U.slice(Re),W=B.length?`
150
- \u2026and ${B.length} more \u2014 say 'more' to see them.`:"";return{text:G.join(`
151
- `)+W,replace:!0,...B.length?{pending:{items:B,noun:"facts"}}:{}}}}let b=n?.parsed?.shape==="meta"?n.parsed.object:null,y=n?.parsed&&n.parsed.node!=="miss";if(!b&&s&&!y&&!Jh.test(l)){let _=l.match(vg)||l.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);_&&(b=ps(_[1]))}if(!b&&n?.ambiguous&&Array.isArray(n.candidateParses)){let _=n.candidateParses.find(O=>O?.shape==="meta"&&O.object);_&&(b=ps(String(_.object)))}if(b){let{subject:_,predicate:O}=LE(b),F=X(a,_),N=(await bt(e,r)).filter(D=>F.has(D.subject)&&!Gh.has(D.predicate)),U=O?N.filter(D=>D.predicate===O):N;if(!U.length){if(O&&N.length)return{text:`I don't have any "${_o[O]}" facts about ${_}.`,replace:s};if(!O){let D=Je((await bt(e,r)).filter(V=>F.has(V.object)),o);if(D.length){let V=D.map(ne),K=V.slice(0,Re),q=V.slice(Re),ee=q.length?`
152
- \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:K.join(`
153
- `)+ee,replace:s,...q.length?{pending:{items:q,noun:"facts"}}:{}}}}return null}U=Je(U,o);let{lines:G,grouped:B}=Vh(U,await bt(e,r),F);if(B)return{...B,replace:s};let W=G.slice(0,Re),I=G.slice(Re),P=I.length?`
147
+ `)+P,replace:!0,...I.length?{pending:{items:I,noun:"facts"}}:{}}}let u=l.match(dE),d=u?null:l.match(pE),f=u?u[1]:d?.[2],p=u?u[2]:d?.[1],m=f&&p?mE(p):null;if(m){let A=`mgx:${m.replace(/\s+/g,"-")}-than`,O=await bt(e,r),F=X(a,f),M=[...F].sort((U,W)=>U.length-W.length)[0],B=U=>F.has(U)||U.startsWith(`${M}-`)||U.startsWith(`${M} `)||O.some(W=>Un.has(W.predicate)&&W.subject===U&&F.has(W.object)),q=kn(O.filter(U=>U.predicate===A&&Us(U))).filter(U=>U.subject!==U.object&&B(U.subject)&&B(U.object));if(q.length){let U=new Set,W=new Map;for(let K of q)U.add(K.subject),U.add(K.object),W.set(K.object,(W.get(K.object)||0)+1),W.has(K.subject)||W.set(K.subject,W.get(K.subject)||0);let I=new Map(W),P=[],z=null;for(;I.size;){let K=[...I.keys()].filter(ee=>I.get(ee)===0);if(K.length!==1){z=K.length===0?{text:`I can't order the ${M}s \u2014 the "${m} than" facts I have loop back on themselves, so no ${p} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${p} ${M} from what I know \u2014 nothing compares ${K[0]} and ${K[1]}. Teach me, e.g. "${K[0]} is ${m} than ${K[1]}".`,replace:!0,miss:!0};break}let G=K[0];P.push(G),I.delete(G);for(let ee of q)ee.subject===G&&I.has(ee.object)&&I.set(ee.object,I.get(ee.object)-1)}if(z)return z;let V=P.slice(0,-1).map((K,G)=>q.find(ee=>ee.subject===K&&ee.object===P[G+1]));if(V.every(Boolean)){let K=V.map(G=>`${At(G)}${G.provenance?` (source: ${G.provenance})`:""}`).join("; ");return{text:`${P[0]} \u2014 ${K}; so ${P[0]} is the ${p} ${M}`,replace:!0}}}}let g=s?l.match(rE):null;if(g){let A=X(a,g[1]),O=(await bt(e,r)).filter(F=>Xh.test(F.predicate)&&A.has(F.subject));if(O.length){let M=Je(kn(O),o).map(ne),B=M.slice(0,Re),q=M.slice(Re),U=q.length?`
148
+ \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
149
+ `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}}let h=l.match(iE);if(h){let A=h[1].toLowerCase(),O=X(a,h[2].replace(/^(?:an?|the)\s+/i,"").trim()),F=(await bt(e,r)).filter(M=>Xh.test(M.predicate)&&M.predicate.endsWith(`-${A}`)&&O.has(M.object));if(F.length){let B=Je(kn(F),o).map(ne),q=B.slice(0,Re),U=B.slice(Re),W=U.length?`
150
+ \u2026and ${U.length} more \u2014 say 'more' to see them.`:"";return{text:q.join(`
151
+ `)+W,replace:!0,...U.length?{pending:{items:U,noun:"facts"}}:{}}}}let b=n?.parsed?.shape==="meta"?n.parsed.object:null,y=n?.parsed&&n.parsed.node!=="miss";if(!b&&s&&!y&&!Zh.test(l)){let A=l.match(Sg)||l.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);A&&(b=ms(A[1]))}if(!b&&n?.ambiguous&&Array.isArray(n.candidateParses)){let A=n.candidateParses.find(O=>O?.shape==="meta"&&O.object);A&&(b=ms(String(A.object)))}if(b){let{subject:A,predicate:O}=US(b),F=X(a,A),M=(await bt(e,r)).filter(z=>F.has(z.subject)&&!Vh.has(z.predicate)),B=O?M.filter(z=>z.predicate===O):M;if(!B.length){if(O&&M.length)return{text:`I don't have any "${_o[O]}" facts about ${A}.`,replace:s};if(!O){let z=Je((await bt(e,r)).filter(V=>F.has(V.object)),o);if(z.length){let V=z.map(ne),K=V.slice(0,Re),G=V.slice(Re),ee=G.length?`
152
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:K.join(`
153
+ `)+ee,replace:s,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}return null}B=Je(B,o);let{lines:q,grouped:U}=Kh(B,await bt(e,r),F);if(U)return{...U,replace:s};let W=q.slice(0,Re),I=q.slice(Re),P=I.length?`
154
154
  \u2026and ${I.length} more \u2014 say 'more' to see them.`:"";return{text:W.join(`
155
- `)+P,replace:s,...I.length?{pending:{items:I,noun:"facts"}}:{}}}if(!s)return null;let w=l.match(xE);if(w){let O=`mgx:${w[2].toLowerCase().replace(/\s+/g,"-")}-than`,F=await yl(e),N=V=>{let K=V.replace(/^(?:an?|the)\s+/i,"").trim();return i&&cs.test(K)?i:K},U=N(w[1]),G=N(w[3]),B=X(a,U),W=X(a,G),I=F.find(V=>V.predicate===O&&B.has(V.subject)&&W.has(V.object));if(I){let V=F.find(q=>q.predicate===O&&B.has(q.object)&&W.has(q.subject)),K=V?` \u2014 though you also told me the opposite: ${ne(V)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${ne(I)}${K}`,replace:!0}}let P=F.filter(V=>V.predicate===O&&(B.has(V.subject)||B.has(V.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${P.length?` I do know: ${P.slice(0,3).map(ne).join("; ")}.`:""} If it's true, teach me: "${U} is ${w[2].toLowerCase()} than ${G}".`,replace:!0,miss:!0}}for(let{predicate:_,phrase:O,re:F}of uS){let N=l.match(F);if(!N)continue;let U=await yl(e),G=X(a,N[1]),B=X(a,N[2]),W=U.find(P=>P.predicate===_&&G.has(P.subject)&&B.has(P.object));if(W)return{text:`yes \u2014 ${ne(W)}`,replace:!0};let I=U.filter(P=>P.predicate===_&&G.has(P.subject));if(I.length){let P=I.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${O} ${N[2]}. I do know: ${P}.`,replace:!0,miss:!0}}if(!n?.parsed&&U.some(P=>G.has(P.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${N[1]} ${O} ${N[2]}.`,replace:!0,miss:!0};break}let $=l.match(Bs)||hg(l);if($){let _=X(a,$[1]),O=X(a,$[2]),F=await bt(e,r),N=W=>_.has(W.subject)&&O.has(W.object),{DISJOINT_PREDICATE:U}=await Promise.resolve().then(()=>(Pt(),Jt)),G=W=>_.has(W.subject)||_.has(W.object)||O.has(W.subject)||O.has(W.object);return F.some(W=>W.predicate===U&&Us(W)&&G(W))?null:dg(F.find(W=>Un.has(W.predicate)&&N(W)),F.find(W=>W.predicate===Jr&&N(W)))}let k=kl(l).match(HE);if(k){let _=await bt(e,r),O=Yh(k[1],k[2],_);if(O)return O;let F=X(a,k[1]),N=_.filter(U=>U.predicate==="mgx:capableOf"&&F.has(U.subject));if(N.length){let U=N.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${k[1]} can ${k[2]}. I do know: ${U}. If it's true, teach me: "a ${N[0].subject} can ${k[2]}".`,replace:!0,miss:!0}}return Xh(k[1],k[2],_)}let x=l.match(KE);if(x){let _=X(a,x[1]),O=X(a,x[2]),F=new Set(["mgx:hasA","tmct:has"]),N=await yl(e),U=I=>N.find(P=>F.has(P.predicate)&&I.has(P.subject)&&O.has(P.object)),G=U(_);if(G)return{text:`yes \u2014 ${ne(G)}`,replace:!0};let B=[{terms:_,chain:[]}],W=new Set;for(let I=0;I<4;I+=1){let P=[];for(let{terms:D,chain:V}of B){let K=N.filter(q=>Un.has(q.predicate)&&D.has(q.subject)&&!W.has(q.object));for(let q of K){if(W.has(q.object))continue;W.add(q.object);let ee=[...V,q],re=U(X(a,q.object));if(re)return{text:`yes \u2014 ${[...ee.map(ne),ne(re)].join("; ")}`,replace:!0};P.push({terms:X(a,q.object),chain:ee})}}if(!P.length)break;B=P}return null}let v=kl(l).match(eS);if(v){let _=await bt(e,r),O=!!v[1],F=X(a,v[2]),N=X(a,v[3]),U=Yh(v[2],v[3],_);if(U&&O)return{text:`I can't speak for all ${v[2]} \u2014 what I remember is generic, not universal. ${U.text}.`,replace:!0};if(U)return U;if(s){let G=_.filter(W=>W.predicate==="mgx:capableOf"&&F.has(W.subject));if(G.length){let W=G.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${v[2]} can ${v[3]}. I do know: ${W}. If it's true, teach me: "a ${G[0].subject} can ${v[3]}".`,replace:!0,miss:!0}}let B=Xh(v[2],v[3],_);if(B)return B;if(!/\s/.test(v[2].trim())&&!_.some(W=>F.has(W.subject)||F.has(W.object))){let W=_l(Ii(v[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${v[2]}" yet. Teach me "a ${W} can ${v[3]}" (or "a ${W} cannot ${v[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let A=l.match(YE);if(A){let _=X(a,A[1]),O=(await bt(e,r)).filter(W=>(W.predicate==="mgx:capableOf"||W.predicate===lo)&&_.has(W.subject));if(!O.length)return null;let N=Je(kn(O),o).map(ne),U=N.slice(0,Re),G=N.slice(Re),B=G.length?`
156
- \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
157
- `)+B,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}let T=l.match(nS);if(T){let _=X(a,T[1]),O=X(a,T[2]),F=await bt(e,r),N=kn(F.filter(U=>U.predicate==="mgx:capableOf"&&O.has(U.object))).filter(U=>Zr(new Set([U.subject]),O,F).verdict==="yes");if(N.length){let{findIsaChain:U,SUBCLASS_PREDICATE:G,TYPE_PREDICATE:B}=await Promise.resolve().then(()=>(Pt(),Jt)),W=F.filter(Y=>Y.predicate===G),I=F.filter(Y=>Y.predicate===B),P=W.map(Y=>[Y.subject,Y.object]),D=I.map(Y=>[Y.subject,Y.object]),V=Y=>(Y.predicate===G?W:I).find(Z=>Z.subject===Y.subject&&Z.object===Y.object),K=new Map,q=N.filter(Y=>_.has(Y.subject)?!0:(K.has(Y.subject)||K.set(Y.subject,U(Y.subject,_,D,P,{maxHops:3})),!!K.get(Y.subject))),re=Je(q.length?q:N,o).map(Y=>{let Z=q.length?K.get(Y.subject):null;if(!Z||Z.length<2)return ne(Y);let ke=Z.map(V);if(!ke.every(Boolean))return ne(Y);let Oe=ke.map(H=>`${At(H)}${H.provenance?` (source: ${H.provenance})`:""}`).join("; ");return`${ne(Y)} \u2014 via: ${Oe}`}),Se=re.slice(0,Re),ce=re.slice(Re),$e=ce.length?`
158
- \u2026and ${ce.length} more \u2014 say 'more' to see them.`:"";return{text:(q.length?"":`nothing I remember ties these to "${T[1]}", but:
159
- `)+Se.join(`
160
- `)+$e,replace:!0,...ce.length?{pending:{items:ce,noun:"facts"}}:{}}}}let C=l.match(tS);if(C&&C[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let _=X(a,C[1]),O=sc(_,await bt(e,r));if(O.length){let N=Je(kn(O),o).map(ne),U=N.slice(0,Re),G=N.slice(Re),B=G.length?`
161
- \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
162
- `)+B,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}let S=l.match(XE);if(S&&!dS.has(S[1].trim().split(/\s+/)[0]?.toLowerCase())){let _=X(a,S[1]),O=(await bt(e,r)).filter(W=>W.predicate==="mgx:hasA"&&_.has(W.object));if(!O.length)return null;let N=Je(kn(O),o).map(ne),U=N.slice(0,Re),G=N.slice(Re),B=G.length?`
163
- \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
164
- `)+B,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}let R=l.match(Jh),M=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:R?.[1];if(M){let _=X(a,M),O=(await bt(e,r)).filter(W=>Un.has(W.predicate)&&_.has(W.object));if(!O.length)return null;let N=Je(kn(O),o).map(ne),U=N.slice(0,Re),G=N.slice(Re),B=G.length?`
165
- \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:U.join(`
166
- `)+B,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}let j=l.match(VE);if(j){let _=X(a,j[1]),O=await bt(e,r),F=H=>!String(H.provenance||"").includes("corpus:")&&!String(H.provenance||"").includes("web:"),N=O.filter(H=>Un.has(H.predicate)&&F(H)),U=new Set,G=_;for(let H=0;H<8&&G.size;H+=1){let oe=new Set;for(let se of N)G.has(se.object)&&!U.has(se.subject)&&oe.add(se.subject);if(!oe.size)break;for(let se of oe)U.add(se);let fe=new Set;for(let se of oe)for(let Me of X(a,se))fe.add(Me);G=fe}let B=O.filter(H=>_.has(H.subject)||_.has(H.object)||U.has(H.subject));if(!B.length){let H=a(j[1]).split(/\s+/).filter(oe=>oe.length>=4&&!pg.has(oe));if(H.length){let oe=se=>new Set(String(se||"").split(/\s+/)),fe=se=>{let Me=oe(se);return H.some(le=>Me.has(le))};B=O.filter(se=>fe(se.subject)||fe(se.object))}}if(B=B.filter(H=>!Gh.has(H.predicate)),!B.length)return null;let{findConsistencyViolations:W,TYPE_PREDICATE:I,SUBCLASS_PREDICATE:P,DISJOINT_PREDICATE:D}=await Promise.resolve().then(()=>(Pt(),Jt)),V=H=>!H.provenance?.includes("corpus:")&&!H.provenance?.includes("web:"),K=O.filter(H=>H.predicate===I&&V(H)).map(H=>[H.subject,H.object]),q=O.filter(H=>H.predicate===P&&V(H)).map(H=>[H.subject,H.object]),ee=O.filter(H=>H.predicate===D&&V(H)).map(H=>[H.subject,H.object]);if(ee.length){let oe=W(K,q,ee,{focus:_,budget:5}).find(fe=>_.has(fe.subject));if(oe)return{text:`I can't answer that \u2014 what I've been told about ${oe.subject} is inconsistent: it's taught to be both ${oe.classA} and ${oe.classB}, but ${oe.viaA} and ${oe.viaB} are disjoint (${oe.viaA} owl:disjointWith ${oe.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let re=B.find(H=>_.has(H.subject)||_.has(H.object)),Se=re?_.has(re.subject)?re.subject:re.object:j[1].trim(),ce=B.some(H=>U.has(H.subject)&&!_.has(H.subject)&&!_.has(H.object));B=Je(B,o);let $e=`${B.length} remembered fact${B.length===1?"":"s"} about ${Se}${ce?" (including its known subtypes)":""}:`,{lines:te,grouped:Y}=Vh(B,O,_,{indent:" "});if(Y)return{...Y,text:`${$e}
155
+ `)+P,replace:s,...I.length?{pending:{items:I,noun:"facts"}}:{}}}if(!s)return null;let w=l.match(AS);if(w){let O=`mgx:${w[2].toLowerCase().replace(/\s+/g,"-")}-than`,F=await xl(e),M=V=>{let K=V.replace(/^(?:an?|the)\s+/i,"").trim();return i&&ls.test(K)?i:K},B=M(w[1]),q=M(w[3]),U=X(a,B),W=X(a,q),I=F.find(V=>V.predicate===O&&U.has(V.subject)&&W.has(V.object));if(I){let V=F.find(G=>G.predicate===O&&U.has(G.object)&&W.has(G.subject)),K=V?` \u2014 though you also told me the opposite: ${ne(V)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${ne(I)}${K}`,replace:!0}}let P=F.filter(V=>V.predicate===O&&(U.has(V.subject)||U.has(V.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${P.length?` I do know: ${P.slice(0,3).map(ne).join("; ")}.`:""} If it's true, teach me: "${B} is ${w[2].toLowerCase()} than ${q}".`,replace:!0,miss:!0}}for(let{predicate:A,phrase:O,re:F}of bE){let M=l.match(F);if(!M)continue;let B=await xl(e),q=X(a,M[1]),U=X(a,M[2]),W=B.find(P=>P.predicate===A&&q.has(P.subject)&&U.has(P.object));if(W)return{text:`yes \u2014 ${ne(W)}`,replace:!0};let I=B.filter(P=>P.predicate===A&&q.has(P.subject));if(I.length){let P=I.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${M[1]} ${O} ${M[2]}. I do know: ${P}.`,replace:!0,miss:!0}}if(!n?.parsed&&B.some(P=>q.has(P.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${M[1]} ${O} ${M[2]}.`,replace:!0,miss:!0};break}let v=l.match(Bs)||yg(l);if(v){let A=X(a,v[1]),O=X(a,v[2]),F=await bt(e,r),M=W=>A.has(W.subject)&&O.has(W.object),{DISJOINT_PREDICATE:B}=await Promise.resolve().then(()=>(Pt(),Qt)),q=W=>A.has(W.subject)||A.has(W.object)||O.has(W.subject)||O.has(W.object);return F.some(W=>W.predicate===B&&Us(W)&&q(W))?null:hg(F.find(W=>Un.has(W.predicate)&&M(W)),F.find(W=>W.predicate===Zr&&M(W)))}let x=jl(l).match(eE);if(x){let A=await bt(e,r),O=x[1],F=Jh(x[2],x[3],A);if(F&&O)return{text:`I can't speak for ${O.trim()} ${x[2]} \u2014 what I remember is generic, not universal. ${F.text}.`,replace:!0};if(F)return F;let M=X(a,x[2]),B=A.filter(q=>q.predicate==="mgx:capableOf"&&M.has(q.subject));if(B.length){let q=B.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${x[2]} can ${x[3]}. I do know: ${q}. If it's true, teach me: "a ${B[0].subject} can ${x[3]}".`,replace:!0,miss:!0}}return Qh(x[2],x[3],A)}let $=l.match(tE);if($){let A=X(a,$[1]),O=X(a,$[2]),F=new Set(["mgx:hasA","tmct:has"]),M=await xl(e),B=I=>M.find(P=>F.has(P.predicate)&&I.has(P.subject)&&O.has(P.object)),q=B(A);if(q)return{text:`yes \u2014 ${ne(q)}`,replace:!0};let U=[{terms:A,chain:[]}],W=new Set;for(let I=0;I<4;I+=1){let P=[];for(let{terms:z,chain:V}of U){let K=M.filter(G=>Un.has(G.predicate)&&z.has(G.subject)&&!W.has(G.object));for(let G of K){if(W.has(G.object))continue;W.add(G.object);let ee=[...V,G],re=B(X(a,G.object));if(re)return{text:`yes \u2014 ${[...ee.map(ne),ne(re)].join("; ")}`,replace:!0};P.push({terms:X(a,G.object),chain:ee})}}if(!P.length)break;U=P}return null}let j=jl(l).match(aE);if(j){let A=await bt(e,r),O=!!j[1],F=X(a,j[2]),M=X(a,j[3]),B=Jh(j[2],j[3],A);if(B&&O)return{text:`I can't speak for ${j[1].trim()} ${j[2]} \u2014 what I remember is generic, not universal. ${B.text}.`,replace:!0};if(B)return B;if(s){let q=A.filter(W=>W.predicate==="mgx:capableOf"&&F.has(W.subject));if(q.length){let W=q.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${j[2]} can ${j[3]}. I do know: ${W}. If it's true, teach me: "a ${q[0].subject} can ${j[3]}".`,replace:!0,miss:!0}}let U=Qh(j[2],j[3],A);if(U)return U;if(!/\s/.test(j[2].trim())&&!A.some(W=>F.has(W.subject)||F.has(W.object))){let W=Tl(Li(j[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${j[2]}" yet. Teach me "a ${W} can ${j[3]}" (or "a ${W} cannot ${j[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let E=l.match(nE);if(E){let A=X(a,E[1]),O=(await bt(e,r)).filter(W=>(W.predicate==="mgx:capableOf"||W.predicate===lo)&&A.has(W.subject));if(!O.length)return null;let M=Je(kn(O),o).map(ne),B=M.slice(0,Re),q=M.slice(Re),U=q.length?`
156
+ \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
157
+ `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}let _=l.match(lE);if(_){let A=X(a,_[1]),O=X(a,_[2]),F=await bt(e,r),M=kn(F.filter(B=>B.predicate==="mgx:capableOf"&&O.has(B.object))).filter(B=>ti(new Set([B.subject]),O,F).verdict==="yes");if(M.length){let{findIsaChain:B,SUBCLASS_PREDICATE:q,TYPE_PREDICATE:U}=await Promise.resolve().then(()=>(Pt(),Qt)),W=F.filter(Y=>Y.predicate===q),I=F.filter(Y=>Y.predicate===U),P=W.map(Y=>[Y.subject,Y.object]),z=I.map(Y=>[Y.subject,Y.object]),V=Y=>(Y.predicate===q?W:I).find(Z=>Z.subject===Y.subject&&Z.object===Y.object),K=new Map,G=M.filter(Y=>A.has(Y.subject)?!0:(K.has(Y.subject)||K.set(Y.subject,B(Y.subject,A,z,P,{maxHops:3})),!!K.get(Y.subject))),re=Je(G.length?G:M,o).map(Y=>{let Z=G.length?K.get(Y.subject):null;if(!Z||Z.length<2)return ne(Y);let ke=Z.map(V);if(!ke.every(Boolean))return ne(Y);let Oe=ke.map(H=>`${At(H)}${H.provenance?` (source: ${H.provenance})`:""}`).join("; ");return`${ne(Y)} \u2014 via: ${Oe}`}),Ee=re.slice(0,Re),ce=re.slice(Re),$e=ce.length?`
158
+ \u2026and ${ce.length} more \u2014 say 'more' to see them.`:"";return{text:(G.length?"":`nothing I remember ties these to "${_[1]}", but:
159
+ `)+Ee.join(`
160
+ `)+$e,replace:!0,...ce.length?{pending:{items:ce,noun:"facts"}}:{}}}}let C=l.match(cE);if(C&&C[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let A=X(a,C[1]),O=ic(A,await bt(e,r));if(O.length){let M=Je(kn(O),o).map(ne),B=M.slice(0,Re),q=M.slice(Re),U=q.length?`
161
+ \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
162
+ `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}}let S=l.match(sE);if(S&&!wE.has(S[1].trim().split(/\s+/)[0]?.toLowerCase())){let A=X(a,S[1]),O=(await bt(e,r)).filter(W=>W.predicate==="mgx:hasA"&&A.has(W.object));if(!O.length)return null;let M=Je(kn(O),o).map(ne),B=M.slice(0,Re),q=M.slice(Re),U=q.length?`
163
+ \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
164
+ `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}let T=l.match(Zh),N=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:T?.[1];if(N){let A=X(a,N),O=(await bt(e,r)).filter(W=>Un.has(W.predicate)&&A.has(W.object));if(!O.length)return null;let M=Je(kn(O),o).map(ne),B=M.slice(0,Re),q=M.slice(Re),U=q.length?`
165
+ \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:B.join(`
166
+ `)+U,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}let R=l.match(ZS);if(R){let A=X(a,R[1]),O=await bt(e,r),F=H=>!String(H.provenance||"").includes("corpus:")&&!String(H.provenance||"").includes("web:"),M=O.filter(H=>Un.has(H.predicate)&&F(H)),B=new Set,q=A;for(let H=0;H<8&&q.size;H+=1){let oe=new Set;for(let se of M)q.has(se.object)&&!B.has(se.subject)&&oe.add(se.subject);if(!oe.size)break;for(let se of oe)B.add(se);let me=new Set;for(let se of oe)for(let Me of X(a,se))me.add(Me);q=me}let U=O.filter(H=>A.has(H.subject)||A.has(H.object)||B.has(H.subject));if(!U.length){let H=a(R[1]).split(/\s+/).filter(oe=>oe.length>=4&&!gg.has(oe));if(H.length){let oe=se=>new Set(String(se||"").split(/\s+/)),me=se=>{let Me=oe(se);return H.some(le=>Me.has(le))};U=O.filter(se=>me(se.subject)||me(se.object))}}if(U=U.filter(H=>!Vh.has(H.predicate)),!U.length)return null;let{findConsistencyViolations:W,TYPE_PREDICATE:I,SUBCLASS_PREDICATE:P,DISJOINT_PREDICATE:z}=await Promise.resolve().then(()=>(Pt(),Qt)),V=H=>!H.provenance?.includes("corpus:")&&!H.provenance?.includes("web:"),K=O.filter(H=>H.predicate===I&&V(H)).map(H=>[H.subject,H.object]),G=O.filter(H=>H.predicate===P&&V(H)).map(H=>[H.subject,H.object]),ee=O.filter(H=>H.predicate===z&&V(H)).map(H=>[H.subject,H.object]);if(ee.length){let oe=W(K,G,ee,{focus:A,budget:5}).find(me=>A.has(me.subject));if(oe)return{text:`I can't answer that \u2014 what I've been told about ${oe.subject} is inconsistent: it's taught to be both ${oe.classA} and ${oe.classB}, but ${oe.viaA} and ${oe.viaB} are disjoint (${oe.viaA} owl:disjointWith ${oe.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let re=U.find(H=>A.has(H.subject)||A.has(H.object)),Ee=re?A.has(re.subject)?re.subject:re.object:R[1].trim(),ce=U.some(H=>B.has(H.subject)&&!A.has(H.subject)&&!A.has(H.object));U=Je(U,o);let $e=`${U.length} remembered fact${U.length===1?"":"s"} about ${Ee}${ce?" (including its known subtypes)":""}:`,{lines:te,grouped:Y}=Kh(U,O,A,{indent:" "});if(Y)return{...Y,text:`${$e}
167
167
  ${Y.text}`};let Z=te.slice(0,Re),ke=te.slice(Re),Oe=ke.length?`
168
168
  \u2026and ${ke.length} more \u2014 say 'more' to see them.`:"";return{text:`${$e}
169
169
  ${Z.join(`
170
- `)}${Oe}`,replace:!0,...ke.length?{pending:{items:ke.map(H=>H.trim()),noun:"facts"}}:{}}}return null}async function kS(e,t){let n=await gr(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&Uh[s]?Uh[s][0]:null}function Ci(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<SS;r+=1){let i=null;for(let a of e.relations||[])if(ES.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 yg(e,t,n,s,o=null,r=null,i={},a=null){return wg(await jS(e,t,n,s,o,r,i,a),n,t)}async function jS(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Ke(),rs)))}catch{return null}let c=String(t).trim();if(o){let I=c.match(Bs);if(I){let P=await gr(o,I[1]);if(P){let D=X(l,Ht(I[2])),V=Ci(o,P.id).find(q=>[...X(l,q.label)].some(ee=>D.has(ee)));if(V)return{text:`yes \u2014 the code graph says ${P.label} inherits ${V.label}.`,replace:!0};let K=await gr(o,Ht(I[2]));if(K&&Ci(o,K.id).some(q=>q.id===P.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${K.label} inherits ${P.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 bt(e,a);if(!d.length){if(!Bs.test(u)&&!$l.test(u)){let I=u.match(Zh);if(I){let P=I[1].trim(),D=cs.test(P)?r||null:P;if(D&&!/^there\b/i.test(D)&&!n?.parsed&&!eg.test(P)&&!Wh.test(I[2].trim()))return tg(D,I[2].trim().toLowerCase())}}return null}let m=d.filter(I=>Un.has(I.predicate)),p=(I,P)=>P.trust-I.trust,f=I=>{let P=I.map(ne),D=P.slice(0,Re),V=P.slice(Re),K=V.length?`
171
- \u2026and ${V.length} more \u2014 say 'more' to see them.`:"";return{text:D.join(`
172
- `)+K,replace:!0,...V.length?{pending:{items:V,noun:"facts"}}:{}}};if(xS.test(c)){let I=Je(m.length?m:d,i);return I.length?f(I):null}let g=u.match($l);if(g){let I=g[1].trim(),P=cs.test(I)?r||null:I,D=g[2].trim().toLowerCase(),V=g[3].trim();if(P&&!xl.has(D)){let K=pl(d),{findIsaChain:q}=await Promise.resolve().then(()=>(Pt(),Jt)),ee=Oe=>{let H=String(Oe||"").trim().toLowerCase(),oe=[];for(let fe of d){let se=wl(fe.predicate);if(!se)continue;if(se===H){oe.push({fact:fe,aliasFacts:[]});continue}let Me=fl(q,se,new Set([H]),K,{maxHops:2});if(!Me)continue;let le=Me.map(je=>d.find(me=>me.predicate===br&&me.subject===je.subject&&me.object===je.object));le.every(Boolean)&&oe.push({fact:fe,aliasFacts:le})}return oe},{loadMemory:re,findRuleByName:Se,resolveRelationChase:ce}=await Promise.resolve().then(()=>(Ke(),rs)),{findActionPath:$e}=await Promise.resolve().then(()=>(vs(),Rr)),te=await re(e),Z=await ce(te,D,P,V,{relationFactsFor:ee,renderFactLine:ne,factPhrase:At,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:dl,findActionPath:$e});return Z?{text:`yes \u2014 ${Z.citation.join("; ")}`,replace:!0}:ee(D).length>0||!!Se(te,D)?{text:`I know the '${D}' relation, but I can't confirm ${P} is the ${D} of ${V} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${D}' yet.`,replace:!0}}}let h=u.match(fg)||mg(u);if(h){let I=h[1].trim().toLowerCase(),P=h[2].trim(),D=cs.test(P)?r||null:P;if(D&&!xl.has(I)){let V=pl(d),{findIsaChain:K}=await Promise.resolve().then(()=>(Pt(),Jt)),q=Oe=>{let H=String(Oe||"").trim().toLowerCase(),oe=[];for(let fe of d){let se=wl(fe.predicate);if(!se)continue;if(se===H){oe.push({fact:fe,aliasFacts:[]});continue}let Me=fl(K,se,new Set([H]),V,{maxHops:2});if(!Me)continue;let le=Me.map(je=>d.find(me=>me.predicate===br&&me.subject===je.subject&&me.object===je.object));le.every(Boolean)&&oe.push({fact:fe,aliasFacts:le})}return oe},{loadMemory:ee,findRuleByName:re,resolveRelationChaseReverse:Se}=await Promise.resolve().then(()=>(Ke(),rs)),ce=await ee(e),{findReachableSet:$e}=await Promise.resolve().then(()=>(vs(),Rr)),Y=await Se(ce,I,D,{relationFactsFor:q,renderFactLine:ne,factPhrase:At,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:dl,findReachableSet:$e});return Y.length?{text:Y.map(H=>`${H.subject} \u2014 ${H.citation.join("; ")}`).join(`
173
- `),replace:!0}:q(I).length>0||!!re(ce,I)?{text:/^what\b/i.test(u)?`I don't know what the ${I} of ${D} is from what you've told me.`:`I don't know anyone who is the ${I} of ${D} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${I}' yet.`,replace:!0}}}{let I=u.match(_S);if(I){let P=X(l,I[1]),D=Je(d.filter(V=>P.has(V.subject)||P.has(V.object)),i);if(D.length){let V=D.map(ne),K=V.slice(0,Re),q=V.slice(Re),ee=q.length?`
174
- \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:K.join(`
175
- `)+ee,replace:!0,...q.length?{pending:{items:q,noun:"facts"}}:{}}}}}let b=u.match(UE);if(b){let I=_l(b[1].trim().toLowerCase()),P=b[2].trim(),D=cs.test(P)?r||null:P;if(D){let{loadMemory:V,findRuleByName:K,RULE_KIND_PROP:q,RULE_KIND_RECURSIVE:ee}=await Promise.resolve().then(()=>(Ke(),rs)),re=await V(e),Se=K(re,I),ce=Se?.attributes?.find($e=>$e.prop===q)?.value;if(Se&&ce===ee){let $e=Se.attributes.find(Z=>Z.prop==="mgx:ruleBaseCase")?.value,te=Se.attributes.find(Z=>Z.prop==="mgx:ruleRecStep")?.value,Y=l(D);if($e&&te&&Y){let Z=pl(d),{findIsaChain:ke}=await Promise.resolve().then(()=>(Pt(),Jt)),Oe=Me=>{let le=String(Me||"").trim().toLowerCase(),je=[];for(let me of d){let Dt=wl(me.predicate);if(!Dt)continue;if(Dt===le){je.push({fact:me,aliasFacts:[]});continue}let nn=fl(ke,Dt,new Set([le]),Z,{maxHops:2});if(!nn)continue;let Qe=nn.map(ln=>d.find(qt=>qt.predicate===br&&qt.subject===ln.subject&&qt.object===ln.object));Qe.every(Boolean)&&je.push({fact:me,aliasFacts:Qe})}return je},{findReachableSet:H}=await Promise.resolve().then(()=>(vs(),Rr)),se=H({entity:Y,hop:0},Me=>{let le=Me.hop===0?$e:te;return Oe(le).filter(je=>je.fact.subject===Me.entity).map(je=>({action:je,nextState:{entity:je.fact.object,hop:Me.hop+1}}))},{maxDepth:20,stateKey:Me=>Me.entity});if(se.length)return{text:se.map(({node:le,path:je})=>{let me=new Set,Dt=[];for(let nn of je.actions){Dt.push(ne(nn.fact));for(let Qe of nn.aliasFacts){let ln=Qe.id||`${Qe.subject}|${Qe.predicate}|${Qe.object}`;me.has(ln)||(me.add(ln),Dt.push(`${At(Qe)}${Qe.provenance?` (source: ${Qe.provenance})`:""}`))}}return`${le.entity} \u2014 ${Dt.join("; ")}`}).join(`
176
- `),replace:!0}}}return null}}let y=c.match(qE),w=c.match(Bs)||hg(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Bs);if(w){let I=X(l,Ht(w[2])),P=r&&cs.test(w[1].trim())?r:w[1],D=new Set(X(l,P));if([...D].some(z=>I.has(z))){let z=Ht(w[2]).trim();return{text:`yes \u2014 ${jo(z)} ${z} is ${jo(z)} ${z}, trivially: every kind is a kind of itself.`,replace:!0}}let V=await kS(o,P);if(V)for(let z of X(l,V))D.add(z);let{findIsaChain:K,deriveDisjointViolations:q,SUBCLASS_PREDICATE:ee,TYPE_PREDICATE:re,DISJOINT_PREDICATE:Se}=await Promise.resolve().then(()=>(Pt(),Jt)),ce=Us,$e=m.filter(z=>z.predicate===ee&&ce(z)),te=m.filter(z=>z.predicate===re&&ce(z)),Y=$e.map(z=>[z.subject,z.object]),Z=te.map(z=>[z.subject,z.object]),ke=m.filter(z=>z.predicate===ee),Oe=m.filter(z=>z.predicate===re),H=Oe.map(z=>[z.subject,z.object]),oe=ke.map(z=>[z.subject,z.object]),fe=d.filter(z=>z.predicate===Se&&ce(z)),se=fe.map(z=>[z.subject,z.object]),Me=fe.length?q(H.concat(oe),oe,se,{budget:20,focus:new Set([...D,...I])}):[],le=z=>{let he=Me.find(Le=>Le.subject===z&&I.has(Le.object));if(!he)return null;let ge=m.filter(Le=>I.has(Le.object)&&(Le.subject===he.viaClass||Le.subject===he.subject)).sort(p)[0],xe=fe.find(Le=>Le.subject===he.viaClass&&Le.object===he.object||Le.subject===he.object&&Le.object===he.viaClass);return!ge||!xe?null:ME(ge,xe)},je=m.filter(z=>D.has(z.subject)&&I.has(z.object)).sort(p)[0],me=d.filter(z=>z.predicate===Jr&&D.has(z.subject)&&I.has(z.object)).sort(p)[0],Dt=fe.find(z=>D.has(z.subject)&&I.has(z.object)||D.has(z.object)&&I.has(z.subject));if(je&&!me){let z=le(je.subject);if(z)return z}let nn=dg(je,me||Dt);if(nn)return nn;if(fe.length){let z=xe=>{let Le=new Set(xe),Et=new Set(xe);for(let Ae=0;Ae<8&&Et.size;Ae+=1){let be=new Set;for(let[Ze,us]of oe)Et.has(Ze)&&!Le.has(us)&&be.add(us);if(!be.size)break;for(let Ze of be)Le.add(Ze);Et=be}return Le},he=z(I),ge=Me.find(xe=>D.has(xe.subject)&&he.has(xe.object)&&!z([xe.viaClass]).has(xe.object)&&!z([xe.object]).has(xe.viaClass));if(ge){let xe=m.filter(be=>D.has(be.subject)&&be.object===ge.viaClass).sort(p)[0],Le=fe.find(be=>be.subject===ge.viaClass&&be.object===ge.object||be.subject===ge.object&&be.object===ge.viaClass),Et=!I.has(ge.object),Ae=Et?m.filter(be=>I.has(be.subject)&&be.object===ge.object).sort(p)[0]:null;if(xe&&Le&&(!Et||Ae)){let be=Ht(w[2]).trim();return{text:`no \u2014 ${[xe,...Ae?[Ae]:[]].map(ne).join("; ")}; and ${At(Le)}${Le.provenance?` (source: ${Le.provenance})`:""} \u2014 so ${P} can never be ${jo(be)} ${be}.`,replace:!0}}}}let Qe=await gr(o,P);if(Qe){let z=new Map;for(let ge of Ci(o,Qe.id))for(let xe of X(l,ge.label))!D.has(xe)&&!z.has(xe)&&z.set(xe,ge.label);let he=m.filter(ge=>z.has(ge.subject)&&I.has(ge.object)).sort(p)[0];if(he)return{text:`yes \u2014 the code graph says ${Qe.label} inherits ${z.get(he.subject)}, and ${ne(he)}`,replace:!0}}let ln=z=>(z.predicate===ee?$e:te).find(he=>he.subject===z.subject&&he.object===z.object);for(let z of D){let he=K(z,I,Z,Y,{maxHops:2});if(!he)continue;let ge=le(z);if(ge)return ge;let xe=he.map(ln);if(xe.every(Boolean))return{text:`yes \u2014 ${Ai(xe)}`,replace:!0}}let qt=z=>(z.predicate===ee?ke:Oe).find(he=>he.subject===z.subject&&he.object===z.object);for(let z of D){let he=K(z,I,H,oe,{maxHops:2});if(!he)continue;let ge=le(z);if(ge)return ge;let xe=he.map(qt);if(xe.every(Boolean)&&xe.some(ce))return{text:`yes \u2014 ${Ai(xe)}`,replace:!0}}let zt=P.match(/^(.*\S)\s+not$/i),Tt=zt&&[zt[0],r&&cs.test(zt[1].trim())?r:zt[1]];if(Tt){let z=X(l,Tt[1]),he=I,ge=m.filter(Ae=>z.has(Ae.subject)&&he.has(Ae.object)).sort(p)[0];if(ge)return{text:`no \u2014 ${ne(ge)}`,replace:!0};let xe=fe.find(Ae=>z.has(Ae.subject)&&he.has(Ae.object)||z.has(Ae.object)&&he.has(Ae.subject));if(xe)return{text:`yes \u2014 ${ne(xe)}`,replace:!0};let Le=Tt[1].trim(),Et=Ht(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Le} and ${Et}. If no ${Le} is a ${Et}, teach me: "no ${Le} is a ${Et}".`,replace:!0,miss:!0}}if(fe.length){let z=q(Z.concat(Y),Y,se,{budget:10});for(let he of D){let ge=z.find(Ae=>Ae.subject===he&&I.has(Ae.object));if(!ge)continue;let xe=te.concat($e).find(Ae=>Ae.subject===ge.subject&&Ae.object===ge.viaType),Le=fe.find(Ae=>Ae.subject===ge.viaClass&&Ae.object===ge.object||Ae.subject===ge.object&&Ae.object===ge.viaClass),Et=[xe,Le].filter(Boolean).map(ne);return{text:`no \u2014 ${Et.length?Et.join("; "):`${ge.viaClass} and ${ge.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:wr,ON_PROPERTY_PREDICATE:E,SOME_VALUES_FROM_PREDICATE:ie,deriveSomeValuesFromSubsumption:Ee,ENTAILED_SCM_SVF_PROVENANCE:En,SCM_SVF_RULE_CONFIDENCE:Ws,entailedTrustFrom:Tl}=await Promise.resolve().then(()=>(Pt(),Jt)),Cl=d.filter(z=>z.predicate===E&&ce(z)),Il=d.filter(z=>z.predicate===ie&&ce(z));if(Cl.length&&Il.length){let z=new Map(Il.map(be=>[be.subject,be.object])),he=Cl.map(be=>({restriction:be.subject,property:be.object,target:z.get(be.subject)})).filter(be=>be.target),ge=new Set([ee,re,Se,E,ie,"owl:intersectionOf"]),xe=d.filter(be=>ce(be)&&!ge.has(be.predicate)),Le=xe.map(be=>[be.subject,be.predicate,be.object]),Et=wr(Le,Z,Y,he,{budget:10});for(let be of D){let Ze=Et.find(sn=>sn.subject===be&&I.has(sn.object));if(!Ze)continue;let us=xe.find(sn=>sn.subject===Ze.subject&&sn.predicate===Ze.viaProperty&&sn.object===Ze.viaValue),ds=te.find(sn=>sn.subject===Ze.viaValue&&sn.object===Ze.viaType),Ro=[us,ds].filter(Boolean).map(ne);return{text:`yes \u2014 ${Ro.length?Ro.join("; "):`${Ze.subject} ${Ze.viaProperty} ${Ze.viaValue}, and ${Ze.viaValue} is a ${Ze.viaType}.`}`,replace:!0}}let Ae=he.length>1?Ee(he,Y,{budget:10}):[];if(Ae.length){let be=Y.concat(Ae.map(ye=>[ye.subject,ye.object])),Ze=new Map(he.map(ye=>[ye.restriction,ye])),us=new Map;for(let ye of d)us.set(`${ye.subject}\0${ye.predicate}\0${ye.object}`,ye.trust);let ds=(ye,un,Ct)=>us.get(`${ye}\0${un}\0${Ct}`),Ro=new Map;for(let ye of Ae){let un=Ze.get(ye.subject),Ct=Ze.get(ye.object),Ut=[un&&ds(ye.subject,E,un.property),ds(ye.subject,ie,ye.viaY1),Ct&&ds(ye.object,E,Ct.property),ds(ye.object,ie,ye.viaY2),ds(ye.viaY1,ee,ye.viaY2)].filter(Eg=>typeof Eg=="number"),vr=Tl(Ut,Ws);vr!==null&&Ro.set(`${ye.subject}\0${ye.object}`,vr)}let sn=ye=>{if(ye.predicate!==ee)return te.find(Ut=>Ut.subject===ye.subject&&Ut.object===ye.object);let un=$e.find(Ut=>Ut.subject===ye.subject&&Ut.object===ye.object);if(un)return un;let Ct=Ae.find(Ut=>Ut.subject===ye.subject&&Ut.object===ye.object);return Ct?{subject:Ct.subject,predicate:ee,object:Ct.object,provenance:En,trust:Ro.get(`${Ct.subject}\0${Ct.object}`)}:void 0};for(let ye of D){let un=K(ye,I,Z,be,{maxHops:3});if(!un)continue;let Ct=un.map(sn);if(Ct.every(Boolean)){let Ut=Tl(Ct.map(vr=>vr.trust),1);return{text:`yes \u2014 ${Ai(Ct)}`,replace:!0,...Ut!==null?{trust:Ut}:{}}}}}}let xg=X(l,P),Ol=m.filter(z=>xg.has(z.subject)).sort(p),ls=P.trim(),yr=Ht(w[2]).trim(),kg=[...D].some(z=>K(z,I,Z,Y,{maxHops:BE}));if(Ol.length){let z=Ol.slice(0,3).map(ne).join("; "),he=kg?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${ls}", then ask me again.`:`If it's true, teach me: "${ls} is a kind of ${yr}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${ls} is a ${yr}. I do know: ${z}. ${he}`,replace:!0,miss:!0}}let Ll=m.filter(z=>D.has(z.object)&&I.has(z.subject)).sort(p)[0];return Ll?{text:`I can't confirm that \u2014 what I know runs the other way: ${ne(Ll)}. A kind doesn't reverse. If it's true, teach me: "every ${ls} is a ${yr}".`,replace:!0,miss:!0}:!Qe&&!V&&!yE(ls)&&!d.some(z=>D.has(z.subject)||D.has(z.object))?{text:`I can't confirm that \u2014 I don't know "${ls}" at all yet. If it's true, teach me: "${ls} is a kind of ${yr}".`,replace:!0,miss:!0}:null}let $=c.match(hS);if($){let[,I,P,D]=$,{SUBCLASS_PREDICATE:V,ON_PROPERTY_PREDICATE:K,buildCardinalityRestrictions:q,proveCardinalityAtLeast:ee,CARDINALITY_RULE_CONFIDENCE:re,entailedTrustFrom:Se}=await Promise.resolve().then(()=>(Pt(),Jt)),ce=Us,$e=m.filter(Z=>Z.predicate===V&&ce(Z)).map(Z=>[Z.subject,Z.object]),te=d.filter(Z=>(Z.predicate===K||Qh.has(Z.predicate))&&ce(Z)),Y=q(te);if(Y.length){let Z=X(l,I.trim()),ke=X(l,D.trim()),Oe=Number(P),H=Hh(Z,ke,(oe,fe)=>ee($e,Y,oe,fe,Oe,{}));if(H){let oe=d.find(me=>me.predicate===V&&me.subject===H.viaClass&&me.object===H.viaRestriction),fe=oe?.provenance?` (source: ${oe.provenance})`:"",se=H.kind==="exactly"?"exactly":"at least",Me=(me,Dt)=>`${me}${Dt===1?"":"s"}`,le=[oe?.trust,...te.filter(me=>me.subject===H.viaRestriction).map(me=>me.trust),...H.viaClass!==H.subject?[m.find(me=>me.predicate===V&&me.subject===H.subject&&me.object===H.viaClass)?.trust]:[]].filter(me=>typeof me=="number"),je=Se(le,re);return{text:`yes \u2014 every ${H.viaClass} has ${se} ${H.n} ${Me(H.object,H.n)}${fe}, so at least ${Oe} follows.`,replace:!0,...je!==null?{trust:je}:{}}}}}let k=c.match(gS);if(k){let[,I,P]=k,{SUBCLASS_PREDICATE:D,ON_PROPERTY_PREDICATE:V,buildCardinalityRestrictions:K,proveMaxCardinalityZeroDenial:q,CAX_MAXC0_RULE_CONFIDENCE:ee,entailedTrustFrom:re}=await Promise.resolve().then(()=>(Pt(),Jt)),Se=Us,ce=m.filter(Y=>Y.predicate===D&&Se(Y)).map(Y=>[Y.subject,Y.object]),$e=d.filter(Y=>(Y.predicate===V||Qh.has(Y.predicate))&&Se(Y)),te=K($e);if(te.length){let Y=X(l,I.trim()),Z=X(l,P.trim()),ke=Hh(Y,Z,(Oe,H)=>q(ce,te,Oe,H,{}));if(ke){let Oe=d.find(se=>se.predicate===D&&se.subject===ke.viaClass&&se.object===ke.viaRestriction),H=Oe?.provenance?` (source: ${Oe.provenance})`:"",oe=[Oe?.trust,...$e.filter(se=>se.subject===ke.viaRestriction).map(se=>se.trust),...ke.viaClass!==ke.subject?[m.find(se=>se.predicate===D&&se.subject===ke.subject&&se.object===ke.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),fe=re(oe,ee);return{text:`no \u2014 every ${ke.viaClass} has at most 0 ${ke.object}${H}.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let x=c.match(bS);if(x){let I=X(l,x[1]),P=d.filter(D=>D.predicate===ul&&I.has(D.subject)).sort(p);return P.length?f(P):null}let v=u.match(wS);if(v){let[,I,P]=v,D=X(l,I.trim()),V=X(l,P.replace(/^an?\s+/i,"").trim()),K=d.filter(q=>q.predicate===ul&&V.has(q.subject)&&D.has(q.object)).sort(p)[0];return K?{text:`yes \u2014 ${ne(K)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${P.trim()}.`,replace:!0}}let A=u.match(yS);if(A){let[,I,P]=A,D=X(l,I.replace(/^an?\s+/i,"").trim()),V=X(l,P.trim()),K=d.filter(q=>q.predicate===ul&&D.has(q.subject)&&V.has(q.object)).sort(p)[0];return K?{text:`yes \u2014 ${ne(K)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${P.trim()}.`,replace:!0}}let T=u.match(vS);if(T){let[,I,P]=T,D=X(l,I.trim()),V=X(l,`${P.trim()} method`),K=d.filter(q=>q.predicate===Ls&&D.has(q.subject)&&V.has(q.object)).sort(p)[0];return K?{text:`yes \u2014 ${ne(K)}`,replace:!0}:null}let C=u.match($S);if(C){let I=X(l,C[1].trim()),P=d.filter(D=>D.predicate===Ls&&I.has(D.subject)&&/ method$/.test(D.object)).sort(p);return P.length?f(P):null}let S=u.match(Zh);if(S){let I=S[1].trim(),P=eg.test(I)?null:cs.test(I)?r||null:I,D=S[2].trim().toLowerCase();if(P){let V=X(l,P),K=new Map,q=null;if(o){let te=await gr(o,P);if(q=te,te)for(let Y of Ci(o,te.id))for(let Z of X(l,Y.label))!V.has(Z)&&!K.has(Z)&&K.set(Z,Y.label),V.add(Z)}let ee=te=>te.predicate===dl&&l(te.object)===D||te.predicate===`tmct:${D}`&&te.object==="true",re=l(P).split(/\s+/).filter(te=>te.length>=4&&!pg.has(te)),Se=te=>re.some(Y=>new Set(String(te.subject||"").split(/\s+/)).has(Y)),ce=te=>V.has(te.subject)||re.length&&Se(te),$e=d.filter(te=>ce(te)&&ee(te)).sort(p)[0];if($e){let te=K.get($e.subject);return{text:te?`yes \u2014 the code graph says ${q.label} inherits ${te}, and ${ne($e)}`:`yes \u2014 ${ne($e)}`,replace:!0}}{let{findIsaChain:te,SUBCLASS_PREDICATE:Y,TYPE_PREDICATE:Z}=await Promise.resolve().then(()=>(Pt(),Jt)),ke=Us,Oe=d.filter(le=>le.predicate===Y&&ke(le)),H=d.filter(le=>le.predicate===Z&&ke(le)),oe=Oe.map(le=>[le.subject,le.object]),fe=H.map(le=>[le.subject,le.object]),se=le=>(le.predicate===Y?Oe:H).find(je=>je.subject===le.subject&&je.object===le.object),Me=X(l,D);for(let le of V){let je=te(le,Me,fe,oe,{maxHops:2});if(!je)continue;let me=je.map(se);if(me.every(Boolean))return{text:`yes \u2014 ${Ai(me)}`,replace:!0}}}if(d.some(ce)&&!n?.parsed)return{text:`I don't have a fact saying ${FE(P)} is ${D}.`,replace:!0};if(!n?.parsed&&!Wh.test(D))return tg(P,D)}}let R=kl(c).match(jE);if(R&&!hl.test(c)){let[,I,P,D]=R,V=P.toLowerCase();if(!ml.test(V)&&!bl.test(V)){let K=I.trim(),q=AE(await gl(V),D),ee=q.object.replace(/^an?\s+/i,"").trim();if(K&&ee){let re=q.predicate,Se=X(l,K),ce=X(l,ee),$e=[re,po(re)],te=d.filter(Z=>$e.includes(Z.predicate)&&Se.has(Z.subject)&&ce.has(Z.object)).sort(p)[0];if(te)return{text:`${Qp(te.predicate)?"no":"yes"} \u2014 ${ne(te)}`,replace:!0,generalVerbQuery:!0};let Y=d.filter(Z=>$e.includes(Z.predicate)&&Se.has(Z.subject));if(Y.length){let Z=Y.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${At({subject:K,predicate:re,object:ee})}. I do know: ${Z}.`,replace:!0,miss:!0}}return null}}}let M=c.match(_E);if(M&&!hl.test(c)){let[,I,P]=M,[D,V]=P.toLowerCase().split(/\s+/);if(!ml.test(D)&&!bl.test(D)){let K=I.trim();if(K){let q=await gl(D);V&&/^mgx:[a-z]+$/.test(q)&&(q=`${q}-${V}`);let ee=X(l,K),re=[q,po(q)],Se=Je(d.filter(ce=>re.includes(ce.predicate)&&ee.has(ce.subject)),i);if(Se.length)return{...f(Se),generalVerbQuery:!0}}}}let j=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(j&&!hl.test(c)){let[,I,P,D]=j,V=I.toLowerCase();if(!ml.test(V)&&!bl.test(V)&&!SE.test(V)){let K=await gl(V);/^mgx:[a-z]+$/.test(K)&&(K=`${K}-${P.toLowerCase()}`);let q=X(l,D.replace(/^(?:an?|the)\s+/i,"").trim()),ee=Je(d.filter(re=>re.predicate===K&&q.has(re.object)),i);if(ee.length)return{...f(ee),generalVerbQuery:!0}}}let _=c.match(fS);if(_){let I=X(l,_[1]),P=Je(d.filter(re=>I.has(re.subject)||I.has(re.object)),i);if(!P.length)return null;let D=I.has(P[0].subject)?P[0].subject:P[0].object,V=P.map(re=>` ${ne(re)}`),K=V.slice(0,Re),q=V.slice(Re),ee=q.length?`
177
- \u2026and ${q.length} more \u2014 say 'more' to see them.`:"";return{text:`${P.length} remembered fact${P.length===1?"":"s"} about ${D}:
170
+ `)}${Oe}`,replace:!0,...ke.length?{pending:{items:ke.map(H=>H.trim()),noun:"facts"}}:{}}}return null}async function TE(e,t){let n=await br(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&Wh[s]?Wh[s][0]:null}function Oi(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<IE;r+=1){let i=null;for(let a of e.relations||[])if(CE.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 kg(e,t,n,s,o=null,r=null,i={},a=null){return xg(await OE(e,t,n,s,o,r,i,a),n,t)}async function OE(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Ke(),is)))}catch{return null}let c=String(t).trim();if(o){let I=c.match(Bs);if(I){let P=await br(o,I[1]);if(P){let z=X(l,Kt(I[2])),V=Oi(o,P.id).find(G=>[...X(l,G.label)].some(ee=>z.has(ee)));if(V)return{text:`yes \u2014 the code graph says ${P.label} inherits ${V.label}.`,replace:!0};let K=await br(o,Kt(I[2]));if(K&&Oi(o,K.id).some(G=>G.id===P.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${K.label} inherits ${P.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 bt(e,a);if(!d.length){if(!Bs.test(u)&&!Sl.test(u)){let I=u.match(tg);if(I){let P=I[1].trim(),z=ls.test(P)?r||null:P;if(z&&!/^there\b/i.test(z)&&!n?.parsed&&!ng.test(P)&&!Gh.test(I[2].trim()))return sg(z,I[2].trim().toLowerCase())}}return null}let f=d.filter(I=>Un.has(I.predicate)),p=(I,P)=>P.trust-I.trust,m=I=>{let P=I.map(ne),z=P.slice(0,Re),V=P.slice(Re),K=V.length?`
171
+ \u2026and ${V.length} more \u2014 say 'more' to see them.`:"";return{text:z.join(`
172
+ `)+K,replace:!0,...V.length?{pending:{items:V,noun:"facts"}}:{}}};if(AE.test(c)){let I=Je(f.length?f:d,i);return I.length?m(I):null}let g=u.match(Sl);if(g){let I=g[1].trim(),P=ls.test(I)?r||null:I,z=g[2].trim().toLowerCase(),V=g[3].trim();if(P&&!El.has(z)){let K=hl(d),{findIsaChain:G}=await Promise.resolve().then(()=>(Pt(),Qt)),ee=Oe=>{let H=String(Oe||"").trim().toLowerCase(),oe=[];for(let me of d){let se=$l(me.predicate);if(!se)continue;if(se===H){oe.push({fact:me,aliasFacts:[]});continue}let Me=gl(G,se,new Set([H]),K,{maxHops:2});if(!Me)continue;let le=Me.map(je=>d.find(fe=>fe.predicate===wr&&fe.subject===je.subject&&fe.object===je.object));le.every(Boolean)&&oe.push({fact:me,aliasFacts:le})}return oe},{loadMemory:re,findRuleByName:Ee,resolveRelationChase:ce}=await Promise.resolve().then(()=>(Ke(),is)),{findActionPath:$e}=await Promise.resolve().then(()=>(vs(),Ar)),te=await re(e),Z=await ce(te,z,P,V,{relationFactsFor:ee,renderFactLine:ne,factPhrase:At,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:fl,findActionPath:$e});return Z?{text:`yes \u2014 ${Z.citation.join("; ")}`,replace:!0}:ee(z).length>0||!!Ee(te,z)?{text:`I know the '${z}' relation, but I can't confirm ${P} is the ${z} of ${V} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${z}' yet.`,replace:!0}}}let h=u.match(bg)||wg(u);if(h){let I=h[1].trim().toLowerCase(),P=h[2].trim(),z=ls.test(P)?r||null:P;if(z&&!El.has(I)){let V=hl(d),{findIsaChain:K}=await Promise.resolve().then(()=>(Pt(),Qt)),G=Oe=>{let H=String(Oe||"").trim().toLowerCase(),oe=[];for(let me of d){let se=$l(me.predicate);if(!se)continue;if(se===H){oe.push({fact:me,aliasFacts:[]});continue}let Me=gl(K,se,new Set([H]),V,{maxHops:2});if(!Me)continue;let le=Me.map(je=>d.find(fe=>fe.predicate===wr&&fe.subject===je.subject&&fe.object===je.object));le.every(Boolean)&&oe.push({fact:me,aliasFacts:le})}return oe},{loadMemory:ee,findRuleByName:re,resolveRelationChaseReverse:Ee}=await Promise.resolve().then(()=>(Ke(),is)),ce=await ee(e),{findReachableSet:$e}=await Promise.resolve().then(()=>(vs(),Ar)),Y=await Ee(ce,I,z,{relationFactsFor:G,renderFactLine:ne,factPhrase:At,factTermVariants:X,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:fl,findReachableSet:$e});return Y.length?{text:Y.map(H=>`${H.subject} \u2014 ${H.citation.join("; ")}`).join(`
173
+ `),replace:!0}:G(I).length>0||!!re(ce,I)?{text:/^what\b/i.test(u)?`I don't know what the ${I} of ${z} is from what you've told me.`:`I don't know anyone who is the ${I} of ${z} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${I}' yet.`,replace:!0}}}{let I=u.match(LE);if(I){let P=X(l,I[1]),z=Je(d.filter(V=>P.has(V.subject)||P.has(V.object)),i);if(z.length){let V=z.map(ne),K=V.slice(0,Re),G=V.slice(Re),ee=G.length?`
174
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:K.join(`
175
+ `)+ee,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}}let b=u.match(KS);if(b){let I=Tl(b[1].trim().toLowerCase()),P=b[2].trim(),z=ls.test(P)?r||null:P;if(z){let{loadMemory:V,findRuleByName:K,RULE_KIND_PROP:G,RULE_KIND_RECURSIVE:ee}=await Promise.resolve().then(()=>(Ke(),is)),re=await V(e),Ee=K(re,I),ce=Ee?.attributes?.find($e=>$e.prop===G)?.value;if(Ee&&ce===ee){let $e=Ee.attributes.find(Z=>Z.prop==="mgx:ruleBaseCase")?.value,te=Ee.attributes.find(Z=>Z.prop==="mgx:ruleRecStep")?.value,Y=l(z);if($e&&te&&Y){let Z=hl(d),{findIsaChain:ke}=await Promise.resolve().then(()=>(Pt(),Qt)),Oe=Me=>{let le=String(Me||"").trim().toLowerCase(),je=[];for(let fe of d){let zt=$l(fe.predicate);if(!zt)continue;if(zt===le){je.push({fact:fe,aliasFacts:[]});continue}let sn=gl(ke,zt,new Set([le]),Z,{maxHops:2});if(!sn)continue;let Qe=sn.map(ln=>d.find(Vt=>Vt.predicate===wr&&Vt.subject===ln.subject&&Vt.object===ln.object));Qe.every(Boolean)&&je.push({fact:fe,aliasFacts:Qe})}return je},{findReachableSet:H}=await Promise.resolve().then(()=>(vs(),Ar)),se=H({entity:Y,hop:0},Me=>{let le=Me.hop===0?$e:te;return Oe(le).filter(je=>je.fact.subject===Me.entity).map(je=>({action:je,nextState:{entity:je.fact.object,hop:Me.hop+1}}))},{maxDepth:20,stateKey:Me=>Me.entity});if(se.length)return{text:se.map(({node:le,path:je})=>{let fe=new Set,zt=[];for(let sn of je.actions){zt.push(ne(sn.fact));for(let Qe of sn.aliasFacts){let ln=Qe.id||`${Qe.subject}|${Qe.predicate}|${Qe.object}`;fe.has(ln)||(fe.add(ln),zt.push(`${At(Qe)}${Qe.provenance?` (source: ${Qe.provenance})`:""}`))}}return`${le.entity} \u2014 ${zt.join("; ")}`}).join(`
176
+ `),replace:!0}}}return null}}let y=c.match(QS),w=c.match(Bs)||yg(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Bs);if(w){let I=X(l,Kt(w[2])),P=r&&ls.test(w[1].trim())?r:w[1],z=new Set(X(l,P));if([...z].some(D=>I.has(D))){let D=Kt(w[2]).trim();return{text:`yes \u2014 ${jo(D)} ${D} is ${jo(D)} ${D}, trivially: every kind is a kind of itself.`,replace:!0}}let V=await TE(o,P);if(V)for(let D of X(l,V))z.add(D);let{findIsaChain:K,deriveDisjointViolations:G,SUBCLASS_PREDICATE:ee,TYPE_PREDICATE:re,DISJOINT_PREDICATE:Ee}=await Promise.resolve().then(()=>(Pt(),Qt)),ce=Us,$e=f.filter(D=>D.predicate===ee&&ce(D)),te=f.filter(D=>D.predicate===re&&ce(D)),Y=$e.map(D=>[D.subject,D.object]),Z=te.map(D=>[D.subject,D.object]),ke=f.filter(D=>D.predicate===ee),Oe=f.filter(D=>D.predicate===re),H=Oe.map(D=>[D.subject,D.object]),oe=ke.map(D=>[D.subject,D.object]),me=d.filter(D=>D.predicate===Ee&&ce(D)),se=me.map(D=>[D.subject,D.object]),Me=me.length?G(H.concat(oe),oe,se,{budget:20,focus:new Set([...z,...I])}):[],le=D=>{let he=Me.find(Le=>Le.subject===D&&I.has(Le.object));if(!he)return null;let ge=f.filter(Le=>I.has(Le.object)&&(Le.subject===he.viaClass||Le.subject===he.subject)).sort(p)[0],xe=me.find(Le=>Le.subject===he.viaClass&&Le.object===he.object||Le.subject===he.object&&Le.object===he.viaClass);return!ge||!xe?null:WS(ge,xe)},je=f.filter(D=>z.has(D.subject)&&I.has(D.object)).sort(p)[0],fe=d.filter(D=>D.predicate===Zr&&z.has(D.subject)&&I.has(D.object)).sort(p)[0],zt=me.find(D=>z.has(D.subject)&&I.has(D.object)||z.has(D.object)&&I.has(D.subject));if(je&&!fe){let D=le(je.subject);if(D)return D}let sn=hg(je,fe||zt);if(sn)return sn;if(me.length){let D=xe=>{let Le=new Set(xe),St=new Set(xe);for(let Ae=0;Ae<8&&St.size;Ae+=1){let be=new Set;for(let[Ze,ds]of oe)St.has(Ze)&&!Le.has(ds)&&be.add(ds);if(!be.size)break;for(let Ze of be)Le.add(Ze);St=be}return Le},he=D(I),ge=Me.find(xe=>z.has(xe.subject)&&he.has(xe.object)&&!D([xe.viaClass]).has(xe.object)&&!D([xe.object]).has(xe.viaClass));if(ge){let xe=f.filter(be=>z.has(be.subject)&&be.object===ge.viaClass).sort(p)[0],Le=me.find(be=>be.subject===ge.viaClass&&be.object===ge.object||be.subject===ge.object&&be.object===ge.viaClass),St=!I.has(ge.object),Ae=St?f.filter(be=>I.has(be.subject)&&be.object===ge.object).sort(p)[0]:null;if(xe&&Le&&(!St||Ae)){let be=Kt(w[2]).trim();return{text:`no \u2014 ${[xe,...Ae?[Ae]:[]].map(ne).join("; ")}; and ${At(Le)}${Le.provenance?` (source: ${Le.provenance})`:""} \u2014 so ${P} can never be ${jo(be)} ${be}.`,replace:!0}}}}let Qe=await br(o,P);if(Qe){let D=new Map;for(let ge of Oi(o,Qe.id))for(let xe of X(l,ge.label))!z.has(xe)&&!D.has(xe)&&D.set(xe,ge.label);let he=f.filter(ge=>D.has(ge.subject)&&I.has(ge.object)).sort(p)[0];if(he)return{text:`yes \u2014 the code graph says ${Qe.label} inherits ${D.get(he.subject)}, and ${ne(he)}`,replace:!0}}let ln=D=>(D.predicate===ee?$e:te).find(he=>he.subject===D.subject&&he.object===D.object);for(let D of z){let he=K(D,I,Z,Y,{maxHops:2});if(!he)continue;let ge=le(D);if(ge)return ge;let xe=he.map(ln);if(xe.every(Boolean))return{text:`yes \u2014 ${Ci(xe)}`,replace:!0}}let Vt=D=>(D.predicate===ee?ke:Oe).find(he=>he.subject===D.subject&&he.object===D.object);for(let D of z){let he=K(D,I,H,oe,{maxHops:2});if(!he)continue;let ge=le(D);if(ge)return ge;let xe=he.map(Vt);if(xe.every(Boolean)&&xe.some(ce))return{text:`yes \u2014 ${Ci(xe)}`,replace:!0}}let Dt=P.match(/^(.*\S)\s+not$/i),Tt=Dt&&[Dt[0],r&&ls.test(Dt[1].trim())?r:Dt[1]];if(Tt){let D=X(l,Tt[1]),he=I,ge=f.filter(Ae=>D.has(Ae.subject)&&he.has(Ae.object)).sort(p)[0];if(ge)return{text:`no \u2014 ${ne(ge)}`,replace:!0};let xe=me.find(Ae=>D.has(Ae.subject)&&he.has(Ae.object)||D.has(Ae.object)&&he.has(Ae.subject));if(xe)return{text:`yes \u2014 ${ne(xe)}`,replace:!0};let Le=Tt[1].trim(),St=Kt(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Le} and ${St}. If no ${Le} is a ${St}, teach me: "no ${Le} is a ${St}".`,replace:!0,miss:!0}}if(me.length){let D=G(Z.concat(Y),Y,se,{budget:10});for(let he of z){let ge=D.find(Ae=>Ae.subject===he&&I.has(Ae.object));if(!ge)continue;let xe=te.concat($e).find(Ae=>Ae.subject===ge.subject&&Ae.object===ge.viaType),Le=me.find(Ae=>Ae.subject===ge.viaClass&&Ae.object===ge.object||Ae.subject===ge.object&&Ae.object===ge.viaClass),St=[xe,Le].filter(Boolean).map(ne);return{text:`no \u2014 ${St.length?St.join("; "):`${ge.viaClass} and ${ge.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:yr,ON_PROPERTY_PREDICATE:k,SOME_VALUES_FROM_PREDICATE:ie,deriveSomeValuesFromSubsumption:Se,ENTAILED_SCM_SVF_PROVENANCE:Sn,SCM_SVF_RULE_CONFIDENCE:Ws,entailedTrustFrom:Ol}=await Promise.resolve().then(()=>(Pt(),Qt)),Ll=d.filter(D=>D.predicate===k&&ce(D)),Nl=d.filter(D=>D.predicate===ie&&ce(D));if(Ll.length&&Nl.length){let D=new Map(Nl.map(be=>[be.subject,be.object])),he=Ll.map(be=>({restriction:be.subject,property:be.object,target:D.get(be.subject)})).filter(be=>be.target),ge=new Set([ee,re,Ee,k,ie,"owl:intersectionOf"]),xe=d.filter(be=>ce(be)&&!ge.has(be.predicate)),Le=xe.map(be=>[be.subject,be.predicate,be.object]),St=yr(Le,Z,Y,he,{budget:10});for(let be of z){let Ze=St.find(on=>on.subject===be&&I.has(on.object));if(!Ze)continue;let ds=xe.find(on=>on.subject===Ze.subject&&on.predicate===Ze.viaProperty&&on.object===Ze.viaValue),ps=te.find(on=>on.subject===Ze.viaValue&&on.object===Ze.viaType),Ro=[ds,ps].filter(Boolean).map(ne);return{text:`yes \u2014 ${Ro.length?Ro.join("; "):`${Ze.subject} ${Ze.viaProperty} ${Ze.viaValue}, and ${Ze.viaValue} is a ${Ze.viaType}.`}`,replace:!0}}let Ae=he.length>1?Se(he,Y,{budget:10}):[];if(Ae.length){let be=Y.concat(Ae.map(ye=>[ye.subject,ye.object])),Ze=new Map(he.map(ye=>[ye.restriction,ye])),ds=new Map;for(let ye of d)ds.set(`${ye.subject}\0${ye.predicate}\0${ye.object}`,ye.trust);let ps=(ye,un,Ct)=>ds.get(`${ye}\0${un}\0${Ct}`),Ro=new Map;for(let ye of Ae){let un=Ze.get(ye.subject),Ct=Ze.get(ye.object),Ut=[un&&ps(ye.subject,k,un.property),ps(ye.subject,ie,ye.viaY1),Ct&&ps(ye.object,k,Ct.property),ps(ye.object,ie,ye.viaY2),ps(ye.viaY1,ee,ye.viaY2)].filter(Rg=>typeof Rg=="number"),$r=Ol(Ut,Ws);$r!==null&&Ro.set(`${ye.subject}\0${ye.object}`,$r)}let on=ye=>{if(ye.predicate!==ee)return te.find(Ut=>Ut.subject===ye.subject&&Ut.object===ye.object);let un=$e.find(Ut=>Ut.subject===ye.subject&&Ut.object===ye.object);if(un)return un;let Ct=Ae.find(Ut=>Ut.subject===ye.subject&&Ut.object===ye.object);return Ct?{subject:Ct.subject,predicate:ee,object:Ct.object,provenance:Sn,trust:Ro.get(`${Ct.subject}\0${Ct.object}`)}:void 0};for(let ye of z){let un=K(ye,I,Z,be,{maxHops:3});if(!un)continue;let Ct=un.map(on);if(Ct.every(Boolean)){let Ut=Ol(Ct.map($r=>$r.trust),1);return{text:`yes \u2014 ${Ci(Ct)}`,replace:!0,...Ut!==null?{trust:Ut}:{}}}}}}let jg=X(l,P),Ml=f.filter(D=>jg.has(D.subject)).sort(p),us=P.trim(),vr=Kt(w[2]).trim(),_g=[...z].some(D=>K(D,I,Z,Y,{maxHops:YS}));if(Ml.length){let D=Ml.slice(0,3).map(ne).join("; "),he=_g?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${us}", then ask me again.`:`If it's true, teach me: "${us} is a kind of ${vr}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${us} is a ${vr}. I do know: ${D}. ${he}`,replace:!0,miss:!0}}let Pl=f.filter(D=>z.has(D.object)&&I.has(D.subject)).sort(p)[0];return Pl?{text:`I can't confirm that \u2014 what I know runs the other way: ${ne(Pl)}. A kind doesn't reverse. If it's true, teach me: "every ${us} is a ${vr}".`,replace:!0,miss:!0}:!Qe&&!V&&!jS(us)&&!d.some(D=>z.has(D.subject)||z.has(D.object))?{text:`I can't confirm that \u2014 I don't know "${us}" at all yet. If it's true, teach me: "${us} is a kind of ${vr}".`,replace:!0,miss:!0}:null}let v=c.match(xE);if(v){let[,I,P,z]=v,{SUBCLASS_PREDICATE:V,ON_PROPERTY_PREDICATE:K,buildCardinalityRestrictions:G,proveCardinalityAtLeast:ee,CARDINALITY_RULE_CONFIDENCE:re,entailedTrustFrom:Ee}=await Promise.resolve().then(()=>(Pt(),Qt)),ce=Us,$e=f.filter(Z=>Z.predicate===V&&ce(Z)).map(Z=>[Z.subject,Z.object]),te=d.filter(Z=>(Z.predicate===K||eg.has(Z.predicate))&&ce(Z)),Y=G(te);if(Y.length){let Z=X(l,I.trim()),ke=X(l,z.trim()),Oe=Number(P),H=Yh(Z,ke,(oe,me)=>ee($e,Y,oe,me,Oe,{}));if(H){let oe=d.find(fe=>fe.predicate===V&&fe.subject===H.viaClass&&fe.object===H.viaRestriction),me=oe?.provenance?` (source: ${oe.provenance})`:"",se=H.kind==="exactly"?"exactly":"at least",Me=(fe,zt)=>`${fe}${zt===1?"":"s"}`,le=[oe?.trust,...te.filter(fe=>fe.subject===H.viaRestriction).map(fe=>fe.trust),...H.viaClass!==H.subject?[f.find(fe=>fe.predicate===V&&fe.subject===H.subject&&fe.object===H.viaClass)?.trust]:[]].filter(fe=>typeof fe=="number"),je=Ee(le,re);return{text:`yes \u2014 every ${H.viaClass} has ${se} ${H.n} ${Me(H.object,H.n)}${me}, so at least ${Oe} follows.`,replace:!0,...je!==null?{trust:je}:{}}}}}let x=c.match(kE);if(x){let[,I,P]=x,{SUBCLASS_PREDICATE:z,ON_PROPERTY_PREDICATE:V,buildCardinalityRestrictions:K,proveMaxCardinalityZeroDenial:G,CAX_MAXC0_RULE_CONFIDENCE:ee,entailedTrustFrom:re}=await Promise.resolve().then(()=>(Pt(),Qt)),Ee=Us,ce=f.filter(Y=>Y.predicate===z&&Ee(Y)).map(Y=>[Y.subject,Y.object]),$e=d.filter(Y=>(Y.predicate===V||eg.has(Y.predicate))&&Ee(Y)),te=K($e);if(te.length){let Y=X(l,I.trim()),Z=X(l,P.trim()),ke=Yh(Y,Z,(Oe,H)=>G(ce,te,Oe,H,{}));if(ke){let Oe=d.find(se=>se.predicate===z&&se.subject===ke.viaClass&&se.object===ke.viaRestriction),H=Oe?.provenance?` (source: ${Oe.provenance})`:"",oe=[Oe?.trust,...$e.filter(se=>se.subject===ke.viaRestriction).map(se=>se.trust),...ke.viaClass!==ke.subject?[f.find(se=>se.predicate===z&&se.subject===ke.subject&&se.object===ke.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),me=re(oe,ee);return{text:`no \u2014 every ${ke.viaClass} has at most 0 ${ke.object}${H}.`,replace:!0,...me!==null?{trust:me}:{}}}}}let $=c.match(SE);if($){let I=X(l,$[1]),P=d.filter(z=>z.predicate===ml&&I.has(z.subject)).sort(p);return P.length?m(P):null}let j=u.match(EE);if(j){let[,I,P]=j,z=X(l,I.trim()),V=X(l,P.replace(/^an?\s+/i,"").trim()),K=d.filter(G=>G.predicate===ml&&V.has(G.subject)&&z.has(G.object)).sort(p)[0];return K?{text:`yes \u2014 ${ne(K)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} owns/maintains ${P.trim()}.`,replace:!0}}let E=u.match(jE);if(E){let[,I,P]=E,z=X(l,I.replace(/^an?\s+/i,"").trim()),V=X(l,P.trim()),K=d.filter(G=>G.predicate===ml&&z.has(G.subject)&&V.has(G.object)).sort(p)[0];return K?{text:`yes \u2014 ${ne(K)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${I.trim().toLowerCase()} is owned by ${P.trim()}.`,replace:!0}}let _=u.match(_E);if(_){let[,I,P]=_,z=X(l,I.trim()),V=X(l,`${P.trim()} method`),K=d.filter(G=>G.predicate===Ls&&z.has(G.subject)&&V.has(G.object)).sort(p)[0];return K?{text:`yes \u2014 ${ne(K)}`,replace:!0}:null}let C=u.match(RE);if(C){let I=X(l,C[1].trim()),P=d.filter(z=>z.predicate===Ls&&I.has(z.subject)&&/ method$/.test(z.object)).sort(p);return P.length?m(P):null}let S=u.match(tg);if(S){let I=S[1].trim(),P=ng.test(I)?null:ls.test(I)?r||null:I,z=S[2].trim().toLowerCase();if(P){let V=X(l,P),K=new Map,G=null;if(o){let te=await br(o,P);if(G=te,te)for(let Y of Oi(o,te.id))for(let Z of X(l,Y.label))!V.has(Z)&&!K.has(Z)&&K.set(Z,Y.label),V.add(Z)}let ee=te=>te.predicate===fl&&l(te.object)===z||te.predicate===`tmct:${z}`&&te.object==="true",re=l(P).split(/\s+/).filter(te=>te.length>=4&&!gg.has(te)),Ee=te=>re.some(Y=>new Set(String(te.subject||"").split(/\s+/)).has(Y)),ce=te=>V.has(te.subject)||re.length&&Ee(te),$e=d.filter(te=>ce(te)&&ee(te)).sort(p)[0];if($e){let te=K.get($e.subject);return{text:te?`yes \u2014 the code graph says ${G.label} inherits ${te}, and ${ne($e)}`:`yes \u2014 ${ne($e)}`,replace:!0}}{let{findIsaChain:te,SUBCLASS_PREDICATE:Y,TYPE_PREDICATE:Z}=await Promise.resolve().then(()=>(Pt(),Qt)),ke=Us,Oe=d.filter(le=>le.predicate===Y&&ke(le)),H=d.filter(le=>le.predicate===Z&&ke(le)),oe=Oe.map(le=>[le.subject,le.object]),me=H.map(le=>[le.subject,le.object]),se=le=>(le.predicate===Y?Oe:H).find(je=>je.subject===le.subject&&je.object===le.object),Me=X(l,z);for(let le of V){let je=te(le,Me,me,oe,{maxHops:2});if(!je)continue;let fe=je.map(se);if(fe.every(Boolean))return{text:`yes \u2014 ${Ci(fe)}`,replace:!0}}}if(d.some(ce)&&!n?.parsed)return{text:`I don't have a fact saying ${GS(P)} is ${z}.`,replace:!0};if(!n?.parsed&&!Gh.test(z))return sg(P,z)}}let T=jl(c).match(OS);if(T&&!wl.test(c)){let[,I,P,z]=T,V=P.toLowerCase();if(!bl.test(V)&&!vl.test(V)){let K=I.trim(),G=MS(await yl(V),z),ee=G.object.replace(/^an?\s+/i,"").trim();if(K&&ee){let re=G.predicate,Ee=X(l,K),ce=X(l,ee),$e=[re,po(re)],te=d.filter(Z=>$e.includes(Z.predicate)&&Ee.has(Z.subject)&&ce.has(Z.object)).sort(p)[0];if(te)return{text:`${em(te.predicate)?"no":"yes"} \u2014 ${ne(te)}`,replace:!0,generalVerbQuery:!0};let Y=d.filter(Z=>$e.includes(Z.predicate)&&Ee.has(Z.subject));if(Y.length){let Z=Y.slice(0,3).map(ne).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${At({subject:K,predicate:re,object:ee})}. I do know: ${Z}.`,replace:!0,miss:!0}}return null}}}let N=c.match(LS);if(N&&!wl.test(c)){let[,I,P]=N,[z,V]=P.toLowerCase().split(/\s+/);if(!bl.test(z)&&!vl.test(z)){let K=I.trim();if(K){let G=await yl(z);V&&/^mgx:[a-z]+$/.test(G)&&(G=`${G}-${V}`);let ee=X(l,K),re=[G,po(G)],Ee=Je(d.filter(ce=>re.includes(ce.predicate)&&ee.has(ce.subject)),i);if(Ee.length)return{...m(Ee),generalVerbQuery:!0}}}}let R=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(R&&!wl.test(c)){let[,I,P,z]=R,V=I.toLowerCase();if(!bl.test(V)&&!vl.test(V)&&!IS.test(V)){let K=await yl(V);/^mgx:[a-z]+$/.test(K)&&(K=`${K}-${P.toLowerCase()}`);let G=X(l,z.replace(/^(?:an?|the)\s+/i,"").trim()),ee=Je(d.filter(re=>re.predicate===K&&G.has(re.object)),i);if(ee.length)return{...m(ee),generalVerbQuery:!0}}}let A=c.match(vE);if(A){let I=X(l,A[1]),P=Je(d.filter(re=>I.has(re.subject)||I.has(re.object)),i);if(!P.length)return null;let z=I.has(P[0].subject)?P[0].subject:P[0].object,V=P.map(re=>` ${ne(re)}`),K=V.slice(0,Re),G=V.slice(Re),ee=G.length?`
177
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:`${P.length} remembered fact${P.length===1?"":"s"} about ${z}:
178
178
  ${K.join(`
179
- `)}${ee}`,replace:!0,...q.length?{pending:{items:q.map(re=>re.trim()),noun:"facts"}}:{}}}let O=n?.parsed?.shape==="meta"?n.parsed.object:null,F=!1,N=c.match(mS);if(N)O=N[1],F=!0;else if(!O&&!n?.parsed){let I=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(O=I[1])}if(!O)return null;let U=X(l,O),G=Je(m.filter(I=>U.has(I.subject)),i),B=Je(m.filter(I=>U.has(I.object)),i),W=F?G.length?G:B:B.length?B:G;return W.length?f(W):null}var El,yE,tn,Ri,zh,ng,UF,Uh,vE,BF,WF,sg,og,rg,$E,Bh,GF,qF,VF,HF,KF,jl,YF,xE,Ge,ul,dl,br,kE,Us,XF,JF,QF,ZF,eD,tD,nD,sD,oD,rD,iD,aD,cD,lD,uD,Wh,Oi,EE,dD,pD,Rl,ig,fD,mD,hD,ml,hl,SE,gD,jE,_E,bl,RE,TE,bD,wD,yD,ag,vD,$D,cg,xD,kD,CE,ED,SD,jD,_o,Gh,Al,At,OE,NE,Ti,DE,pg,_D,$l,fg,zE,UE,Bs,Un,BE,WE,GE,xl,qE,VE,Re,HE,KE,YE,XE,JE,QE,Kh,ZE,eS,tS,nS,gg,oS,rS,aS,cS,lS,uS,Jh,dS,fS,mS,hS,gS,Qh,bS,wS,yS,vS,$S,Zh,cs,eg,tg,xS,ES,SS,RD,vg,_S,AD,TD,$g,CD,ID,OD,LD,ND,Li,MD,PD,FD,DD,RS,zD,UD,ll=L(()=>{De();Tm();It();Te();es();$i();Lo();Bc();Om();Ke();oc();Gc();Fm();_n();Hn();Uo();Fc();Dc();zc();Do();ko();Bm();ki();Gm();qm();Kc();Yc();Vm();Hm();Jm();Lc();wh();xh();Eo();Ph();Fr(void 0);yi(vi);El=new Set(["it","this","that","here"]),yE=e=>El.has(String(e||"").trim().toLowerCase()),tn={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"},Ri=e=>e?`${String(e).toLowerCase()}(s)`:"entities",zh="look up a taught fact about a subject/verb/object";ng={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}},UF=new Set(["stats","memory","focus",...Object.keys(ng)]),Uh={Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},vE=new Set(["have","has","holds","hold"]),BF=new RegExp(`\\b(?:${[...Object.keys(ae),...Object.keys(fs)].filter(e=>!vE.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),WF=new Set([...Am.map(e=>e.name),...Object.values(ng).map(e=>e.tool)]),sg=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"]),og=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"]),rg=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"]),$E=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right"]),Bh=e=>e.replace(/(.)\1+/g,"$1");GF=Sl(sg),qF=Sl(og),VF=Sl(rg),HF=new RegExp(`^(?:${[...$E].map(Ve).join("|")})\\s+(.+)$`,"i"),KF=[...sg,...og,...rg,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],jl="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",YF=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${jl})\\s+than\\s+(.+)$`,"i"),xE=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${jl})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ge="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",ul="mgx:ownedBy",dl="mgx:hasProperty",br="rdfs:subClassOf",kE=new Set(["operator","teach","entailed"]),Us=e=>!!e.sourceTypes?.some(t=>kE.has(t));XF=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ge})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),JF=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ge})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),QF=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ge})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Ge})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),ZF=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ge})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${jl})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),eD=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ge})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Ge})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),tD=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ge})\\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"),nD=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ge})\\s+([\\w-]+)[.!?]*$`,"i"),sD=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Ge})\\s+([\\w-]+)[.!?]*$`,"i"),oD=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ge})\\s+([\\w-]+)[.!?]*$`,"i"),rD=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ge})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),iD=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ge})\\s+([\\w-]+)[?.!]*$`,"i"),aD=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ge})\\s+([\\w-]+)[?.!]*$`,"i"),cD=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ge})\\s+([\\w-]+)$`,"i"),lD=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ge})\\s+(.+?)[?.!\\s]*$`,"i"),uD=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ge}))?[?.!\\s]*$`,"i"),Wh=/^(?:anywhere|everywhere|nowhere|somewhere)$/i;Oi="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",EE="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",dD=new RegExp(`^(.+?)\\s+(${EE})\\s+(.+)$`,"i"),pD=new RegExp(`^([\\w'-]+)\\s+${Oi}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),Rl="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",ig="with|to|from|by|of|in|on|for|as|about|into",fD=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${Oi}(${Rl})\\s+(${ig})\\s+(.+)$`,"i"),mD=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${Rl})\\s+(${ig})\\s+(.+)$`,"i"),hD=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ge})\\s+(.+?)[.!?]*$`,"i"),ml=/^(?:is|are|am|owns|maintains)$/i,hl=/\b(?:is|are|am|owns|maintains)\b/i,SE=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)$","i"),gD=new RegExp(`^(?:${gs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");jE=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${Oi}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),_E=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${Oi}([a-z]+(?:\\s+(?:${Ge}))?)[?.!\\s]*$`,"i"),bl=/^(?:be|own|maintain)$/i,RE=new RegExp(`^(${Ge})\\s+(.+)$`,"i");TE=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're","you","i","it","they","he","she","we"]),bD=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${TE.join("|")})\\s+\\S+`,"i"),wD=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ge})\\s+([\\w-]+)$`,"i"),yD=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ge})\\s+([\\w-]+)$`,"i"),ag="(?:\\s+(?:exactly|really|actually|anyway))?",vD=new RegExp(`^what\\s+does\\s+(.+?)\\s+do${ag}\\??$`,"i"),$D=new RegExp(`^what\\s+(.+?)\\s+does${ag}\\??$`,"i"),cg="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",xD=new RegExp(`^who\\s+(?:is|was)\\s+${cg}$`,"i"),kD=new RegExp(`^what\\s+(?:did|has)\\s+${cg}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),CE="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",ED=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${CE}\\b`,"i"),SD=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");jD=new Set([...Object.keys(ae).flatMap(e=>e.split(/[\s-]+/)),...Vt,...on,"owns","maintains"].filter(e=>e.length>=3)),_o={"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"},Gh=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"]),Al=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);At=e=>`${e.subject} ${ug(e.predicate)} ${e.object}`;OE=Object.entries(_o).filter(([e])=>!Al.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);NE=/ \(source: [^)]*\)$/;Ti=null;DE=/^(?:every|each|all|any)\s+/i;pg=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"]),_D=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("|"))),$l=/^(?: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,fg=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,zE=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i;UE=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Bs=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,Un=new Set(["rdfs:subClassOf","rdf:type"]),BE=6,WE=/^why\s+(?=(?:is|are)\b)/i,GE=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;xl=new Set(["kind","sort","type","subclass","superclass"]),qE=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,VE=/^(?: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,Re=32,HE=/^(?:can|could)\s+(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,KE=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,YE=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,XE=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,JE=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,QE=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,Kh=/^mgx:[a-z]+-(?:on|in|at|inside|under|below|above|near|beside|behind|by)$/,ZE=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ge})\\s+(.+?)\\s*[?.!]*$`,"i"),eS=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,tS=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,nS=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;gg="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",oS=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${gg})[?.!\\s]*$`,"i"),rS=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${gg})\\s+([\\w'-]+)[?.!\\s]*$`,"i");aS=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),cS=Object.entries(_o).filter(([e])=>!aS.has(e)&&!Al.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Ve(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),lS=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),uS=Object.entries(_o).filter(([e])=>!lS.has(e)&&!Al.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=Ve(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=[lg(s),...o].map(Ve).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),Jh=/^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,dS=new Set(["changed","change","changes","updated","modified","happened","occurred"]);fS=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,mS=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,hS=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,gS=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,Qh=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),bS=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,wS=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,yS=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,vS=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,$S=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,Zh=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,cs=/^(?:it|this|that)$/i,eg=/^(?:you|i|they|he|she|we)\b/i,tg=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${Ii(e)} is ${t}".`,replace:!0}),xS=/^(?: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;ES=/inherit|supertype|subclass|extend|specializ/i,SS=8;RD=new RegExp(`\\b(?:${[...El].join("|")})\\b`,"i"),vg=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,_S=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,AD=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Ue).join("|")})$`,"i"),TD={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:tn.contains,subclasses:tn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:tn.calls,callees:tn.calls,tests:tn.tests,untested:tn.tests,history:tn.touches,exports:tn.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"},$g="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",CD=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+${$g}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),ID=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${$g}\\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"),OD=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"),LD=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"),ND=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"),Li="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",MD=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${Li}\\s*\\??$`,"i"),PD=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${Li}\\s*\\??$`,"i"),FD=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${Li}\\s*\\??$`,"i"),DD=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${Li}\\s*[.!]*$`,"i"),RS=Object.freeze([...El].filter(e=>e!=="here").concat("they")),zD=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${RS.join("|")})\\b(\\s+\\S.*)?$`,"i"),UD=J(".tmct","memory","corpus-seed.json")});ll();Ke();globalThis.tmctMemoryAsk={factAnswer:bg,factReadBack:yg,createInMemoryStore:pi,normFactTerm:Q};})();
179
+ `)}${ee}`,replace:!0,...G.length?{pending:{items:G.map(re=>re.trim()),noun:"facts"}}:{}}}let O=n?.parsed?.shape==="meta"?n.parsed.object:null,F=!1,M=c.match($E);if(M)O=M[1],F=!0;else if(!O&&!n?.parsed){let I=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);I&&(O=I[1])}if(!O)return null;let B=X(l,O),q=Je(f.filter(I=>B.has(I.subject)),i),U=Je(f.filter(I=>B.has(I.object)),i),W=F?q.length?q:U:U.length?U:q;return W.length?m(W):null}var _l,jS,nn,Ti,Bh,og,KF,Wh,_S,YF,XF,rg,ig,ag,RS,qh,JF,QF,ZF,ez,tz,Al,nz,AS,qe,ml,fl,wr,TS,Us,sz,oz,rz,iz,az,cz,lz,uz,dz,pz,mz,fz,hz,gz,bz,Gh,Ni,CS,wz,yz,Cl,cg,vz,$z,xz,bl,wl,IS,kz,OS,LS,vl,NS,lg,ug,PS,Sz,Ez,jz,_z,dg,Rz,Az,pg,Tz,Cz,FS,Iz,Oz,Lz,_o,Vh,Il,At,DS,BS,Ii,VS,gg,Nz,Sl,bg,HS,KS,Bs,Un,YS,XS,JS,El,QS,ZS,Re,eE,tE,nE,sE,oE,rE,Xh,iE,aE,cE,lE,vg,dE,pE,fE,hE,gE,bE,Zh,wE,vE,$E,xE,kE,eg,SE,EE,jE,_E,RE,tg,ls,ng,sg,AE,CE,IE,Mz,Sg,LE,Pz,Fz,Eg,zz,Dz,Uz,Bz,Wz,Mi,qz,Gz,Vz,Hz,NE,Kz,Yz,pl=L(()=>{ze();If();It();Te();ts();ki();No();Gc();Nf();Ke();ac();Hc();Df();_n();Kn();Bo();Uc();Bc();Wc();Do();ko();qf();Ei();Vf();Hf();Jc();Qc();Kf();Yf();Zf();Pc();vh();Sh();So();zh();Dr(void 0);$i(xi);_l=new Set(["it","this","that","here"]),jS=e=>_l.has(String(e||"").trim().toLowerCase()),nn={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"},Ti=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Bh="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}},KF=new Set(["stats","memory","focus",...Object.keys(og)]),Wh={Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},_S=new Set(["have","has","holds","hold"]),YF=new RegExp(`\\b(?:${[...Object.keys(ae),...Object.keys(qn)].filter(e=>!_S.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),XF=new Set([...Cf.map(e=>e.name),...Object.values(og).map(e=>e.tool)]),rg=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"]),ag=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","gtg thx"]),RS=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),qh=e=>e.replace(/(.)\1+/g,"$1");JF=Rl(rg),QF=Rl(ig),ZF=Rl(ag),ez=new RegExp(`^(?:${[...RS].map(Ve).join("|")})\\s+(.+)$`,"i"),tz=[...rg,...ig,...ag,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],Al="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",nz=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${Al})\\s+than\\s+(.+)$`,"i"),AS=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${Al})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),qe="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",ml="mgx:ownedBy",fl="mgx:hasProperty",wr="rdfs:subClassOf",TS=new Set(["operator","teach","entailed"]),Us=e=>!!e.sourceTypes?.some(t=>TS.has(t));sz=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),oz=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),rz=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"),iz=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+(${Al})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),az=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"),cz=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"),lz=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),uz=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"),dz=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${qe})\\s+([\\w-]+)[.!?]*$`,"i"),pz=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${qe})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),mz=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${qe})\\s+([\\w-]+)[?.!]*$`,"i"),fz=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${qe})\\s+([\\w-]+)[?.!]*$`,"i"),hz=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${qe})\\s+([\\w-]+)$`,"i"),gz=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${qe})\\s+(.+?)[?.!\\s]*$`,"i"),bz=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${qe}))?[?.!\\s]*$`,"i"),Gh=/^(?:anywhere|everywhere|nowhere|somewhere)$/i;Ni="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",CS="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",wz=new RegExp(`^(.+?)\\s+(${CS})\\s+(.+)$`,"i"),yz=new RegExp(`^([\\w'-]+)\\s+${Ni}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),Cl="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",cg="with|to|from|by|of|in|on|for|as|about|into",vz=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${Ni}(${Cl})\\s+(${cg})\\s+(.+)$`,"i"),$z=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${Cl})\\s+(${cg})\\s+(.+)$`,"i"),xz=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${qe})\\s+(.+?)[.!?]*$`,"i"),bl=/^(?:is|are|am|owns|maintains)$/i,wl=/\b(?:is|are|am|owns|maintains)\b/i,IS=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"),kz=new RegExp(`^(?:${gs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");OS=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${Ni}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),LS=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${Ni}([a-z]+(?:\\s+(?:${qe}))?)[?.!\\s]*$`,"i"),vl=/^(?:be|own|maintain)$/i,NS=new RegExp(`^(${qe})\\s+(.+)$`,"i");lg=Object.freeze(["you","i","it","they","he","she","we"]),ug=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),PS=Object.freeze([...ug,...lg]),Sz=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${PS.join("|")})\\s+\\S+`,"i"),Ez=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${lg.join("|")})\\s+(?:is|are|am|was|were)|(${ug.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),jz=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${qe})\\s+([\\w-]+)$`,"i"),_z=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${qe})\\s+([\\w-]+)$`,"i"),dg="(?:\\s+(?:exactly|really|actually|anyway))?",Rz=new RegExp(`^what\\s+does\\s+(.+?)\\s+do${dg}\\??$`,"i"),Az=new RegExp(`^what\\s+(.+?)\\s+does${dg}\\??$`,"i"),pg="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",Tz=new RegExp(`^who\\s+(?:is|was)\\s+${pg}$`,"i"),Cz=new RegExp(`^what\\s+(?:did|has)\\s+${pg}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),FS="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",Iz=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${FS}\\b`,"i"),Oz=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");Lz=new Set([...Object.keys(ae).flatMap(e=>e.split(/[\s-]+/)),...Ht,...rn,"owns","maintains"].filter(e=>e.length>=3)),_o={"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"},Vh=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"]),Il=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);At=e=>`${e.subject} ${fg(e.predicate)} ${e.object}`;DS=Object.entries(_o).filter(([e])=>!Il.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);BS=/ \(source: [^)]*\)$/;Ii=null;VS=/^(?:every|each|all|any)\s+/i;gg=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"]),Nz=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("|"))),Sl=/^(?: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,bg=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,HS=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i;KS=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Bs=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,Un=new Set(["rdfs:subClassOf","rdf:type"]),YS=6,XS=/^why\s+(?=(?:is|are)\b)/i,JS=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;El=new Set(["kind","sort","type","subclass","superclass"]),QS=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,ZS=/^(?: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,Re=32,eE=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,tE=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,nE=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,sE=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,oE=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,rE=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,Xh=/^mgx:[a-z]+-(?:on|in|at|inside|under|below|above|near|beside|behind|by)$/,iE=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${qe})\\s+(.+?)\\s*[?.!]*$`,"i"),aE=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,cE=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,lE=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;vg="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",dE=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${vg})[?.!\\s]*$`,"i"),pE=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${vg})\\s+([\\w'-]+)[?.!\\s]*$`,"i");fE=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),hE=Object.entries(_o).filter(([e])=>!fE.has(e)&&!Il.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Ve(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),gE=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),bE=Object.entries(_o).filter(([e])=>!gE.has(e)&&!Il.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=Ve(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=[mg(s),...o].map(Ve).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),Zh=/^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,wE=new Set(["changed","change","changes","updated","modified","happened","occurred"]);vE=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,$E=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,xE=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,kE=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,eg=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),SE=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,EE=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,jE=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,_E=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,RE=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,tg=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,ls=/^(?:it|this|that)$/i,ng=/^(?:you|i|they|he|she|we)\b/i,sg=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${Li(e)} is ${t}".`,replace:!0}),AE=/^(?: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;CE=/inherit|supertype|subclass|extend|specializ/i,IE=8;Mz=new RegExp(`\\b(?:${[..._l].join("|")})\\b`,"i"),Sg=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,LE=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i,Pz=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Ue).join("|")})$`,"i"),Fz={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:nn.contains,subclasses:nn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:nn.calls,callees:nn.calls,tests:nn.tests,untested:nn.tests,history:nn.touches,exports:nn.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"},Eg="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",zz=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+${Eg}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),Dz=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${Eg}\\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"),Uz=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"),Bz=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"),Wz=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"),Mi="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",qz=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${Mi}\\s*\\??$`,"i"),Gz=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${Mi}\\s*\\??$`,"i"),Vz=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${Mi}\\s*\\??$`,"i"),Hz=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${Mi}\\s*[.!]*$`,"i"),NE=Object.freeze([..._l].filter(e=>e!=="here").concat("they")),Kz=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${NE.join("|")})\\b(\\s+\\S.*)?$`,"i"),Yz=J(".tmct","memory","corpus-seed.json")});pl();Ke();globalThis.tmctMemoryAsk={factAnswer:$g,factReadBack:kg,createInMemoryStore:fi,normFactTerm:Q};})();