@polycode-projects/the-mechanical-code-talker 4.1.1 → 4.1.3

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.
Files changed (55) hide show
  1. package/README.md +31 -18
  2. package/bin/tmct.mjs +3 -0
  3. package/data/templates/responses.jsonl +3 -0
  4. package/package.json +2 -1
  5. package/src/adapters/memory/core.mjs +1358 -196
  6. package/src/adapters/memory/inspect.mjs +11 -0
  7. package/src/adapters/memory/shacl.mjs +38 -0
  8. package/src/adapters/p2p/webrtc-transport.mjs +28 -5
  9. package/src/domain/ask-vocab.mjs +39 -0
  10. package/src/domain/ask.mjs +183 -34
  11. package/src/domain/grammar/assert.mjs +8 -2
  12. package/src/domain/hanoi-board.mjs +232 -0
  13. package/src/domain/ingest-facts.mjs +120 -0
  14. package/src/domain/interpret/normalize.mjs +49 -0
  15. package/src/domain/memory/compaction.mjs +284 -0
  16. package/src/domain/memory/resolution.mjs +171 -0
  17. package/src/domain/memory/trust.mjs +175 -5
  18. package/src/domain/memory-facts.mjs +139 -0
  19. package/src/domain/p2p/facts.mjs +21 -0
  20. package/src/domain/p2p/peer-id.mjs +15 -0
  21. package/src/domain/p2p/provenance-relabel.mjs +13 -2
  22. package/src/domain/p2p/sync-filter.mjs +5 -1
  23. package/src/domain/p2p/wire.mjs +7 -4
  24. package/src/domain/scene-compose.mjs +2 -2
  25. package/src/domain/sprite-facts.mjs +0 -0
  26. package/src/services/adventure-viz.mjs +5 -1
  27. package/src/services/adventure.mjs +70 -44
  28. package/src/services/chat-page-viz.mjs +381 -310
  29. package/src/services/chat.mjs +273 -155
  30. package/src/services/code-explorer-viz.mjs +141 -54
  31. package/src/services/index.mjs +1 -1
  32. package/src/services/ingest-viz.mjs +134 -9
  33. package/src/services/ledger-viz.mjs +7 -4
  34. package/src/services/memory-panel-viz.mjs +8 -3
  35. package/src/services/mud-turn.mjs +11 -8
  36. package/src/services/mud-viz.mjs +441 -206
  37. package/src/services/p2p-room.mjs +110 -23
  38. package/src/services/plan-viz.mjs +63 -4
  39. package/src/services/research-viz.mjs +18 -7
  40. package/src/services/share-overlay-viz.mjs +623 -0
  41. package/src/services/spider-fly-viz.mjs +2 -2
  42. package/src/services/sprite-catalog-viz.mjs +303 -78
  43. package/src/surfaces/web/adventure-browser-entry.mjs +27 -5
  44. package/src/surfaces/web/chat-browser-entry.mjs +37 -10
  45. package/src/surfaces/web/code-explorer-browser-entry.mjs +4 -3
  46. package/src/surfaces/web/ingest-browser-entry.mjs +73 -12
  47. package/src/surfaces/web/ledger-browser-entry.mjs +32 -7
  48. package/src/surfaces/web/memory-ask-browser.bundle.js +149 -116
  49. package/src/surfaces/web/mud-browser-entry.mjs +38 -7
  50. package/src/surfaces/web/p2p-browser-entry.mjs +1 -1
  51. package/src/surfaces/web/plan-browser-entry.mjs +33 -2
  52. package/src/surfaces/web/research-browser-entry.mjs +11 -19
  53. package/src/surfaces/web/sprites-browser-entry.mjs +39 -8
  54. package/src/surfaces/web/tmct-surface.mjs +12 -0
  55. package/src/surfaces/web/turn-session.mjs +10 -3
@@ -1,41 +1,41 @@
1
- (()=>{var ew=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 Sn=(e,t)=>{for(var n in t)ew(e,n,{get:t[n],enumerable:!0})};var it,JR,QR,ZR,eA,tA,nA,sA,oA,rA,iA,aA,cA,lA,uA,dA,pA,Q,xe,qt,_u,fA,mA,hA,ze=L(()=>{it=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},JR=it("createRequire"),QR=it("readFileSync"),ZR=it("access"),eA=it("readFile"),tA=it("writeFile"),nA=it("appendFile"),sA=it("mkdir"),oA=it("mkdtemp"),rA=it("rename"),iA=it("unlink"),aA=it("rm"),cA=it("stat"),lA=it("copyFile"),uA=it("readdir"),dA=it("createReadStream"),pA=it("createWriteStream"),Q=(...e)=>e.join("/"),xe=e=>String(e).replace(/\/[^/]*$/,""),qt=(...e)=>e.join("/"),_u="/",fA=it("randomBytes"),mA=it("spawnSync"),hA=it("createInterface")});var at,bA,wA,Ru,Be,Do,tw,jn,nw,Fr,pa,sw,ow,yA,rw,vA,$A,xA,kA,EA,kt=L(()=>{at=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},bA=at("createRequire"),wA=at("readFileSync"),Ru=at("access"),Be=at("readFile"),Do=at("writeFile"),tw=at("appendFile"),jn=at("mkdir"),nw=at("mkdtemp"),Fr=at("rename"),pa=at("unlink"),sw=at("rm"),ow=at("stat"),yA=at("copyFile"),rw=at("readdir"),vA=at("createReadStream"),$A=at("createWriteStream"),xA=at("randomBytes"),kA=at("spawnSync"),EA=at("createInterface")});function ws(e){return e.replace(iw,"").trim()}function en(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(cw,"").trim();if(s=s.replace(uw,"").trim(),s===t)break;t=s}return t}var Au,zo,Zs,Tu,Cu,Bo,Zt,Ou,un,fa,iw,aw,cw,lw,uw,de,Uo,dw,Iu,Ue,Ht,Hn,Lu,ma,ha,ga,Nu,Wo,ys,Mu,Pu,vs,_n,Rn,eo,Ye,Fu,$s,xs,Kn,gn,Du,Go,to,Dr,no,zu,An=L(()=>{Au=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],zo={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",...Au]},touches:{bare:"touch",comment:"Commit -> Module (coarse) or Commit -> symbol (fine, touchesSymbol): a commit's changed-line-range intersects object.",verbs:["touched","touches","changed","change","modified","modifies","was changed in","were changed in","was edited in","were edited in","was modified by","were modified by","was tweaked in","were tweaked in","got changed in","got edited in","touch","changed in","landed in","land in","was in","were in","went into","included in","updated","edited","touching"]},cochange:{bare:"co-change with",comment:"Module -> Module: subject and object are frequently committed together (changeCoupledWith).",verbs:["changed with","co-changes with","co-change with","changes alongside","change alongside","shares commits with","share commits with","tends to change together with","tend to change together with","moves together with","move together with","changed together with","change together with","changes together with","changes with","change with","tends to change with","tend to change with","usually changes with"]},reexports:{bare:"re-export",comment:"Module -> exported symbol: subject's public API surface (__all__/export list).",verbs:["exports","export","re-exports","re-export","passes through","pass through","exposes","expose","exporting"]},serves:{bare:"serve",comment:"subject provides or backs the object \u2014 a handler serving a route, a module serving a surface (mgx:serves).",verbs:["serves","serve","serving"]},denotes:{bare:"denote",comment:"subject names the object \u2014 a glossary/lexicon term denoting a code entity (mgx:denotes).",verbs:["denotes","denote","denoting"]}},Zs=Object.freeze({placement:Object.freeze({predicate:"mgx:currently-in",comment:"individual -> place: where the subject is right now.",nouns:Object.freeze(["location","locations","position","positions","place","places","whereabouts","room","rooms"]),reads:"is in"}),mood:Object.freeze({predicate:"mgx:feels",comment:"individual -> mood word: how the subject feels right now.",nouns:Object.freeze(["mood","moods","feeling","feelings","emotion","emotions"]),reads:"feels"}),mass:Object.freeze({predicate:"mgx:mass",comment:"individual -> number: the subject's current mass.",nouns:Object.freeze(["mass","masses","weight","weights"]),reads:"has mass"})}),Tu=Object.freeze(Object.fromEntries(Object.entries(Zs).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),Cu=Object.freeze(Object.values(Zs).map(e=>e.predicate)),Bo=Object.freeze([...Au,"is the superclass of","are the superclass of","is the parent class of"]),Zt=Object.freeze(["defined","declared","located","implemented"]),Ou=Object.freeze(["now","currently","right now","at the moment","these days","today"]),un=Object.freeze(["mentioned","referenced"]),fa=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),iw=new RegExp(`\\s+(?:${fa.join("|")})\\s*[?.!]*$`,"i");aw=Object.freeze(["then","though","too"]),cw=new RegExp(`\\s+(?:${aw.join("|")})\\s*[?.!]*$`,"i"),lw=Object.freeze(["please explain","explain"]),uw=new RegExp(`,\\s*(?:${lw.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(zo).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),Uo=Object.freeze(new Set(["has","have","holds","hold"])),dw=e=>!Bo.includes(e),Iu=Object.freeze([...new Set(Object.keys(de).filter(dw).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",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),Ht=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),Hn=Object.freeze({imported:"imports",called:"calls",used:"uses",tested:"tests",covered:"tests",verified:"tests",exercised:"tests",checked:"tests",defined:"defines",declared:"defines",inherited:"inherits",extended:"inherits",subclassed:"inherits",contained:"contains",exported:"reexports","re-exported":"reexports",exposed:"reexports",touched:"touches",changed:"touches",modified:"touches",edited:"touches",updated:"touches"}),Lu=Object.freeze({"inherited from":{kind:"inherits",role:"object"},"extended from":{kind:"inherits",role:"object"},"subclassed from":{kind:"inherits",role:"object"},"defined in":{kind:"defines",role:"agent"},"declared in":{kind:"defines",role:"agent"},"contained in":{kind:"contains",role:"agent"},"imported by":{kind:"imports",role:"agent"},"called by":{kind:"calls",role:"agent"},"used by":{kind:"uses",role:"agent"},"tested by":{kind:"tests",role:"agent"},"covered by":{kind:"tests",role:"agent"},"touched by":{kind:"touches",role:"agent"},"changed by":{kind:"touches",role:"agent"},"exported by":{kind:"reexports",role:"agent"}}),ma=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"}),ha=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"}),ga=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"}),Nu=/\b([a-z]{3,})in'/gi,Wo=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"]),ys=Object.freeze(["this","it","that","here","this one","that one"]),Mu=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]}`}]),Pu=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`}]),vs=Object.freeze(["mean","means","stand for","stands for","signify","signifies","represent","represents","refer to","refers to"]),_n=Object.freeze(["that","which","who"]),Rn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),eo=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"}),Ye=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}}),Fu=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),$s=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"]),xs=Object.freeze(["list","show","show me","show us","display","print","print out","dump","enumerate","name","give me","get me","spit out","rattle off","run down","run through","ls","what are","which are"]),Kn=Object.freeze({most:"most",greatest:"most",highest:"most",biggest:"most",largest:"most","most-connected":"most","most connected":"most",fewest:"fewest",least:"fewest",smallest:"fewest",lowest:"fewest"}),gn=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"}}),Du=Object.freeze({tests:"Module",test:"Module"}),Go=Object.freeze(["those","them","these"]),to=Object.freeze(["contains","defines"]),Dr=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"]),no=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),zu=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var We,so,ba=L(()=>{We="#000000",so=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${We}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${We}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var pw,tn,Bu,Uu,wa,Wu,TA,CA,Gu=L(()=>{An();ba();pw=()=>Object.keys(so).sort(),tn=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Bu=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Uu=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),wa=Object.freeze([{name:"tmct_context",tier:"hot",summary:"A sized edit bundle for one symbol \u2014 exemplar source, sibling signatures, registration anchor and the insertion region, in one call.",agentDescription:"START HERE to add/modify code: ONE call returns a sized edit bundle (exemplar source, sibling signatures, registration, insertion region) \u2014 then write directly, don't Read.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"Module path (e.g. path/to/module) or a sibling function/class name defined in it."},depth:{type:"string",enum:["min","auto","full"],default:"auto",description:"auto (sized to the task) | min (leanest) | full (every section)."}}},example:{symbol:"django/utils/text.py"}},{name:"tmct_snippet",tier:"hot",summary:"The exact source of one function, class or Class.method \u2014 its line span only, plus a one-line in-repo call hint.",agentDescription:"EXACT source of one function/class/Class.method by name (its line span only) + a one-line in-repo call hint. Prefer over Read for a single symbol.",inputSchema:{type:"object",required:["symbol"],properties:{symbol:{type:"string",description:"function/class name, Class.method, or fn:<path>#name."}}},example:{symbol:"Truncator.chars"}},{name:"tmct_ask",tier:"hot",summary:"A structural question in plain English, answered from the graph in one call \u2014 no model, and a clean miss instead of a guess.",agentDescription:'Ask a structural question in plain English: "which functions call X", "what uses X", "where is X defined", "when did X change". One call, no model. A clean miss beats a guess.',inputSchema:{type:"object",required:["query"],properties:{query:{type:"string",description:'A free-text question, e.g. "which functions explicitly couple to logging".'}}},example:{query:"which modules import src/core/model.mjs"},chat:{exampleRepo:"examples/mini-webapp",grammar:[{form:"which <things> <relation-verb> <entity>",example:"which modules import src/core/model.mjs",answers:"the imports edge, read forwards"},{form:"what is <relation-verb-passive> <entity>",example:"what is imported by src/core/store.mjs",answers:"the same edge, read backwards \u2014 a passive is the opposite direction, not a synonym"},{form:"what <relation-verb> <entity>",example:"what uses src/lib/http.mjs",answers:"the uses union: imports plus calls"},{form:"where is <entity> <where-marker>",example:"where is saveStore defined",answers:"the definition's file and line span"},{form:"when did <entity> change",example:"when did src/core/store.mjs change",answers:"the commits that touched it, newest first"}],whereMarkers:Zt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:tn("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:tn("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:Bu("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:Uu("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:Uu("The class to walk the inheritance edges of."),example:{class:"Field"}},{name:"tmct_related",tier:"cold",summary:"A term's synonyms (skos:altLabel) and related concepts (skos:related), from the memory graph's relation facts.",inputSchema:{type:"object",required:["term"],properties:{term:{type:"string",description:"The term whose synonyms / related concepts you want."}}},example:{term:"sofa"}},{name:"tmct_sprite",tier:"cold",summary:"The sprite markup for a class, resolved up the taught rdfs:subClassOf chain \u2014 with the expression and size asked for, and the ancestor chain the resolver walked to find it.",inputSchema:{type:"object",required:["class"],properties:{class:{type:"string",description:"The class to draw, e.g. spider. Resolved through the memory graph's own rdfs:subClassOf taxonomy."},expression:{type:"string",enum:pw(),description:"The face the sprite wears, as an mgx:feels value. A class whose template takes no expression parameter misses rather than dropping it."},size:{type:"string",description:"A taught size property word (mgx:hasProperty), resolved to a numeric render SCALE \u2014 the size of the thing drawn, not a choice of template tier."}}},example:{class:"spider",expression:"happy",size:"large"}},{name:"tmct_architecture",tier:"cold",summary:"Package/module map + the most-imported hub modules (optionally scoped to a package).",inputSchema:{type:"object",required:[],properties:{package:{type:"string",description:"Scope the map to one package. Omit for the whole repository."}}},example:{package:"django/template"}},{name:"tmct_exports",tier:"cold",summary:"A module's public __all__ surface, each name resolved to the module that defines it.",inputSchema:Bu("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:tn("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:tn("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:tn("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:tn("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:tn("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:tn("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:tn("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:tn("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:tn("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:tn("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}}]),Wu=wa.filter(e=>e.tier==="hot"),TA=wa.filter(e=>e.tier==="cold"),CA=Object.freeze(wa.map(e=>e.name))});var Vu,Re,Mt=L(()=>{ze();Vu=Q(".tmct","graph.json"),Re=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function fw(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 qu(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})=>fw(l)),s=new Map;for(let l of n)for(let c of l)s.set(c,(s.get(c)||0)+1);let o=new Set([...s.entries()].filter(([,l])=>l>1).map(([l])=>l)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:l,name:c}of t){a=a&&!!l.bootstrap,typeof l.generated_at=="string"&&l.generated_at>i&&(i=l.generated_at);let u=f=>o.has(f)?`${c}/${f}`:f;Array.isArray(l.classes)&&r.classes.push(...l.classes),Array.isArray(l.vocabulary)&&r.vocabulary.push(...l.vocabulary);for(let f of Array.isArray(l.individuals)?l.individuals:[]){if(!f)continue;let p={...f};p.id&&(p.id=u(p.id)),Array.isArray(p.derived_from)&&(p.derived_from=p.derived_from.map(m=>u(m))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),r.individuals.push(p)}for(let f of Array.isArray(l.objectProperties)?l.objectProperties:[]){if(!f)continue;let p={...f};Array.isArray(p.examples)&&(p.examples=p.examples.map(m=>{if(!m)return m;let h={...m};return h.subject&&(h.subject=u(h.subject)),h.object&&(h.object=u(h.object)),h})),r.objectProperties.push(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let m=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let h of Array.isArray(p)?p:[]){let g=u(h);m.includes(g)||m.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var Hu=L(()=>{});var ro={};Sn(ro,{clearCache:()=>mw,emptyEntities:()=>ya,fetchEntities:()=>ww,registerProvider:()=>hw});function mw(){oo=null,Vo=null}function hw(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=zr;return zr=e??null,oo=null,t}function ya(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function gw(e){let t;try{t=await Be(e,"utf8")}catch(n){if(n?.code==="ENOENT")return ya();throw new Re(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Re(`graph artifact ${e} is not valid JSON`)}}async function bw(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(Vo&&Vo.key===n)return Vo.payload;let s=[];for(let r=0;r<t.length;r++){let i=await gw(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=qu(s);return Vo={key:n,payload:o},o}async function ww(e){if(zr){let s;try{s=await zr(e)}catch(o){throw o instanceof Re?o:new Re(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Re("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return bw(e);if(oo&&oo.file===e.graphFile)return oo.payload;let t;try{t=await Be(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return ya();throw new Re(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Re(`graph artifact ${e.graphFile} is not valid JSON`)}return oo={file:e.graphFile,payload:n},n}var oo,Vo,zr,qo=L(()=>{kt();Mt();Hu();oo=null,Vo=null,zr=null});function bn(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<=Ku)}function va(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>Ku||yw.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=vw))break;return t}function Br({name:e,doc:t}={}){return[...new Set([...bn(e),...va(t)])].sort()}function Yu(e){let t=Object.create(null);for(let n of e){let s=(n.attributes||[]).find(o=>o.key==="prose_tokens");if(s?.value)for(let o of s.value.split(" "))t[o]||(t[o]=[]),t[o].push(n.id)}for(let n of Object.keys(t))t[n].sort();return t}function ks(e,t,{limit:n=10}={}){let s=[...new Set([...bn(t),...va(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 Xu(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 yw,Ku,vw,Yn=L(()=>{yw=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+/)),Ku=40,vw=120});function Ju(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 Ho(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:xw(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("mud:")?{kind:"corpus",name:`mud:${n.slice(4).split(":")[0]||"unknown"}`}:n.startsWith("ace:")?{kind:"operator",...Ju(n.slice(4))}:n.startsWith("teach:")?{kind:"teach",...Ju(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 Sw(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return Zu;let n=Number(t);return Number.isFinite(n)?Math.max($a,Math.min(ed,n)):Zu}function jw(e,t=Date.now(),n=kw){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return Qu+(1-Qu)*Math.pow(.5,o/n)}function td(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let p of o){if(r.has(p))continue;r.add(p);let m=t[p],h=Ew(m);if(!h)continue;i.push(h);let g=(Ko[h]??0)*Sw(m);a.push(Math.max(0,Math.min(1,g)))}let l=0,c=1;for(let p of a)c*=1-p;if(a.length&&(l=Math.min(1,1-c)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let p=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;l=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*p))}let u=jw(e?.createdAt,s,n.halfLifeMs),d=xa(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:xa(u)};return{score:d,inputs:f}}function nd({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+_w),i=(o*r+1)/2;return xa($a+(ed-$a)*i)}var Ur,ka,Pt,Es,$w,xw,Ko,kw,Qu,$a,ed,Zu,xa,Ew,_w,Ss=L(()=>{Ur="mgx:trustScore",ka="mgx:trustInputs",Pt="mgx:createdAt",Es="mgx:updatedAt";$w="wikipedia-live",xw=e=>e===$w?"referenceLive":"reference";Ko=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),kw=720*60*60*1e3,Qu=.9,$a=.5,ed=1.5,Zu=1,xa=(e,t=6)=>Number(e.toFixed(t)),Ew=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";_w=19});var js,Ea=L(()=>{js=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function Sa(e,t){return Math.log(1+e/(1+t))}var Yo=L(()=>{});var Gr={};Sn(Gr,{bfsLevels:()=>Wr,findActionPath:()=>ja,findReachableSet:()=>_a});function sd(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function od(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 ja(e,t,n,{maxDepth:s=50,stateKey:o=sd}={}){if(t(e))return{actions:[],states:[e]};let r=od(e,n),i=new Set([o(e)]);for(let a=1;a<=s&&r.length;a+=1){for(let c of r)if(t(c.state))return{actions:c.actions,states:c.states};if(a===s)break;let l=[];for(let c of r){let u=o(c.state);if(!i.has(u)){i.add(u);for(let{action:d,nextState:f}of n(c.state)||[]){let p=o(f);i.has(p)||l.push({state:f,actions:[...c.actions,d],states:[...c.states,f]})}}}r=l}return null}function _a(e,t,{maxDepth:n=50,stateKey:s=sd}={}){let o=od(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*Wr(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 _s=L(()=>{});function qr(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 Ia(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function In(e){let t=String(e?.prop||"").toLowerCase();if(rd[t])return rd[t];let n=String(e?.predicate||"").toLowerCase();if(/symbol/.test(n)){if(/\b(call|invoke)/.test(n))return"callsSymbol";if(/(touch|chang|modif)/.test(n))return"touchesSymbol"}return/\bimport/.test(n)?"imports":/\b(call|invoke)/.test(n)?"calls":/\b(define|export|declare)/.test(n)?"defines":/\b(test|cover)/.test(n)?"tests":/\b(touch|chang|modif)/.test(n)?"touches":/\bcontain/.test(n)?"contains":/\b(inherit|subclass|extend|specializ)/.test(n)?"inherits":null}function Cn(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function Ra(e){let t=Cn(e).split("/");return t[t.length-1]}function Rw(e){return(e?.derived_from||[]).filter(wd).length}function id(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+Rw(e)}function Kt(e,t){let n=Cn(t);if(!n)return{match:null,candidates:[]};let s=Ra(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Cn(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(Ra(a)===s||Ra(a).replace(/\.[a-z]+$/,"")===s)?c=80:a.includes(n)&&(c=Math.max(10,50-(a.length-n.length))),c>0&&r.push({ind:i,score:c})}return r.sort((i,a)=>a.score-i.score||id(a.ind)-id(i.ind)||String(i.ind.label).length-String(a.ind.label).length),{match:r[0]?.ind||null,candidates:r.slice(1,5).map(i=>i.ind)}}function Et(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 Aw(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 ad(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function On(e){let t=e||"Entity",n=bn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function ct(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function La(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${On(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(wd);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}=Aw(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(` ${ad(l)} (${c.length}) \u2192 ${ct(c.map(u=>u.objectLabel||u.object),cd)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${ad(l)} (${c.length}) by ${ct(c.map(u=>u.subjectLabel||u.subject),cd)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${ct(a,Tw)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${On(l.class)})`).join(", ")}`),e.truncated.length&&s.push(Cw(e)),s.join(`
2
- `)}function Cw(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 ao(e,t,{maxDepth:n=8}={}){let s=new Map,o=new Map,r=(a,l,c,u)=>{!a||!l||a===l||(s.has(a)||s.set(a,[]),s.get(a).push({id:l,label:c,via:u}))};for(let a of e.relations){let l=In(a);if(l==="imports"||l==="calls")for(let c of a.edges)r(c.object,c.subject,c.subjectLabel||c.subject,a.predicate);else if(l==="callsSymbol")for(let c of a.edges){let u=Tn(e,c.subject),d=Tn(e,c.object);if(!u||!d)continue;let f=e.byId.get(u)?.label||u;r(d,u,f,a.predicate),u!==d&&r(c.object,u,f,a.predicate)}else if(l==="tests")for(let c of a.edges)o.has(c.object)||o.set(c.object,[]),o.get(c.object).push(c.subjectLabel||c.subject)}let i=[];for(let a of Wr(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 yd(e,t,{maxDepth:n=8}={}){let s=ao(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>=Ow){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,Aa)){let u=c.tests.length?`tests: ${ct(c.tests,Iw)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>Aa&&o.push(` \u2026+${a.length-Aa} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=In({predicate:a.predicate});return l==="imports"||l==="calls"||l==="callsSymbol"||l==="tests"});return i.length&&o.push("warning: partial edge lists ("+i.map(a=>`${a.predicate}: ${a.shown}/${a.count}`).join(", ")+") \u2014 this closure may be missing edges. Cross-check critical results with a lexical search (/find <term>)."),o.join(`
3
- `)}function vd(e){let t=new Map;for(let n of e.relations)if(In(n)==="defines")for(let s of n.edges)t.has(s.subject)||t.set(s.subject,[]),t.get(s.subject).push(s.objectLabel||s.object);return t}function ud(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Sd(e,t,n=null){let s=n||(i=>Tn(e,i)),o=new Map,r=(i,a)=>{!i||!a||i===a||(o.has(i)||o.set(i,new Set),o.has(a)||o.set(a,new Set),o.get(i).add(a),o.get(a).add(i))};for(let i of t)for(let a of Se(e,i))r(s(a.subject),s(a.object));return o}function hy(e,t,n){if(t.length<2)return;let s=new Map(t.map(c=>[c.ind.id,c])),o=new Map(t.map(c=>[c.ind.id,c.score])),r=c=>{if(!c.size)return[[],[]];let u=0;for(let m of c.values())u=Math.max(u,m);let d=[...c.entries()].sort((m,h)=>h[1]-m[1]),f=[],p=[];for(let[m,h]of d)h>=u*ry&&f.length<n?f.push([m,h]):p.length<ld&&p.push([m,h]);return[f,p]},[i,a]=r(new Map(t.map(c=>[c.ind.id,c.score]))),l=new Set(i.map(([c])=>c));for(let c=0;c<cy&&i.length;c++){let u=new Map,d=[];for(let f of ly){let p=Sd(e,f),m=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,y));let[h,g]=r(m);for(let[b,y]of h)u.set(b,Math.max(u.get(b)||0,y));d.push(...g)}a.push(...d);for(let[f,p]of u){if(l.has(f))continue;let m=s.get(f);m&&(m.score+=Math.min(p*iy,m.score*ay),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,ld).filter(([f])=>!l.has(f)))}}function gy(e,t=[],{depth:n=xd,q:s=Ed,nodeLimit:o=kd,kinds:r=uy,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=Sd(e,r,a),h=_=>m.get(_)?.size||0,g=[],b=(_,R)=>_.hop!==R.hop?_.hop<R.hop:_.deg!==R.deg?_.deg<R.deg:_.id<R.id,y=(_,R)=>{let x=g[_];g[_]=g[R],g[R]=x},w=_=>{g.push(_);let R=g.length-1;for(;R>0;){let x=R-1>>1;if(b(g[R],g[x]))y(R,x),R=x;else break}},$=()=>{let _=g[0],R=g.pop();if(g.length){g[0]=R;let x=0;for(;;){let T=2*x+1,M=2*x+2,A=x;if(T<g.length&&b(g[T],g[A])&&(A=T),M<g.length&&b(g[M],g[A])&&(A=M),A===x)break;y(x,A),x=A}}return _},j=new Set(p);for(let _ of p)w({id:_,hop:0,deg:h(_)});let v=null,E=0,k=[];for(;g.length&&E<o;){let _=$();if(k.push({id:_.id,hop:_.hop}),!p.has(_.id)){if(f){let T=d*dy*Math.pow(py,_.hop-1),M=u.get(_.id);if(M)M.score+=Math.min(T*fy,M.score*my);else{let A=e.byId?.get?.(_.id);if(A&&i(A)){v||(v=vd(e));let P=v.get(A.id)||[],G={ind:A,score:T,defineCount:P.length,matching:[],density:0};t.push(G),u.set(_.id,G)}}}E++}if(_.hop>=n||_.hop>0&&h(_.id)>c)continue;let R=[];for(let T of m.get(_.id)||[]){if(j.has(T))continue;let M=e.byId?.get?.(T);!M||!i(M)||R.push({id:T,deg:h(T)})}if(!R.length)continue;R.sort((T,M)=>T.deg-M.deg||(T.id<M.id?-1:T.id>M.id?1:0));let x=Math.max(1,Math.floor(s*R.length));for(let T=0;T<x;T++){let M=R[T];j.add(M.id),w({id:M.id,hop:_.hop+1,deg:M.deg})}}return k}function jd(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=vd(e),m=[];for(let $ of e.individuals){if(($.class||"")!=="Module")continue;let j=String($.label),v=j.toLowerCase(),E=p.get($.id)||[],k=new Set(E.map(x=>x.toLowerCase())),_=new Set;for(let x of E)for(let T of ud(x))_.add(T);let R=u?String(($.attributes||[]).find(x=>x.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:$,label:j,labelLc:v,defines:E,symSet:k,symComps:_,dotted:R})}let h=m.length||1,g=new Map,b=$=>{let j=0;for(let v of m)(v.labelLc.includes($)||v.symComps.has($)||v.symSet.has($))&&j++;return j},y=$=>(g.has($)||g.set($,Sa(h,b($))),g.get($));for(let $ of t)y($);let w=[];for(let $ of m){let j=0,v=0,E=0,k=[];for(let M of t){let A=g.get(M)||0;A&&($.symSet.has(M)?(j+=A*$d,E++):$.symComps.has(M)&&(k.push(A),E++),$.labelLc.includes(M)&&(v+=A*Nw))}k.sort((M,A)=>A-M);let _=0;for(let M=0;M<Math.min(k.length,Pw);M++)_+=k[M]*Mw;let R=j+v+_;if(!R)continue;s&&(js($.labelLc)||Bw($.labelLc))?R*=zw:js($.labelLc)&&(R*=.4);let x=$.defines.filter(M=>{let A=M.toLowerCase(),P=ud(M);return t.some(G=>A===G||P.has(G))}),T=$.defines.length?E/$.defines.length:0;w.push({ind:$.ind,score:R,defineCount:$.defines.length,matching:x,density:T})}if(u&&d&&w.length){let $=String(d).toLowerCase(),j=_=>_!=null&&/[a-z0-9_./]/.test(_),v=_=>{for(let R=$.indexOf(_);R!==-1;R=$.indexOf(_,R+1))if(!j($[R-1])&&!j($[R+_.length]))return!0;return!1},E=new Map(m.map(_=>[_.ind.id,_])),k=0;for(let _ of w)k=Math.max(k,_.score);for(let _ of w){let R=E.get(_.ind.id);if(!R)continue;let x=0;for(let T of new Set([R.dotted,R.labelLc])){if(!T||T.split(/[./]+/).filter(Boolean).length<ty||!v(T))continue;let M=[...new Set(T.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((P,G)=>G-P),A=0;for(let P=0;P<Math.min(M.length,ny);P++)A+=M[P]*ey;x=Math.max(x,A)}x&&(_.score+=Math.min(x*sy,k*oy))}}if(w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of Se(e,"imports"))!$.has(v.subject)&&!$.has(v.object)||(j.has(v.subject)||j.set(v.subject,new Set),j.has(v.object)||j.set(v.object,new Set),j.get(v.subject).add(v.object),j.get(v.object).add(v.subject));for(let v of w){let E=0;for(let k of j.get(v.ind.id)||[])E=Math.max(E,$.get(k)||0);v.score+=Math.min(E*Fw,v.score*Dw)}}if(o&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of["calls","callsSymbol"])for(let E of Se(e,v)){let k=Tn(e,E.subject),_=Tn(e,E.object);!k||!_||k===_||!$.has(k)&&!$.has(_)||(j.has(k)||j.set(k,new Set),j.has(_)||j.set(_,new Set),j.get(k).add(_),j.get(_).add(k))}for(let v of w){let E=0;for(let k of j.get(v.ind.id)||[])E=Math.max(E,$.get(k)||0);v.score+=Math.min(E*Uw,v.score*Ww)}}if(r&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),j=new Map;for(let v of e.individuals)(v.class||"")==="Class"&&v.label&&j.set(String(v.label),v);for(let v of w){if(!qw(v.ind.label))continue;let E=0;for(let k of Se(e,"inherits")){if(Tn(e,k.subject)!==v.ind.id||!Hw(k.objectLabel))continue;let R=Tn(e,k.object);if(!R){let x=j.get(String(k.objectLabel||""));x&&(R=wn(e,x))}R&&(E=Math.max(E,$.get(R)||0))}v.score+=Math.min(E*Gw,v.score*Vw)}}if(l&&w.length&&e.proseIndex){let $=ks(e.proseIndex,t.join(" "),{limit:Xw});if($.length){let j=new Map;for(let{id:v,score:E}of $){let k=Tn(e,v);k&&j.set(k,(j.get(k)||0)+E)}for(let v of w){let E=j.get(v.ind.id)||0;E&&(v.score+=Math.min(E*Kw,v.score*Yw))}}}if(c&&w.length&&e.proseIndex){let $=new Map(w.map(E=>[E.ind.id,E])),j=new Map(m.map(E=>[E.ind.id,E])),v=new Map;for(let E of new Set(t)){let k=g.get(E)||0;if(!k)continue;let{ids:_}=Xu(e.proseIndex,E);if(!_.length)continue;let R=new Set;for(let x of _){let T=Tn(e,x);if(!T||R.has(T)||(R.add(T),!$.has(T)))continue;let M=j.get(T);M&&(M.symSet.has(E)||M.symComps.has(E)||M.labelLc.includes(E))||v.set(T,(v.get(T)||0)+k*Zw)}}for(let E of w){let k=v.get(E.ind.id)||0;k&&(E.score+=Math.min(k*Jw,E.score*Qw))}}return i&&w.length>1&&hy(e,w,f),a&&w.length&&gy(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:xd,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:Ed,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:kd}),w.sort(($,j)=>j.score-$.score||j.density-$.density||$.defineCount-j.defineCount||String($.ind.label).length-String(j.ind.label).length),w}function _d(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 jd(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function wy(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>dd)return{error:`name pattern is ${n.length} characters; the limit is ${dd}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=wy(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>pd)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${pd}.`};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()+fd;else if(t()>a)throw new Vr(`name pattern "${n}" exceeded its ${fd}ms matching budget.`);return i.test(String(l).slice(0,by))}}}function Rd(e,t,{limit:n=Hr,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),l=String(s||"").trim().toLowerCase(),c=String(o||"").trim().toLowerCase(),u=null;if(r){let m=Na(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return ky(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof Vr)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=jd(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let f=d.slice(0,n),p=[`${d.length} module(s) match "${t}" (top ${f.length}):`];for(let{ind:m,defineCount:h,matching:g}of f){let b=g.length?` \u2014 matching: ${ct([...new Set(g)],Lw)}`:"";p.push(`- ${m.label} (defines ${h} symbol(s))${b}`)}return p.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),p.join(`
4
- `)}function Se(e,t){let n=md.get(e);n||(n=new Map,md.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(In(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Tn(e,t){let n=e.byId?.get?.(t);if(n)return wn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function wn(e,t){if((t?.class||"")==="Module")return t.id;let n=Et(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function Ma(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function io(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function Ad(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${On(t.class)} (id: ${t.id})`],o=Se(e,"contains").filter(a=>a.subject===t.id);if(!o.length)return s.push(`members: none recorded (empty class, or members not in the extracted graph). Use ${n}describe for its edges.`),s.join(`
5
- `);let r=[],i=[];for(let a of o){let l=e.byId.get(a.object),c=Ma(l?Et(l):null),u=l?io(l):"",d=`${a.objectLabel||a.object}${c}${u?` @${u}`:""}`;((l?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${ct(r,hd)}`),i.length&&s.push(`attributes (${i.length}): ${ct(i,hd)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
- `)}function Td(e,t,{toolNamePrefix:n="tmct_"}={}){let s=Et(t),o=[`${t.label} \u2014 ${On(t.class)}${Ma(s)}`],r=Me(t,"params"),i=Me(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Me(t,"isStatic")&&a.push("static"),Me(t,"isAbstract")&&a.push("abstract"),Me(t,"isConstant")&&a.push("constant");let l=Me(t,"visibility");l&&a.push(l),a.length&&o.push(`flags: ${a.join(", ")}`);let c=io(t);c&&o.push(`decorators: @${c.split(", ").join(", @")}`);let u=Me(t,"raises");u&&o.push(`raises: ${u}`);let d=Me(t,"catches");d&&o.push(`catches: ${d}`);let f=Me(t,"self_fields");f&&o.push(`self fields: ${f}`);let p=Me(t,"value");p&&o.push(`value: ${p}`);let m=Me(t,"doc");return m&&o.push(`doc: ${m}`),o.length===1&&o.push(`(no signature detail recorded for this symbol \u2014 likely a module or attribute; use ${n}snippet for its source.)`),o.push(`Use ${n}snippet for the exact body.`),o.join(`
7
- `)}function Cd(e,t){let n=Se(e,"inherits"),s=n.filter(l=>l.subject===t.id).map(l=>l.objectLabel||l.object),o=new Map;for(let l of n)o.has(l.object)||o.set(l.object,[]),o.get(l.object).push({id:l.subject,label:l.subjectLabel||l.subject});let r=[`${t.label} \u2014 ${On(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${ct(s,gd)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of Wr(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}): ${ct(l,gd)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
- `)}function Kr(e){let t=new Map;for(let n of e){let s=n.label.includes("/")?n.label.slice(0,n.label.lastIndexOf("/")):"(root)";t.set(s,(t.get(s)||0)+1)}return t}function Yr(e,t=""){let n=Cn(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Cn(s.label).startsWith(n)))}function Od(e,{pkg:t=""}={}){let n=Cn(t),s=Yr(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=Kr(s),r=new Map;for(let u of Se(e,"imports"))r.set(u.object,(r.get(u.object)||0)+1);let i=new Set(s.map(u=>u.id)),a=[...r.entries()].filter(([u])=>i.has(u)).sort((u,d)=>d[1]-u[1]).slice(0,vy).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): ${ct(l.map(([u,d])=>`${u} (${d})`),yy)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
- `)}function Ld(e,t){let n=wn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||Et(t)?.path||n,o=[...new Set(Se(e,"tests").filter(a=>a.object===n).map(a=>a.subjectLabel||a.subject))],r=o.length>0,i=r?`covered by ${o.length} test module(s):
10
- ${ct(o,Id,`
1
+ (()=>{var Ny=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 Mn=(e,t)=>{for(var n in t)Ny(e,n,{get:t[n],enumerable:!0})};var ct,$C,xC,EC,SC,kC,jC,_C,RC,TC,AC,CC,OC,IC,LC,NC,PC,Q,$e,Yt,Rd,MC,FC,DC,Be=L(()=>{ct=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},$C=ct("createRequire"),xC=ct("readFileSync"),EC=ct("access"),SC=ct("readFile"),kC=ct("writeFile"),jC=ct("appendFile"),_C=ct("mkdir"),RC=ct("mkdtemp"),TC=ct("rename"),AC=ct("unlink"),CC=ct("rm"),OC=ct("stat"),IC=ct("copyFile"),LC=ct("readdir"),NC=ct("createReadStream"),PC=ct("createWriteStream"),Q=(...e)=>e.join("/"),$e=e=>String(e).replace(/\/[^/]*$/,""),Yt=(...e)=>e.join("/"),Rd="/",MC=ct("randomBytes"),FC=ct("spawnSync"),DC=ct("createInterface")});var lt,BC,UC,Td,ze,lr,Py,xn,My,li,qa,Fy,Dy,WC,zy,GC,HC,VC,qC,KC,jt=L(()=>{lt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},BC=lt("createRequire"),UC=lt("readFileSync"),Td=lt("access"),ze=lt("readFile"),lr=lt("writeFile"),Py=lt("appendFile"),xn=lt("mkdir"),My=lt("mkdtemp"),li=lt("rename"),qa=lt("unlink"),Fy=lt("rm"),Dy=lt("stat"),WC=lt("copyFile"),zy=lt("readdir"),GC=lt("createReadStream"),HC=lt("createWriteStream"),VC=lt("randomBytes"),qC=lt("spawnSync"),KC=lt("createInterface")});function ho(e){let t=Uy.exec(String(e||""));return t?t[1].toLowerCase():null}function ui(e){return String(e||"").replace(Wy,"$1")}function Ps(e){return e.replace(Gy,"").trim()}function on(e){let t=e;for(let n=0;n<2;n+=1){let s=t.replace(Vy,"").trim();if(s=s.replace(Ky,"").trim(),s===t)break;t=s}return t}var Ad,ur,Ns,Cd,Od,By,Uy,dr,Xt,Ka,Wy,hn,Ya,Gy,Hy,Vy,qy,Ky,de,pr,Yy,Id,Ue,Jt,rs,Ld,Xa,Ja,Qa,Nd,fr,Ms,Pd,Md,Fs,Fn,Dn,go,Ye,Fd,Ds,zs,is,En,Dd,mr,bo,di,wo,zd,zn=L(()=>{Ad=["is a superclass of","are a superclass of","is a parent class of","are a parent class of","superclass","superclasses"],ur={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",...Ad]},touches:{bare:"touch",comment:"Commit -> Module (coarse) or Commit -> symbol (fine, touchesSymbol): a commit's changed-line-range intersects object.",verbs:["touched","touches","changed","change","modified","modifies","was changed in","were changed in","was edited in","were edited in","was modified by","were modified by","was tweaked in","were tweaked in","got changed in","got edited in","touch","changed in","landed in","land in","was in","were in","went into","included in","updated","edited","touching"]},cochange:{bare:"co-change with",comment:"Module -> Module: subject and object are frequently committed together (changeCoupledWith).",verbs:["changed with","co-changes with","co-change with","changes alongside","change alongside","shares commits with","share commits with","tends to change together with","tend to change together with","moves together with","move together with","changed together with","change together with","changes together with","changes with","change with","tends to change with","tend to change with","usually changes with"]},reexports:{bare:"re-export",comment:"Module -> exported symbol: subject's public API surface (__all__/export list).",verbs:["exports","export","re-exports","re-export","passes through","pass through","exposes","expose","exporting"]},serves:{bare:"serve",comment:"subject provides or backs the object \u2014 a handler serving a route, a module serving a surface (mgx:serves).",verbs:["serves","serve","serving"]},denotes:{bare:"denote",comment:"subject names the object \u2014 a glossary/lexicon term denoting a code entity (mgx:denotes).",verbs:["denotes","denote","denoting"]}},Ns=Object.freeze({placement:Object.freeze({predicate:"mgx:currently-in",comment:"individual -> place: where the subject is right now.",nouns:Object.freeze(["location","locations","position","positions","place","places","whereabouts","room","rooms"]),reads:"is in",matchesLocativePredicates:!0}),mood:Object.freeze({predicate:"mgx:feels",comment:"individual -> mood word: how the subject feels right now.",nouns:Object.freeze(["mood","moods","feeling","feelings","emotion","emotions"]),reads:"feels"}),mass:Object.freeze({predicate:"mgx:mass",comment:"individual -> number: the subject's current mass.",nouns:Object.freeze(["mass","masses","weight","weights"]),reads:"has mass"})}),Cd=Object.freeze(Object.fromEntries(Object.entries(Ns).flatMap(([e,{nouns:t}])=>t.map(n=>[n,e])))),Od=Object.freeze(Object.values(Ns).map(e=>e.predicate)),By=Object.freeze(["on","in","at","inside","under","below","above","near","beside","behind","by"]),Uy=new RegExp(`^mgx:[a-z]+-(${By.join("|")})$`,"i");dr=Object.freeze([...Ad,"is the superclass of","are the superclass of","is the parent class of"]),Xt=Object.freeze(["defined","declared","located","implemented"]),Ka=Object.freeze(["now","currently","right now","at the moment","these days","today"]),Wy=new RegExp(`\\s+(?:${[...Ka].sort((e,t)=>t.length-e.length).join("|")})(\\s*[?.!]*)$`,"i");hn=Object.freeze(["mentioned","referenced"]),Ya=Object.freeze(["in this graph","in the graph","in this codebase","in the codebase","in this repo","in the repo","here"]),Gy=new RegExp(`\\s+(?:${Ya.join("|")})\\s*[?.!]*$`,"i");Hy=Object.freeze(["then","though","too"]),Vy=new RegExp(`\\s+(?:${Hy.join("|")})\\s*[?.!]*$`,"i"),qy=Object.freeze(["please explain","explain"]),Ky=new RegExp(`,\\s*(?:${qy.join("|")})\\s*[?.!]*$`,"i");de=Object.freeze(Object.fromEntries(Object.entries(ur).flatMap(([e,{verbs:t}])=>t.map(n=>[n,e])))),pr=Object.freeze(new Set(["has","have","holds","hold"])),Yy=e=>!dr.includes(e),Id=Object.freeze([...new Set(Object.keys(de).filter(Yy).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",package:"Package",packages:"Package",attribute:"Attribute",attributes:"Attribute",field:"Attribute",fields:"Attribute",variable:"GlobalVariable",variables:"GlobalVariable",global:"GlobalVariable",globals:"GlobalVariable",change:"Change",changes:"Change",commit:"Commit",commits:"Commit"}),Jt=Object.freeze({explicitly:"direct",directly:"direct",transitively:"transitive",indirectly:"transitive"}),rs=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"}),Ld=Object.freeze({"inherited from":{kind:"inherits",role:"object"},"extended from":{kind:"inherits",role:"object"},"subclassed from":{kind:"inherits",role:"object"},"defined in":{kind:"defines",role:"agent"},"declared in":{kind:"defines",role:"agent"},"contained in":{kind:"contains",role:"agent"},"imported by":{kind:"imports",role:"agent"},"called by":{kind:"calls",role:"agent"},"used by":{kind:"uses",role:"agent"},"tested by":{kind:"tests",role:"agent"},"covered by":{kind:"tests",role:"agent"},"touched by":{kind:"touches",role:"agent"},"changed by":{kind:"touches",role:"agent"},"exported by":{kind:"reexports",role:"agent"}}),Xa=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"}),Ja=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"}),Qa=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"}),Nd=/\b([a-z]{3,})in'/gi,fr=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"]),Ms=Object.freeze(["this","it","that","here","this one","that one"]),Pd=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]}`}]),Md=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"]),Fn=Object.freeze(["that","which","who"]),Dn=Object.freeze(["something","anything","everything","somethings","things","thing","entities","entity","nodes","node","stuff","code","symbol","symbols"]),go=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"}),Ye=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}}),Fd=Object.freeze(new Set(["tests","test","anything","something","anyone","someone","any"])),Ds=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"]),zs=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"]),is=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"}),En=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"}}),Dd=Object.freeze({tests:"Module",test:"Module"}),mr=Object.freeze(["those","them","these"]),bo=Object.freeze(["contains","defines"]),di=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"]),wo=Object.freeze({tally:"count",tallies:"count",sum:"count",total:"count",totals:"count"}),zd=Object.freeze(["help","help me","how do i ask","how do i use this","what can i ask","what can you ask","usage","commands","examples","syntax","options"])});var We,yo,Za=L(()=>{We="#000000",yo=Object.freeze({happy:`<circle cx="-0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.15" r="0.11" fill="${We}" opacity="0.85"/><path d="M -0.4 0.35 Q 0 0.68 0.4 0.35" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,sad:`<circle cx="-0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.1" r="0.1" fill="${We}" opacity="0.85"/><path d="M -0.38 0.55 Q 0 0.3 0.38 0.55" fill="none" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/>`,angry:`<path d="M -0.58 -0.32 L -0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><path d="M 0.58 -0.32 L 0.22 -0.16" stroke="${We}" stroke-width="0.09" stroke-linecap="round" opacity="0.85"/><circle cx="-0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><circle cx="0.32" cy="-0.02" r="0.09" fill="${We}" opacity="0.85"/><path d="M -0.36 0.5 L 0.36 0.42" stroke="${We}" stroke-width="0.1" stroke-linecap="round" opacity="0.85"/>`,scared:`<circle cx="-0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.2" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.4" cy="-0.12" r="0.07" fill="${We}" opacity="0.85"/><circle cx="0" cy="0.42" r="0.09" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/>`,surprised:`<circle cx="-0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="-0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.17" fill="none" stroke="${We}" stroke-width="0.07" opacity="0.85"/><circle cx="0.38" cy="-0.12" r="0.06" fill="${We}" opacity="0.85"/><ellipse cx="0" cy="0.42" rx="0.16" ry="0.22" fill="${We}" opacity="0.7"/>`,calm:`<path d="M -0.5 -0.1 Q -0.4 -0.2 -0.3 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M 0.3 -0.1 Q 0.4 -0.2 0.5 -0.1" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/><path d="M -0.3 0.4 Q 0 0.5 0.3 0.4" fill="none" stroke="${We}" stroke-width="0.08" stroke-linecap="round" opacity="0.85"/>`})});var Xy,rn,Bd,Ud,ec,Wd,eO,tO,Gd=L(()=>{zn();Za();Xy=()=>Object.keys(yo).sort(),rn=e=>({type:"object",required:["symbol"],properties:{symbol:{type:"string",description:e}}}),Bd=e=>({type:"object",required:["module"],properties:{module:{type:"string",description:e}}}),Ud=e=>({type:"object",required:["class"],properties:{class:{type:"string",description:e}}}),ec=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:Xt}},{name:"tmct_describe",tier:"cold",summary:"Locate one symbol and list its typed edges (both directions) with provenance.",inputSchema:rn("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:rn("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:Bd("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:Ud("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:Ud("The class to walk the inheritance edges of."),example:{class:"Field"}},{name:"tmct_related",tier:"cold",summary:"A term's synonyms (skos:altLabel) and related concepts (skos:related), from the memory graph's relation facts.",inputSchema:{type:"object",required:["term"],properties:{term:{type:"string",description:"The term whose synonyms / related concepts you want."}}},example:{term:"sofa"}},{name:"tmct_sprite",tier:"cold",summary:"The sprite markup for a class, resolved up the taught rdfs:subClassOf chain \u2014 with the expression and size asked for, and the ancestor chain the resolver walked to find it.",inputSchema:{type:"object",required:["class"],properties:{class:{type:"string",description:"The class to draw, e.g. spider. Resolved through the memory graph's own rdfs:subClassOf taxonomy."},expression:{type:"string",enum:Xy(),description:"The face the sprite wears, as an mgx:feels value. A class whose template takes no expression parameter misses rather than dropping it."},size:{type:"string",description:"A taught size property word (mgx:hasProperty), resolved to a numeric render SCALE \u2014 the size of the thing drawn, not a choice of template tier."}}},example:{class:"spider",expression:"happy",size:"large"}},{name:"tmct_architecture",tier:"cold",summary:"Package/module map + the most-imported hub modules (optionally scoped to a package).",inputSchema:{type:"object",required:[],properties:{package:{type:"string",description:"Scope the map to one package. Omit for the whole repository."}}},example:{package:"django/template"}},{name:"tmct_exports",tier:"cold",summary:"A module's public __all__ surface, each name resolved to the module that defines it.",inputSchema:Bd("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:rn("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:rn("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:rn("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:rn("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:rn("A class name."),example:{symbol:"Truncator"}},{name:"tmct_callers",tier:"cold",summary:"Modules that call into a symbol's module (one hop).",inputSchema:rn("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:rn("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:rn("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:rn("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:rn("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}}]),Wd=ec.filter(e=>e.tier==="hot"),eO=ec.filter(e=>e.tier==="cold"),tO=Object.freeze(ec.map(e=>e.name))});var Hd,Re,Dt=L(()=>{Be();Hd=Q(".tmct","graph.json"),Re=class extends Error{constructor(t){super(t),this.name="ToolError"}}});function Jy(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 Vd(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})=>Jy(l)),s=new Map;for(let l of n)for(let c of l)s.set(c,(s.get(c)||0)+1);let o=new Set([...s.entries()].filter(([,l])=>l>1).map(([l])=>l)),r={generated_at:"",classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}},i="",a=t.length>0;for(let{payload:l,name:c}of t){a=a&&!!l.bootstrap,typeof l.generated_at=="string"&&l.generated_at>i&&(i=l.generated_at);let u=f=>o.has(f)?`${c}/${f}`:f;Array.isArray(l.classes)&&r.classes.push(...l.classes),Array.isArray(l.vocabulary)&&r.vocabulary.push(...l.vocabulary);for(let f of Array.isArray(l.individuals)?l.individuals:[]){if(!f)continue;let p={...f};p.id&&(p.id=u(p.id)),Array.isArray(p.derived_from)&&(p.derived_from=p.derived_from.map(m=>u(m))),Array.isArray(p.mentions)&&(p.mentions=p.mentions.map(m=>m&&m.id?{...m,id:u(m.id)}:m)),r.individuals.push(p)}for(let f of Array.isArray(l.objectProperties)?l.objectProperties:[]){if(!f)continue;let p={...f};Array.isArray(p.examples)&&(p.examples=p.examples.map(m=>{if(!m)return m;let h={...m};return h.subject&&(h.subject=u(h.subject)),h.object&&(h.object=u(h.object)),h})),r.objectProperties.push(p)}let d=l.proseIndex&&typeof l.proseIndex=="object"?l.proseIndex:{};for(let[f,p]of Object.entries(d)){let m=r.proseIndex[f]||(r.proseIndex[f]=[]);for(let h of Array.isArray(p)?p:[]){let g=u(h);m.includes(g)||m.push(g)}}}return r.generated_at=i,a&&(r.bootstrap=!0),r}var qd=L(()=>{});var $o={};Mn($o,{clearCache:()=>Qy,emptyEntities:()=>tc,fetchEntities:()=>nv,registerProvider:()=>Zy});function Qy(){vo=null,hr=null}function Zy(e){if(e!=null&&typeof e!="function")throw new TypeError("registerProvider expects a function (config) => entities payload, or null");let t=pi;return pi=e??null,vo=null,t}function tc(){return{generated_at:"",bootstrap:!0,classes:[],vocabulary:[],objectProperties:[],individuals:[],proseIndex:{}}}async function ev(e){let t;try{t=await ze(e,"utf8")}catch(n){if(n?.code==="ENOENT")return tc();throw new Re(`cannot read graph artifact at ${e} (${n?.code||n?.message||n})`)}try{return JSON.parse(t)}catch{throw new Re(`graph artifact ${e} is not valid JSON`)}}async function tv(e){let t=e.graphFiles,n=[...t].map(String).sort().join("|");if(hr&&hr.key===n)return hr.payload;let s=[];for(let r=0;r<t.length;r++){let i=await ev(t[r]);s.push({file:t[r],payload:i,name:e.graphNames?.[r]})}let o=Vd(s);return hr={key:n,payload:o},o}async function nv(e){if(pi){let s;try{s=await pi(e)}catch(o){throw o instanceof Re?o:new Re(`graph provider failed (${o?.message||o})`)}if(!s||typeof s!="object")throw new Re("graph provider returned no entities payload");return s}if(Array.isArray(e.graphFiles)&&e.graphFiles.length>1)return tv(e);if(vo&&vo.file===e.graphFile)return vo.payload;let t;try{t=await ze(e.graphFile,"utf8")}catch(s){if(s?.code==="ENOENT")return tc();throw new Re(`cannot read graph artifact at ${e.graphFile} (${s?.code||s?.message||s})`)}let n;try{n=JSON.parse(t)}catch{throw new Re(`graph artifact ${e.graphFile} is not valid JSON`)}return vo={file:e.graphFile,payload:n},n}var vo,hr,pi,gr=L(()=>{jt();Dt();qd();vo=null,hr=null,pi=null});function Sn(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<=Kd)}function nc(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>Kd||sv.has(s))&&!n.has(s)&&(n.add(s),t.push(s),t.length>=ov))break;return t}function fi({name:e,doc:t}={}){return[...new Set([...Sn(e),...nc(t)])].sort()}function Yd(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([...Sn(t),...nc(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 Xd(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 sv,Kd,ov,as=L(()=>{sv=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+/)),Kd=40,ov=120});function Jd(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 rv(e){if(!e.startsWith(Zd))return null;let t=e.indexOf("@"),n=t>=0?e.slice(0,t):e,s=t>=0?e.slice(t+1):"",o=n.indexOf(Qd);if(o<0)return null;let r=n.slice(o+Qd.length);return r?{kind:"teachNode",nodeId:r,displayName:n.slice(Zd.length,o),createdAt:s}:null}function ls(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:av(r),pack:r,article:s.slice(o+1)}}if(t.startsWith("research:")){let s=t.slice(9),o=s.lastIndexOf("@");return{kind:"referenceLive",pack:"research",article:(o>=0?s.slice(0,o):s).trim()||"unknown"}}let n=t.split(/\s+/)[0];if(n.startsWith("corpus-weak:"))return{kind:"corpusWeak",name:n.slice(12)||"unknown"};if(n.startsWith("corpus:"))return{kind:"corpus",name:n.slice(7)||"unknown"};if(n.startsWith("child:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("world:"))return{kind:"corpus",name:n.slice(6).split(":")[0]||"unknown"};if(n.startsWith("mud:"))return{kind:"corpus",name:`mud:${n.slice(4).split(":")[0]||"unknown"}`};if(n.startsWith("ace:"))return{kind:"operator",...Jd(n.slice(4))};if(n.startsWith("teach:")){let s=n.slice(6),o=rv(s);return o||{kind:"teach",...Jd(s)}}return n.startsWith("web:")?{kind:"web",url:n.slice(4)}:n.startsWith("url:")?{kind:"web",url:n.slice(4)}:n.startsWith("optimistic-extract:")?{kind:"optimisticExtract",name:n.slice(19)||"unknown"}:n.startsWith("extracted:")?{kind:"extracted",name:n.slice(10)||"unknown"}:n.startsWith("entailed:")?{kind:"entailed",rule:n.slice(9)}:n.startsWith("chat:")||n.startsWith("session:")||n.startsWith("operator")?{kind:"operator"}:null}function op(e){let t=(e?.attributes||[]).find(s=>s.prop==="mgx:sourceReliability")?.value;if(t===void 0)return tp;let n=Number(t);return Number.isFinite(n)?Math.max(sc,Math.min(sp,n)):tp}function rp(e,t=Date.now(),n=cv){let s=Date.parse(e);if(!Number.isFinite(s))return 1;let o=Math.max(0,t-s);return ep+(1-ep)*Math.pow(.5,o/n)}function ip(e,t={},n={}){let s=typeof n.now=="number"?n.now:Date.now(),o=Array.isArray(e?.sourceIds)?e.sourceIds:[],r=new Set,i=[],a=[];for(let p of o){if(r.has(p))continue;r.add(p);let m=t[p],h=lv(m);if(!h)continue;i.push(h);let g=(Us[h]??0)*op(m);a.push(Math.max(0,Math.min(1,g)))}let l=0,c=1;for(let p of a)c*=1-p;if(a.length&&(l=Math.min(1,1-c)),i.includes("entailed")&&Array.isArray(n.premiseTrusts)&&n.premiseTrusts.length){let p=typeof n.ruleConfidence=="number"?n.ruleConfidence:1;l=Math.max(0,Math.min(1,Math.min(...n.premiseTrusts)*p))}let u=rp(e?.createdAt,s,n.halfLifeMs),d=xo(Math.min(1,l*u)),f={sourceTypes:i.slice().sort(),corroboration:i.length,createdAt:e?.createdAt||"",recency:xo(u)};return{score:d,inputs:f}}function hi(e,t){let n=(Us[e]??0)*op(t);return xo(Math.max(0,Math.min(1,n)))}function uv(e){if(e==="operator")return 1;let t=Us[e];return t===void 0?1:(t+1)/2}function gi(e,t={}){let n=typeof t.now=="number"?t.now:Date.now(),s=Array.isArray(e)?e:[],o=new Map,r=[];for(let a of s){let l=rp(a?.assertedAt,n,t.halfLifeMs),c=Math.max(0,Math.min(1,Number(a?.ownTrust)||0)),u=a?.sourceType||"",d=Math.max(0,Math.min(1,c*l)),f=o.get(u)||{complement:1,strongest:0};f.complement*=1-d,f.strongest=Math.max(f.strongest,d),o.set(u,f),r.push({sourceId:a?.sourceId||"",sourceType:u,ownTrust:c,recency:xo(l)})}let i=1;for(let[a,l]of o){let c=Math.max(uv(a),l.strongest);i*=1-Math.min(1-l.complement,c)}return{score:s.length?xo(Math.min(1,1-i)):0,inputs:r}}function ap(e){return gi(e,{halfLifeMs:dv})}function cp({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+pv),i=(o*r+1)/2;return xo(sc+(sp-sc)*i)}var Eo,mi,nt,cs,Qd,Zd,iv,av,Us,oc,np,cv,ep,sc,sp,tp,xo,lv,dv,pv,us=L(()=>{Eo="mgx:trustScore",mi="mgx:trustInputs",nt="mgx:createdAt",cs="mgx:updatedAt";Qd="#node:",Zd="peer:";iv="wikipedia-live",av=e=>e===iv?"referenceLive":"reference";Us=Object.freeze({operator:1,teach:.95,provider:.9,corpus:.7,reference:.6,corpusWeak:.55,referenceLive:.5,extracted:.45,web:.4,optimisticExtract:.35,entailed:.3}),oc=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"}}),np=new Set(Object.entries(oc).filter(([,e])=>e.prov==="prov:Agent").map(([e])=>e)),cv=720*60*60*1e3,ep=.9,sc=.5,sp=1.5,tp=1,xo=(e,t=6)=>Number(e.toFixed(t)),lv=e=>(e?.attributes||[]).find(t=>t.prop==="mgx:sourceType")?.value||"";dv=1/0;pv=19});var Ws,rc=L(()=>{Ws=e=>/(^|\/)tests?\//.test(e)||/(^|\/)test_[^/]*\.py$/.test(e)||/\.tests(\.|$)/.test(e)||/(^|\/)[^/]*[-_]tests?\//.test(e)||/\.(test|spec)\.[cm]?[jt]sx?$/.test(e)});function ic(e,t){return Math.log(1+e/(1+t))}var br=L(()=>{});var wi={};Mn(wi,{bfsLevels:()=>bi,findActionPath:()=>ac,findReachableSet:()=>cc});function lp(e){return e&&typeof e=="object"?JSON.stringify(e):String(e)}function up(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 ac(e,t,n,{maxDepth:s=50,stateKey:o=lp}={}){if(t(e))return{actions:[],states:[e]};let r=up(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 cc(e,t,{maxDepth:n=50,stateKey:s=lp}={}){let o=up(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*bi(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 Gs=L(()=>{});function vi(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 mc(e){return!e||!Array.isArray(e.individuals)?0:e.individuals.filter(t=>(t.class||"")==="Module").length}function Gn(e){let t=String(e?.prop||"").toLowerCase();if(dp[t])return dp[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 Un(e){return String(e||"").trim().toLowerCase().replace(/^\.\//,"").replace(/^\//,"")}function lc(e){let t=Un(e).split("/");return t[t.length-1]}function fv(e){return(e?.derived_from||[]).filter(Sp).length}function pp(e){return(e?.mentions||[]).reduce((n,s)=>n+(Number(s?.count)||0),0)+fv(e)}function Qt(e,t){let n=Un(t);if(!n)return{match:null,candidates:[]};let s=lc(n),o=!n.includes("/"),r=[];for(let i of e.individuals){let a=Un(i.label),l=String(i.id||"").toLowerCase(),c=0;a===n||l===n?c=100:a.endsWith(`/${n}`)||o&&(lc(a)===s||lc(a).replace(/\.[a-z]+$/,"")===s)?c=80:a.includes(n)&&(c=Math.max(10,50-(a.length-n.length))),c>0&&r.push({ind:i,score:c})}return r.sort((i,a)=>a.score-i.score||pp(a.ind)-pp(i.ind)||String(i.ind.label).length-String(a.ind.label).length),{match:r[0]?.ind||null,candidates:r.slice(1,5).map(i=>i.ind)}}function _t(e){let t=(e?.attributes||[]).find(s=>s.key==="site");if(!t)return null;let n=String(t.value).match(/^(.*):(\d+)(?:-(\d+))?$/);return n?{path:n[1],start:Number(n[2]),end:n[3]?Number(n[3]):Number(n[2])}:null}function mv(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 fp(e){return e.prop?`${e.predicate} [${e.prop}]`:e.predicate}function Wn(e){let t=e||"Entity",n=Sn(t);return n.length<2?t:n.map(s=>s[0].toUpperCase()+s.slice(1)).join(" ")}function ut(e,t,n=", "){return e.length<=t?e.join(n):e.slice(0,t).join(n)+`, +${e.length-t} more`}function hc(e,t,{candidates:n=[]}={}){let s=[];s.push(`${t.label} \u2014 ${Wn(t.class)} (id: ${t.id})`);let o=(t.derived_from||[]).filter(Sp);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}=mv(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(` ${fp(l)} (${c.length}) \u2192 ${ut(c.map(u=>u.objectLabel||u.object),mp)}`);for(let{group:l,edges:c}of i)s.push(` \u2190 ${fp(l)} (${c.length}) by ${ut(c.map(u=>u.subjectLabel||u.subject),mp)}`)}let a=t.derived_from||[];return a.length&&s.push(`provenance: ${ut(a,hv)}`),n.length&&s.push(`other matches: ${n.map(l=>`${l.label} (${Wn(l.class)})`).join(", ")}`),e.truncated.length&&s.push(gv(e)),s.join(`
2
+ `)}function gv(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 ko(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=Gn(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=Bn(e,c.subject),d=Bn(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 bi(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 kp(e,t,{maxDepth:n=8}={}){let s=ko(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>=bv){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,uc)){let u=c.tests.length?`tests: ${ut(c.tests,wv)}`:"tests: none recorded",d=l===0?`${c.via} it`:"reaches it through an intermediary";o.push(` - ${c.label} (${d}) \u2014 ${u}`)}a.length>uc&&o.push(` \u2026+${a.length-uc} more at depth ${l+1}`)});let i=e.truncated.filter(a=>{let l=Gn({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 jp(e){let t=new Map;for(let n of e.relations)if(Gn(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 gp(e){return new Set(String(e).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function Cp(e,t,n=null){let s=n||(i=>Bn(e,i)),o=new Map,r=(i,a)=>{!i||!a||i===a||(o.has(i)||o.set(i,new Set),o.has(a)||o.set(a,new Set),o.get(i).add(a),o.get(a).add(i))};for(let i of t)for(let a of ke(e,i))r(s(a.subject),s(a.object));return o}function e$(e,t,n){if(t.length<2)return;let s=new Map(t.map(c=>[c.ind.id,c])),o=new Map(t.map(c=>[c.ind.id,c.score])),r=c=>{if(!c.size)return[[],[]];let u=0;for(let m of c.values())u=Math.max(u,m);let d=[...c.entries()].sort((m,h)=>h[1]-m[1]),f=[],p=[];for(let[m,h]of d)h>=u*Gv&&f.length<n?f.push([m,h]):p.length<hp&&p.push([m,h]);return[f,p]},[i,a]=r(new Map(t.map(c=>[c.ind.id,c.score]))),l=new Set(i.map(([c])=>c));for(let c=0;c<qv&&i.length;c++){let u=new Map,d=[];for(let f of Kv){let p=Cp(e,f),m=new Map;for(let[b,y]of i)for(let w of p.get(b)||[])o.has(w)&&m.set(w,Math.max(m.get(w)||0,y));let[h,g]=r(m);for(let[b,y]of h)u.set(b,Math.max(u.get(b)||0,y));d.push(...g)}a.push(...d);for(let[f,p]of u){if(l.has(f))continue;let m=s.get(f);m&&(m.score+=Math.min(p*Hv,m.score*Vv),l.add(f))}i=[...u.entries()],!i.length&&a.length&&(i=a.splice(0,hp).filter(([f])=>!l.has(f)))}}function t$(e,t=[],{depth:n=Rp,q:s=Ap,nodeLimit:o=Tp,kinds:r=Yv,classPredicate:i=u=>(u.class||"")==="Module",idNormalizer:a=null,seeds:l=null,hubDegree:c=1/0}={}){let u=new Map(t.map(S=>[S.ind.id,S])),d=0;for(let S of t)d=Math.max(d,S.score);let f=t.length>0&&d>0,p=new Set(l??u.keys());if(!p.size)return[];let m=Cp(e,r,a),h=S=>m.get(S)?.size||0,g=[],b=(S,R)=>S.hop!==R.hop?S.hop<R.hop:S.deg!==R.deg?S.deg<R.deg:S.id<R.id,y=(S,R)=>{let k=g[S];g[S]=g[R],g[R]=k},w=S=>{g.push(S);let R=g.length-1;for(;R>0;){let k=R-1>>1;if(b(g[R],g[k]))y(R,k),R=k;else break}},$=()=>{let S=g[0],R=g.pop();if(g.length){g[0]=R;let k=0;for(;;){let A=2*k+1,P=2*k+2,T=k;if(A<g.length&&b(g[A],g[T])&&(T=A),P<g.length&&b(g[P],g[T])&&(T=P),T===k)break;y(k,T),k=T}}return S},_=new Set(p);for(let S of p)w({id:S,hop:0,deg:h(S)});let v=null,x=0,E=[];for(;g.length&&x<o;){let S=$();if(E.push({id:S.id,hop:S.hop}),!p.has(S.id)){if(f){let A=d*Xv*Math.pow(Jv,S.hop-1),P=u.get(S.id);if(P)P.score+=Math.min(A*Qv,P.score*Zv);else{let T=e.byId?.get?.(S.id);if(T&&i(T)){v||(v=jp(e));let M=v.get(T.id)||[],B={ind:T,score:A,defineCount:M.length,matching:[],density:0};t.push(B),u.set(S.id,B)}}}x++}if(S.hop>=n||S.hop>0&&h(S.id)>c)continue;let R=[];for(let A of m.get(S.id)||[]){if(_.has(A))continue;let P=e.byId?.get?.(A);!P||!i(P)||R.push({id:A,deg:h(A)})}if(!R.length)continue;R.sort((A,P)=>A.deg-P.deg||(A.id<P.id?-1:A.id>P.id?1:0));let k=Math.max(1,Math.floor(s*R.length));for(let A=0;A<k;A++){let P=R[A];_.add(P.id),w({id:P.id,hop:S.hop+1,deg:P.deg})}}return E}function Op(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=jp(e),m=[];for(let $ of e.individuals){if(($.class||"")!=="Module")continue;let _=String($.label),v=_.toLowerCase(),x=p.get($.id)||[],E=new Set(x.map(k=>k.toLowerCase())),S=new Set;for(let k of x)for(let A of gp(k))S.add(A);let R=u?String(($.attributes||[]).find(k=>k.key==="dotted")?.value||"").toLowerCase():"";m.push({ind:$,label:_,labelLc:v,defines:x,symSet:E,symComps:S,dotted:R})}let h=m.length||1,g=new Map,b=$=>{let _=0;for(let v of m)(v.labelLc.includes($)||v.symComps.has($)||v.symSet.has($))&&_++;return _},y=$=>(g.has($)||g.set($,ic(h,b($))),g.get($));for(let $ of t)y($);let w=[];for(let $ of m){let _=0,v=0,x=0,E=[];for(let P of t){let T=g.get(P)||0;T&&($.symSet.has(P)?(_+=T*_p,x++):$.symComps.has(P)&&(E.push(T),x++),$.labelLc.includes(P)&&(v+=T*vv))}E.sort((P,T)=>T-P);let S=0;for(let P=0;P<Math.min(E.length,xv);P++)S+=E[P]*$v;let R=_+v+S;if(!R)continue;s&&(Ws($.labelLc)||jv($.labelLc))?R*=kv:Ws($.labelLc)&&(R*=.4);let k=$.defines.filter(P=>{let T=P.toLowerCase(),M=gp(P);return t.some(B=>T===B||M.has(B))}),A=$.defines.length?x/$.defines.length:0;w.push({ind:$.ind,score:R,defineCount:$.defines.length,matching:k,density:A})}if(u&&d&&w.length){let $=String(d).toLowerCase(),_=S=>S!=null&&/[a-z0-9_./]/.test(S),v=S=>{for(let R=$.indexOf(S);R!==-1;R=$.indexOf(S,R+1))if(!_($[R-1])&&!_($[R+S.length]))return!0;return!1},x=new Map(m.map(S=>[S.ind.id,S])),E=0;for(let S of w)E=Math.max(E,S.score);for(let S of w){let R=x.get(S.ind.id);if(!R)continue;let k=0;for(let A of new Set([R.dotted,R.labelLc])){if(!A||A.split(/[./]+/).filter(Boolean).length<zv||!v(A))continue;let P=[...new Set(A.split(/[^a-z0-9_]+/).filter(Boolean))].map(y).sort((M,B)=>B-M),T=0;for(let M=0;M<Math.min(P.length,Bv);M++)T+=P[M]*Dv;k=Math.max(k,T)}k&&(S.score+=Math.min(k*Uv,E*Wv))}}if(w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),_=new Map;for(let v of ke(e,"imports"))!$.has(v.subject)&&!$.has(v.object)||(_.has(v.subject)||_.set(v.subject,new Set),_.has(v.object)||_.set(v.object,new Set),_.get(v.subject).add(v.object),_.get(v.object).add(v.subject));for(let v of w){let x=0;for(let E of _.get(v.ind.id)||[])x=Math.max(x,$.get(E)||0);v.score+=Math.min(x*Ev,v.score*Sv)}}if(o&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),_=new Map;for(let v of["calls","callsSymbol"])for(let x of ke(e,v)){let E=Bn(e,x.subject),S=Bn(e,x.object);!E||!S||E===S||!$.has(E)&&!$.has(S)||(_.has(E)||_.set(E,new Set),_.has(S)||_.set(S,new Set),_.get(E).add(S),_.get(S).add(E))}for(let v of w){let x=0;for(let E of _.get(v.ind.id)||[])x=Math.max(x,$.get(E)||0);v.score+=Math.min(x*_v,v.score*Rv)}}if(r&&w.length>1){let $=new Map(w.map(v=>[v.ind.id,v.score])),_=new Map;for(let v of e.individuals)(v.class||"")==="Class"&&v.label&&_.set(String(v.label),v);for(let v of w){if(!Cv(v.ind.label))continue;let x=0;for(let E of ke(e,"inherits")){if(Bn(e,E.subject)!==v.ind.id||!Ov(E.objectLabel))continue;let R=Bn(e,E.object);if(!R){let k=_.get(String(E.objectLabel||""));k&&(R=kn(e,k))}R&&(x=Math.max(x,$.get(R)||0))}v.score+=Math.min(x*Tv,v.score*Av)}}if(l&&w.length&&e.proseIndex){let $=Bs(e.proseIndex,t.join(" "),{limit:Nv});if($.length){let _=new Map;for(let{id:v,score:x}of $){let E=Bn(e,v);E&&_.set(E,(_.get(E)||0)+x)}for(let v of w){let x=_.get(v.ind.id)||0;x&&(v.score+=Math.min(x*Iv,v.score*Lv))}}}if(c&&w.length&&e.proseIndex){let $=new Map(w.map(x=>[x.ind.id,x])),_=new Map(m.map(x=>[x.ind.id,x])),v=new Map;for(let x of new Set(t)){let E=g.get(x)||0;if(!E)continue;let{ids:S}=Xd(e.proseIndex,x);if(!S.length)continue;let R=new Set;for(let k of S){let A=Bn(e,k);if(!A||R.has(A)||(R.add(A),!$.has(A)))continue;let P=_.get(A);P&&(P.symSet.has(x)||P.symComps.has(x)||P.labelLc.includes(x))||v.set(A,(v.get(A)||0)+E*Fv)}}for(let x of w){let E=v.get(x.ind.id)||0;E&&(x.score+=Math.min(E*Pv,x.score*Mv))}}return i&&w.length>1&&e$(e,w,f),a&&w.length&&t$(e,w,{depth:Number.isFinite(n.spiralDepth)&&n.spiralDepth>0?n.spiralDepth:Rp,q:Number.isFinite(n.mostDistinctiveBeams)&&n.mostDistinctiveBeams>0?n.mostDistinctiveBeams:Ap,nodeLimit:Number.isFinite(n.spiralNodeLimit)&&n.spiralNodeLimit>0?n.spiralNodeLimit:Tp}),w.sort(($,_)=>_.score-$.score||_.density-$.density||$.defineCount-_.defineCount||String($.ind.label).length-String(_.ind.label).length),w}function Ip(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 Op(e,o,r).map(i=>({path:String(i.ind.label),score:i.score}))}function s$(e){let t=0,n=!1,s=!1,o=!1,r="",i=!1,a=()=>{t+=1,r===")"&&(n=!0),i=!0};for(let l=0;l<e.length;l++){let c=e[l];if(c==="\\"){let u=e[l+1]||"";!o&&u>="1"&&u<="9"&&(s=!0),l+=1,r="",i=!1;continue}if(o){c==="]"&&(o=!1,r="]",i=!1);continue}if(c==="["){o=!0,r="[",i=!1;continue}if(c==="?"&&(r==="("||i)){r="?",i=!1;continue}if(c==="*"||c==="+"||c==="?"){a(),r=c;continue}if(c==="{"){let u=e.indexOf("}",l),d=u===-1?"":e.slice(l+1,u);if(u!==-1&&/^\d+(,\d*)?$/.test(d)){a(),l=u,r="}";continue}r="{",i=!1;continue}r=c,i=!1}return{quantifiers:t,quantifiedGroup:n,backreference:s}}function gc(e,{now:t=Date.now}={}){let n=String(e);if(n.length>bp)return{error:`name pattern is ${n.length} characters; the limit is ${bp}.`};let{quantifiers:s,quantifiedGroup:o,backreference:r}=s$(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>wp)return{error:`name pattern "${n}" has ${s} quantifiers; the limit is ${wp}.`};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()+yp;else if(t()>a)throw new yi(`name pattern "${n}" exceeded its ${yp}ms matching budget.`);return i.test(String(l).slice(0,n$))}}}function Lp(e,t,{limit:n=$i,kind:s="",decorator:o="",name:r="",toolNamePrefix:i="tmct_"}={}){let a=String(t||"").toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean),l=String(s||"").trim().toLowerCase(),c=String(o||"").trim().toLowerCase(),u=null;if(r){let m=gc(r);if(m.error)return m.error;u=m}if(l&&l!=="module")try{return c$(e,a,{limit:n,kind:l,decFilter:c,nameRe:u,toolNamePrefix:i})}catch(m){if(m instanceof yi)return m.message;throw m}if(!a.length&&!u&&!c)return"empty query";let d=Op(e,a);if(!d.length)return`no module matches "${t}". Try broader keywords, or ${i}describe <path> if you know where it lives.`;let f=d.slice(0,n),p=[`${d.length} module(s) match "${t}" (top ${f.length}):`];for(let{ind:m,defineCount:h,matching:g}of f){let b=g.length?` \u2014 matching: ${ut([...new Set(g)],yv)}`:"";p.push(`- ${m.label} (defines ${h} symbol(s))${b}`)}return p.push(`Then ${i}describe <path> for the full sibling list + typed edges, or ${i}impact <path> for dependents.`),p.join(`
4
+ `)}function ke(e,t){let n=vp.get(e);n||(n=new Map,vp.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Gn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Bn(e,t){let n=e.byId?.get?.(t);if(n)return kn(e,n);let s=String(t||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function kn(e,t){if((t?.class||"")==="Module")return t.id;let n=_t(t);if(n)return`mod:${n.path}`;let s=String(t?.id||"").match(/^fn:(.+)#/);return s?`mod:${s[1]}`:null}function bc(e){if(!e)return"";let t=e.end>e.start?`${e.start}-${e.end}`:`${e.start}`;return` [${e.path}:${t}]`}function So(e){return(e?.attributes||[]).find(t=>t.key==="decorators")?.value||""}function Np(e,t,{toolNamePrefix:n="tmct_"}={}){let s=[`${t.label} \u2014 ${Wn(t.class)} (id: ${t.id})`],o=ke(e,"contains").filter(a=>a.subject===t.id);if(!o.length)return s.push(`members: none recorded (empty class, or members not in the extracted graph). Use ${n}describe for its edges.`),s.join(`
5
+ `);let r=[],i=[];for(let a of o){let l=e.byId.get(a.object),c=bc(l?_t(l):null),u=l?So(l):"",d=`${a.objectLabel||a.object}${c}${u?` @${u}`:""}`;((l?.class||"")==="Attribute"?i:r).push(d)}return r.length&&s.push(`methods (${r.length}): ${ut(r,$p)}`),i.length&&s.push(`attributes (${i.length}): ${ut(i,$p)}`),s.push(`Use ${n}snippet <Class.member> for an exact body.`),s.join(`
6
+ `)}function Pp(e,t,{toolNamePrefix:n="tmct_"}={}){let s=_t(t),o=[`${t.label} \u2014 ${Wn(t.class)}${bc(s)}`],r=Pe(t,"params"),i=Pe(t,"returns");(r||i||(t.class||"")==="Method"||(t.class||"")==="Function")&&o.push(`signature: ${t.label}(${r})${i?` -> ${i}`:""}`);let a=[];Pe(t,"isStatic")&&a.push("static"),Pe(t,"isAbstract")&&a.push("abstract"),Pe(t,"isConstant")&&a.push("constant");let l=Pe(t,"visibility");l&&a.push(l),a.length&&o.push(`flags: ${a.join(", ")}`);let c=So(t);c&&o.push(`decorators: @${c.split(", ").join(", @")}`);let u=Pe(t,"raises");u&&o.push(`raises: ${u}`);let d=Pe(t,"catches");d&&o.push(`catches: ${d}`);let f=Pe(t,"self_fields");f&&o.push(`self fields: ${f}`);let p=Pe(t,"value");p&&o.push(`value: ${p}`);let m=Pe(t,"doc");return m&&o.push(`doc: ${m}`),o.length===1&&o.push(`(no signature detail recorded for this symbol \u2014 likely a module or attribute; use ${n}snippet for its source.)`),o.push(`Use ${n}snippet for the exact body.`),o.join(`
7
+ `)}function Mp(e,t){let n=ke(e,"inherits"),s=n.filter(l=>l.subject===t.id).map(l=>l.objectLabel||l.object),o=new Map;for(let l of n)o.has(l.object)||o.set(l.object,[]),o.get(l.object).push({id:l.subject,label:l.subjectLabel||l.subject});let r=[`${t.label} \u2014 ${Wn(t.class)} (id: ${t.id})`];r.push(s.length?`extends: ${ut(s,xp)}`:"extends: (no internal/recorded base classes)");let i=[];for(let l of bi(t.id,c=>o.get(c)||[],{maxDepth:8,keyOf:c=>c.id}))l.length&&i.push(l.map(c=>c.label).sort((c,u)=>String(c).localeCompare(String(u))));let a=i.reduce((l,c)=>l+c.length,0);return a?(r.push(`subclasses: ${a} total across ${i.length} level(s).`),i.forEach((l,c)=>r.push(` depth ${c+1} (${l.length}): ${ut(l,xp)}`))):r.push("subclasses: none recorded \u2014 nothing extends it in the extracted graph."),r.join(`
8
+ `)}function xi(e){let t=new Map;for(let n of e){let s=n.label.includes("/")?n.label.slice(0,n.label.lastIndexOf("/")):"(root)";t.set(s,(t.get(s)||0)+1)}return t}function Ei(e,t=""){let n=Un(t);return e.individuals.filter(s=>(s.class||"")==="Module"&&(!n||Un(s.label).startsWith(n)))}function Fp(e,{pkg:t=""}={}){let n=Un(t),s=Ei(e,t);if(!s.length)return n?`no modules under "${t}".`:"no modules in the graph.";let o=xi(s),r=new Map;for(let u of ke(e,"imports"))r.set(u.object,(r.get(u.object)||0)+1);let i=new Set(s.map(u=>u.id)),a=[...r.entries()].filter(([u])=>i.has(u)).sort((u,d)=>d[1]-u[1]).slice(0,r$).map(([u,d])=>`${e.byId.get(u)?.label||u} (${d} importers)`),l=[...o.entries()].sort((u,d)=>d[1]-u[1]),c=[`Architecture${n?` of ${t}`:""}: ${s.length} module(s) in ${l.length} package(s).`];return c.push(`packages (by module count): ${ut(l.map(([u,d])=>`${u} (${d})`),o$)}`),c.push(a.length?`hub modules (most imported): ${a.join(", ")}`:"hub modules: none (no internal imports recorded)."),c.join(`
9
+ `)}function zp(e,t){let n=kn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||_t(t)?.path||n,o=[...new Set(ke(e,"tests").filter(a=>a.object===n).map(a=>a.subjectLabel||a.subject))],r=o.length>0,i=r?`covered by ${o.length} test module(s):
10
+ ${ut(o,Dp,`
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
- ${$y}`}function Nd(e){let t=new Set,n=new Set;for(let o of Se(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!js(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
- ${ct(s,Id,`
14
- `)}`:"every source module has at least one covering test module."}function Md(e,t){let n=wn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${ct(o,Ft)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Fd(e,t,{toolNamePrefix:n="tmct_"}={}){if(Pd.has(t.class)){let i=[...new Set(Se(e,"callsSymbol").filter(a=>a.object===t.id).map(a=>a.subjectLabel||a.subject))];return i.length?`${t.label} \u2014 called by ${i.length} symbol(s):
15
- ${ct(i,Xo,`
16
- `)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}let s=wn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(Se(e,"calls").filter(i=>i.object===s).map(i=>i.subjectLabel||i.subject))];return r.length?`${o} \u2014 called by ${r.length} module(s):
17
- ${ct(r,Xo,`
18
- `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function Dd(e,t){if(Pd.has(t.class)){let r=[...new Set(Se(e,"callsSymbol").filter(i=>i.subject===t.id).map(i=>i.objectLabel||i.object))];return r.length?`${t.label} \u2014 calls into ${r.length} symbol(s):
19
- ${ct(r,Xo,`
20
- `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=wn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(Se(e,"calls").filter(r=>r.subject===n).map(r=>r.objectLabel||r.object))];return o.length?`${s} \u2014 calls into ${o.length} module(s):
21
- ${ct(o,Xo,`
22
- `)}`:`${s}: no recorded callees.`}function zd(e,t){let n=e.byId.get(t.object),s=n?Et(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function Pa(e,t){if(!t?.id)return"";let n=Se(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${ct(n.map(s=>zd(e,s)),xy)}`:""}function Bd(e,t){let n=Se(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${On(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=>zd(e,o));return`${t.label} \u2014 ${On(t.class)} calls ${n.length} in-repo symbol(s):
23
- ${ct(s,Xo,`
24
- `)}`}function Ud(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Me(s,"commitDate")||Me(s,"date"),i=Me(s,"commitAuthor")||Me(s,"author"),a=Me(s,"commitMessage")||Me(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Wd(e,t){let n=wn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(e,"touches").filter(a=>a.object===n);if(!o.length)return`${s}: no commit history recorded (outside the git-log window or unmodified).`;let r=o.slice(0,Ft).map(a=>` ${Ud(e,a.subject,a.subjectLabel)}`),i=o.length>Ft?`
25
- \u2026+${o.length-Ft} more`:"";return`${s}: touched by ${o.length} recent commit(s):
12
+ ${i$}`}function Bp(e){let t=new Set,n=new Set;for(let o of ke(e,"tests"))t.add(o.object),n.add(o.subject);let s=e.individuals.filter(o=>(o.class||"")==="Module"&&!n.has(o.id)&&!Ws(String(o.label).toLowerCase())&&!t.has(o.id)).map(o=>o.label).sort();return s.length?`${s.length} source module(s) with no covering test module:
13
+ ${ut(s,Dp,`
14
+ `)}`:"every source module has at least one covering test module."}function Up(e,t){let n=kn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(e,"touches").filter(r=>r.object===n).map(r=>r.subjectLabel||r.subject);return o.length?`${s}: touched by ${o.length} recent commit(s): ${ut(o,zt)}`:`${s}: no commit history recorded (outside the git-log window or unmodified).`}function Gp(e,t,{toolNamePrefix:n="tmct_"}={}){if(Wp.has(t.class)){let i=[...new Set(ke(e,"callsSymbol").filter(a=>a.object===t.id).map(a=>a.subjectLabel||a.subject))];return i.length?`${t.label} \u2014 called by ${i.length} symbol(s):
15
+ ${ut(i,wr,`
16
+ `)}`:`${t.label}: no recorded callers (fine-grained call edges are conservative \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}let s=kn(e,t);if(!s)return`cannot map ${t.label} to a module.`;let o=e.byId.get(s)?.label||s,r=[...new Set(ke(e,"calls").filter(i=>i.object===s).map(i=>i.subjectLabel||i.subject))];return r.length?`${o} \u2014 called by ${r.length} module(s):
17
+ ${ut(r,wr,`
18
+ `)}`:`${o}: no recorded callers (calls are coarse/import-backed \u2014 absence is not proof). Try ${n}impact for the full reverse closure.`}function Hp(e,t){if(Wp.has(t.class)){let r=[...new Set(ke(e,"callsSymbol").filter(i=>i.subject===t.id).map(i=>i.objectLabel||i.object))];return r.length?`${t.label} \u2014 calls into ${r.length} symbol(s):
19
+ ${ut(r,wr,`
20
+ `)}`:`${t.label}: no recorded callees (calls only stdlib/external, or fine-grained call edges are not in the extracted graph).`}let n=kn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=[...new Set(ke(e,"calls").filter(r=>r.subject===n).map(r=>r.objectLabel||r.object))];return o.length?`${s} \u2014 calls into ${o.length} module(s):
21
+ ${ut(o,wr,`
22
+ `)}`:`${s}: no recorded callees.`}function Vp(e,t){let n=e.byId.get(t.object),s=n?_t(n):null;return`${t.objectLabel||n?.label||t.object}${s?` [${s.path}:${s.start}]`:""}`}function wc(e,t){if(!t?.id)return"";let n=ke(e,"callsSymbol").filter(s=>s.subject===t.id);return n.length?`calls in-repo: ${ut(n.map(s=>Vp(e,s)),a$)}`:""}function qp(e,t){let n=ke(e,"callsSymbol").filter(o=>o.subject===t.id);if(!n.length)return`${t.label} \u2014 ${Wn(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=>Vp(e,o));return`${t.label} \u2014 ${Wn(t.class)} calls ${n.length} in-repo symbol(s):
23
+ ${ut(s,wr,`
24
+ `)}`}function Kp(e,t,n){let s=e.byId.get(t),o=s?.label||n||t,r=Pe(s,"commitDate")||Pe(s,"date"),i=Pe(s,"commitAuthor")||Pe(s,"author"),a=Pe(s,"commitMessage")||Pe(s,"message"),l=[o,r,i].filter(Boolean).join(" ");return a?`${l} \u2014 ${a}`:l}function Yp(e,t){let n=kn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(e,"touches").filter(a=>a.object===n);if(!o.length)return`${s}: no commit history recorded (outside the git-log window or unmodified).`;let r=o.slice(0,zt).map(a=>` ${Kp(e,a.subject,a.subjectLabel)}`),i=o.length>zt?`
25
+ \u2026+${o.length-zt} more`:"";return`${s}: touched by ${o.length} recent commit(s):
26
26
  ${r.join(`
27
- `)}${i}`}function Gd(e,t){let n=Se(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${On(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,Ft).map(r=>` ${Ud(e,r.subject,r.subjectLabel)}`),o=n.length>Ft?`
28
- \u2026+${n.length-Ft} more`:"";return`${t.label} \u2014 ${On(t.class)}: touched by ${n.length} commit(s):
27
+ `)}${i}`}function Xp(e,t){let n=ke(e,"touchesSymbol").filter(r=>r.object===t.id);if(!n.length)return`${t.label} \u2014 ${Wn(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,zt).map(r=>` ${Kp(e,r.subject,r.subjectLabel)}`),o=n.length>zt?`
28
+ \u2026+${n.length-zt} more`:"";return`${t.label} \u2014 ${Wn(t.class)}: touched by ${n.length} commit(s):
29
29
  ${s.join(`
30
- `)}${o}`}function Vd(e,t){return Gd(e,t)}function qd(e,t){return Gd(e,t)}function Fa(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Hd[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!io(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 ky(e,t,{limit:n=Hr,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Hd[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=Fa(e,t,{kind:s,decFilter:o,nameRe:r});if(!l.length)return`no ${s} matches the given filters.`;let c=l.slice(0,n),u=[`${l.length} ${s}(s) match (top ${c.length}):`];for(let{ind:d}of c)u.push(`- ${d.label}${Ma(Et(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
- `)}function Iy(e){return{paramCount:Xr(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function Ly(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Xr(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:Oy(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function Ny(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Xr(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 My(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of Ta(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(Ta(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(bd(n)),d=s?.start??null;for(let f of e){let p=Ta(f.decorators).some(b=>c.has(b))?1:0,m=bd(f.label).filter(b=>u.has(b)).length,h=Ny(f,o),g=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+m*50+h+g}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function co(e,t){let n=wn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=Se(e,"defines").filter(x=>x.subject===n),r=new Map;for(let x of Se(e,"callsSymbol"))r.has(x.subject)||r.set(x.subject,new Set),r.get(x.subject).add(x.object);let i=[],a=[],l=0;for(let x of o){let T=e.byId.get(x.object);if(!T)continue;let M=T.class||"",A=Et(T);M==="GlobalVariable"?(a.push({label:T.label,value:(T.attributes||[]).find(P=>P.key==="value")?.value||"",site:A}),A&&(l=Math.max(l,A.end))):(M==="Function"||M==="Class")&&(i.push({id:T.id,label:T.label,class:M,site:A,decorators:io(T),raises:Me(T,"raises"),doc:Me(T,"doc"),params:Me(T,"params"),returns:Me(T,"returns"),callees:r.get(T.id)||new Set}),A&&(l=Math.max(l,A.end)))}let c=Et(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:io(t),raises:Me(t,"raises"),params:Me(t,"params"),returns:Me(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?Iy(u):Ly(i);i=My(i,u||{label:t.label},f);let p=u?null:i.find(x=>x.site&&x.label!==t.label)||null,m=[...new Set(Se(e,"tests").filter(x=>x.object===n).map(x=>x.subjectLabel||x.subject))].slice(0,_y),h=Jd(e,n).slice(0,jy),g=Se(e,"reexports").filter(x=>x.subject===n).map(x=>x.objectLabel||x.object).slice(0,20),b=Me(e.byId.get(n),"all"),y=Se(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(x=>x.object===t.id)?.subject||null);let $=null;if(w){let x=e.byId.get(w),T=y.filter(M=>M.subject===w).map(M=>{let A=e.byId.get(M.object);return{label:M.objectLabel||A?.label||M.object,class:A?.class||"",site:A?Et(A):null,decorators:A?io(A):"",params:A?Me(A,"params"):"",returns:A?Me(A,"returns"):"",raises:A?Me(A,"raises"):""}}).slice(0,Sy);$={className:x?.label||String(w).replace(/^fn:.*#/,""),members:T,total:y.filter(M=>M.subject===w).length}}let j=null;for(let x of[...i,...a])x.site&&(!j||x.site.start>j.start)&&(j=x.site);let v=j?{start:j.start,end:j.end}:null,E=u||p,k=E?.id?e.byId.get(E.id):null,_=k?Pa(e,k):"",R=[];if(E?.callees)for(let x of E.callees){let T=e.byId.get(x),M=T?Et(T):null;if(M&&R.push({label:T.label,site:M}),R.length>=Cy)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:m,cochange:h,exports:g,allExports:b,classMembers:$,insertion:l,insertionRegion:v,calleeBodies:R,callHint:_,siblingCap:Ey}}function Rs(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 Kd(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 Jr(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=Xr(s.params);(i>Ry||a>Ay||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?Et(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)>=Ty;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:Rs(o),topup:o!=="TINY"}}function Yd(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 Jp(e,t){return Xp(e,t)}function Qp(e,t){return Xp(e,t)}function yc(e,t,{kind:n,decFilter:s="",nameRe:o=null}={}){let r=Zp[n];if(!r)return[];let i=[];for(let a of e.individuals){if((a.class||"")!==r||o&&!o.test(a.label)||s&&!So(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 c$(e,t,{limit:n=$i,kind:s,decFilter:o,nameRe:r,toolNamePrefix:i="tmct_"}){if(!Zp[s])return`unknown kind "${s}" (use function, class, method, attribute, or module).`;let l=yc(e,t,{kind:s,decFilter:o,nameRe:r});if(!l.length)return`no ${s} matches the given filters.`;let c=l.slice(0,n),u=[`${l.length} ${s}(s) match (top ${c.length}):`];for(let{ind:d}of c)u.push(`- ${d.label}${bc(_t(d))}`);return u.push(`Then ${i}snippet <name> for the exact body, or ${i}describe for its edges.`),u.join(`
31
+ `)}function w$(e){return{paramCount:Si(e?.params),hasReturns:!!e?.returns,hasRaises:!!e?.raises,callees:e?.callees instanceof Set?e.callees:new Set}}function y$(e){if(!e.length)return{paramCount:0,hasReturns:!1,hasRaises:!1,callees:new Set};let t=e.map(i=>Si(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:b$(t),hasReturns:n*2>=e.length,hasRaises:s*2>=e.length,callees:r}}function v$(e,t){if(!t)return 0;let n=Math.max(0,4-Math.abs(Si(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 $$(e,{decorators:t="",label:n="",site:s=null}={},o=null){let r=new Map;for(let f of e)for(let p of dc(f.decorators))r.set(p,(r.get(p)||0)+1);let i="",a=1;for(let[f,p]of r)p>a&&(a=p,i=f);let l=new Set(dc(t)),c=l.size?l:new Set(i?[i]:[]),u=new Set(Ep(n)),d=s?.start??null;for(let f of e){let p=dc(f.decorators).some(b=>c.has(b))?1:0,m=Ep(f.label).filter(b=>u.has(b)).length,h=v$(f,o),g=d!=null&&f.site?1/(1+Math.abs(f.site.start-d)):0;f._score=p*1e3+m*50+h+g}return[...e].sort((f,p)=>p._score-f._score||(f.site?.start||0)-(p.site?.start||0))}function jo(e,t){let n=kn(e,t),s=e.byId.get(n)?.label||String(n||"").replace(/^mod:/,""),o=ke(e,"defines").filter(k=>k.subject===n),r=new Map;for(let k of ke(e,"callsSymbol"))r.has(k.subject)||r.set(k.subject,new Set),r.get(k.subject).add(k.object);let i=[],a=[],l=0;for(let k of o){let A=e.byId.get(k.object);if(!A)continue;let P=A.class||"",T=_t(A);P==="GlobalVariable"?(a.push({label:A.label,value:(A.attributes||[]).find(M=>M.key==="value")?.value||"",site:T}),T&&(l=Math.max(l,T.end))):(P==="Function"||P==="Class")&&(i.push({id:A.id,label:A.label,class:P,site:T,decorators:So(A),raises:Pe(A,"raises"),doc:Pe(A,"doc"),params:Pe(A,"params"),returns:Pe(A,"returns"),callees:r.get(A.id)||new Set}),T&&(l=Math.max(l,T.end)))}let c=_t(t),u=c&&(t.class||"")!=="Module"?{id:t.id,label:t.label,class:t.class||"",site:c,decorators:So(t),raises:Pe(t,"raises"),params:Pe(t,"params"),returns:Pe(t,"returns"),callees:r.get(t.id)||new Set}:null,d=i.length,f=u?w$(u):y$(i);i=$$(i,u||{label:t.label},f);let p=u?null:i.find(k=>k.site&&k.label!==t.label)||null,m=[...new Set(ke(e,"tests").filter(k=>k.object===n).map(k=>k.subjectLabel||k.subject))].slice(0,p$),h=sf(e,n).slice(0,d$),g=ke(e,"reexports").filter(k=>k.subject===n).map(k=>k.objectLabel||k.object).slice(0,20),b=Pe(e.byId.get(n),"all"),y=ke(e,"contains"),w=null;(t.class||"")==="Class"?w=t.id:(t.class||"")==="Method"&&(w=y.find(k=>k.object===t.id)?.subject||null);let $=null;if(w){let k=e.byId.get(w),A=y.filter(P=>P.subject===w).map(P=>{let T=e.byId.get(P.object);return{label:P.objectLabel||T?.label||P.object,class:T?.class||"",site:T?_t(T):null,decorators:T?So(T):"",params:T?Pe(T,"params"):"",returns:T?Pe(T,"returns"):"",raises:T?Pe(T,"raises"):""}}).slice(0,u$);$={className:k?.label||String(w).replace(/^fn:.*#/,""),members:A,total:y.filter(P=>P.subject===w).length}}let _=null;for(let k of[...i,...a])k.site&&(!_||k.site.start>_.start)&&(_=k.site);let v=_?{start:_.start,end:_.end}:null,x=u||p,E=x?.id?e.byId.get(x.id):null,S=E?wc(e,E):"",R=[];if(x?.callees)for(let k of x.callees){let A=e.byId.get(k),P=A?_t(A):null;if(P&&R.push({label:A.label,site:P}),R.length>=g$)break}return{modId:n,moduleLabel:s,anchor:u,siblings:i,totalSiblings:d,exemplar:p,globals:a,tests:m,cochange:h,exports:g,allExports:b,classMembers:$,insertion:l,insertionRegion:v,calleeBodies:R,callHint:S,siblingCap:l$}}function Hs(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 ef(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 ki(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=Si(s.params);(i>f$||a>m$||s.raises)&&(o="MID");let l=!1;if(e.anchor)for(let u of s.callees||[]){let d=t.byId.get(u),f=d?_t(d):null;if(f&&f.path!==e.moduleLabel){l=!0;break}}let c=(e.anchor?.class||"")==="Method"&&Number(e.classMembers?.total||e.classMembers?.members?.length||0)>=h$;(l||c)&&(o="LARGE")}else o="MID";return{tier:o,mask:Hs(o),topup:o!=="TINY"}}function tf(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 Xd(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 nf(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,145 +45,178 @@ ${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 Jd(e,t){let n=[];for(let s of Se(e,"cochange"))s.subject===t?n.push({label:s.objectLabel||s.object,weight:s.weight||0}):s.object===t&&n.push({label:s.subjectLabel||s.subject,weight:s.weight||0});return n.sort((s,o)=>o.weight-s.weight)}function Qd(e,t){let n=wn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Jd(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,Ca).map(i=>`${i.label} (\xD7${i.weight})`);return`${s} \u2014 usually changes together with ${o.length} module(s) (edit these too):
48
+ `)}function sf(e,t){let n=[];for(let s of ke(e,"cochange"))s.subject===t?n.push({label:s.objectLabel||s.object,weight:s.weight||0}):s.object===t&&n.push({label:s.subjectLabel||s.subject,weight:s.weight||0});return n.sort((s,o)=>o.weight-s.weight)}function of(e,t){let n=kn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=sf(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,pc).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>Ca?`
51
- \u2026+${o.length-Ca} more`:"")}function Zd(e,t){let n=wn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=Se(e,"reexports").filter(i=>i.subject===n);if(!o.length)return`${s}: no public exports recorded (no export list / __all__ found, or none resolved).`;let r=o.slice(0,Oa).map(i=>{let a=e.byId.get(i.object),l=a?Et(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>pc?`
51
+ \u2026+${o.length-pc} more`:"")}function rf(e,t){let n=kn(e,t);if(!n)return`cannot map ${t.label} to a module.`;let s=e.byId.get(n)?.label||n,o=ke(e,"reexports").filter(i=>i.subject===n);if(!o.length)return`${s}: no public exports recorded (no export list / __all__ found, or none resolved).`;let r=o.slice(0,fc).map(i=>{let a=e.byId.get(i.object),l=a?_t(a):null,c=l?` \u2190 ${l.path}`:"";return`${i.objectLabel||i.object}${c}`});return`${s} \u2014 public API (${o.length} export(s)):
52
52
  ${r.join(`
53
- `)}`+(o.length>Oa?`
54
- \u2026+${o.length-Oa} more`:"")}var rd,wd,cd,Tw,Ow,Aa,Iw,Hr,Lw,Nw,Mw,$d,Pw,Fw,Dw,zw,Bw,Uw,Ww,Gw,Vw,qw,Hw,Kw,Yw,Xw,Jw,Qw,Zw,ey,ty,ny,sy,oy,ry,iy,ay,ld,cy,ly,xd,kd,Ed,uy,dy,py,fy,my,dd,pd,by,fd,Vr,md,hd,gd,Xo,Me,yy,vy,Id,$y,Ft,Pd,xy,Hd,Ey,Sy,jy,_y,Ry,Ay,Ty,Cy,Ta,bd,Xr,Oy,Ca,Oa,Ie=L(()=>{Yn();Ss();Ea();Yo();_s();rd={"mgx:importsnamespace":"imports","mgx:callscoarse":"calls","seon:declaresmethod":"defines","mgx:testscoverage":"tests","mgx:touchedbycommit":"touches","seon:containscodeentity":"contains","seon:hassupertype":"inherits","mgx:changecoupledwith":"cochange","mgx:reexports":"reexports","mgx:serves":"serves","mgx:denotes":"denotes","mgx:touchessymbol":"touchesSymbol","mgx:callssymbol":"callsSymbol","seon:usescomplextype":"imports","seon:invokesmethod":"calls","seon:history":"touches","mgx:subclassof":"inherits","mg:imports":"imports","mg:calls":"calls","mg:defines":"defines","mg:tests":"tests","mg:touches":"touches","mgx:saidinsession":"saidInSession","mgx:inreplyto":"inReplyTo","mgx:statedby":"statedBy","mgx:canonicalisedfrom":"canonicalisedFrom"};wd=e=>/^(git|turn):/.test(String(e||""));cd=30,Tw=8;Ow=2,Aa=25,Iw=3;Hr=10,Lw=8,Nw=3,Mw=2,$d=5,Pw=4,Fw=.2,Dw=.35,zw=.15,Bw=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),Uw=.2,Ww=.35,Gw=.2,Vw=.35,qw=e=>/\.cs$/i.test(e),Hw=e=>/^I[A-Z]/.test(String(e||"")),Kw=.2,Yw=.35,Xw=50,Jw=.2,Qw=.35,Zw=.5,ey=$d,ty=3,ny=4,sy=1,oy=.9,ry=.5,iy=.2,ay=.35,ld=4,cy=2,ly=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],xd=3,kd=12,Ed=.9,uy=["imports","calls","callsSymbol","inherits"],dy=.5,py=.6,fy=.2,my=.35;dd=128,pd=4,by=64,fd=250,Vr=class extends Error{};md=new WeakMap;hd=40,gd=40,Xo=30;Me=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";yy=25,vy=15;Id=40,$y="tests edges are recorded module to module, so this is module-grain coverage.";Ft=15;Pd=new Set(["Function","Method"]);xy=8;Hd={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};Ey=8,Sy=16,jy=4,_y=6,Ry=12,Ay=2,Ty=8,Cy=3,Ta=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),bd=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Xr=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},Oy=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};Ca=20;Oa=40});function Xe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ip(e){let t=String(e||"");return ep&&(t=t.replace(ep," ")),t.replace(/\s+/g," ").trim()}function ap(e){let t=String(e||"");t=t.replace(Zy," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(Xy);if(o&&(t=o[1].trim()),o=t.match(Jy),o&&(t=o[1].trim()),o=t.match(tp),o&&(t=o[1].trim()),o=t.match(np),o&&(t=o[1].trim()),o=t.match(sp),o&&(t=o[1].trim()),o=t.match(Qy),o&&(t=o[1].trim()),o=t.match(op),o&&(t=o[1].trim()),o=t.match(ev),o&&(t=o[1].trim()),o=t.match(tv),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(nv),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(sv),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(ov),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(rv),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(iv),o&&Xn.test(o[1].trim())&&(t=o[1].trim()),o=t.match(av),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(cv),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(lv),o){let r=o[1].trim();Yy(r)||(t=!uv.test(r)&&(qy.test(r)||Xn.test(r))?r:`describe ${r}`)}if(o=t.match(dv),o){let r=o[1].trim();(Xn.test(r)||pv.test(r)||op.test(r)||tp.test(r)||sp.test(r)||np.test(r)||fv.test(r))&&(t=r)}if(t===s)break}return t}function gv(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(mv);if(o&&(t=o[1].trim()),o=t.match(hv),o&&(t=o[1].trim()),t===s)break}return t}function wv(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(bv);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function $v(e){let t=String(e||""),n=t.match(vv);if(n){let o=lp[n[1].toLowerCase()],r=cp[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(up);return s?`which modules transitively import ${s[1].trim()}`:t}function Qr(e){return String(e||"").replace(Fy,t=>ma[t.toLowerCase()])}function As(e){let t=Qr(e);return t=t.replace(Dy,n=>ha[n.toLowerCase()]),t=t.replace(zy,n=>ga[n.toLowerCase()]),t=t.replace(By,"with"),t=t.replace(Uy,(n,s)=>`${s} for`),t=t.replace(Wy,(n,s)=>`for ${s}`),t=t.replace(Gy,(n,s)=>s),t=t.replace(xv,"$1$2"),t=t.replace(Nu,"$1ing"),t=ap(t),t=wv(t),t=gv(t),t=$v(t),t=ip(t),t=en(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function Jo(e){for(let t of[...Pu,...Mu]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function Da(e){for(let t of kv){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function dp(e){let t=String(e||"").match(Ev);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var Py,Fy,rp,Dy,zy,By,Uy,Wy,Gy,Vy,ep,qy,Xn,Hy,Ky,Yy,Xy,Jy,tp,np,sp,Qy,Zy,ev,tv,nv,sv,ov,rv,iv,av,cv,lv,uv,dv,pv,fv,op,mv,hv,bv,cp,lp,yv,vv,up,xv,kv,Ev,lt,nn,he,Jn=L(()=>{An();Py=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Xe).join("|")+")\\b","gi"),Fy=Py(ma),rp=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Xe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),Dy=rp(ha),zy=rp(ga),By=/(?<=^|\s)w\/(?=\s|$)/gi,Uy=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,Wy=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,Gy=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,Vy=Object.keys(de).sort((e,t)=>t.length-e.length).map(Xe).join("|"),ep=Wo.length?new RegExp("\\b("+[...Wo].sort((e,t)=>t.length-e.length).map(Xe).join("|")+")\\b\\s*,?","gi"):null;qy=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Xe).join("|")+")\\b","i"),Xn=/^(?:which|what|who|whose|where|when|why|how)\b/i,Hy=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),Ky=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,Yy=e=>{if(Ky.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return Hy.has((t[t.length-1]||"").toLowerCase())},Xy=/^(?: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,Jy=/^(?: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,tp=/^(?:(?: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,np=/^(?: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,sp=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,Qy=/^(?:please[\s,]+)+(.+)$/i,Zy=/,?\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,ev=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,tv=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,nv=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,sv=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,ov=/^do\s+you\s+know\s+(.+?)\??$/i,rv=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,iv=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,av=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,cv=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,lv=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,uv=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,dv=/^(?:and|also|so|then|now|but)\s+(.+)$/i,pv=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,fv=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,op=/^(?:(?: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;mv=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,hv=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;bv=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;cp=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),lp=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),yv="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",vv=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(lp).join("|")+")\\s+("+Object.keys(cp).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+yv+")\\??$","i"),up=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;xv=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Ou.map(Xe).join("|")})(\\s*[?.!]*)$`,"i");kv=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+(?:${fa.map(Xe).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+(${Vy})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);Ev=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");lt=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"]),nn=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),he=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var fp,pp=L(()=>{fp={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chapped","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seifing","seiing","seined","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Ln(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let l=1;l<=t.length;l+=1){let c=e[r-1]===t[l-1]?0:1,u=Math.min(o[l]+1,i[l-1]+1,o[l-1]+c);r>1&&l>1&&e[r-1]===t[l-2]&&e[r-2]===t[l-1]&&(u=Math.min(u,s[l-2]+c)),i[l]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function Ba(e){return/^[a-z]+$/.test(e)&&!lt.has(e)&&!za.has(e)}function mp(e){return Tv(e)?null:Ua(e,Rv,Qn(e))}function Ua(e,t,n=Qn(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Ln(e,i,Math.min(s,n));a<s?(s=a,o=i,r=!1):a===s&&a<=n&&i!==o&&(r=!0)}return s<=n&&!r?o:null}var jv,Qn,za,_v,Rv,Av,Tv,Qo=L(()=>{An();pp();Jn();jv=["used"];Qn=e=>e.length<=5?1:2,za=new Set([...Object.keys(de),...Object.keys(Ue),...Object.keys(Ht),...jv].flatMap(e=>e.split(" "))),_v=4,Rv=[...new Set([...Object.keys(de),...Object.keys(Ht)].flatMap(e=>e.split(" ")).filter(e=>e.length>=_v))],Av=new Set(fp.words),Tv=e=>Av.has(e)});function lo(e){for(let t of Lv){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var Zr,Cv,Ov,Iv,Wa,Lv,hp,ei=L(()=>{An();Jn();Zr=Object.keys(de).sort((e,t)=>t.length-e.length).map(Xe).join("|"),Cv=Object.keys(Ue).sort((e,t)=>t.length-e.length).map(Xe).join("|"),Ov=Object.keys(Ht).sort((e,t)=>t.length-e.length).map(Xe).join("|"),Iv=vs.slice().sort((e,t)=>t.length-e.length).map(Xe).join("|"),Wa=(e,t)=>e==="defines"&&Uo.has(t),Lv=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${Zr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Wa(n,t))return null;let s=e[1].trim(),o=e[3].trim();return Bo.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+(${Cv})\\s+(?:(${Ov})\\s+)?(${Zr})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Wa(n,t)?null:{shape:"reverse",entityType:Ue[e[1].toLowerCase()],modifier:e[2]?Ht[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${Zr})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Wa(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+(?:${Iv})\\??$`,"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=en(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"&&Iu.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:ws(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${un.map(Xe).join("|")})\\??$`,"i"),build:e=>({shape:"mentions",entityType:null,modifier:"direct",kind:"mentions",object:e[1].trim()})},{name:"where",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)(?:\\s+(?:${Zt.map(Xe).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+)?(${Zr})\\??$`,"i"),build:e=>de[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];hp={id:"grammar",class:"graph-query",run(e){let t=lo(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function St(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 er(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(k=>k.toLowerCase());if(s.includes("where")&&!St(s,de)){let k=s.some(x=>un.includes(x)),_=new Set([...Zt,...un]),R=n.filter((x,T)=>!lt.has(s[T])&&!_.has(s[T])).join(" ").trim();if(R){let x=k?"mentions":"where";return{shape:x,entityType:null,modifier:"direct",kind:x,object:R}}}if(new Set(["has","have","had"]).has(s[0])){let k=s.length;for(;k>1&&(s[k-1]==="ever"||s[k-1]==="been");)k-=1;if((k>1?de[s[k-1]]:null)==="touches"){let R=n.slice(1,k-1).filter((x,T)=>!lt.has(s[1+T])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=St(s,de);if(!i&&t){let k=s.map(_=>{if(!Ba(_))return _;let R=t.lemma(_);return za.has(R)?R:_});i=St(k,de),i&&(r=k)}let a=null;if(!i){let k=s.map(_=>_.length>=4&&Ba(_)&&mp(_)||_);if(i=St(k,de),i){r=k;let _=s.slice(i.start,i.end).findIndex((x,T)=>x!==k[i.start+T]),R=i.start+Math.max(_,0);a={from:s[R],to:k[R]}}}let l=!1;if(!i)for(let k=0;k<s.length;k+=1){let _=Hn[s[k]];if(!(_&&s[k]==="used"&&s[k+1]==="for")&&_&&s.slice(0,k).some(R=>Zo.has(R))){i={kind:_,start:k,end:k+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&Hn[s[i.start]]&&s.slice(0,i.start).some(k=>Zo.has(k))&&(l=!0);let c=k=>a?{...k,fuzzyVerb:a}:k;if(t&&i.end-i.start===1){let k=i.start,_=s[k-1];if((_==="the"||_==="these"||_==="those")&&s[k+1]==="of"&&t.posTags(n)[k]==="NOUN"){let x=n.slice(k+2).filter((T,M)=>!lt.has(s[k+2+M])).join(" ").trim();if(x)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:x})}}let u=new Set,d=k=>{if(k)for(let _=k.start;_<k.end;_+=1)u.add(_)};d(i);for(let[k,_]of Object.entries(de)){if(_!==i.kind)continue;let R=k.split(" "),x=i.end;if(R.every((T,M)=>r[x+M]===T)){d({start:x,end:x+R.length});break}}let f=St(r,Ue,u);d(f);let p=St(r,Ht,u);d(p);let m=(k,_)=>n.slice(k,_).filter((R,x)=>!u.has(k+x)&&!lt.has(s[k+x])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&Pv.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Ue[r.slice(f.start,f.end).join(" ")]:null,w=p?Ht[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let k=h||g;if(k)return c({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:k})}if(b==="touches"&&s.includes("who")&&s.includes("last")){let k=h||g;if(k)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:k})}let $=s.indexOf("by"),j=s.slice(0,i.start).findIndex(k=>Zo.has(k)),v=j>=0,E=v&&j>$;if($>=0&&!u.has($)&&v){let k=(x,T)=>n.slice(x,T).filter((M,A)=>{let P=x+A,G=s[P];return!u.has(P)&&!lt.has(G)&&G!=="by"&&!Zo.has(G)&&!Nv.has(G)&&!Mv.has(G)}).join(" ").trim(),[_,R]=E?[k(j+1,n.length),k($+1,j)]:[k(0,$),k($+1,n.length)];if(_&&R)return b==="defines"&&Uo.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:_});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(_)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:_})}if(l&&$<0&&g&&s[i.start]==="called")return null;if(h&&g){let k=r.slice(i.start,i.end).join(" ");if(b==="defines"&&Uo.has(k))return null;let _=h,R=g;return Bo.includes(k)&&([_,R]=[R,_]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:_,object:R})}if(g){let k=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:k,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&f&&f.start===i.end){let k=r.slice(f.start,f.end).join(" ");if(k)return c({shape:"reverse",entityType:null,modifier:w,kind:b,object:k})}if(h&&!g&&v&&i.end-i.start===1&&Hn[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:h});let k=Zo.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...k?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var Zo,Nv,Mv,Pv,gp,ti=L(()=>{An();Jn();Qo();Zo=new Set(["is","are","was","were","be","been","being","get","gets","got"]),Nv=new Set(["which","what","who","whom","whose"]),Mv=new Set(Rn.map(e=>e.toLowerCase())),Pv=new Set(["recently","lately","yet","already","ever","again"]);gp={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=er(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function Dv(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)||bp.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function zv(e,t=null){let n=nn(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!bp.has(a)&&(Fv.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=Dv(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var bp,Fv,wp,yp=L(()=>{An();Jn();ei();ti();bp=new Set([...lt,...he(ys),...he(Object.keys(de)),...he(Object.keys(Ue)),...he(Object.keys(Ht)),...he(Object.keys(Ye)),...he($s),...he(xs),...he(Object.keys(Kn)),...he(Object.keys(gn)),...he(Object.keys(eo)),...he(Rn),...he(Go),...he(vs),...he(Zt),...he(un),...he(_n),...he(Object.keys(no))]),Fv=new Set([...he(Wo),...he(Dr)]);wp={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(lo(e))return null;let{text:n,dropped:s,maybeNoise:o}=zv(e,t.nlp||null);if(!s.length||!n)return null;let r=lo(n)||er(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 vp=L(()=>{});var ni,si=L(()=>{ni=()=>{}});function xp(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?uo(e.subject)===uo(t.subject)&&uo(e.object)===uo(t.object):uo(e.object)===uo(t.object)}function Ga(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=>!kp(c))&&(n=n.filter(c=>!kp(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=>xp(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),$p(f.parsed)<$p(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=>xp(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function Wv(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 Ep(e,{describe:t=Wv,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 uo,Bv,$p,Uv,kp,Va=L(()=>{uo=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),Bv=/^\s*(?:the|a|an)\s+/i,$p=e=>[e?.subject,e?.object].filter(t=>Bv.test(String(t||""))).length;Uv=new Set(["fuzzy","lemma","spell"]),kp=e=>Uv.has(e.via)});function oi(e){qa=e}function ri(){return typeof qa=="function"?qa():null}var qa,po=L(()=>{qa=null});function _p(e,t={},n=Vv){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 Gv,Vv,Rp=L(()=>{Jn();ei();ti();yp();vp();si();Va();po();Gv=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],Vv=[hp,gp,wp,...Gv]});function fo(e){return qv.test(String(e||"").trim())?"an":"a"}function ii(e){let t=String(e||"").trim();return t&&(/(?:s|x|z|ch|sh)$/.test(t)?`${t}es`:/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:`${t}s`)}function mo(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function tr(e){let t=(e||[]).map(n=>String(n||"").trim()).filter(Boolean);return t.length===0?"":t.length===1?t[0]:t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t[t.length-1]}`}var qv,ai=L(()=>{qv=/^[aeiou]/i});var nr,Ha=L(()=>{nr=(e,t,n)=>n});var vf={};Sn(vf,{DYNAMIC_TAIL_OK_RE:()=>yc,applyNegationFrames:()=>Jo,ask:()=>ss,classDisplayName:()=>es,degreeMetric:()=>uf,metaFallbackEntityAnswer:()=>nf,normalizeQuery:()=>As,parseQuery:()=>ir,parseQueryFull:()=>ac,render:()=>pn,rephraseHint:()=>mc,resolveObject:()=>fn,traverse:()=>Dt,worldRelationGraphPayload:()=>Ix});function He(e,t){let n=Ap.get(e);n||(n=new Map,Ap.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(In(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Pe(e,t){let[n,s]=Gp[e]||["result","results"];return t===1?n:s}function cr(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Pe(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function es(e){let t=String(e||"");if(typeof bn=="function"){let n=bn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function Ts(e){return Kv[e]||e}function Zv(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||Qv.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return he(vs).includes(o)?t:e}function ir(e,{nlp:t=void 0}={}){return ac(e,{nlp:t}).parsed}function ac(e,{nlp:t=void 0}={}){let n=t===void 0?ri():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=Da(Jo(As(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=t$(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=Ga(_p(o,{nlp:n,raw:s}));return i?{parsed:Zv(i.parsed),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function ec(e,t){return t.length&&qp.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function bo(e,t){return lo(e)||er(e,t)}function t$(e,t){let n=nn(e),s=n.map(o=>o.toLowerCase());return $$(n,s)||k$(n,s)||r$(n,s,t)||Kp(e,t,0)||E$(n,s,t)||a$(n,s,t)||m$(n,s,t,0)||g$(n,s)||y$(n,s,t)||S$(n,s,t)||R$(n,s,t)||T$(n,s,t,0)||_$(n,s,t,0)||lc(n,s,t,0)||l$(n,s,t)||s$(n,s)||ef(n,s,t,0)}function s$(e,t){let n=0;n$.has(t[n])&&(n+=1);let s=jt(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?Lu[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){l=m,c=h;break}}if(l<0)return null;let u=e.slice(a,l).join(" ").trim(),d=e.slice(l+2).join(" ").trim();if(!u||!d)return null;let f=(m,h)=>m.role==="object"?{shape:"reverse",kind:m.kind,entityType:o,modifier:"direct",object:h}:{shape:"forward",kind:m.kind,modifier:"direct",object:h},p=f(i,u);return p.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:p}},{op:"intersection",kind:"set",ast:{node:"clause",clause:f(c,d)}}]}}function li(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function r$(e,t,n){if(!["do","does","did"].includes(t[0])||!o$.has(t[1]))return null;let s=jt(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=St(a,de);if(!l)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((f,p)=>(p<l.start||p>=l.end)&&!lt.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=wo(`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:li(o,{op:"difference",kind:"set",ast:d})}}function Kp(e,t,n=0){let s=dp(e);if(!s)return null;let o=jt(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=nn(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ye[d]))return li(r,{op:"difference",kind:"qual",filters:a});let l=St(a,de);if(!l)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,f)=>(f<l.start||f>=l.end)&&!lt.has(a[f])&&a[f]!=="from").length)return li(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=wo(`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"}:li(r,{op:"difference",kind:"set",ast:u})}function a$(e,t,n){let s=0;for(;s<t.length&&i$.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=St(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!lt.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function Yp(e,t){let n=new Set;for(let s of t)for(let o of He(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function Xp(e,t){let n=At(t),s=n.filter(r=>!Wp.has(r)),o=Yp(e,s.length?s:n);return o.size===1?[...o][0]:null}function wo(e,t,n){if(n>Vp)return{node:"miss",reason:"too deep to resolve"};let s=Kp(e,t,n);if(s)return s;let o=nn(e),r=o.map(c=>c.toLowerCase()),i=lc(o,r,t,n);if(i)return i;let a=ef(o,r,t,n);if(a)return a;let l=bo(e,t);return l?{node:"clause",clause:l}:null}function lc(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=_n.includes(t[o]),i=!r&&Hp(t[o]);if(!r&&!i||r&&o+1>=t.length||!jt(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Ye[f.toLowerCase()]))continue;let c=bo([...l,Za].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=wo(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 l$(e,t,n){for(let s=0;s<t.length;s+=1){if(!c$.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!de[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),Za,...e.slice(s+1)],a=bo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===Za&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function m$(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!u$.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(d$.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&&p$.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&f$.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>_n.includes(d)))return null;let l=cc.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=wo(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=jt(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function g$(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!h$.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 w$(e){let t=new Set,n=[];for(let s of e){if(!s||!b$.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function y$(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(!Go.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&&($s.includes(f)||xs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=$s.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=v$(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=w$(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function v$(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&e$.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ye[a]))return{type:"qual",filters:r};if(o.length===1){let a=jt(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=bo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function $$(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?jt(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 x$(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=ws(n).slice(e.length).trim(),o=nn(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 k$(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(Ye[t[c]]){n=c,s=t[c-1]==="not";break}if(n<0)return null;let o=t.indexOf("by",n+1);if(o>0&&Hn[t[n]]){let c=o+1;for(;c<t.length&&(t[c]==="the"||t[c]==="a"||t[c]==="an");)c+=1;let u=t[c];if(u&&!Fu.has(u))return null}let r=x$(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 E$(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=bo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function S$(e,t,n){let s=$s.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&&Ye[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?jt(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=>!lt.has(d)&&!Jp.has(d)),u;if(c){let d=wo(`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 _$(e,t,n,s){let o=0,r=!1,i=null;for(let y of Qp){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&&uc.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ye[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?jt(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Rn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Zp}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!lt.has(y)&&!Jp.has(y)),p=t.slice(o),m=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),m=m.slice(1));let h=r&&j$.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=wo(`which ${[...a,u,...y].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};g=w,b=!0}else g={node:"allOfClass",entityType:c},a.length&&(g={node:"qualifier",filters:a,inner:g});return{node:"list",entityType:c,base:g,scoped:b}}function R$(e,t,n){let s=null,o=-1;for(let m=0;m<t.length;m+=1){let h=t.slice(m,m+2).join(" ");if(Kn[h]){s=Kn[h],o=m;break}if(Kn[t[m]]){s=Kn[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(gn[t[m]]){r=gn[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(gn[t[m]]){r=gn[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=gn.connections,i="connections");let u,d=null;for(let m of t){let h=jt(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?Du[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 T$(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&uc.has(t[o]);)o+=1;if(o>=t.length)return null;let r=jt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&A$.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=jt(t[t.length-1]);if(i&&!i.placeholder&&i.entityType!=="Change"){let a=e.slice(o,t.length-1).join(" ").trim();if(a)return{node:"find",entityType:i.entityType,term:a}}return t.some(a=>_n.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Rn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${Zp}`}:null}function C$(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&uc.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(_n.includes(t[i])){s=i;break}if(s<0)return null;let o=jt(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 O$(e,t,n,s,o,r){let{branches:i,ops:a}=ui(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=ec(d,f);if(m.blc.length&&m.blc.every(y=>Ye[y])){c.push({op:p,kind:"qual",filters:m.blc});continue}if(f[0]==="of"||f[0]==="in"){c.push({op:p,kind:"set",ast:{node:"membership",entityType:e,term:d.slice(1).join(" ")}});continue}let h=d,g=St(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=tf(`${t} ${h.join(" ")}`,o,r);if(!b||b.node==="miss")return{miss:b&&b.reason||"a clause in the combination didn't parse"};c.push({op:p,kind:"set",ast:b})}return{atoms:c}}function ef(e,t,n,s){let o=C$(e,t);if(o){let{entityType:R,term:x,relIdx:T}=o,M=t.slice(T+1),A=e.slice(T+1);if(!M.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[T]}"`};let P=O$(R,`which ${t[T-1]}`,M,A,n,s+1);if(P.miss)return{node:"miss",reason:P.miss};let G=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:x}},...P.atoms];return G.length===1?G[0].ast:{node:"boolean",entityType:R,atoms:G}}let r=0;for(;r<t.length&&cc.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ye[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?jt(t[r]):null;if(!l){let R=r+1<t.length?jt(t[r+1]):null;if(Tp.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(qp.has(t[r])){let x=r+1;x<t.length&&(t[x]==="the"||t[x]==="a"||t[x]==="an")&&(x+=1);let T=x+1<t.length?jt(t[x+1]):null;if(Tp.has(t[x])&&T&&T.entityType==="Commit"&&x+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!lt.has(t[r])&&!wc.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let c=l.entityType,u=t[r];r+=1;let d=t.slice(r),f=e.slice(r),p=!1;d.length&&_n.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&Hp(d[0]),g=f.length>0&&ui(d,f).branches.some(R=>{let{blc:x}=ec(R,R.map(T=>T.toLowerCase()));return x.length&&x.every(T=>Ye[T])}),b=f.length>0?ui(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(T=>T.toLowerCase()),x=St(R,de);x&&x.start===0&&(y=b.slice(1).every(T=>{let M=T.map(P=>P.toLowerCase()),A=St(M,de);return A&&A.start===0?A.kind===x.kind:!A}))}let w=!1;if(b.length>1){let R=b[0].map(T=>T.toLowerCase()),x=St(R,de);x&&x.start===0&&(w=b.slice(1).every(T=>{let M=T.map(P=>P.toLowerCase()),A=St(M,de);return!!A&&A.start===0&&A.end-A.start===1}))}if(!(a.length||p||m||h||g||y||w))return null;if(!f.length){let R={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:R,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let $=l.placeholder?"what":`which ${u}`,{branches:j,ops:v}=ui(d,f),E=null,k=[];for(let R=0;R<j.length;R+=1){let x=j[R],T=x.map(ee=>ee.toLowerCase()),M=R===0?"seed":v[R-1],A=ec(x,T);if(A.blc.length&&A.blc.every(ee=>Ye[ee])){k.push({op:M,kind:"qual",filters:A.blc});continue}if(T[0]==="of"||T[0]==="in"){k.push({op:M,kind:"set",ast:{node:"membership",entityType:c,term:x.slice(1).join(" ")}});continue}let P=x,G=St(T,de);G?E=x.slice(G.start,G.end):E&&(P=[...E,...x]);let J=tf(`${$} ${P.join(" ")}`,n,s+1);if(!J||J.node==="miss")return{node:"miss",reason:J&&J.reason||"a clause in the combination didn't parse"};k.push({op:M,kind:"set",ast:J})}if(k[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let _;return k.length===1?_=k[0].ast:_={node:"boolean",entityType:c,atoms:k},a.length&&(_={node:"qualifier",filters:a,inner:_,entityType:c}),_}function tf(e,t,n){if(n>Vp)return{node:"miss",reason:"too deep to resolve"};let s=nn(e),o=s.map(a=>a.toLowerCase()),r=lc(s,o,t,n);if(r)return r;let i=bo(e,t);return i?{node:"clause",clause:i}:null}function ui(e,t){let n=Object.keys(eo).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(eo[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 dc(e,t,n,s){let o=ho[t];if(o&&ns.has(n)){let u=He(e,o).filter(d=>s.has(d.object));return Mn(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>ns.has(e.byId.get(u)?.class))?[...At(t),o]:At(t)).flatMap(u=>He(e,u)).filter(u=>s.has(u.object)),l=Mn(a.map(u=>e.byId.get(u.subject)).filter(Boolean));if(!n||n==="Change")return l;let c=l.filter(u=>u.class===n);return c.length?c:n!=="Module"&&l.some(u=>u.class==="Module")?hc(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function L$(e,t){let n=new Set(dc(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=I$.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function rr(e,t,n){let s=At(t).flatMap(o=>He(e,o)).filter(o=>n.has(o.subject));return Mn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Mn(e){let t=new Set,n=[];for(let s of e)s&&!t.has(s.id)&&(t.add(s.id),n.push(s));return n}function N$(e,t){let n=Cn(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Cn(o.label).startsWith(s))}function tc(e){let t=Cp.get(e);if(t)return t;let n=new Set;for(let i of He(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 He(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of He(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},Cp.set(e,t),t}function go(e,t){return t?t.class==="Module"?t.id:tc(e).moduleOfSymbol.get(t.id)||null:null}function nf(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>M$.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=go(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Pe(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${nr("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 nc(e,t,n){let s=Mn(to.flatMap(o=>rr(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function pc(e,t,n=null){let s=Nn(e,t,n);if(!(s.match&&s.tier===1)){let o=N$(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 sf(e,t,n,s,o){let r=o||(()=>!0),i=nc(e,t,s).filter(r);if(i.length||!rf(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of of(e,t)){let l=e.byId.get(a);if(!l)continue;let c=nc(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 Cs(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=tc(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=go(e,t),o=tc(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&js(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function fc(e){return He(e,"inherits")}function sc(e,t){return fc(e).filter(n=>n.object===t).map(n=>n.subject)}function Op(e,t){return fc(e).filter(n=>n.subject===t).map(n=>n.object)}function P$(e,t){let n=new Set,s=[...sc(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of sc(e,o))n.has(r)||s.push(r)}}return n}function of(e,t){let n=new Set,s=[...Op(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Op(e,o))n.has(r)||s.push(r)}}return n}function rf(e,t){let n=Ip.get(e);if(n||(n=new Map,Ip.set(e,n)),n.has(t))return n.get(t);let s=fc(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 Lp(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 Mp(e){return e.slice().sort((t,n)=>Np[n.via]-Np[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Pp(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=Qn(n);if(Ln(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of Os(e.label))if(Ln(o,n,s)<=s)return!0;return!1}function af(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...Os(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=rf(e,t),i=[];for(let l of s){let c=Lp(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...P$(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Lp(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:Mp(i),broad:[]};let a=new Map;for(let l of s)for(let c of of(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&Pp(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of sc(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Pp(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Mp([...a.values()])}}function F$(e){return[...Kr(Yr(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function sn(e,t,n){switch(t.node){case"clause":return Dt(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?F$(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=af(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(At(t.kind).flatMap(o=>He(e,o)).map(o=>o.subject));return e.individuals.filter(o=>s.has(o.id)&&(!t.entityType||o.class===t.entityType))}case"forwardComplement":{let s=Nn(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=Xp(e,t.kind);if(!o)return[];let r=new Set(rr(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(sn(e,t.inner,n).map(o=>o.id));return dc(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(sn(e,t.inner,n).map(o=>o.id));return rr(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=pc(e,t.term,n&&n.contextId);if(s.kind==="dir"){if(!t.entityType||t.entityType==="Module")return s.mods;let i=new Set(s.mods.map(l=>l.id));return Mn(to.flatMap(l=>rr(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=sf(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?df(e,t,n).matches:sn(e,t.inner,n).filter(o=>t.filters.every(r=>Cs(e,o,Ye[r])));case"boolean":return cf(e,t,n);case"anaphora":return lf(e,t,n).matches;default:return[]}}function cf(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=sn(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>Cs(e,l,Ye[c])),a=l=>o.filters.every(c=>{let u=D$(Ye[c]);return u?Cs(e,l,u):!Cs(e,l,Ye[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(sn(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 sn(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function z$(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=fn(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 lf(e,t,n){let o=z$(e,t.candidateTerms);if(!o){let d=n&&n.prev;if(!Array.isArray(d)||!d.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=d.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(d=>i.filters.every(f=>Cs(e,d,Ye[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=fn(e,i.clause.object);if(!d.match)r=[];else{let f=ho[i.clause.kind],p=[...At(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>He(e,h)).filter(h=>h.object===d.match.id).map(h=>h.subject));r=r.filter(h=>m.has(h.id))}}let a=d=>d.length&&d.every(f=>f.class===d[0].class)?d[0].class:null,l=i&&i.type==="entity"?i.entityType:a(o),c=r.length?a(r):l;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:c,matches:[]};let u=cr(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function uf(e,t,n){let s=n.kind==="*"?B$:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of He(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 U$(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 G$(e,t){let{op:n,pivotRaw:s}=t,o=u=>String((u.attributes||[]).find(d=>d.key==="date")?.value||"").slice(0,10),r=null,i=null,a=null;if(W$.test(s))r=s;else{let{match:u,ambiguous:d}=fn(e,s,{expectedClass:"Commit"});u&&!d&&u.class==="Commit"&&o(u)&&(i=u.id,a=u.label,r=o(u))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let l=e.individuals.filter(u=>u.class==="Commit"&&u.id!==i&&o(u)).filter(u=>{let d=o(u);return n==="since"?d>=r:n==="before"?d<r:n==="after"?d>r:d===r}).sort((u,d)=>o(d).localeCompare(o(u))),c=[];return l.length&&c.push({kind:"set",class:"Commit",label:`${l.length} commit${l.length===1?"":"s"} ${n} ${s}`,ids:l.map(u=>u.id),attrs:{count:l.length,op:n,...i?{pivot:i}:{}},lane:"commitFilter"}),i&&c.push({kind:"event",class:"Commit",label:a,ids:[i],attrs:{date:r},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:l,referents:c}}function V$(e,t,n){let s=sn(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=dc(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 q$(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(He(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!js(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:uf(e,a,t.metric)})).sort((a,l)=>t.extreme==="most"?l.score-a.score:a.score-l.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?cr(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function df(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(h=>Cs(e,m,Ye[h])):null,a=m=>cr(r,m,"membership"),l=pc(e,o.term,n&&n.contextId);if(l.kind==="dir"){let m;if(!r||r==="Module")m=l.mods;else{let h=new Set(l.mods.map(g=>g.id));m=Mn(to.flatMap(g=>rr(e,g,h))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=sf(e,l.id,l.entityClass,r,i),f=!c.length&&u.length>0,p=f?u:c;return{compositeKind:"membership",entityType:r,matches:p,inheritedNotOwn:f,viaLabel:d,ownerLabel:l.label,referents:a(p)}}function H$(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=fn(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=fn(e,s,{expectedClass:n}),l=!r||a.match&&go(e,a.match)===r.id,c=a.match&&l;return{compositeKind:"exists",entityType:n,term:s,scopeModule:o,scopeMatch:r,matches:c?[a.match]:[]}}let i=r?hc(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 K$(e,t,n){let s=go(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||nc(e,n.id).some(o=>o.id===t.id)}function Y$(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=Nn(e,s,n.contextId);if(a.unresolvedPronoun)return{compositeKind:"qualCheck",qualCheckMiss:"pronoun",term:s,matches:[]};if(!a.match)return{compositeKind:"qualCheck",qualCheckMiss:"unresolved",term:s,matches:[]};if(i){let d=pc(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!K$(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let l=Cs(e,a.match,Ye[o]),c=r?!l:l,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:c,matches:[a.match],referents:u}}function X$(e,t,n){let s=fn(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=sn(e,{node:"allOfClass",entityType:t.entityType},n),r=cf(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 J$(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(sn(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}=Dt(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function Q$(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return H$(e,t);if(t.node==="qualCheck")return Y$(e,t,n);if(t.node==="universal")return X$(e,t,n);if(t.node==="count"){let i=J$(e,t.base,n);return i?{compositeKind:"count",count:L$(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:sn(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:sn(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return Cx(e,t);if(t.node==="superlative")return q$(e,t);if(t.node==="temporal")return V$(e,t,n);if(t.node==="recentCommits")return U$(e);if(t.node==="commitFilter")return G$(e,t);if(t.node==="anaphora")return lf(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return df(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=af(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:i.length?i:a,broad:!i.length&&a.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let s=sn(e,t,n),o=t.entityType||null,r=cr(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function pf(){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 Z$(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=ar(e);return n?`${t} in ${n}`:t}function oc(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(oc):Array.isArray(e.filters)&&e.filters.some(t=>Ye[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(oc)}function ex(e,t){return!["Function","Method"].includes(t)||!oc(e)?null:"This index records tests edges module to module, so it holds no function-grain coverage to filter on \u2014 ask whether the module a function lives in is tested instead."}function tx(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})`:""}. ${pf()}.`,miss:!0,ambiguous:!1};if(t.compositeKind==="exists"){if(t.scopeMiss)return{content:`no module matching "${t.scopeModule}" found in the index.`,miss:!0,ambiguous:!1};let s=Pe(t.entityType,1),o=Pe(t.entityType,2),r=t.scopeMatch?` in ${t.scopeMatch.label}`:"";if(t.term){if(!t.matches.length)return{content:`No \u2014 no ${s} named "${t.term}" found${r}.`,miss:!0,ambiguous:!1};let i=t.matches[0],a=ar(i),l=i.class==="Module"?"":a?`, ${nr("defined-in",i.id,"defined in")} ${a}`:"";return{content:`Yes \u2014 ${i.label} is a ${s}${l}.`,miss:!1,ambiguous:!1,matches:t.matches}}return t.matches.length?{content:`Yes \u2014 ${Zn(t.matches)}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 no ${o} found${r}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="qualCheck"){if(t.qualCheckMiss==="pronoun")return{content:`"${t.term}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="unresolved")return{content:`couldn't find "${t.term}" in the index to check.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="scope")return{content:`couldn't find "${t.scope}" in the index to check inside.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="outsideScope")return{content:`No \u2014 ${t.subjectLabel} isn't in ${t.scopeLabel}.`,miss:!0,ambiguous:!1};let s=t.subject.label,o=t.negated?`not ${t.qualifier}`:t.qualifier,r=t.negated?t.qualifier:`not ${t.qualifier}`;return{content:`${t.holds?"Yes":"No"} \u2014 ${s} is ${t.holds?o:r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="universal"){if(t.universalMiss==="unresolved")return{content:`couldn't find "${t.object}" in the index to check.`,miss:!0,ambiguous:!1,matches:[]};let s=Pe(t.entityType,t.total),o=Xv(t.kind);return t.holds?{content:`Yes \u2014 all ${t.total} ${s} ${o} ${t.object}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 ${t.counter.length} of ${t.total} ${s} do not ${o} ${t.object}: ${Zn(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Pe(t.entityType,t.count):t.count===1?"result":"results";return{content:`${t.count} ${s}.`,miss:!1,ambiguous:!1,matches:[]}}if(t.compositeKind==="list"){if(!t.matches.length)return{content:`no ${Pe(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>qe?` \u2014 narrow with "${Pe(t.entityType,2)} in <module>"`:"";return{content:`${Zn(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=dn(t.askedClasses),o=Zs[t.relation].nouns[1];if(!t.pairs.length)return{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]};let r=Zs[t.relation].reads;return{content:`${t.pairs.map(a=>`${a.subject.label||a.subject.id} ${r} ${a.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="membership"){if(!t.matches.length)return{content:`nothing in the index matches that${t.entityType?` (${Pe(t.entityType,2)})`:""}. ${ts(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Pe(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Pe(t.entityType,1);if(!t.matches.length)return{content:`no ${Pe(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?Z$(t.matches[0]):Zn(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Pe(t.entityType,2)}: ${o}.`,miss:!1,ambiguous:!1,matches:t.matches,relatedNotExact:!0}:{content:`${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="recentCommits"){if(!t.matches.length)return{content:"no commits recorded in this index.",miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,Ft).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>Ft?` \u2026+${t.matches.length-Ft} 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,Ft).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>Ft?` \u2026+${t.matches.length-Ft} more`:"";return{content:`${t.matches.length} commit(s) changed ${t.op} ${t.pivotRaw}: ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="superlative"){if(!t.matches.length)return{content:`no ${Pe(t.entityType,2)} to rank in this index.`,miss:!0,ambiguous:!1};let s=t.extreme==="most"?"the most":"the fewest",o=t.matches.length>1?` (${t.matches.length}-way tie)`:"";return{content:`${Zn(t.matches)} \u2014 ${s} ${t.metricNoun} (${t.score})${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="temporal"){let s=t.innerCount||0,o=t.entityType?Pe(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:`nothing in the index matches the inner set, so there is no change history to date. ${ts(n)}`,miss:!0,ambiguous:!1,matches:[]};if(!t.matches.length)return{content:`no recorded commit touched the ${s} ${o} in that set in this index. ${ts(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let l=(i.attributes||[]).find(d=>d.key==="message")?.value||"",c=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${c}${l?` ("${l}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=ex(e,t.entityType)||ts(n);return{content:`nothing in the index matches that${t.entityType?` (${Pe(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${Zn(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function mc(){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). `+pf()}function ts(e=null){return e&&Ia(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 Os(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function pi(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 ff(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function nx(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function sr(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(g=>g.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let g=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${g}`)||String(y.label).toLowerCase().startsWith(g)));if(b.length===1)return{match:b[0],candidates:[],tier:1,ambiguous:!1};if(b.length>1)return{match:b[0],candidates:b.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(g=>String(g.label).toLowerCase()===o||String(g.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let g of e.relations)for(let b of g.edges)if(String(b.object).toLowerCase()===l){c=b.object;break e}if(c&&!n)return{match:{id:c,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(g=>g.trim()).filter(Boolean);if(u.length>1){let g=new Set;for(let b of u){let y=sr(e,b,{expectedClass:n});y.match&&!y.ambiguous&&g.add(y.match.id)}if(g.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],f=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(f){let g=o.split(".").pop();for(let b of r){let y=String(b.label||"").toLowerCase();b.class==="Module"?y.split("/").pop()===o&&d.push({ind:b,score:1e3-Math.abs(y.length-o.length)}):y.includes(o)?d.push({ind:b,score:2e3-Math.abs(y.length-o.length)}):y.endsWith(`.${g}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let g=[...Os(s)],b=o.split(/\s+/).find(v=>v.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,$=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,j=$?nx(s):null;for(let v of r){let E=String(v.label||"").toLowerCase(),k=E.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(k===o){d.push({ind:v,score:5e3});continue}if(o.length>=4&&(k.startsWith(o)||k.endsWith(o))){d.push({ind:v,score:4e3-Math.abs(k.length-o.length)});continue}if($){let x=ff(v.label);if(x&&x===j){d.push({ind:v,score:5e3});continue}let T=/[/_-]/.test(v.label)||/\.[a-z0-9]+$/i.test(String(v.label||""));if(x&&T&&j.length>=4&&x.includes(j)){d.push({ind:v,score:2e3-Math.abs(x.length-j.length)});continue}}if(v.class==="Module"){let x=pi(o);if(x!==o&&x===pi(k)){let T=Qn(o);if(Ln(k,o,T)>T){d.push({ind:v,score:3e3-Math.abs(k.length-o.length)});continue}}}if(o.length>=4&&E.includes(o)){d.push({ind:v,score:1e3-Math.abs(E.length-o.length)});continue}let _=Os(v.label),R=g.filter(x=>_.has(x)).length;R>0&&(!y||_.has(y))&&d.push({ind:v,score:R/g.length*Ya})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter($=>$.score===g.score),w=g.score>=Ya?b.filter($=>$.score>=Ya):b;return{match:g.ind,candidates:w.slice(0,4).map($=>$.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),m=null,h=!p&&typeof ks=="function"?ks(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(h.length){let[g,...b]=h,y=e.byId.get(g.id);if(y){let w=b.filter($=>$.score===g.score);if(m={match:y,candidates:b.slice(0,4).map($=>e.byId.get($.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&g.via!=="spell")return m}}if(!i&&o.length>=4){let g=Qn(o),b=g+1,y=[];for(let w of r){let $=Ln(String(w.label||"").toLowerCase(),o,g);if($>0)for(let j of Os(w.label)){if($<=0)break;$=Math.min($,Ln(j,o,g))}$<b?(b=$,y=[w]):$===b&&$<=g&&y.push(w)}if(b<=g&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=g&&y.length>1&&!m){let[w,...$]=y;return{match:w,candidates:$.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function Xa(e,t){let n=ff(t),s=[...Os(t)],o=[];for(let r of Os(e))n.includes(r)||s.some(i=>pi(i)===pi(r))||di.has(r)||gf.has(r)||o.push(r);return o}function ci(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(Xa(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),Xa(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:dn(s.slice(0,4).map(r=>r.label))}:e}let n=Xa(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function fn(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(sx,"").trim(),i=r.match(ox);if(i){let a=r.slice(0,i.index).trim(),l=Ue[i[1].toLowerCase()];if(a&&l){let c=ci(sr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=ci(sr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return ci(sr(e,t,n),t)}return ci(sr(e,t,n),t)}function Nn(e,t,n){if(ys.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 fn(e,t)}function hc(e,t,n){let s=[];for(let o of He(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 rx(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||ns.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>He(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&ns.has(n)&&(l=l.filter(c=>c.class===n)),{matches:l,objMatch:t,commitSubject:!0,ambiguous:!1,candidates:[],traversal:`${a.join("+")} edges where subject = commit ${t.label}`,...s}}function lx(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&gc.has(Fp(s.label))).map(s=>({ind:s,named:n.has(Fp(s.label))?1:0,depth:String(s.label).split("/").length,fixture:cx(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 ux(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function bc(e){return(e?.attributes||[]).find(t=>t.prop===dx)?.value||null}function px(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${fo(e)} ${e} in this graph's vocabulary`}function Dt(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 Q$(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let A=t.candidates.map(P=>{let G=Dt(e,P,{contextId:n,prev:s});return{parsed:P,result:G,rendered:pn(P,G,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:A}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let A=String(t.object||"").trim(),P=A.toLowerCase(),G=(e.individuals||[]).find(J=>{if(!bc(J))return!1;if(String(J.label).toLowerCase()===P)return!0;let ee=(J.attributes||[]).find(ie=>ie.key==="token")?.value;return ee&&String(ee).toLowerCase()===P});if(!G){let J=nf(e,A);return J?{matches:[J.hit],objMatch:J.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:J.text,traversal:`schema lookup for "${A}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${A}"`,ambiguous:!1}}return{matches:[G],objMatch:G,candidates:[],traversal:`schema lookup for "${A}"`,ambiguous:!1}}if(r==="mentions"){let A=String(t.object||"").trim();return{matches:(typeof ks=="function"?ks(e.proseIndex,A):[]).map(J=>e.byId.get(J.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${A}"`}}if(r==="where"&&ix.test(String(t.object||"").trim())){let A=lx(e,t.object);return{matches:A,objMatch:A[0]||null,candidates:A.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...gc].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!ux(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 A=Nn(e,t.subject,n),P=Nn(e,t.object,n);if(!A.match||!P.match||A.ambiguous||P.ambiguous)return{matches:[],objMatch:P.match,candidates:P.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(A.unresolvedPronoun||P.unresolvedPronoun)};let[G,J]=[A.match,P.match];i==="touches"&&J.class==="Commit"&&G.class!=="Commit"&&([G,J]=[J,G]);let ee=ho[i],ie=[...new Set(ee?[...At(i),ee]:At(i))],D=ie.flatMap(z=>He(e,z)).filter(z=>z.subject===G.id&&z.object===J.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:P.match,subjMatch:A.match,candidates:[],traversal:`${ie.join("+")} edge from ${G.label} to ${J.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=Nn(e,t.object,n),t.altObject&&t.altObject!==t.object){let A=Nn(e,t.altObject,n),P=!!l.match&&!l.ambiguous,G=!!A.match&&!A.ambiguous;!P&&G?l=A:P&&G&&l.match.id!==A.match.id&&(l={...l,ambiguous:!0,candidates:[A.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let A=J=>J.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),P=A(String(t.object||"").trim().toLowerCase()),G=(e.individuals||[]).find(J=>{if(J.class!=="Module"||J.id===l.match.id)return!1;let ee=String(J.label||"").toLowerCase().split("/").pop();return ee!==A(ee)&&A(ee)===P});G&&(l={...l,ambiguous:!0,candidates:[G,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:m,nearestLabel:h}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:m,nearestLabel:h};if(d){let P=Mn([c,...u||[]]).slice(0,qe).map(G=>{let J=Dt(e,t,{contextId:n,prev:s,pinnedObjMatch:G});return{candidate:G,result:J,rendered:pn(t,J,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:P}}if(r==="where"){let A=(c.attributes||[]).find(P=>P.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:A,traversal:A?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let A=J=>String((J.attributes||[]).find(ee=>ee.key==="date")?.value||""),P;if(c.class==="Commit")P=[c];else{let J=["touches","touchesSymbol"].flatMap(ie=>He(e,ie)).filter(ie=>ie.object===c.id),ee=new Set;P=[];for(let ie of J){if(ee.has(ie.subject))continue;ee.add(ie.subject);let D=e.byId.get(ie.subject);D&&D.class==="Commit"&&P.push(D)}P.sort((ie,D)=>A(D).localeCompare(A(ie)))}let G=P.length&&A(P[0])?[{kind:"event",class:"Commit",label:P[0].label,ids:[P[0].id],attrs:{date:A(P[0]).slice(0,10)},lane:"when"}]:[];return{matches:P,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:G,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let A=ie=>String((ie.attributes||[]).find(D=>D.key==="date")?.value||""),P=["touches","touchesSymbol"].flatMap(ie=>He(e,ie)).filter(ie=>ie.object===c.id),G=new Set,J=[];for(let ie of P){if(G.has(ie.subject))continue;G.add(ie.subject);let D=e.byId.get(ie.subject);D&&D.class==="Commit"&&J.push(D)}J.sort((ie,D)=>A(D).localeCompare(A(ie)));let ee=J.length&&A(J[0])?[{kind:"event",class:"Commit",label:J[0].label,ids:[J[0].id],attrs:{date:A(J[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:J,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:ee,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return rx(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let A=ho[i],G=!!(A&&c.class&&ns.has(c.class))?[...new Set([...At(i),A])]:At(i);if(a&&a!=="Change"){let U=Yp(e,G),C=Ka[a];if(U.size&&!U.has(a)&&!(C&&U.has(C)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...U],traversal:`${G.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${es(a)})`}}let ee=G.flatMap(U=>He(e,U)).filter(U=>U.subject===c.id).map(U=>e.byId.get(U.object)).filter(Boolean),ie=Mn(ee),D=ie,z="";if(a&&a!=="Change"){D=ie.filter(C=>C.class===a);let U=Ka[a];if(!D.length&&U){let C=ie.filter(I=>I.class===U);C.length&&(D=C,z=`, widened to ${U} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${G.join("+")} edges where subject = ${c.label}${z}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:ao(e,c,{maxDepth:Dp}).flat().map(G=>e.byId.get(G.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Dp})`};let g=ho[i]||At(i).find(A=>Wp.has(A))||null,b=!!(c.class&&ns.has(c.class));if(g&&(ns.has(a)||b)){let A=He(e,g).filter(z=>z.object===c.id),P=Mn(A.map(z=>e.byId.get(z.subject)).filter(Boolean)),G=!a||a==="Change"?P:P.filter(z=>z.class===a),J="",ee=Ka[a];if(!G.length&&ee){let z=P.filter(U=>U.class===ee);z.length&&(G=z,J=`, widened to ${ee} subjects (no ${a} recorded)`)}let ie=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!He(e,"contains").some(z=>z.subject===c.id),D=ie?e.byId.get(go(e,c)||""):null;if(G.length||!(ie&&D))return{matches:G,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${J}`,ambiguous:d,matchedVia:p}}let y=c,w=u,$=d,j=p,v="",E=Xp(e,i);if(E&&y.class&&y.class!==E){let A=fn(e,t.object,{expectedClass:E});if(A.match&&!A.ambiguous)y=A.match,w=A.candidates,$=A.ambiguous,j=A.matchedVia;else if(E==="Module"){let P=go(e,y),G=P&&e.byId.get(P);if(G)v=`, refined from ${y.label} to its containing module`,y=G;else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:j,wrongGrainMiss:!0,wantClass:E,traversal:`"${t.object}" resolved to ${es(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${es(E)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:j,wrongGrainMiss:!0,wantClass:E,traversal:`"${t.object}" resolved to ${es(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${es(E)})`}}let k=At(i).flatMap(A=>He(e,A)).filter(A=>A.object===y.id);i==="cochange"&&(k=k.concat(At(i).flatMap(A=>He(e,A)).filter(A=>A.subject===y.id).map(A=>({...A,subject:A.object,object:A.subject}))));let _="";if(!k.length&&y.class){let A=`ext:${String(y.label).toLowerCase()}`;k=At(i).flatMap(P=>He(e,P)).filter(P=>String(P.object).toLowerCase()===A),k.length&&(_=` (by name, via unresolved ${A} references)`)}let R=[],x=new Set;for(let A of k){let P=e.byId.get(A.subject);P&&!x.has(P.id)&&(x.add(P.id),R.push(P))}let T,M="";if(!a||a==="Change")T=R;else{let A=R.filter(P=>P.class===a);if(A.length)T=A;else if(a!=="Module"&&R.some(P=>P.class==="Module")){let P=new Set(R.filter(G=>G.class==="Module").map(G=>G.id));T=hc(e,P,a),M=`, then ${es(a)} defined in the matched module(s)`}else T=[]}return{matches:T,objMatch:y,candidates:w,traversal:`${At(i).join("+")} edges where object = ${y.label}${_}${M}${v}`,ambiguous:$,matchedVia:j}}function ar(e){if(e.class==="Module")return e.label;let t=(e.attributes||[]).find(s=>s.key==="site")?.value;if(t)return String(t).split(":")[0];let n=String(e.id||"").match(/^fn:(.+)#/);return n?n[1]:null}function Ja(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function fx(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function dn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function or(e){let t=e.object??e.subject??"?";return`${e.entityType?Pe(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function rc(e){return zo[e]?.bare||e}function mx(e){let t=rc(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function hx(e){if(!Array.isArray(e.atoms)||e.atoms.length!==2)return null;let[t,n]=e.atoms;if(t.op!=="seed"||t.ast?.node!=="allOfClass"||n.op!=="difference")return null;let s=Pe(e.entityType,2);if(n.kind==="qual")return`${s} that are not ${n.filters.join(" and not ")}`;if(n.kind!=="set"||!n.ast)return null;if(n.ast.node==="existsEdge")return`${s} that do not ${rc(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 ${rc(o.kind)} ${JSON.stringify(String(r))}`}function mf(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(or).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>mf(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?hx(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 ":""}${Ts(e.kind)} "${e.object}"?`;else if(e.shape==="meta")o=`what does "${e.object}" mean, in this graph's own vocabulary?`;else if(e.shape==="mentions")o=`where is "${e.object}" mentioned?`;else if(e.shape==="where")o=`where is "${e.object}" defined?`;else{let r=e.entityType?Pe(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${Ts(e.kind)}`:`${r}${Ts(e.kind)} "${e.object}"`}return{english:o,machine:s}}function pn(e,t,n=null){let s=hf(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function hf(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${mc()}`,miss:!0,ambiguous:!1};if(e.node)return tx(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 ${or(l.parsed)}: ${l.rendered.content}`).join(`
53
+ `)}`+(o.length>fc?`
54
+ \u2026+${o.length-fc} more`:"")}var dp,Sp,mp,hv,bv,uc,wv,$i,yv,vv,$v,_p,xv,Ev,Sv,kv,jv,_v,Rv,Tv,Av,Cv,Ov,Iv,Lv,Nv,Pv,Mv,Fv,Dv,zv,Bv,Uv,Wv,Gv,Hv,Vv,hp,qv,Kv,Rp,Tp,Ap,Yv,Xv,Jv,Qv,Zv,bp,wp,n$,yp,yi,vp,$p,xp,wr,Pe,o$,r$,Dp,i$,zt,Wp,a$,Zp,l$,u$,d$,p$,f$,m$,h$,g$,dc,Ep,Si,b$,pc,fc,Ie=L(()=>{as();us();rc();br();Gs();dp={"mgx:importsnamespace":"imports","mgx:callscoarse":"calls","seon:declaresmethod":"defines","mgx:testscoverage":"tests","mgx:touchedbycommit":"touches","seon:containscodeentity":"contains","seon:hassupertype":"inherits","mgx:changecoupledwith":"cochange","mgx:reexports":"reexports","mgx:serves":"serves","mgx:denotes":"denotes","mgx:touchessymbol":"touchesSymbol","mgx:callssymbol":"callsSymbol","seon:usescomplextype":"imports","seon:invokesmethod":"calls","seon:history":"touches","mgx:subclassof":"inherits","mg:imports":"imports","mg:calls":"calls","mg:defines":"defines","mg:tests":"tests","mg:touches":"touches","mgx:saidinsession":"saidInSession","mgx:inreplyto":"inReplyTo","mgx:statedby":"statedBy","mgx:canonicalisedfrom":"canonicalisedFrom"};Sp=e=>/^(git|turn):/.test(String(e||""));mp=30,hv=8;bv=2,uc=25,wv=3;$i=10,yv=8,vv=3,$v=2,_p=5,xv=4,Ev=.2,Sv=.35,kv=.15,jv=e=>/(^|\/)(examples?|fixtures?|samples?|demos?|benchmarks?|test-[^/]+)(\/|$)/.test(e),_v=.2,Rv=.35,Tv=.2,Av=.35,Cv=e=>/\.cs$/i.test(e),Ov=e=>/^I[A-Z]/.test(String(e||"")),Iv=.2,Lv=.35,Nv=50,Pv=.2,Mv=.35,Fv=.5,Dv=_p,zv=3,Bv=4,Uv=1,Wv=.9,Gv=.5,Hv=.2,Vv=.35,hp=4,qv=2,Kv=[["imports"],["calls","callsSymbol"],["inherits"],["cochange"]],Rp=3,Tp=12,Ap=.9,Yv=["imports","calls","callsSymbol","inherits"],Xv=.5,Jv=.6,Qv=.2,Zv=.35;bp=128,wp=4,n$=64,yp=250,yi=class extends Error{};vp=new WeakMap;$p=40,xp=40,wr=30;Pe=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value||"";o$=25,r$=15;Dp=40,i$="tests edges are recorded module to module, so this is module-grain coverage.";zt=15;Wp=new Set(["Function","Method"]);a$=8;Zp={function:"Function",class:"Class",method:"Method",attribute:"Attribute"};l$=8,u$=16,d$=4,p$=6,f$=12,m$=2,h$=8,g$=3,dc=e=>String(e||"").split(",").map(t=>t.trim()).filter(Boolean),Ep=e=>String(e||"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),Si=e=>{let t=String(e||"").trim();return t?t.split(",").map(n=>n.trim()).filter(Boolean).length:0},b$=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};pc=20;fc=40});function Xe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ff(e){let t=String(e||"");return af&&(t=t.replace(af," ")),t.replace(/\s+/g," ").trim()}function mf(e){let t=String(e||"");t=t.replace(F$," ").replace(/\s+/g," ").trim();for(let n=0;n<3;n++){let s=t,o=t.match(N$);if(o&&(t=o[1].trim()),o=t.match(P$),o&&(t=o[1].trim()),o=t.match(cf),o&&(t=o[1].trim()),o=t.match(lf),o&&(t=o[1].trim()),o=t.match(uf),o&&(t=o[1].trim()),o=t.match(M$),o&&(t=o[1].trim()),o=t.match(df),o&&(t=o[1].trim()),o=t.match(D$),o&&(t=o[1].trim()),o=t.match(z$),o&&ds.test(o[1].trim())&&(t=o[1].trim()),o=t.match(B$),o&&ds.test(o[1].trim())&&(t=o[1].trim()),o=t.match(U$),o&&ds.test(o[1].trim())&&(t=o[1].trim()),o=t.match(W$),o&&ds.test(o[1].trim())&&(t=o[1].trim()),o=t.match(G$),o&&ds.test(o[1].trim())&&(t=o[1].trim()),o=t.match(H$),o&&ds.test(o[1].trim())&&(t=o[1].trim()),o=t.match(V$),o&&(t=`what ${o[2].toLowerCase()} ${o[1].trim()}`),o=t.match(q$),o&&(t=`what does ${o[1].trim()} mean`),o=t.match(K$),o){let r=o[1].trim();L$(r)||(t=!Y$.test(r)&&(C$.test(r)||ds.test(r))?r:`describe ${r}`)}if(o=t.match(X$),o){let r=o[1].trim();(ds.test(r)||J$.test(r)||df.test(r)||cf.test(r)||uf.test(r)||lf.test(r)||Q$.test(r))&&(t=r)}if(t===s)break}return t}function tx(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t,o=t.match(Z$);if(o&&(t=o[1].trim()),o=t.match(ex),o&&(t=o[1].trim()),t===s)break}return t}function sx(e){let t=String(e||"");for(let n=0;n<3;n++){let s=t.match(nx);if(!s)break;let o=s[1].trim();if(!o||o===t)break;t=o}return t}function ix(e){let t=String(e||""),n=t.match(rx);if(n){let o=gf[n[1].toLowerCase()],r=hf[n[2].toLowerCase()];return`${o} ${r} ${n[3].trim()} and ${n[4].toLowerCase()}`}let s=t.match(bf);return s?`which modules transitively import ${s[1].trim()}`:t}function ji(e){return String(e||"").replace(E$,t=>Xa[t.toLowerCase()])}function Vs(e){let t=ji(e);return t=t.replace(S$,n=>Ja[n.toLowerCase()]),t=t.replace(k$,n=>Qa[n.toLowerCase()]),t=t.replace(j$,"with"),t=t.replace(_$,(n,s)=>`${s} for`),t=t.replace(R$,(n,s)=>`for ${s}`),t=t.replace(T$,(n,s)=>s),t=t.replace(ax,"$1$2"),t=t.replace(Nd,"$1ing"),t=mf(t),t=sx(t),t=tx(t),t=ix(t),t=ff(t),t=on(t),t=t.replace(/\?{2,}\s*$/,"?"),t.replace(/\s+/g," ").trim()}function yr(e){for(let t of[...Md,...Pd]){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function vc(e){for(let t of cx){let n=e.match(t.re);if(n)return t.to(n).replace(/\s+/g," ").trim()}return e}function wf(e){let t=String(e||"").match(lx);if(!t)return null;let n=t[1].toLowerCase(),s=t[2].trim();return s?{entWord:n,predicate:s}:null}var x$,E$,pf,S$,k$,j$,_$,R$,T$,A$,af,C$,ds,O$,I$,L$,N$,P$,cf,lf,uf,M$,F$,D$,z$,B$,U$,W$,G$,H$,V$,q$,K$,Y$,X$,J$,Q$,df,Z$,ex,nx,hf,gf,ox,rx,bf,ax,cx,lx,st,Bt,me,ps=L(()=>{zn();x$=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Xe).join("|")+")\\b","gi"),E$=x$(Xa),pf=e=>new RegExp("\\b("+Object.keys(e).sort((t,n)=>n.length-t.length).map(Xe).join("|")+")\\b(?!\\.[a-z0-9])","gi"),S$=pf(Ja),k$=pf(Qa),j$=/(?<=^|\s)w\/(?=\s|$)/gi,_$=/\b(thx|thanks|thank\s+you|many\s+thanks|ty|cheers)\s+4\b/gi,R$=/\b4\s+(example|instance)\b(?!\s*[a-z])/gi,T$=/\b(this|that)\s+(class|module|function|method|attribute|variable|file|commit)\b/gi,A$=Object.keys(de).sort((e,t)=>t.length-e.length).map(Xe).join("|"),af=fr.length?new RegExp("\\b("+[...fr].sort((e,t)=>t.length-e.length).map(Xe).join("|")+")\\b\\s*,?","gi"):null;C$=new RegExp("\\b(?:"+Object.keys(de).sort((e,t)=>t.length-e.length).map(Xe).join("|")+")\\b","i"),ds=/^(?:which|what|who|whose|where|when|why|how)\b/i,O$=new Set(["modules","files","packages","functions","methods","classes","attributes","fields","properties","variables","globals","commits","changes","tests","members"]),I$=/^(?:all\s+|the\s+)?(?:module|file|package|function|method|class|attribute|field|property|variable|global|commit|change|test|member)\??$/i,L$=e=>{if(I$.test(e))return!0;let t=e.replace(/\?+\s*$/,"").trim().split(/\s+/);return O$.has((t[t.length-1]||"").toLowerCase())},N$=/^(?: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,P$=/^(?: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,cf=/^(?:(?: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,lf=/^(?: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,uf=/^(?:(?:maybe|possibly|perhaps)\s+)+(.+)$/i,M$=/^(?:please[\s,]+)+(.+)$/i,F$=/,?\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,D$=/^(?:can|could|would|will)\s+you\s+(?:please\s+)?(.+?)(?:[,\s]+please)?\??$/i,z$=/^explain\s+(?:to\s+me\s+|please\s+)*(.+?)\??$/i,B$=/^tell\s+me\s+(?:please\s+)?(.+?)\??$/i,U$=/^(?:(?:would|do)\s+you\s+)?mind\s+telling\s+(?:me|us)\s+(?:please\s+)?(.+?)\??$/i,W$=/^do\s+you\s+know\s+(.+?)\??$/i,G$=/^i(?:'d|\s+would)?\s+(?:(?:like|want|need)\s+to|wanna)\s+know\s+(.+?)\??$/i,H$=/^i(?:\s+was|\s+am|'m)?\s+(?:just\s+)?(?:wonder(?:ing|ed)?|curious)(?:\s+(?:if|whether|about))?\s+(.+?)\??$/i,V$=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+(is|are)\??$/i,q$=/^what\s+((?:an?\s+|the\s+)?[\w'-]+(?:\s+[\w'-]+){0,2})\s+means\??$/i,K$=/^(?:show|give)\s+me\s+(?:the\s+)?(.+?)\??$/i,Y$=/^everything\s+i(?:'d|\s+would)?\s+need\b/i,X$=/^(?:and|also|so|then|now|but)\s+(.+)$/i,J$=/^(?:does|do|did|is|are|was|were|has|have|had|can|could|will|would|should)\b/i,Q$=/^(?:the|its|their|his|her|our|my)\s+[\w'-]+(?:\s+[\w'-]+){0,2}\s+(?:that|which|who)\s+\S/i,df=/^(?:(?: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;Z$=/^(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+?,\s*(.+)$/i,ex=/^(.+?),\s*(?:since|although|(?:even\s+)?though|while|because|whereas|given\s+that|now\s+that)\s+.+$/i;nx=/^.+?(?:\s*(?:--|—|-)\s*)?\b(?:sorry|i\s+mean)\b\s*(?:--|—|-|,|:)\s*(.+)$/i;hf=Object.freeze({imports:"importing",calls:"calling",touches:"touching",tests:"testing",exports:"exporting",contains:"containing",defines:"defining",uses:"using","inherits from":"inheriting from"}),gf=Object.freeze({module:"modules",class:"classes",function:"functions",method:"methods",attribute:"attributes",variable:"variables",commit:"commits",file:"files"}),ox="public|private|protected|static|abstract|constant|re-?exported|exported|tested|covered|untested|uncovered",rx=new RegExp("^if\\s+(?:a|an|the)?\\s*("+Object.keys(gf).join("|")+")\\s+("+Object.keys(hf).join("|")+")\\s+(.+?),\\s*(?:is|are)\\s+(?:it|that|they|this)\\s+("+ox+")\\??$","i"),bf=/^if\s+(.+?)\s+(?:were|was)\s+(?:deleted|removed),?\s*what\s+(?:would|might|could)\s+(?:break|fail|be\s+affected)\??$/i;ax=new RegExp(`^(where\\s+(?:is|are|was|were)\\s+.+?)\\s+(?:${Ka.map(Xe).join("|")})(\\s*[?.!]*)$`,"i");cx=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+(?:${Ya.map(Xe).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+(${A$})\\s+(?:anything|something)(?:\\s+else)?\\??$`,"i"),to:e=>`what does ${e[1]} ${e[2]}`}]);lx=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"]),Bt=e=>String(e).replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),me=e=>e.flatMap(t=>String(t).toLowerCase().split(" "))});var vf,yf=L(()=>{vf={source:"corpus/wordnet/*.jsonl lemmas, expanded through the regular -s/-ed/-ing inflections",generator:"scripts/generate-real-word-collisions.mjs",targets:["alongside","build","builds","built","call","calling","calls","change","changed","changes","check","checks","class","co-change","co-changes","code","commits","contain","containing","contains","couple","couples","cover","covers","declare","declares","define","defined","defines","defining","denote","denotes","denoting","depends","derive","derives","directly","edited","execute","executes","exercise","exercises","explicitly","export","exporting","exports","expose","exposes","extend","extending","extends","fire","fires","from","grab","grabs","have","hits","hold","holds","hooked","import","importing","imports","included","indirectly","inherit","inheriting","inherits","inside","into","invoke","invokes","kick","kicks","kind","land","landed","lean","leans","live","lives","make","makes","modified","modifies","move","moves","parent","part","pass","passes","pull","pulls","re-export","re-exports","reference","references","relies","rely","require","requires","runs","serve","serves","serving","share","shares","sits","subclass","subclasses","subclassing","superclass","superclasses","sure","talk","talks","tend","tends","test","testing","tests","through","together","touch","touched","touches","touching","transitively","trigger","triggers","tweaked","updated","uses","using","usually","verifies","verify","went","were","wired","with"],words:["aalging","aasing","aave","ablies","abling","aboves","absing","abuses","abusing","acauling","achinged","acolds","acquire","acquires","acyling","adelies","adenine","adenined","adenines","adenining","adenota","adenotaing","adenotas","aditted","aerides","aerified","aerifies","aerify","aerying","affine","affined","affines","affining","afire","afires","afling","agalling","ailing","aired","airied","airies","airport","airporting","airports","airsed","airses","airted","alaing","alases","albing","alecks","aleves","aliaes","alikes","alines","alive","alives","allaing","allies","alling","alls","allying","alongsided","alongsides","alping","alting","altogether","amasses","amazes","amends","amorting","amorts","amuses","amusing","analling","anded","anoded","ansing","anuses","apart","aparts","apises","apparent","appends","appose","apposes","apsing","apsises","arab","arabis","arabs","ardent","argent","arpent","arrive","arrives","arsing","asaing","asding","aseans","ases","ashing","ashore","ashores","asing","asking","asping","asring","asses","assess","assets","assing","assure","attending","attest","attesting","attests","audited","aufing","auging","auking","aurifies","aurify","avouch","avouched","avouches","avouching","awaked","awakes","awared","awares","awling","awried","axling","baases","badded","bailed","bailing","baited","bake","bakeds","bakers","bakes","balded","balding","baling","balk","balking","balks","ball","balling","balls","ballsing","ballying","balming","band","banded","bandeds","bandied","bandsed","banked","banned","barded","barelies","barely","barses","bart","baseses","bashes","basing","basises","bass","bassed","basses","basset","bassets","bassos","bastes","basting","batses","bauded","baulks","bawded","bawling","bbsing","beaked","bean","beanos","beans","beasting","beasts","beating","beeting","begild","begilds","behave","behold","beholds","belied","belief","beliefs","belies","belikes","belizes","belles","bellies","belling","belting","bend","bended","bends","bent","berging","bering","berking","berming","beroes","besets","besots","besses","bessing","best","besting","bests","beting","betting","bevies","bhanged","biered","bigger","biggers","billing","bind","binded","birded","birled","birles","biroed","birred","bising","bjsing","bladed","blanced","bland","blanda","blandaed","blanded","blands","blanked","blares","blases","blasts","bleaked","bleaks","blears","bleats","blended","blends","blesting","blests","blinded","blinds","blited","blites","bloked","blonded","bmuses","bnsing","boched","boches","boching","bocked","bode","bodilied","bodilies","boiled","boileds","bokked","bold","bolds","bolling","bonded","boners","bonked","boobed","booked","bookeds","bookend","booker","bookied","booksed","boomed","booned","boored","booted","boozed","borers","borough","bosked","bosses","botched","botches","botching","boucheed","bouchees","boucle","boucled","boucling","boughed","boughing","boules","boulle","boulles","bouses","bousing","bowers","boxers","bpsing","bragger","braggers","brakes","branded","brasses","breaked","breves","breving","bricks","brigged","brills","broked","brooked","bruins","brunts","brunus","bses","bsing","bugled","bugles","buhled","builders","buildups","bull","bulled","bullet","bulling","bulls","buns","bunses","bunsing","buried","burieds","burled","burleds","buses","bushes","bushing","busied","busies","busking","bussing","busying","buyied","buying","bypass","bypasses","caballing","cabals","cabbing","cabers","cabged","cabging","cables","cablin","cabling","cablins","caching","cackling","cadded","cadding","cadent","cadged","cadges","cadging","cadring","cafers","caffing","cafing","cagers","caging","cagying","caining","cajoling","cake","cakes","cakiling","caking","calcine","calean","caleans","caleying","caleys","calf","calfing","calfs","califs","calkin","calking","calkins","callaing","callas","callers","callinged","callings","callous","callowing","callows","calluna","callus","calm","calming","calmings","calmlying","calms","calquing","calvaing","calvas","calves","calving","calvings","calx","calxes","calxing","calycling","calyxing","camass","camelling","camels","camming","camoing","camping","canaing","canalling","canals","candid","candied","candled","candling","cangue","cangued","cangues","caning","canning","canoes","canting","cantling","capers","caping","caplin","caplins","capoing","capping","captain","captaining","captains","carded","carding","caring","carking","carlina","carline","carling","carlings","carlos","carning","caroling","carolling","carols","carping","carring","cart","carting","carver","carvers","carves","casaing","cashes","cashing","casking","cassies","castes","castling","casually","casuses","caters","catling","catlings","catses","catsing","catting","cattling","caul","cauline","cauling","caulking","cauls","cavaing","cave","caverns","cavilling","cavils","caving","cavying","cawing","caying","ceases","cecalling","cede","cedied","ceiling","cell","celling","celloing","cellos","cells","cellsing","cent","cercises","cere","cering","cerise","cerises","ceroing","cerring","certain","certaining","certains","certifies","certify","cervina","cervus","cfling","cgsing","chadded","chafed","chaffed","chafinged","chagaed","chagas","chagga","chaggaed","chaggas","chained","chainsed","chainses","chaired","chaise","chaised","chaises","chaited","chaits","chajaed","chalked","chalking","challis","champed","chanal","chanals","chanar","chanars","chance","chanced","chancels","chances","chancied","chancies","chancre","chancred","chancres","chancy","changers","channels","chanted","chanters","chanteys","chantied","chanties","chanty","chaosed","chaoses","chapped","charded","chards","charge","charged","chargers","charges","charied","charmed","charms","charred","charrs","charted","charts","chased","chasmed","chasms","chassed","chaste","chasted","chastes","chatted","chaunaed","chaused","chauses","chawed","cheaps","cheats","checkeds","checkers","checksum","checkups","cheek","cheeks","cheeps","chelas","chenned","cheops","cherts","chesting","chewas","chianed","chick","chicks","chigger","chiggers","chiling","chilling","chills","chinaed","chined","chines","chinked","chinks","chinned","chinoed","chirks","chits","chives","choanaed","chock","chocked","chocks","choked","choker","chokers","choler","cholers","chonned","choosed","chords","chores","chough","chuaned","chuck","chucks","chugged","chunga","chungaed","chungas","chunked","chunks","chyling","cialis","cicers","ciders","circed","circes","cive","cives","civies","cladded","claded","clades","clading","clads","claims","clamps","clams","clamses","clanged","clangers","clanks","clans","claps","clarks","claros","clash","clashes","clasp","clasps","classed","classic","classy","clast","clasts","clausa","clausas","clause","clauses","claver","clavers","clavus","clawing","claws","claying","clays","clean","cleans","cleanse","clerks","clever","clevers","cliing","climes","clinged","cloaks","clocks","closer","closers","closes","cloved","cloven","clovens","clover","clovers","clucks","cluing","clving","clxing","cnsing","coached","coaches","coaching","coaling","coasts","coaxer","coaxers","cobber","cobbers","cobble","cobbles","cocain","cocaining","cocains","cocked","cocker","cockers","cockle","cockles","coda","codaed","codded","coddles","coded","coders","codes","codex","codgers","codified","codifies","codling","cods","coed","coeurs","coffer","coffers","coggle","coggles","coheres","coiling","coiner","coiners","coired","coke","colaing","cold","colded","colding","colds","cole","coleus","coliing","coling","colling","collins","collying","colors","coltan","coltanning","coltans","colter","colters","colting","comalling","combats","comber","combers","come","comer","comers","comfies","comfit","comfits","comics","comints","comity","commas","comments","commes","commie","commied","commies","comming","commit","commix","commixes","commons","commute","commutes","compel","compels","compile","compiles","complies","comply","comport","comporting","comports","conched","conches","conching","concluded","cone","coneys","confer","confers","confining","confits","conged","conger","congers","conges","conjoin","conjoining","conjoins","conked","conker","conkers","constrain","constraining","constrains","contact","contacting","contacts","contadinoing","contadinos","contagion","contagioning","contagions","containeds","containers","contemn","contemning","contemns","continuing","contrail","contrailing","contrails","contriting","contriving","converse","converso","converts","convex","convey","conveys","convoke","convokes","cooked","cookeds","cookers","cookied","cooled","cooler","coolers","cooling","cooned","cooped","cooper","coopers","cooted","cooter","cooters","copalling","cope","copeck","copecks","copier","copiers","copies","copper","coppers","copses","copula","copulas","coralling","corded","core","coreference","coreferences","corer","corers","corked","corker","corkers","corner","corners","corpse","corpses","corvee","corvees","cosecs","cosher","coshers","cosmics","cosmids","cosses","costing","cotanning","cotans","cote","cotter","cotters","couch","couched","couches","couching","coude","couded","coue","coughed","coughing","coupe","coupes","coupleds","couplers","couplets","coupon","coupons","course","courses","couthed","couthing","coved","coven","covens","covereds","coverts","covet","covets","covey","coveys","cower","cowers","cowling","cowpie","cowpies","cozens","cpsing","crab","crabs","cracks","cradling","cragged","crakes","craned","cranes","cranked","cranned","crass","crasses","crawling","crawls","creaked","creaks","credited","creeks","cresting","crests","criers","cringe","cringed","cringes","crocks","crooked","crouch","crouched","crouches","crouching","croupe","croupes","crumple","crumples","cruses","crusing","cses","csing","ctened","ctenes","cubing","cuking","culling","culming","culting","cupalling","cupels","cupsing","cupule","cupules","cure","curing","curling","curses","cursing","curtain","curtaining","curtains","curves","curving","cusking","cusping","cussing","cuting","cutlass","cutses","cutsing","cxling","cxlving","cyanned","cyanoed","cycling","cyders","cymling","cysting","dadded","dahling","dailing","daises","daling","dall","dalliing","dalling","dallis","dalls","dallying","daloing","danced","dander","dandied","dandled","danked","dansed","danses","darded","darling","dart","dashes","dassed","dassies","dative","datives","dayses","ddsing","deafened","deafening","deafing","deaing","dealting","dean","deaned","deaning","deans","dearie","dearies","debate","debates","debating","debiled","debiling","deboned","debrises","debted","decade","decades","decalling","decease","deceases","deceive","deceives","decents","decided","deciding","deciled","deciling","declaim","declaims","declareds","declarers","declaw","declined","declining","decocting","decodes","decoding","decoing","decoke","decokes","decoking","decouple","decouples","decoying","decries","deepens","deface","defaced","defaces","defacing","defame","defamed","defames","defaming","defang","defanged","defanging","defangs","defence","defenced","defences","defencing","defended","defending","defends","defensed","defenses","defensing","deference","deferences","deferenses","defiance","defianced","defiances","defiancing","defiant","defianted","defianting","defiants","defied","defies","defile","defiled","defilers","defiles","defiling","defininged","definings","definited","definites","definiting","deflate","deflates","deftness","defuse","defused","defuses","defusing","deglaze","deglazes","deicing","deified","deifying","deigned","deigning","deisted","deists","deitied","delete","deletes","deleting","delfing","delfting","deliing","delivers","delling","delving","demands","demised","demising","demode","demodes","demoding","demoing","demote","demotes","demoting","dengue","dengues","denguing","denied","denned","denotives","denotiving","densaing","denses","densing","dent","dentate","dentates","dentating","dente","denteds","dentes","dentin","dentined","dentines","denting","dentining","dentins","denude","denudes","denuding","denying","depart","depend","depended","deplane","deplanes","deplore","deplores","deponed","deposing","depotting","deprave","depraves","deprive","depriveds","deprives","depute","deputes","deputing","derating","derbies","deride","derides","deriding","derisive","derisives","deriveds","dermises","derpies","derping","derring","derrises","derving","descends","deserve","deserves","deserving","designed","designing","desired","desiring","desking","desponds","dessing","destined","destines","destining","destiny","detained","detaining","detents","detest","detesting","detests","detinue","detinued","detinues","detinuing","detoxes","detoxing","deuses","deusing","deveined","deveining","deviced","devicing","deviled","devised","devising","devote","devoteds","devotees","devotes","devoting","devouting","dewied","dewiness","dewing","dexoned","dhalling","dholed","dholes","dick","dicks","dieted","digger","diggers","dilling","dining","dinted","dinting","dire","direct","directed","director","directory","directs","dired","dires","dirged","dirges","dirked","disport","disporting","disports","disses","ditaed","ditted","dive","dives","divest","divine","divined","divines","divining","dmuses","docked","doleds","dolling","domine","domined","domines","domining","donate","donates","donating","doobed","doomed","doored","dopeds","dories","dorked","dosing","dosses","doting","double","doubles","douched","douches","douching","doughed","doughing","douses","dousing","dove","doves","dowers","dozers","drab","drabas","drabs","dragger","draggers","drained","draining","drakes","dranged","drecks","drilies","drive","drivels","drivens","drivers","drives","drover","drovers","drunks","druses","drusing","drylies","dses","dsing","dsling","dtsing","ducing","duding","dudses","dudsing","duking","dulies","dull","dulling","dulls","dulses","dulsing","duning","duns","duoing","duping","duples","during","dusking","eagling","earling","earses","easies","easing","easted","easting","eating","eatses","ebitted","ebooked","ebsing","ebving","echted","eclats","ecting","eddaed","eddied","eddoed","edgied","edibled","edicted","editeds","editor","editted","edsing","edtaed","educed","eduled","eelses","eerilies","eerily","eerying","effort","efforting","efforts","efting","egesting","egests","eidoses","eiraed","elan","eland","elanded","elanned","elans","elanus","elated","elegans","elided","elinted","elited","elling","elocute","elocutes","elopses","elsing","eluted","elvers","emending","emiled","emitted","emoted","emoting","emsing","enated","enates","enating","encode","endived","ends","energise","energises","enquire","enquires","ensile","ensure","entendring","ententing","epopses","eposes","equally","equine","equines","eraing","erectly","erging","erning","eroses","erring","ersted","ersting","erudited","erying","escort","escorting","escorts","eses","esing","esports","esportsing","espouse","espouses","esquire","esquires","esting","ests","eternise","eternises","ethoses","evicted","evoked","evokes","exceed","exceeding","exceeds","exchange","exchanged","exchanges","excite","excited","excites","excluded","execrate","execrates","executeds","executive","executives","executors","exegete","exegetes","exercisers","exerciseses","exerting","exerts","exhort","exhorting","exhorts","exiled","existed","exitted","exodes","exorcise","exorcisers","exorcises","exorcism","exorcisms","exorcist","exorcists","exorcize","exorcizes","expand","expanding","expands","expanse","expanses","expats","expatting","expect","expecting","expects","expend","expending","expendings","expends","expense","expenses","expensing","expert","experting","expertise","expertises","experts","expiating","expiring","expiry","expirying","explicit","explicits","explode","explodes","exploit","exploiting","exploits","exploring","expoing","exporters","exportinged","exportings","expos","exposeds","exposing","exposure","exposures","express","exsert","exserting","exserts","extant","extanting","extants","extendeds","extent","extented","extenting","extents","extern","externa","externaing","externas","externed","externing","externus","extort","extorting","extorts","extruding","fabling","fadded","failing","failling","faire","faires","fairies","faited","fake","fakers","fakes","fall","falling","fallings","falls","fallsing","falses","falsing","fanned","farces","fare","fares","fart","fasces","fassed","fasting","fawkes","fcsing","feasting","feasts","feating","fecalling","feeting","feined","feining","feisting","feists","felids","feline","felined","felining","felises","fellies","felling","felting","fend","fended","fends","feres","ferined","fering","ferining","ferning","ferring","fesses","fessing","feting","fetting","fevers","fibers","fibre","fibres","fice","fices","fide","fides","fiends","fierce","fierces","fieries","fieris","fife","fifes","figure","figures","file","filers","files","filets","filles","filling","filses","find","finded","fine","finers","fines","fining","fiords","fireds","firm","firmas","firmers","firms","firmus","firsts","firths","fishes","fisting","fitses","fixe","fixeds","fixers","fixes","fizzes","flakes","flange","flanges","flanked","flanned","flasks","flecks","flicks","fliers","flirts","focalling","fold","folds","folies","folked","fonded","fooded","fooled","footed","forces","fore","fores","forest","forges","forked","form","fortes","fosses","fountain","fountaining","fountains","foyers","fpsing","freaked","frieds","friers","fries","frigged","frog","froms","frores","fros","frsing","fsbing","fshing","full","fulling","fulls","fuming","funded","funs","furies","furzes","fuseds","fusees","fusels","fuses","fusing","fussing","fuzing","fwsing","gabling","gabs","gadded","gaeling","gaited","galaing","galing","gall","galliing","gallina","galling","gallings","gallis","galls","gallus","gand","ganded","gander","gandied","ganked","gaoling","garb","garbs","garded","garment","garnet","gaseses","gashes","gassed","gassies","gatling","gauched","gauches","gauching","gauded","gauling","gausses","gcsing","gean","geans","gelids","gellies","gelling","gelting","genies","genome","genomes","genoming","gent","germing","gerres","gestaing","gestes","gesting","getting","gilling","girded","girled","giroed","gisting","give","givens","gives","gladded","gladed","glanced","gland","glanded","glands","glandsed","glansed","glares","glass","glasses","glassy","gleams","glean","gleans","glides","glises","gofers","gold","golds","gonded","goners","gooded","goofed","gooked","gooned","gooped","goosed","gorals","gouached","gouaches","gouaching","governs","gpsing","graces","grad","grades","grads","graf","grafs","grafts","grails","grains","gram","gramas","gramps","grams","gran","granded","grands","grange","granged","granges","grans","grants","grapes","graphs","grases","grasps","grass","grasses","grassy","gratas","grates","gratis","graves","gravis","gray","grays","grazes","greats","grebes","greylies","greyly","groaks","groans","groats","grouch","grouched","grouches","grouching","groves","grub","grubs","grunts","gruses","gsaing","gsring","guesting","guests","guiing","guild","guilds","guiled","guiles","guilt","guilty","guises","guising","gull","gulling","gulls","guns","guses","gushes","gushing","gussing","gutses","gutsing","guying","gyrans","habits","hacked","hadded","hagged","haicks","haiked","hailing","haired","haje","hakeas","hakes","halals","hale","halfing","haling","hall","halling","halls","halming","haloing","halting","halve","halved","halves","halving","hame","hand","handed","handeds","handel","hander","handied","handled","handsed","hanged","hangers","harded","harems","hares","harked","harold","harolds","hart","harvey","hashes","hassles","hastes","hasting","hate","hats","hauling","haved","haven","havens","haves","hawked","hawses","haze","heating","heave","heaved","heaven","heaver","heaving","hectare","hectares","hefting","heired","heisting","held","helds","helixes","helling","helving","herbes","herbing","herding","here","hering","herming","heroing","herpes","herring","hets","hetting","hexine","hexined","hexines","hexining","hexose","hexoses","hhsing","hiatus","hick","hicked","hicks","hies","hilling","hilts","hind","hinded","hinged","hinges","hins","hints","hips","hire","hired","hirers","hires","hirtas","hiss","hisses","hives","hivs","hoards","hoared","hoaxed","hobbed","hoboed","hocced","hocked","hockey","hodded","hods","hoed","hogged","hoists","hokaed","holcus","holders","holdups","hole","holed","holes","holeys","holism","hollas","hollos","holm","holms","holy","homers","homied","homoed","honied","honked","honker","honkey","honkied","honored","hooches","hooching","hood","hooded","hoodeds","hoods","hooeyed","hoofed","hoofeds","hoofer","hookah","hookeds","hooker","hookeri","hookers","hookied","hookies","hooksed","hookses","hookup","hooped","hoopoed","hoopsed","hooted","hooter","hooved","hooveds","hoovers","hopers","hopied","hopped","hopple","hopples","hopsed","horded","hordes","horned","horsed","hosing","hosted","hosting","hotbed","hots","hotsed","hotted","hounds","houred","housed","houses","housing","hover","hovers","hoyaed","hrts","hses","hsing","hucked","huging","hulked","hull","hulling","hullos","hulls","hunged","hunked","huns","huoned","hushes","hushing","husked","husking","husoing","huts","hyoids","ictalling","idioted","idlies","iising","ileals","illing","images","impact","impacting","impacts","impart","imparting","impartings","imparts","impasses","impends","implore","implores","imploring","impoliting","important","importeds","importeeing","importees","importers","importinged","importings","importune","importuning","imposing","impost","imposting","imposts","improving","impure","impures","impuring","imputing","inbuilt","incise","incite","inclined","inclosed","include","includeds","includes","income","incomes","indied","indirect","indirected","indirects","indite","indited","indole","indoles","inerting","inerts","inference","inferences","infidel","influxed","info","inhabit","inhabits","inhere","inhered","inherent","inherenting","inherents","inheriteds","inheritinged","inheritings","inheritors","inheritting","inhibit","inhibits","initio","inkied","inland","inlanded","inline","inosine","inquire","inquires","insane","insert","inserting","inserts","insided","insider","insiders","insides","insist","insoles","inspire","insted","insting","intake","intakes","intending","interim","interims","intermit","intermits","inti","intied","intoed","intones","intos","intro","intron","intros","intruded","invades","invert","inverting","inverts","invites","invoice","invoices","involve","involves","iodide","ipsing","ired","ires","ironside","irsing","iruses","ises","isiing","ising","island","islanded","isling","isming","isning","isring","itsing","iuding","jailing","jakes","janned","jawses","jean","jeans","jellies","jelling","jerking","jest","jesting","jestings","jests","jetting","jigger","jiggers","jirded","jive","jives","jocked","jokers","jooked","josing","josses","joules","jove","joves","juking","julies","juning","jure","juring","juses","jussing","justes","juting","kailing","kakkes","kalaing","kaliing","kaling","kalkas","karens","karling","kelpies","kelting","kenoing","kepting","keraing","kerbing","kerite","kerited","kerites","kerning","kerring","keynote","keynotes","keynoting","khanned","kianged","kickers","kied","killing","kilned","kina","kinaed","kinda","kindas","kindle","kindly","kinds","kine","kined","king","kinged","kinked","kinks","kinned","kino","kinoed","kins","kiosks","kirk","kirked","kirks","kisses","kith","kleins","klick","klicks","knacks","knocks","knucks","koined","kooked","kookied","kuiing","kvasses","kweeked","kylies","labbed","lacced","lacied","lacked","ladded","ladder","laddied","laded","ladied","ladled","ladling","laed","lagans","lagend","lagended","lagged","lahhed","lahued","laiced","laid","laided","lairded","lake","lakes","lakhed","lallying","lamaed","lambed","lament","lammed","lamnaed","lamped","lanaied","lanated","lanced","lancer","lances","lancet","landaued","landeds","lander","landers","landler","lands","lane","lang","langed","langued","lank","lankaed","lanked","lankied","lanned","lansaed","lanseh","lanset","lapped","lapsed","lapses","lard","larded","larder","larged","laried","larked","larred","lashed","lashes","lassas","lasses","lassies","lassos","lasted","lasting","latent","latest","latesting","latests","lathed","latked","latkes","latsed","latses","latted","lauans","laud","lauded","lauder","laudes","launced","launder","lavaed","laves","lavved","lawsed","lawses","laxaed","lazied","lead","leaded","leaden","leadens","leads","leaf","leafs","leak","leaked","leaks","leal","leals","leaners","leap","leaps","learn","learns","leases","leasting","leaven","leavens","leaving","ledded","lefting","legals","legends","lemnas","lemons","lended","lender","lends","lenifies","lenify","lens","lensed","lent","lented","lentes","lentoing","leon","leones","leons","lerring","lesses","lessing","letting","levants","levees","levels","levited","levving","lewded","lianaed","lianas","liared","libels","libred","lice","lices","lick","licks","lidded","lieded","lieges","lies","life","lifers","lifes","ligand","liganded","ligans","ligers","lignes","like","likeds","likens","likes","limans","lime","limens","limes","limeys","linden","lindied","line","lineds","linens","liners","lines","linged","linied","linked","linoed","linted","liraed","lirred","lises","lisles","listes","listing","lite","liters","lites","lithes","litred","livedos","livens","livers","livias","livids","llanoed","llanos","loached","loaches","loaching","loaded","loan","loans","localling","loched","loches","loching","locked","lode","lohans","loired","lolling","loners","longed","looked","looker","looksed","loomed","looned","looped","loosed","looted","lorded","losers","losing","losses","losting","louched","louches","louching","louded","loughed","loughing","loupes","louses","lousing","louver","louvers","lover","lovers","lowans","lowers","lsding","lubing","lueses","luesing","luging","lull","lulling","lulls","lunaed","lundaed","lunged","lunned","luoing","lure","luring","lushes","lushing","luting","luxing","lynxed","mace","macers","maces","maches","mackems","mackle","mackles","madake","madakes","madded","made","mades","maes","magens","mahoes","maided","mailing","maines","maired","maizes","makers","makeups","mako","makos","male","maleos","males","maliing","maliks","maling","mall","malling","malls","malsing","malting","mameys","mandaed","manded","mane","maneds","manes","manied","manies","mankies","manned","mansed","manxed","manxes","maples","mapling","mare","mares","marges","maries","markeds","markers","markets","marling","mart","martes","masers","mases","maskeds","maskers","mass","massed","masseds","masses","masting","mate","mateds","maters","mates","mateys","mattes","mauling","maunded","maxes","maybes","maze","mazeds","mazers","mazes","mazies","mealies","mean","means","meating","mediaed","mediated","medicied","meeting","meined","meining","melees","melias","melics","melting","mend","mended","mends","menoing","mere","merelies","merely","merges","merging","mering","merited","merles","merling","merring","merses","mersing","mesaing","meshing","mesning","messes","messing","meting","metrifies","metrify","mevving","mick","micks","mike","mikes","milling","mind","minded","minified","minifies","minkes","mire","mired","mires","miried","miries","miroed","mising","misses","misting","mitred","mitres","mlsing","mocked","models","modems","modes","modest","modifieded","modifiered","modifiers","modished","modishes","modisted","modistes","modses","mogens","mohaves","mohses","moired","mojave","mojaves","mold","molds","mole","moles","molest","molles","mollified","mollifies","molling","molvas","mommies","monded","mondes","monels","moneys","monked","monses","montan","montanning","montans","montes","mooched","mooches","mooching","mooded","mooned","moored","moosed","mooses","mooted","mope","mopeds","mopes","more","morels","mores","morses","mortified","mortifies","moses","moseys","moshes","mosting","mote","motels","motes","motets","motiffed","motive","motives","moue","moues","moulds","mountain","mountaining","mountains","mousing","mouthed","mouthing","moveds","movie","movies","moxies","mpsing","mrsing","msbing","mscing","mses","msging","mshing","msing","muanged","muched","muches","muching","muling","mull","mullas","mulling","mulls","mullus","muming","musaing","musding","musers","muses","mushes","mushing","musing","musings","musking","mussing","muting","mutually","myalling","myalls","myopes","nadded","nailing","naives","nakeds","nalline","nanaed","nanced","nand","nanded","nandued","nanned","narded","nashes","nasuses","nauched","nauches","nauching","nave","neating","nemine","nemined","nemines","nemining","nerding","nerve","nerves","nerving","nervus","nervying","nesses","nessing","nest","nesting","nestings","nestling","nests","netting","nevers","neving","newlies","newting","nexted","nexting","nick","nicks","nigger","niggers","nilling","nisied","nisting","nitred","nitres","niveas","nivose","nivoses","nocked","node","noired","noires","nolling","nonuple","nonuples","nooked","nookied","nooksed","nooned","noosed","nosing","notched","notches","notching","notified","notifies","noting","nouses","nousing","nsaing","nscing","nsfing","nsuing","nswing","nuding","nuited","nuking","null","nulling","nulls","nuns","nurses","nursing","nutses","nutsing","nuxing","oakens","oasing","oasises","oasting","oatses","observe","observes","observing","obtain","obtaining","obtains","occluded","oceans","ochers","octalling","octuple","octuples","odisted","ogives","oilies","oising","olds","olefine","olefined","olefines","olefining","oleins","olive","olives","onlies","onto","onuses","opalling","opiated","oppose","opposes","opulus","opuses","oralling","orange","oranged","oranges","oses","osing","otuses","ouring","ousels","outclass","outclasses","outclassing","outdated","outing","outrigger","outriggers","ovalling","over","overs","overts","pacoses","pacs","pact","padded","padres","pads","paduses","paeans","pageant","pageses","paided","pailing","painses","paired","paks","palases","paliing","paling","palling","pallying","palming","palmses","paloing","pals","palsies","pandaed","pander","pangses","panned","pans","pansies","pant","panted","pantses","paps","para","parang","pare","parental","parented","parents","parers","pareve","pari","paries","paring","parises","parity","park","parr","parsec","parsecs","parsed","parsee","parsees","parser","parsers","parses","parted","parti","partis","partly","parts","partses","party","paruses","parvenu","parving","pasches","paso","pasoed","pasos","pasques","passages","passed","passeds","passee","passeed","passees","passel","passels","passer","passers","passims","passives","passkey","passkeys","passu","passued","passus","pasted","pasteds","pastel","pastels","paster","pasters","pastes","pasties","pasting","pastises","pasts","patases","patens","patent","patents","patient","pats","patsies","pauling","paulis","paused","pauses","pausing","pave","pavises","pawling","paws","payees","payment","pays","pbsing","peaked","pean","peans","peated","peating","pecans","pecses","peeves","peeving","pekans","pelling","pelting","pent","percent","perces","percing","pere","periing","pering","perking","perming","perring","pert","peruing","perve","perves","perving","pesoing","pessed","pessing","pest","pesting","pestis","pestling","pestoing","pestos","pests","petited","petrifies","petrify","petting","peyote","peyotes","peyoting","phaged","pharos","pholis","phsing","pick","picks","piered","pigses","pill","pilling","pills","pinses","pinto","pintos","pisces","piss","pissed","pisseds","pisser","pissers","pisses","pistes","pisting","pith","pitses","plaided","planaed","planked","planned","planted","plashes","plated","pleads","pleats","plover","plovers","pmsing","poached","poaches","poaching","pocked","poises","pokers","polers","polies","poll","polling","pollos","polls","pommies","ponded","ponses","pooched","pooches","pooching","pooded","poofed","pooled","pooned","pooped","poored","pooved","pooves","porched","porches","porching","porked","port","portent","posers","poshes","posies","posing","posits","possed","posses","possess","posset","possets","postes","posting","potent","pouch","pouched","pouches","pouching","powers","praises","pranged","prat","prated","preference","preferences","prelims","premies","preses","presses","prexies","pricks","prigged","prises","prom","proses","proves","prunes","prunos","prunus","psaing","psas","pses","psiing","psing","pucing","puking","pula","pulas","pule","pules","puling","pullers","pullets","pulleys","pulling","pulp","pulps","pulsing","puns","pupals","pupated","pupils","pure","purelies","purely","purifies","purify","puring","purl","purls","pursing","puses","pushing","puss","pussed","pusses","pussies","pussing","pyrene","qianged","quaing","quakes","quares","quells","questing","quests","quicks","quiing","quilt","quired","quited","quoing","quolls","rabies","racies","radded","raided","railing","raises","rake","rakes","raling","rallies","rallying","ramies","ranaed","rand","randed","randied","raneed","ranges","ranied","ranked","ranted","rarelies","rarely","rarifies","rarify","rashes","rasing","rassed","rave","ravers","readies","realines","realise","realises","realizes","reallies","really","realties","realty","reaving","rebuild","rebuilds","reburies","recall","recalling","recalls","recces","reccies","recipes","recited","recites","reclines","recode","recommits","recover","recovers","redefine","redefined","redefines","redefining","redlines","reedies","reefies","reeving","referee","referees","referenceds","referent","refine","refined","refiners","refines","refining","refinings","refits","regias","regimes","regius","reined","reining","reited","reiting","rejigs","relaces","relates","relaxes","relay","relics","relict","relicts","relied","relief","reliefs","relieve","relieves","relievo","relievos","relines","relining","relish","relishes","relived","relives","remake","remakes","remise","remises","remiss","remits","remote","remotes","remoting","remove","removes","rend","rended","rends","renins","renises","rent","repands","repens","repents","repine","repined","repining","replay","replied","replies","reply","repose","reposes","requiems","requireds","requite","requites","requote","requotes","reruns","reserve","reserves","reserving","resets","reshes","reshing","reside","resides","resids","resiles","resins","resizes","respire","respires","ressing","rest","resting","restings","rests","retied","reties","reting","retire","retouch","retouched","retouches","retouching","retries","retting","reusing","reverence","reverences","revers","review","reviews","reviles","revise","revises","revive","revoke","revokes","revues","revving","rewire","rewired","rhuses","rick","ricks","rigged","riggeds","rigger","riggers","rilling","rimies","rind","rinded","ringer","ringers","ringside","rising","risses","rive","rives","rivets","roached","roaches","roaching","rocked","rogers","roilies","rolling","rons","rooded","roofed","rooked","rookied","roomed","rooted","ropers","ropies","rosies","rosing","rouble","roubles","roughed","roughing","rounds","rouses","rousing","rove","rover","rovers","roves","rowers","rubens","rubies","rubing","rubins","rubs","rudelies","rudely","ruding","rues","rugger","ruggers","rugs","ruins","rulied","rulies","ruling","ruly","rumens","rums","rune","runes","rung","rungs","runics","runing","runt","runts","runups","ruses","rushes","rushing","rusing","rusking","russing","ruts","saales","saaling","saames","sabling","sabres","sadded","saided","sailing","saints","saises","sake","sakes","salals","saling","salk","salking","salks","salling","sallying","salols","salping","salting","salves","sand","sanded","sander","sandied","sandsed","sanned","sansed","sanses","sapling","sarded","sarding","sariing","sarsing","sashes","sass","sassed","sasses","sassies","sats","saurel","save","savers","saving","scalding","scalds","scaling","scalping","scalps","scalying","scapes","scarce","scarces","scare","scareds","scarers","scares","scarfs","scaries","scarps","scends","schick","schicks","scired","scoked","scolds","scorer","scorers","scores","scoter","scoters","screes","scries","scruple","scruples","scrying","sculling","seaing","sealing","seaming","seaport","seaporting","seaports","seareds","searing","seasing","seaxing","sebaes","sebaing","sebbing","sebing","sebses","sebsing","seccing","secluded","secure","sedans","sedding","sedges","sedging","seeding","seeing","seeking","seeling","seeming","seening","seeping","seering","segoing","segues","seguing","seifing","seiing","seined","seizes","seizing","selfing","selvaing","selvas","semiing","semited","senate","senates","senating","send","sended","sending","sends","sening","senning","senses","sensing","sent","sepping","sequine","sequines","serape","serapes","seraping","seraxes","seraxing","serbing","serene","serenes","serening","serers","seres","serfing","serge","sergers","serges","serging","series","serined","sering","serous","serowing","serows","serpens","serums","servals","servant","servers","services","servicing","serviles","serviling","servinged","servings","servo","servoing","servos","setaing","sets","seuling","sevens","sewing","sewning","sexing","sexpot","sexpots","sexpotting","sexted","sexying","shabus","shade","shadeds","shades","shadies","shafts","shagged","shake","shakens","shakers","shakes","shakies","shakos","shale","shales","shame","shameds","shames","shamus","shanged","shanked","shanks","shanned","shape","shapeds","shapers","shapes","shard","shards","shareds","sharers","shareses","sharias","shark","sharks","sharons","sharp","sharpens","sharpers","sharpie","sharpies","sharps","shart","sharts","shaveds","shavens","shavers","shaves","shaving","shawls","shawms","sheareds","shearers","shearses","sheers","sheiks","shelve","shelves","shelving","sherding","sherds","shines","shinto","shire","shires","shirks","shirrs","shited","shnooked","shocked","shocks","shoeds","shooed","shooked","shooted","shore","shoreas","shores","shorns","shorts","shotes","shover","shovers","shoving","shreds","shrews","shriving","shrove","shroves","shroving","shucks","sibs","sick","sicks","sics","sids","sieving","sifts","sights","silling","silts","sind","sinded","sing","sins","sips","sirced","sircing","sired","sirens","sires","siring","sirred","sirring","sirs","sising","siss","sisses","sitars","site","sites","sitkas","sittas","situ","situs","sitz","sitzes","sixths","skates","skinks","skints","skirts","skits","skiving","skulls","slander","slanted","slates","slaving","sleeve","sleeves","sleeving","slices","slicks","slides","slimes","slits","slivers","slouch","slouched","slouches","slouching","slsing","smalling","smalls","smarms","smarts","smited","smites","smiths","smoked","snare","snarers","snares","snarfs","snarls","sneaked","snicks","snigger","sniggers","snits","snooked","snores","soaked","soaving","sobers","socked","solare","solares","sold","solds","solids","solling","solver","solvers","solving","sooned","sooted","sorbing","sore","sorelies","sorely","soring","sorting","sots","souchong","soughed","soughing","souked","soupies","source","soured","souses","sousing","southed","southing","sowers","spaces","spades","spalling","spanged","spare","sparers","spares","sparge","sparges","sparks","spasms","spated","spates","spazes","speaked","specks","spells","sperming","sphere","spheres","spicks","spills","spinto","spired","spirts","spited","spites","spits","splits","spoked","spooked","spores","sprees","spries","sprigger","spriggers","spring","sprits","sprues","spruing","sprying","spurge","squally","squares","squires","sriing","ssaing","sses","ssing","ssping","ssriing","sssing","sswing","stacks","stages","stalk","stalks","stalling","standed","stands","stanks","stapes","stare","starers","stares","starets","starses","starts","starving","states","staving","steads","steaked","steeds","stenting","sterling","sterning","stetting","sticks","stilts","stints","stoked","stores","stover","stovers","stoving","streaked","string","stringer","stringers","striving","suaving","subclassed","suched","suches","suching","sucre","sucred","sudated","sudses","sudsing","suer","suered","suering","sues","suiing","suing","suited","suites","suits","sullas","summits","sundated","sunglass","sunglasses","sunglassing","suns","superclassed","supergrass","supergrasses","sura","suraed","suraing","surd","surded","surding","sured","surelies","sures","surety","surf","surfed","surfer","surfing","surge","surged","surging","surrey","surveys","suses","sussing","suture","suvving","svring","swages","swales","swards","swarms","swarts","sweared","sweated","swerve","swerves","swerving","swervings","swifts","swined","swiped","swirled","switch","taaling","tables","tabling","tabses","tached","taches","taching","tack","tacks","tacting","tadded","taeling","tagger","taggers","tailing","tajiks","take","takens","takers","takes","tala","talaing","talas","talc","talcing","talcs","tale","talent","tales","taling","talkers","talkies","talking","talksed","talkses","talling","tallying","talons","talus","tandem","tank","tankas","tanked","tanks","tanned","taoses","tapses","tart","tarting","task","tasking","tasks","tassed","tassel","tassels","tasses","tasset","tassets","tassing","tasting","tastings","tastying","tatting","tauting","tawses","tdting","teached","teaches","teaching","teaing","teaked","teaking","tealed","tealing","teamed","teaming","teared","tearing","teased","teases","teasing","teasling","teat","teated","teating","teats","tebets","teccing","teched","teches","tectaing","tectas","tedding","teds","teed","teeing","teeming","teened","teening","teething","teeths","teffing","tegging","teiids","tejuing","tellies","temming","temping","tempting","tempts","tenched","tenches","tenching","tendeds","tenders","tendons","tenens","tenged","tenges","tenging","tenias","tenned","tenning","tennis","tennos","tenons","tenors","tensed","tenseds","tensing","tented","tenthing","tenting","tentings","tenuis","tepids","terces","tereting","terned","terrifies","terrify","teslaing","teslas","testaing","testas","testating","testeds","testeeing","testees","testers","testes","testied","testify","testily","testinged","testings","testis","testying","tether","tething","tetting","tevets","texans","text","texted","textes","texting","textings","texts","thaned","thanked","thanks","thanned","thecas","thefting","thefts","theist","theisting","theists","theres","thesis","thinged","tholed","tholes","thonged","thorough","thoroughs","thought","thrive","thrives","throng","throngs","throughed","throughs","thrush","thuses","ticalling","tick","ticks","tiered","tigers","tilling","tilting","tineds","tinting","tire","tired","tires","tiroed","titred","titres","titting","tnting","toasting","toasts","toeaed","toeses","toesing","togethers","told","tolds","tolling","tommies","tomtits","toneds","toners","tontining","tooled","tooned","tooted","toothed","toothing","tooting","topers","toposes","topple","topples","torch","torched","torches","torching","torting","toshed","toshes","tosked","tosking","tosses","tossing","toters","toting","totting","toucan","toucans","touchers","touchied","touchies","touchinged","touchingly","touchings","touchline","touchy","touchying","tough","toughed","toughens","toughied","toughies","toughing","toughying","touped","toupee","toupeed","touping","toured","touring","tousle","tousled","tousling","touted","towers","tracks","transitive","transitived","transitives","transitivity","treaded","treads","treated","treating","treats","treeds","trekked","trend","trends","trenting","tressing","trestling","triage","triaged","tricker","trickers","tricks","triers","trifler","triflers","trigged","trimer","trimers","trimmer","trimmers","tripper","trippers","trited","triting","troched","troches","troching","trough","troughed","troughing","troughs","troves","truced","truces","trucing","trucked","trucking","trudger","trudgers","trulies","trunks","trusting","trusts","truthed","truthing","trysting","trysts","tsetse","tsetsing","tubing","tucked","tucking","tufting","tugger","tuggers","tuling","tulles","tulling","tumses","tumsing","tuning","tuns","turing","tushed","tutting","tuxing","twanged","tweaks","tweeded","tweeds","tweeped","tweeted","tweeting","tweets","tweezed","twelved","twenty","twerked","twerped","twiced","twigged","twined","twirled","twirped","twisting","twists","twitch","ufoing","uglies","uhfing","uing","ukases","ukasing","ukes","uking","ulls","ulting","umaing","umping","unchanged","unclouded","uncouple","uncouples","uncover","uncovers","undated","undateds","undefined","unding","unedited","unhooked","uniated","uning","united","unkind","unlive","unlives","unmake","unmakes","unmated","unmodified","unqing","unsated","unsees","unsung","unsure","untouched","unusually","unwired","unyoke","unyokes","upbeated","upcasted","update","updates","updrafted","uphold","upholds","uping","upland","uplanded","upsets","upside","uptaked","upvoted","urated","urging","urling","urning","urns","ursine","uruses","usages","usaging","usaing","usas","usbegs","usbeks","uscbing","usdaed","usdaing","used","useds","user","userring","users","ushers","usinged","usings","usmcing","usneas","usning","usns","usps","uspses","uspsing","usss","usssing","usualed","usuals","usurer","utaing","utcing","utes","uting","utning","uubing","uuhing","uuping","uuqing","uuting","uving","uziing","valiing","valing","valling","valses","valsing","valuing","valving","vandaed","vanned","varment","vasing","vassed","vasting","vedisted","vegans","veined","veines","veining","vend","vended","vends","venose","venoses","venosing","vent","veraing","verbified","verbifies","verbify","verbing","verdes","verding","verges","verging","veridis","veridises","veried","verified","verifieds","verifier","verifiers","verited","veritied","verities","verity","verses","versified","versifier","versifiers","versifies","versify","versing","versting","versts","vertes","verve","verves","vervets","verving","verying","vest","vesting","vests","vetting","vianded","vilifies","vilify","vinifies","vinify","virens","vireos","vising","visits","visually","vitrifies","vitrify","vive","vives","vivifies","vivify","vivred","vocalling","vomers","vomits","voters","vouch","vouched","voucheed","vouchees","vouchers","vouches","vouching","vowers","wadded","wadses","waifed","wailed","wailing","wained","waived","waives","wake","wakens","wakers","wakes","waling","walk","walking","walks","wall","walling","wallings","walls","wallying","wand","wanded","wander","wanked","wanned","want","wanted","ware","wared","waried","warmed","warned","warped","warred","warsed","warses","wart","warted","washes","wassed","wastes","wasting","watses","wauling","wave","wavers","wawling","wayses","wbsing","weaked","weaken","wealed","wean","weaned","weans","wearer","weaved","weaves","weaving","weeked","weft","wefting","weirded","weired","wekaed","welling","welt","welting","wended","wends","wens","weres","wering","westing","wests","wetting","whacks","whales","whanged","wharfs","whelks","whiled","whined","whirled","whirred","whists","whites","whits","wholed","wholes","whooped","whored","whores","wick","wicked","wicks","wided","width","widths","wifed","wified","wigged","wilded","wiled","wilied","wilies","willed","willing","wilted","wimped","winced","wind","wined","winged","winied","winked","winned","winoed","wiped","wipeds","wireds","wirer","wiried","wised","wisent","wish","wished","wising","wisped","witch","withal","withe","wither","withes","within","withs","withy","witsed","witted","wive","wived","wives","wizzed","wlanned","wokked","wold","wolds","wonked","wont","wooded","wooers","woofed","wooled","worded","worlds","wormed","worned","worsed","worted","woulds","wove","woves","wraith","wrasses","wreaked","wrecks","wresting","wrests","wricks","wried","wriggler","wrigglers","wringer","wringers","writhe","wswing","wussing","wyrded","xerotes","xmases","yanaed","yanked","yarded","yawling","yawses","yearns","yeasting","yeasts","yelling","yerring","yessing","yetting","yolked","yorked","youthed","youthing","yuling","yuses","yussing","zaired","zaires","zanied","zend","zended","zends","zeroing","zest","zesting","zests","zestying","zeuses","zeusing","zhuanged","zilling","zonked","zoomed","zooted"]}});function Hn(e,t,n){if(e===t)return 0;if(Math.abs(e.length-t.length)>n)return n+1;let s=null,o=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r],a=r;for(let l=1;l<=t.length;l+=1){let c=e[r-1]===t[l-1]?0:1,u=Math.min(o[l]+1,i[l-1]+1,o[l-1]+c);r>1&&l>1&&e[r-1]===t[l-2]&&e[r-2]===t[l-1]&&(u=Math.min(u,s[l-2]+c)),i[l]=u,u<a&&(a=u)}if(a>n)return n+1;s=o,o=i}return o[t.length]}function xc(e){return/^[a-z]+$/.test(e)&&!st.has(e)&&!$c.has(e)}function $f(e){return hx(e)?null:Ec(e,fx,fs(e))}function Ec(e,t,n=fs(e)){let s=n+1,o=null,r=!1;for(let i of t){let a=Hn(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 dx,fs,$c,px,fx,mx,hx,vr=L(()=>{zn();yf();ps();dx=["used"];fs=e=>e.length<=5?1:2,$c=new Set([...Object.keys(de),...Object.keys(Ue),...Object.keys(Jt),...dx].flatMap(e=>e.split(" "))),px=4,fx=[...new Set([...Object.keys(de),...Object.keys(Jt)].flatMap(e=>e.split(" ")).filter(e=>e.length>=px))],mx=new Set(vf.words),hx=e=>mx.has(e)});function _o(e){for(let t of yx){let n=e.match(t.re);if(n){let s=t.build(n);if(s)return s}}return null}var _i,gx,bx,wx,Sc,yx,xf,Ri=L(()=>{zn();ps();_i=Object.keys(de).sort((e,t)=>t.length-e.length).map(Xe).join("|"),gx=Object.keys(Ue).sort((e,t)=>t.length-e.length).map(Xe).join("|"),bx=Object.keys(Jt).sort((e,t)=>t.length-e.length).map(Xe).join("|"),wx=Fs.slice().sort((e,t)=>t.length-e.length).map(Xe).join("|"),Sc=(e,t)=>e==="defines"&&pr.has(t),yx=[{name:"ask",re:new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+(${_i})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];if(Sc(n,t))return null;let s=e[1].trim(),o=e[3].trim();return dr.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+(${gx})\\s+(?:(${bx})\\s+)?(${_i})\\s+(.+?)\\??$`,"i"),build:e=>{let t=e[3].toLowerCase(),n=de[t];return Sc(n,t)?null:{shape:"reverse",entityType:Ue[e[1].toLowerCase()],modifier:e[2]?Jt[e[2].toLowerCase()]:"direct",kind:n,object:e[4].trim()}}},{name:"forward",re:new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+(${_i})\\??$`,"i"),build:e=>{let t=e[2].toLowerCase(),n=de[t];return Sc(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+(?:${wx})\\??$`,"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=on(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"&&Id.some(r=>o===r||o.startsWith(`${r} `))?null:{shape:"meta",entityType:null,modifier:"direct",kind:"meta",object:Ps(n)}}},{name:"mention",re:new RegExp(`^where\\s+(?:is|are|was|were)\\s+(.+?)\\s+(?:${hn.map(Xe).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+(?:${Xt.map(Xe).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+)?(${_i})\\??$`,"i"),build:e=>de[e[2].toLowerCase()]==="touches"?{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()}:null},{name:"commit-history",re:/^(?:the\s+)?commit\s+history\s+(?:of|for)\s+(.+?)\??$/i,build:e=>({shape:"when",entityType:null,modifier:"direct",kind:"touches",object:e[1].trim()})},{name:"cochange-partners",re:/^co-?change\s+partners\s+(?:of|for|with)\s+(.+?)\??$/i,build:e=>({shape:"reverse",entityType:"Module",modifier:"direct",kind:"cochange",object:e[1].trim()})}];xf={id:"grammar",class:"graph-query",run(e){let t=_o(e);return t?{strategyId:"grammar",class:"graph-query",candidates:[{parsed:t,confidence:.9}]}:null}}});function Rt(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 xr(e,t=null){let n=e.replace(/\?+\s*$/,"").replace(/,/g," ").split(/\s+/).filter(Boolean),s=n.map(E=>E.toLowerCase());if(s.includes("where")&&!Rt(s,de)){let E=s.some(k=>hn.includes(k)),S=new Set([...Xt,...hn]),R=n.filter((k,A)=>!st.has(s[A])&&!S.has(s[A])).join(" ").trim();if(R){let k=E?"mentions":"where";return{shape:k,entityType:null,modifier:"direct",kind:k,object:R}}}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?de[s[E-1]]:null)==="touches"){let R=n.slice(1,E-1).filter((k,A)=>!st.has(s[1+A])).join(" ").trim();if(R)return{shape:"when",entityType:null,modifier:"direct",kind:"touches",object:R}}}let r=s,i=Rt(s,de);if(!i&&t){let E=s.map(S=>{if(!xc(S))return S;let R=t.lemma(S);return $c.has(R)?R:S});i=Rt(E,de),i&&(r=E)}let a=null;if(!i){let E=s.map(S=>S.length>=4&&xc(S)&&$f(S)||S);if(i=Rt(E,de),i){r=E;let S=s.slice(i.start,i.end).findIndex((k,A)=>k!==E[i.start+A]),R=i.start+Math.max(S,0);a={from:s[R],to:E[R]}}}let l=!1;if(!i)for(let E=0;E<s.length;E+=1){let S=rs[s[E]];if(!(S&&s[E]==="used"&&s[E+1]==="for")&&S&&s.slice(0,E).some(R=>$r.has(R))){i={kind:S,start:E,end:E+1},l=!0;break}}if(!i)return null;!l&&i.end-i.start===1&&rs[s[i.start]]&&s.slice(0,i.start).some(E=>$r.has(E))&&(l=!0);let c=E=>a?{...E,fuzzyVerb:a}:E;if(t&&i.end-i.start===1){let E=i.start,S=s[E-1];if((S==="the"||S==="these"||S==="those")&&s[E+1]==="of"&&t.posTags(n)[E]==="NOUN"){let k=n.slice(E+2).filter((A,P)=>!st.has(s[E+2+P])).join(" ").trim();if(k)return c({shape:"forward",entityType:null,modifier:"direct",kind:i.kind,object:k})}}let u=new Set,d=E=>{if(E)for(let S=E.start;S<E.end;S+=1)u.add(S)};d(i);for(let[E,S]of Object.entries(de)){if(S!==i.kind)continue;let R=E.split(" "),k=i.end;if(R.every((A,P)=>r[k+P]===A)){d({start:k,end:k+R.length});break}}let f=Rt(r,Ue,u);d(f);let p=Rt(r,Jt,u);d(p);let m=(E,S)=>n.slice(E,S).filter((R,k)=>!u.has(E+k)&&!st.has(s[E+k])).join(" ").trim(),h=m(0,i.start),g=m(i.end,n.length);l&&!s.includes("by")&&xx.has(g.toLowerCase())&&(g="");let b=i.kind,y=f?Ue[r.slice(f.start,f.end).join(" ")]:null,w=p?Jt[r.slice(p.start,p.end).join(" ")]:"direct";if(b==="touches"&&s.includes("when")){let E=h||g;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=h||g;if(E)return c({shape:"whoLast",entityType:null,modifier:"direct",kind:"touches",object:E})}let $=s.indexOf("by"),_=s.slice(0,i.start).findIndex(E=>$r.has(E)),v=_>=0,x=v&&_>$;if($>=0&&!u.has($)&&v){let E=(k,A)=>n.slice(k,A).filter((P,T)=>{let M=k+T,B=s[M];return!u.has(M)&&!st.has(B)&&B!=="by"&&!$r.has(B)&&!vx.has(B)&&!$x.has(B)}).join(" ").trim(),[S,R]=x?[E(_+1,n.length),E($+1,_)]:[E(0,$),E($+1,n.length)];if(S&&R)return b==="defines"&&pr.has(r.slice(i.start,i.end).join(" "))?null:c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:R,object:S});if(R)return c({shape:"forward",entityType:y,modifier:w,kind:b,object:R});if(S)return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:S})}if(l&&$<0&&g&&s[i.start]==="called")return null;if(h&&g){let E=r.slice(i.start,i.end).join(" ");if(b==="defines"&&pr.has(E))return null;let S=h,R=g;return dr.includes(E)&&([S,R]=[R,S]),c({shape:"ask",entityType:null,modifier:"direct",kind:b,subject:S,object:R})}if(g){let E=f&&f.start>=i.end?null:y;return c({shape:"reverse",entityType:E,modifier:w,kind:b,object:g})}if(b==="inherits"&&!h&&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})}if(h&&!g&&v&&i.end-i.start===1&&rs[s[i.start]]){if(h.split(/\s+/).length>1)return null;if(b==="touches")return c({shape:"when",entityType:null,modifier:"direct",kind:b,object:h});let E=$r.has(s[0]);return c({shape:"reverse",entityType:y,modifier:w,kind:b,object:h,...E?{polar:!0}:{}})}return h?c({shape:"forward",entityType:y,modifier:"direct",kind:b,object:h}):null}var $r,vx,$x,xx,Ef,Ti=L(()=>{zn();ps();vr();$r=new Set(["is","are","was","were","be","been","being","get","gets","got"]),vx=new Set(["which","what","who","whom","whose"]),$x=new Set(Dn.map(e=>e.toLowerCase())),xx=new Set(["recently","lately","yet","already","ever","again"]);Ef={id:"keyword-spot",class:"graph-query",run(e,t={}){let n=xr(e,t.nlp||null);return n?{strategyId:"keyword-spot",class:"graph-query",candidates:[{parsed:n,confidence:.7}]}:null}}});function Sx(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)||Sf.has(l)||!s.has(l)||o[i]==="VERB"&&r.push(l)}return r}function kx(e,t=null){let n=Bt(e),s=[],o=[];for(let i of n){let a=i.toLowerCase();/^[a-z]+$/.test(i)&&!Sf.has(a)&&(Ex.has(a)||t&&typeof t.isStopWord=="function"&&t.isStopWord(a))?o.push(i):s.push(i)}let r=Sx(n,s,t);return{text:s.join(" "),dropped:o,maybeNoise:r}}var Sf,Ex,kf,jf=L(()=>{zn();ps();Ri();Ti();Sf=new Set([...st,...me(Ms),...me(Object.keys(de)),...me(Object.keys(Ue)),...me(Object.keys(Jt)),...me(Object.keys(Ye)),...me(Ds),...me(zs),...me(Object.keys(is)),...me(Object.keys(En)),...me(Object.keys(go)),...me(Dn),...me(mr),...me(Fs),...me(Xt),...me(hn),...me(Fn),...me(Object.keys(wo))]),Ex=new Set([...me(fr),...me(di)]);kf={id:"noise-strip",class:"noise-stripped",run(e,t={}){if(_o(e))return null;let{text:n,dropped:s,maybeNoise:o}=kx(e,t.nlp||null);if(!s.length||!n)return null;let r=_o(n)||xr(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 _f=L(()=>{});var Ai,Ci=L(()=>{Ai=()=>{}});function Tf(e,t){return e.shape!==t.shape||e.kind!==t.kind?!1:e.shape==="ask"?Ro(e.subject)===Ro(t.subject)&&Ro(e.object)===Ro(t.object):Ro(e.object)===Ro(t.object)}function kc(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=>!Af(c))&&(n=n.filter(c=>!Af(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=>Tf(m.parsed,f.parsed)&&m.via===f.via);if(p){p.agreed+=1,p.confidence=Math.max(p.confidence,f.confidence),Rf(f.parsed)<Rf(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=>Tf(u.parsed,c.parsed)));return{class:i.class,parsed:a,winner:i.candidates[0],alternates:l}}function Rx(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 Cf(e,{describe:t=Rx,answerFor:n=null}={}){return(e||[]).map(s=>{let o=s.note||t(s.parsed),r=n&&n(s)||"ask it that way";return`if you mean ${o} then ${r}`})}var Ro,jx,Rf,_x,Af,jc=L(()=>{Ro=e=>String(e||"").trim().toLowerCase().replace(/\s+/g," ").replace(/^(?:the|a|an)\s+/,"").replace(/^commit\s+(?=[0-9a-f]{7,40}$)/,""),jx=/^\s*(?:the|a|an)\s+/i,Rf=e=>[e?.subject,e?.object].filter(t=>jx.test(String(t||""))).length;_x=new Set(["fuzzy","lemma","spell"]),Af=e=>_x.has(e.via)});function Oi(e){_c=e}function Ii(){return typeof _c=="function"?_c():null}var _c,To=L(()=>{_c=null});function Lf(e,t={},n=Ax){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 Tx,Ax,Nf=L(()=>{ps();Ri();Ti();jf();_f();Ci();jc();To();Tx=[...typeof void 0<"u"?[void 0]:[],...typeof void 0<"u"?[void 0]:[]],Ax=[xf,Ef,kf,...Tx]});function Ao(e){return Cx.test(String(e||"").trim())?"an":"a"}function Li(e){let t=String(e||"").trim();return t&&(/(?:s|x|z|ch|sh)$/.test(t)?`${t}es`:/[^aeiou]y$/.test(t)?`${t.slice(0,-1)}ies`:`${t}s`)}function Co(e){let t=String(e||"");return t&&t[0].toUpperCase()+t.slice(1)}function Er(e){let t=(e||[]).map(n=>String(n||"").trim()).filter(Boolean);return t.length===0?"":t.length===1?t[0]:t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t[t.length-1]}`}var Cx,Ni=L(()=>{Cx=/^[aeiou]/i});var Sr,Rc=L(()=>{Sr=(e,t,n)=>n});var Sm={};Mn(Sm,{DYNAMIC_TAIL_OK_RE:()=>nl,applyNegationFrames:()=>yr,ask:()=>bs,classDisplayName:()=>Vn,degreeMetric:()=>hm,metaFallbackEntityAnswer:()=>cm,normalizeQuery:()=>Vs,parseQuery:()=>Rr,parseQueryFull:()=>Wc,render:()=>bn,rephraseHint:()=>Xc,resolveObject:()=>wn,traverse:()=>Ut,worldRelationGraphPayload:()=>SS});function qe(e,t){let n=Pf.get(e);n||(n=new Map,Pf.set(e,n));let s=n.get(t);if(s)return s;let o=[];for(let r of e.relations)if(Gn(r)===t)for(let i of r.edges)o.push(i);return n.set(t,o),o}function Me(e,t){let[n,s]=Lc[e]||["result","results"];return t===1?n:s}function Ar(e,t,n,s={}){return!e||!t.length?[]:[{kind:"set",class:e,label:`${t.length} ${Me(e,t.length)}`,ids:t.map(o=>o.id),attrs:{count:t.length},lane:n,...s}]}function Vn(e){let t=String(e||"");if(typeof Sn=="function"){let n=Sn(t).join(" ");if(n)return n}return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").toLowerCase()}function qs(e){return Ix[e]||e}function Fx(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||Mx.has(s))return e;let o=String(n.object||"").trim().toLowerCase();return me(Fs).includes(o)?t:e}function Bx(e,t){if(!e||e.shape!=="where"||e.altObject||!Dx.test(t))return e;let n=ui(t),s=ui(String(e.object||"")),o=s===e.object?e:{...e,object:s},r=Bt(s);if(r.length<2)return o;let i=r[r.length-1].toLowerCase();if(!/^[a-z][a-z'-]*$/.test(i)||st.has(i)||de[i]||i.endsWith("ing"))return o;let a=Bt(n).map(c=>c.toLowerCase());for(;a.length&&zx.has(a[a.length-1]);)a.pop();if(a[a.length-1]!==i)return o;let l=r.slice(0,-1).join(" ");return{...e,object:l,altObject:s,verb:i}}function Rr(e,{nlp:t=void 0}={}){return Wc(e,{nlp:t}).parsed}function Wc(e,{nlp:t=void 0}={}){let n=t===void 0?Ii():t,s=String(e||"").trim().replace(/\s+/g," ");if(!s)return{parsed:null,alternates:[],class:null};let o=vc(yr(Vs(s)));if(!o)return{parsed:null,alternates:[],class:null};let r=Wx(o,n);if(r)return{parsed:r,alternates:[],class:null};let i=kc(Lf(o,{nlp:n,raw:s}));return i?{parsed:Bx(Fx(i.parsed),o),alternates:i.alternates||[],class:i.class||null}:{parsed:null,alternates:[],class:null}}function Pc(e,t){return t.length&&Qf.has(t[0])?{bw:e.slice(1),blc:t.slice(1)}:{bw:e,blc:t}}function Lo(e,t){return _o(e)||xr(e,t)}function Wx(e,t){let n=Bt(e),s=n.map(o=>o.toLowerCase());return lE(n,s)||dE(n,s)||qx(n,s,t)||em(e,t,0)||pE(n,s,t)||Yx(n,s,t)||nE(n,s,t,0)||oE(n,s)||aE(n,s,t)||fE(n,s,t)||gE(n,s,t)||wE(n,s,t,0)||hE(n,s,t,0)||Hc(n,s,t,0)||Jx(n,s,t)||Hx(n,s)||im(n,s,t,0)}function Hx(e,t){let n=0;Gx.has(t[n])&&(n+=1);let s=Tt(t[n]);if(!s||s.placeholder||!s.entityType)return null;let o=s.entityType;n+=1;let r=m=>m+1<t.length?Ld[`${t[m]} ${t[m+1]}`]:void 0,i=r(n);if(!i)return null;let a=n+2,l=-1,c;for(let m=a;m+1<t.length;m+=1){let h=r(m);if(h){l=m,c=h;break}}if(l<0)return null;let u=e.slice(a,l).join(" ").trim(),d=e.slice(l+2).join(" ").trim();if(!u||!d)return null;let f=(m,h)=>m.role==="object"?{shape:"reverse",kind:m.kind,entityType:o,modifier:"direct",object:h}:{shape:"forward",kind:m.kind,modifier:"direct",object:h},p=f(i,u);return p.entityType=o,{node:"boolean",entityType:o,atoms:[{op:"seed",kind:"set",ast:{node:"clause",clause:p}},{op:"intersection",kind:"set",ast:{node:"clause",clause:f(c,d)}}]}}function Mi(e,t){return{node:"boolean",entityType:e,atoms:[{op:"seed",kind:"set",ast:{node:"allOfClass",entityType:e}},t]}}function qx(e,t,n){if(!["do","does","did"].includes(t[0])||!Vx.has(t[1]))return null;let s=Tt(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=Rt(a,de);if(!l)return{node:"miss",reason:"a universal check needs a known relation verb (import, call, inherit from, test, \u2026)"};let u=i.filter((f,p)=>(p<l.start||p>=l.end)&&!st.has(a[p])&&a[p]!=="from").join(" ").trim();if(!u)return null;let d=No(`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:Mi(o,{op:"difference",kind:"set",ast:d})}}function em(e,t,n=0){let s=wf(e);if(!s)return null;let o=Tt(s.entWord);if(!o||o.placeholder||!o.entityType)return null;let r=o.entityType;if(r==="Change")return{node:"miss",reason:`"${s.entWord}" isn't an enumerable kind \u2014 a set complement needs a concrete kind (functions, classes, modules, \u2026)`};let i=Bt(s.predicate),a=i.map(d=>d.toLowerCase());if(a.length&&a.every(d=>Ye[d]))return Mi(r,{op:"difference",kind:"qual",filters:a});let l=Rt(a,de);if(!l)return{node:"miss",reason:"a negated set query needs a known relation verb (import, call, inherit from, test, \u2026)"};if(!i.filter((d,f)=>(f<l.start||f>=l.end)&&!st.has(a[f])&&a[f]!=="from").length)return Mi(r,{op:"difference",kind:"set",ast:{node:"existsEdge",entityType:r,kind:l.kind}});let u=No(`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"}:Mi(r,{op:"difference",kind:"set",ast:u})}function Yx(e,t,n){let s=0;for(;s<t.length&&Kx.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=Rt(r,de);if(!a)return null;let c=o.filter((u,d)=>d!==i&&(d<a.start||d>=a.end)&&r[d]!=="from"&&!st.has(r[d])).join(" ").trim();return c?{node:"forwardComplement",kind:a.kind,subjectTerm:c}:null}function tm(e,t){let n=new Set;for(let s of t)for(let o of qe(e,s)){let r=e.byId.get(o.object);r&&r.class&&n.add(r.class)}return n}function nm(e,t){let n=Ot(t),s=n.filter(r=>!Xf.has(r)),o=tm(e,s.length?s:n);return o.size===1?[...o][0]:null}function No(e,t,n){if(n>Jf)return{node:"miss",reason:"too deep to resolve"};let s=em(e,t,n);if(s)return s;let o=Bt(e),r=o.map(c=>c.toLowerCase()),i=Hc(o,r,t,n);if(i)return i;let a=im(o,r,t,n);if(a)return a;let l=Lo(e,t);return l?{node:"clause",clause:l}:null}function Hc(e,t,n,s){for(let o=1;o<t.length;o+=1){let r=Fn.includes(t[o]),i=!r&&Zf(t[o]);if(!r&&!i||r&&o+1>=t.length||!Tt(t[o-1]))continue;let l=e.slice(0,o-1);if(!l.length||l.every(f=>Ye[f.toLowerCase()]))continue;let c=Lo([...l,Nc].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=No(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 Jx(e,t,n){for(let s=0;s<t.length;s+=1){if(!Xx.has(t[s])||t[s-1]==="of")continue;let o=s===t.length-1,r=s+1<t.length&&!!de[t[s+1]];if(!o&&!r)continue;let i=[...e.slice(0,s),Nc,...e.slice(s+1)],a=Lo(i.join(" "),n);if(!(!a||a.shape!=="reverse"&&a.shape!=="forward")&&a.object===Nc&&!(a.modifier&&a.modifier!=="direct"))return{node:a.shape==="reverse"?"reverseSet":"forwardSet",kind:a.kind,entityType:a.entityType,inner:{node:"prevSet"}}}return null}function nE(e,t,n,s=0){if(t[0]!=="when")return null;let o=1;if(!Qx.has(t[o]))return null;o+=1;let r=-1;for(let d=t.length-1;d>=o;d-=1)if(Zx.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&&eE.has(a[a.length-1]);)i=i.slice(0,-1),a=a.slice(0,-1);for(;a.length&&tE.has(a[0]);)i=i.slice(1),a=a.slice(1);if(!i.length||!a.some(d=>Fn.includes(d)))return null;let l=Gc.has(a[0])?i.join(" "):`which ${i.join(" ")}`,c=No(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=Tt(a[0]);return{node:"temporal",inner:c,entityType:u&&u.entityType||null}}function oE(e,t){if(t[0]!=="what"||t[1]!=="changed")return null;let n=2;if(t[n]==="ever"&&(n+=1),!sE.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 iE(e){let t=new Set,n=[];for(let s of e){if(!s||!rE.test(s))continue;let o=s.toLowerCase();t.has(o)||(t.add(o),n.push(s))}return n}function aE(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(!mr.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&&(Ds.includes(f)||zs.includes(f))){s=d;break}}if(s<0)return null;let r=(o?t.slice(0,s-1):t.slice(0,s)).join(" "),i=Ds.includes(r)||/^(how many|how much|count|number|quantity|total)\b/.test(r)?"count":"list",a=cE(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=iE(e.slice(0,l)),u={node:"anaphora",mode:i,filter:a};return c.length>=2&&(u.candidateTerms=c),u}function cE(e,t){let n=0,s=e.map(a=>a.toLowerCase());for(;n<s.length&&Ux.has(s[n]);)n+=1;let o=e.slice(n),r=s.slice(n);if(!o.length)return{type:"all"};if(r.every(a=>Ye[a]))return{type:"qual",filters:r};if(o.length===1){let a=Tt(r[0]);if(a&&!a.placeholder&&a.entityType)return{type:"entity",entityType:a.entityType}}let i=Lo(`what ${o.join(" ")}`,t);if(i&&(i.shape==="reverse"||i.shape==="forward")&&i.object)return{type:"clause",clause:i}}function lE(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?Tt(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 uE(e,t){if(!t.length)return null;let n=`${e} ${t.join(" ")}`,s=Ps(n).slice(e.length).trim(),o=Bt(s),r=o.findIndex(a=>a.toLowerCase()==="in");if(r<0)return null;let i=o.slice(r+1).join(" ").trim();return i?{scope:i}:{node:"miss",reason:'"in" needs a scope afterward'}}function dE(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(Ye[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&&rs[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&&!Fd.has(u))return null}let r=uE(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 pE(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=Lo(e.filter((r,i)=>i!==s).join(" "),n);return!o||o.shape!=="ask"?null:{...o,negated:!0}}function fE(e,t,n){let s=Ds.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&&Ye[t[o]];)r.push(t[o]),o+=1;let i=o<t.length?Tt(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)&&!sm.has(d)),u;if(c){let d=No(`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 hE(e,t,n,s){let o=0,r=!1,i=null;for(let y of om){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&&Vc.has(t[o]);)o+=1;let a=[];for(;o<t.length&&Ye[t[o]];)a.push(t[o]),o+=1;let l=o<t.length?Tt(t[o]):null;if(!l||l.placeholder||l.entityType==="Change")return!r&&o<t.length&&o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Dn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${rm}`}:null;let c=l.entityType,u=t[o];o+=1;let d=e.slice(o),f=t.slice(o).some(y=>!st.has(y)&&!sm.has(y)),p=t.slice(o),m=d;(p[0]==="is"||p[0]==="are")&&(p=p.slice(1),m=m.slice(1));let h=r&&mE.has(p[0]);if(r&&(f&&!h||d.length===0))return null;let g,b=!1;if(f){let y=h?m:d,w=No(`which ${[...a,u,...y].join(" ")}`,n,(s||0)+1);if(!w||w.node==="miss")return{node:"miss",reason:w&&w.reason||"the list filter didn't parse"};g=w,b=!0}else g={node:"allOfClass",entityType:c},a.length&&(g={node:"qualifier",filters:a,inner:g});return{node:"list",entityType:c,base:g,scoped:b}}function gE(e,t,n){let s=null,o=-1;for(let m=0;m<t.length;m+=1){let h=t.slice(m,m+2).join(" ");if(is[h]){s=is[h],o=m;break}if(is[t[m]]){s=is[t[m]],o=m;break}}if(!s)return null;let r=null,i=null;for(let m=o;m<t.length;m+=1)if(En[t[m]]){r=En[t[m]],i=t[m];break}if(!r){for(let m=o-1;m>=0;m-=1)if(En[t[m]]){r=En[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=En.connections,i="connections");let u,d=null;for(let m of t){let h=Tt(m);if(h&&!h.placeholder){u=h.entityType,d=m;break}}if(!d&&(u=i?Dd[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 wE(e,t,n,s){if(t[0]!=="find")return null;let o=1;for(;o<t.length&&Vc.has(t[o]);)o+=1;if(o>=t.length)return null;let r=Tt(t[o]);if(r&&!r.placeholder&&r.entityType!=="Change"&&o+1<t.length&&bE.has(t[o+1])){let a=e.slice(o+2).join(" ").trim();if(a)return{node:"find",entityType:r.entityType,term:a}}let i=Tt(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=>Fn.includes(a))?null:o===t.length-1&&/^[a-z]+$/.test(t[o])&&!de[t[o]]&&!Dn.includes(t[o])?{node:"miss",reason:`"${t[o]}" isn't a listable kind \u2014 try ${rm}`}:null}function yE(e,t){if(t[0]!=="find")return null;let n=1;for(;n<t.length&&Vc.has(t[n]);)n+=1;let s=-1;for(let i=n+1;i<t.length;i+=1)if(Fn.includes(t[i])){s=i;break}if(s<0)return null;let o=Tt(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 vE(e,t,n,s,o,r){let{branches:i,ops:a}=Fi(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=Pc(d,f);if(m.blc.length&&m.blc.every(y=>Ye[y])){c.push({op:p,kind:"qual",filters:m.blc});continue}if(f[0]==="of"||f[0]==="in"){c.push({op:p,kind:"set",ast:{node:"membership",entityType:e,term:d.slice(1).join(" ")}});continue}let h=d,g=Rt(f,de);g?l=d.slice(g.start,g.end):l&&(h=[...l,...d]);let b=am(`${t} ${h.join(" ")}`,o,r);if(!b||b.node==="miss")return{miss:b&&b.reason||"a clause in the combination didn't parse"};c.push({op:p,kind:"set",ast:b})}return{atoms:c}}function im(e,t,n,s){let o=yE(e,t);if(o){let{entityType:R,term:k,relIdx:A}=o,P=t.slice(A+1),T=e.slice(A+1);if(!P.length)return{node:"miss",reason:`a relative clause needs a predicate after "${t[A]}"`};let M=vE(R,`which ${t[A-1]}`,P,T,n,s+1);if(M.miss)return{node:"miss",reason:M.miss};let B=[{op:"seed",kind:"set",ast:{node:"find",entityType:R,term:k}},...M.atoms];return B.length===1?B[0].ast:{node:"boolean",entityType:R,atoms:B}}let r=0;for(;r<t.length&&Gc.has(t[r]);)r+=1;let i=r>0,a=[];for(;r<t.length&&Ye[t[r]];)a.push(t[r]),r+=1;let l=r<t.length?Tt(t[r]):null;if(!l){let R=r+1<t.length?Tt(t[r+1]):null;if(Mf.has(t[r])&&R&&R.entityType==="Commit"&&r+2===t.length)return{node:"recentCommits"};if(Qf.has(t[r])){let k=r+1;k<t.length&&(t[k]==="the"||t[k]==="a"||t[k]==="an")&&(k+=1);let A=k+1<t.length?Tt(t[k+1]):null;if(Mf.has(t[k])&&A&&A.entityType==="Commit"&&k+2===t.length)return{node:"recentCommits"}}return(i||a.length)&&R&&/^[a-z]+$/.test(t[r])&&!de[t[r]]&&!st.has(t[r])&&!el.has(t[r])?{node:"find",entityType:R.entityType,term:e[r]}:null}let c=l.entityType,u=t[r];r+=1;let d=t.slice(r),f=e.slice(r),p=!1;d.length&&Fn.includes(d[0])&&(p=!0,d=d.slice(1),f=f.slice(1));let m=d[0]==="of"||d[0]==="in",h=d.length>0&&Zf(d[0]),g=f.length>0&&Fi(d,f).branches.some(R=>{let{blc:k}=Pc(R,R.map(A=>A.toLowerCase()));return k.length&&k.every(A=>Ye[A])}),b=f.length>0?Fi(d,f).branches:[],y=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),k=Rt(R,de);k&&k.start===0&&(y=b.slice(1).every(A=>{let P=A.map(M=>M.toLowerCase()),T=Rt(P,de);return T&&T.start===0?T.kind===k.kind:!T}))}let w=!1;if(b.length>1){let R=b[0].map(A=>A.toLowerCase()),k=Rt(R,de);k&&k.start===0&&(w=b.slice(1).every(A=>{let P=A.map(M=>M.toLowerCase()),T=Rt(P,de);return!!T&&T.start===0&&T.end-T.start===1}))}if(!(a.length||p||m||h||g||y||w))return null;if(!f.length){let R={node:"allOfClass",entityType:c};return a.length?{node:"qualifier",filters:a,inner:R,entityType:c}:{node:"miss",reason:"nothing to filter or traverse"}}let $=l.placeholder?"what":`which ${u}`,{branches:_,ops:v}=Fi(d,f),x=null,E=[];for(let R=0;R<_.length;R+=1){let k=_[R],A=k.map(J=>J.toLowerCase()),P=R===0?"seed":v[R-1],T=Pc(k,A);if(T.blc.length&&T.blc.every(J=>Ye[J])){E.push({op:P,kind:"qual",filters:T.blc});continue}if(A[0]==="of"||A[0]==="in"){E.push({op:P,kind:"set",ast:{node:"membership",entityType:c,term:k.slice(1).join(" ")}});continue}let M=k,B=Rt(A,de);B?x=k.slice(B.start,B.end):x&&(M=[...x,...k]);let Z=am(`${$} ${M.join(" ")}`,n,s+1);if(!Z||Z.node==="miss")return{node:"miss",reason:Z&&Z.reason||"a clause in the combination didn't parse"};E.push({op:P,kind:"set",ast:Z})}if(E[0].kind!=="set")return{node:"miss",reason:"start with a clause, then combine with and/or/but-not"};let S;return E.length===1?S=E[0].ast:S={node:"boolean",entityType:c,atoms:E},a.length&&(S={node:"qualifier",filters:a,inner:S,entityType:c}),S}function am(e,t,n){if(n>Jf)return{node:"miss",reason:"too deep to resolve"};let s=Bt(e),o=s.map(a=>a.toLowerCase()),r=Hc(s,o,t,n);if(r)return r;let i=Lo(e,t);return i?{node:"clause",clause:i}:null}function Fi(e,t){let n=Object.keys(go).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(go[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 qc(e,t,n,s){let o=Oo[t];if(o&&gs.has(n)){let u=qe(e,o).filter(d=>s.has(d.object));return Kn(u.map(d=>e.byId.get(d.subject)).filter(d=>d&&d.class===n))}let a=(!!o&&[...s].some(u=>gs.has(e.byId.get(u)?.class))?[...Ot(t),o]:Ot(t)).flatMap(u=>qe(e,u)).filter(u=>s.has(u.object)),l=Kn(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")?Jc(e,new Set(l.filter(u=>u.class==="Module").map(u=>u.id)),n):[]}function xE(e,t){let n=new Set(qc(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=$E.exec(String(o||""));r&&n.add(r[1].toLowerCase())}return n.size}function _r(e,t,n){let s=Ot(t).flatMap(o=>qe(e,o)).filter(o=>n.has(o.subject));return Kn(s.map(o=>e.byId.get(o.object)).filter(Boolean))}function Kn(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 EE(e,t){let n=Un(t);if(!n)return[];let s=`${n}/`;return e.individuals.filter(o=>o.class==="Module"&&Un(o.label).startsWith(s))}function Mc(e){let t=Ff.get(e);if(t)return t;let n=new Set;for(let i of qe(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 qe(e,"tests"))s.add(i.object),o.add(i.subject);let r=new Map;for(let i of qe(e,"defines"))r.set(i.object,i.subject);return t={exported:n,testedModules:s,testModules:o,moduleOfSymbol:r},Ff.set(e,t),t}function Io(e,t){return t?t.class==="Module"?t.id:Mc(e).moduleOfSymbol.get(t.id)||null:null}function cm(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=(e?.individuals||[]).filter(d=>SE.has(d.class)&&String(d.label).toLowerCase()===n);if(s.length!==1)return null;let o=s[0],r=Io(e,o),i=r&&e.byId.get(r)?.label||String((o.attributes||[]).find(d=>d.key==="site")?.value||"").split(":")[0]||null,a=Me(o.class,1),l=a==="attribute"?"an":"a",c=i?`, ${Sr("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 Fc(e,t,n){let s=Kn(bo.flatMap(o=>_r(e,o,new Set([t]))));return n?s.filter(o=>o.class===n):s}function Kc(e,t,n=null){let s=qn(e,t,n);if(!(s.match&&s.tier===1)){let o=EE(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 lm(e,t,n,s,o){let r=o||(()=>!0),i=Fc(e,t,s).filter(r);if(i.length||!dm(e,n))return{own:i,inherited:[],viaId:null,viaLabel:null};for(let a of um(e,t)){let l=e.byId.get(a);if(!l)continue;let c=Fc(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 Ks(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=Mc(e).exported;return s.has(String(t.label).toLowerCase())||s.has(String(t.id).toLowerCase())}case"tested":{let s=Io(e,t),o=Mc(e),r=s?e.byId?.get?.(s):null;return s&&(o.testModules.has(s)||r&&Ws(String(r.label).toLowerCase()))?!1:(!!s&&o.testedModules.has(s))===n.value}default:return!1}}function Yc(e){return qe(e,"inherits")}function Dc(e,t){return Yc(e).filter(n=>n.object===t).map(n=>n.subject)}function Df(e,t){return Yc(e).filter(n=>n.subject===t).map(n=>n.object)}function kE(e,t){let n=new Set,s=[...Dc(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Dc(e,o))n.has(r)||s.push(r)}}return n}function um(e,t){let n=new Set,s=[...Df(e,t)];for(;s.length;){let o=s.shift();if(!n.has(o)){n.add(o);for(let r of Df(e,o))n.has(r)||s.push(r)}}return n}function dm(e,t){let n=zf.get(e);if(n||(n=new Map,zf.set(e,n)),n.has(t))return n.get(t);let s=Yc(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 Bf(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 Wf(e){return e.slice().sort((t,n)=>Uf[n.via]-Uf[t.via]||String(t.ind.label).length-String(n.ind.label).length).map(t=>t.ind)}function Gf(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<4)return!1;let s=fs(n);if(Hn(String(e.label||"").toLowerCase(),n,s)<=s)return!0;for(let o of Ys(e.label))if(Hn(o,n,s)<=s)return!0;return!1}function pm(e,t,n){let s=e.individuals.filter(l=>l.class===t),o=[...Ys(n)];if(!o.length||!s.length)return{narrow:[],broad:[]};let r=dm(e,t),i=[];for(let l of s){let c=Bf(l,o);if(c){i.push({ind:l,via:c});continue}if(!r)continue;[...kE(e,l.id)].some(d=>{let f=e.byId.get(d);return!!f&&!!Bf(f,o)})&&i.push({ind:l,via:"chain"})}if(i.length||!r)return{narrow:Wf(i),broad:[]};let a=new Map;for(let l of s)for(let c of um(e,l.id)){if(!a.has(c)){let u=e.byId.get(c);u&&u.class===t&&Gf(u,n)&&a.set(c,{ind:u,via:"chain"})}for(let u of Dc(e,c)){if(u===l.id||a.has(u))continue;let d=e.byId.get(u);d&&d.class===t&&Gf(d,n)&&a.set(u,{ind:d,via:"chain"})}}return{narrow:[],broad:Wf([...a.values()])}}function jE(e){return[...xi(Ei(e)).entries()].sort((t,n)=>n[1]-t[1]||t[0].localeCompare(n[0])).map(([t])=>({id:`pkg:${t}`,label:t,class:"Package"}))}function an(e,t,n){switch(t.node){case"clause":return Ut(e,t.clause,n).matches||[];case"allOfClass":return t.entityType==="Package"?jE(e):e.individuals.filter(s=>s.class===t.entityType);case"find":{let{narrow:s,broad:o}=pm(e,t.entityType,t.term);return s.length?s:o}case"existsEdge":{let s=new Set(Ot(t.kind).flatMap(o=>qe(e,o)).map(o=>o.subject));return e.individuals.filter(o=>s.has(o.id)&&(!t.entityType||o.class===t.entityType))}case"forwardComplement":{let s=qn(e,t.subjectTerm,n&&n.contextId);if(!s.match)return[];let o=nm(e,t.kind);if(!o)return[];let r=new Set(_r(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(an(e,t.inner,n).map(o=>o.id));return qc(e,t.kind,t.entityType,s)}case"forwardSet":{let s=new Set(an(e,t.inner,n).map(o=>o.id));return _r(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=Kc(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 Kn(bo.flatMap(l=>_r(e,l,i))).filter(l=>l.class===t.entityType)}if(s.kind==="miss")return[];let{own:o,inherited:r}=lm(e,s.id,s.entityClass,t.entityType);return o.length?o:r}case"qualifier":return t.inner.node==="membership"?gm(e,t,n).matches:an(e,t.inner,n).filter(o=>t.filters.every(r=>Ks(e,o,Ye[r])));case"boolean":return fm(e,t,n);case"anaphora":return mm(e,t,n).matches;default:return[]}}function fm(e,t,n){let s=[];for(let o of t.atoms){if(o.op==="seed"){s=an(e,o.ast,n);continue}if(o.kind==="qual"){let i=l=>o.filters.every(c=>Ks(e,l,Ye[c])),a=l=>o.filters.every(c=>{let u=_E(Ye[c]);return u?Ks(e,l,u):!Ks(e,l,Ye[c])});s=o.op==="difference"?s.filter(a):s.filter(i);continue}let r=new Set(an(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 an(e,o.ast,n))i.has(a.id)||(i.add(a.id),s.push(a))}}return s}function RE(e,t){if(!Array.isArray(t)||t.length<2)return null;let n=new Set,s=[];for(let o of t){let r=wn(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 mm(e,t,n){let o=RE(e,t.candidateTerms);if(!o){let d=n&&n.prev;if(!Array.isArray(d)||!d.length)return{compositeMiss:!0,reason:"no-prev",matches:[]};o=d.map(f=>e.byId.get(f)).filter(Boolean)}let r=o,i=t.filter;if(i&&i.type==="qual")r=r.filter(d=>i.filters.every(f=>Ks(e,d,Ye[f])));else if(i&&i.type==="entity")r=r.filter(d=>d.class===i.entityType);else if(i&&i.type==="clause"){let d=wn(e,i.clause.object);if(!d.match)r=[];else{let f=Oo[i.clause.kind],p=[...Ot(i.clause.kind),...f?[f]:[]],m=new Set(p.flatMap(h=>qe(e,h)).filter(h=>h.object===d.match.id).map(h=>h.subject));r=r.filter(h=>m.has(h.id))}}let a=d=>d.length&&d.every(f=>f.class===d[0].class)?d[0].class:null,l=i&&i.type==="entity"?i.entityType:a(o),c=r.length?a(r):l;if(t.mode==="count")return{compositeKind:"count",count:r.length,entityType:c,matches:[]};let u=Ar(c,r,"anaphora",{bound:!0});return{compositeKind:"set",matches:r,entityType:c,referents:u}}function hm(e,t,n){let s=n.kind==="*"?TE:[n.kind,...n.sibling?[n.sibling]:[]],o=0;for(let r of s)for(let i of qe(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 AE(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 OE(e,t){let{op:n,pivotRaw:s}=t,o=u=>String((u.attributes||[]).find(d=>d.key==="date")?.value||"").slice(0,10),r=null,i=null,a=null;if(CE.test(s))r=s;else{let{match:u,ambiguous:d}=wn(e,s,{expectedClass:"Commit"});u&&!d&&u.class==="Commit"&&o(u)&&(i=u.id,a=u.label,r=o(u))}if(!r)return{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotResolved:!1,matches:[]};let l=e.individuals.filter(u=>u.class==="Commit"&&u.id!==i&&o(u)).filter(u=>{let d=o(u);return n==="since"?d>=r:n==="before"?d<r:n==="after"?d>r:d===r}).sort((u,d)=>o(d).localeCompare(o(u))),c=[];return l.length&&c.push({kind:"set",class:"Commit",label:`${l.length} commit${l.length===1?"":"s"} ${n} ${s}`,ids:l.map(u=>u.id),attrs:{count:l.length,op:n,...i?{pivot:i}:{}},lane:"commitFilter"}),i&&c.push({kind:"event",class:"Commit",label:a,ids:[i],attrs:{date:r},lane:"commitFilter"}),{compositeKind:"commitFilter",op:n,pivotRaw:s,pivotDate:r,pivotResolved:!0,matches:l,referents:c}}function IE(e,t,n){let s=an(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=qc(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 LE(e,t){let n=e.individuals.filter(a=>a.class===t.entityType);if(t.metric?.kind==="tests"&&t.entityType==="Module"){let a=new Set(qe(e,"tests").map(l=>l.subject));n=n.filter(l=>!a.has(l.id)&&!Ws(String(l.label).toLowerCase()))}let s=n.map(a=>({ind:a,score:hm(e,a,t.metric)})).sort((a,l)=>t.extreme==="most"?l.score-a.score:a.score-l.score);if(!s.length)return{compositeKind:"superlative",entityType:t.entityType,matches:[]};let o=s[0].score,r=s.filter(a=>a.score===o).map(a=>a.ind),i=r.length>=2?Ar(t.entityType,r,"superlative"):[{kind:"entity",class:t.entityType,label:r[0].label,ids:[r[0].id],attrs:{},lane:"superlative"}];return i.push({kind:"measure",label:`${o} ${t.metricNoun}`,ids:[],attrs:{metric:o},lane:"superlative"}),{compositeKind:"superlative",entityType:t.entityType,metricNoun:t.metricNoun,extreme:t.extreme,score:o,matches:r,referents:i}}function gm(e,t,n){let s=t.node==="qualifier"&&t.inner.node==="membership"?t:null,o=s?s.inner:t,r=o.entityType,i=s?m=>s.filters.every(h=>Ks(e,m,Ye[h])):null,a=m=>Ar(r,m,"membership"),l=Kc(e,o.term,n&&n.contextId);if(l.kind==="dir"){let m;if(!r||r==="Module")m=l.mods;else{let h=new Set(l.mods.map(g=>g.id));m=Kn(bo.flatMap(g=>_r(e,g,h))).filter(g=>g.class===r)}return i&&(m=m.filter(i)),{compositeKind:"set",matches:m,entityType:r,referents:a(m)}}if(l.kind==="miss")return{compositeKind:"set",matches:[],entityType:r};let{own:c,inherited:u,viaLabel:d}=lm(e,l.id,l.entityClass,r,i),f=!c.length&&u.length>0,p=f?u:c;return{compositeKind:"membership",entityType:r,matches:p,inheritedNotOwn:f,viaLabel:d,ownerLabel:l.label,referents:a(p)}}function NE(e,t){let{entityType:n,term:s,scopeModule:o}=t,r=null;if(o){let a=wn(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=wn(e,s,{expectedClass:n}),l=!r||a.match&&Io(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?Jc(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 PE(e,t,n){let s=Io(e,t);return n.kind==="dir"?n.mods.some(o=>o.id===t.id||o.id===s):s===n.id||Fc(e,n.id).some(o=>o.id===t.id)}function ME(e,t,n){let{term:s,qualifier:o,negated:r,scope:i}=t,a=qn(e,s,n.contextId);if(a.unresolvedPronoun)return{compositeKind:"qualCheck",qualCheckMiss:"pronoun",term:s,matches:[]};if(!a.match)return{compositeKind:"qualCheck",qualCheckMiss:"unresolved",term:s,matches:[]};if(i){let d=Kc(e,i,n.contextId);if(d.kind==="miss")return{compositeKind:"qualCheck",qualCheckMiss:"scope",term:s,scope:i,matches:[]};if(!PE(e,a.match,d))return{compositeKind:"qualCheck",qualCheckMiss:"outsideScope",term:s,scope:i,subjectLabel:a.match.label,scopeLabel:d.kind==="dir"?i:d.label,matches:[]}}let l=Ks(e,a.match,Ye[o]),c=r?!l:l,u=[{kind:"entity",class:a.match.class,label:a.match.label,ids:[a.match.id],attrs:{},lane:"qualCheck"}];return{compositeKind:"qualCheck",subject:a.match,qualifier:o,negated:r,holds:c,matches:[a.match],referents:u}}function FE(e,t,n){let s=wn(e,t.object);if(!s||!s.match)return{compositeKind:"universal",universalMiss:"unresolved",object:t.object,matches:[]};let o=an(e,{node:"allOfClass",entityType:t.entityType},n),r=fm(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 DE(e,t,n){if(t.node==="reverseSet"&&t.kind==="touches"&&t.entityType==="Commit")return new Set(an(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}=Ut(e,t.clause,n);return s&&!o?new Set([s.id]):null}return null}function zE(e,t,n={}){if(t.node==="miss")return{compositeMiss:!0,reason:t.reason||null,matches:[]};if(t.node==="exists")return NE(e,t);if(t.node==="qualCheck")return ME(e,t,n);if(t.node==="universal")return FE(e,t,n);if(t.node==="count"){let i=DE(e,t.base,n);return i?{compositeKind:"count",count:xE(e,i),entityType:t.entityType,matches:[]}:{compositeKind:"count",count:an(e,t.base,n).length,entityType:t.entityType,matches:[]}}if(t.node==="list")return{compositeKind:"list",matches:an(e,t.base,n),entityType:t.entityType,scoped:t.scoped};if(t.node==="worldRelation")return xS(e,t);if(t.node==="superlative")return LE(e,t);if(t.node==="temporal")return IE(e,t,n);if(t.node==="recentCommits")return AE(e);if(t.node==="commitFilter")return OE(e,t);if(t.node==="anaphora")return mm(e,t,n);if(t.node==="membership"||t.node==="qualifier"&&t.inner.node==="membership")return gm(e,t,n);if(t.node==="find"){let{narrow:i,broad:a}=pm(e,t.entityType,t.term);return{compositeKind:"find",entityType:t.entityType,term:t.term,matches:i.length?i:a,broad:!i.length&&a.length>0}}if((t.node==="reverseSet"||t.node==="forwardSet")&&t.inner.node==="prevSet"&&!(Array.isArray(n.prev)&&n.prev.length))return{compositeMiss:!0,reason:"no-prev",matches:[]};let s=an(e,t,n),o=t.entityType||null,r=Ar(o,s,t.node==="qualifier"?"qualifierListing":"compositeSet");return{compositeKind:"set",matches:s,entityType:o,referents:r}}function bm(){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 BE(e){let t=["Function","Method"].includes(e.class)?`${e.label}()`:e.label;if(e.class==="Module")return t;let n=Tr(e);return n?`${t} in ${n}`:t}function zc(e){return!e||typeof e!="object"?!1:Array.isArray(e)?e.some(zc):Array.isArray(e.filters)&&e.filters.some(t=>Ye[String(t).toLowerCase()]?.via==="tested")?!0:Object.values(e).some(zc)}function UE(e,t){return!["Function","Method"].includes(t)||!zc(e)?null:"This index records tests edges module to module, so it holds no function-grain coverage to filter on \u2014 ask whether the module a function lives in is tested instead."}function WE(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})`:""}. ${bm()}.`,miss:!0,ambiguous:!1};if(t.compositeKind==="exists"){if(t.scopeMiss)return{content:`no module matching "${t.scopeModule}" found in the index.`,miss:!0,ambiguous:!1};let s=Me(t.entityType,1),o=Me(t.entityType,2),r=t.scopeMatch?` in ${t.scopeMatch.label}`:"";if(t.term){if(!t.matches.length)return{content:`No \u2014 no ${s} named "${t.term}" found${r}.`,miss:!0,ambiguous:!1};let i=t.matches[0],a=Tr(i),l=i.class==="Module"?"":a?`, ${Sr("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 ${ms(t.matches)}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`No \u2014 no ${o} found${r}.`,miss:!0,ambiguous:!1}}if(t.compositeKind==="qualCheck"){if(t.qualCheckMiss==="pronoun")return{content:`"${t.term}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="unresolved")return{content:`couldn't find "${t.term}" in the index to check.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="scope")return{content:`couldn't find "${t.scope}" in the index to check inside.`,miss:!0,ambiguous:!1};if(t.qualCheckMiss==="outsideScope")return{content:`No \u2014 ${t.subjectLabel} isn't in ${t.scopeLabel}.`,miss:!0,ambiguous:!1};let s=t.subject.label,o=t.negated?`not ${t.qualifier}`:t.qualifier,r=t.negated?t.qualifier:`not ${t.qualifier}`;return{content:`${t.holds?"Yes":"No"} \u2014 ${s} is ${t.holds?o:r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="universal"){if(t.universalMiss==="unresolved")return{content:`couldn't find "${t.object}" in the index to check.`,miss:!0,ambiguous:!1,matches:[]};let s=Me(t.entityType,t.total),o=Nx(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}: ${ms(t.counter)}.`,miss:!1,ambiguous:!1,matches:t.counter}}if(t.compositeKind==="count"){let s=t.entityType?Me(t.entityType,t.count):t.count===1?"result":"results";return{content:`${t.count} ${s}.`,miss:!1,ambiguous:!1,matches:[]}}if(t.compositeKind==="list"){if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} in this index.`,miss:!0,ambiguous:!1,matches:[]};let s=!["Module","Package","Commit","Fact","Utterance","Session","Source","Rule"].includes(t.entityType),o=!t.scoped&&s&&t.matches.length>Ve?` \u2014 narrow with "${Me(t.entityType,2)} in <module>"`:"";return{content:`${ms(t.matches)}${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="worldRelation"){let s=gn(t.asked),o=Ns[t.relation].nouns[1];return t.pairs.length?{content:`${t.pairs.map(i=>`${i.subject.label||i.subject.id} ${i.reads} ${i.object}`).join("; ")}.`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`no ${o} on record for ${s} in this graph.`,miss:!0,ambiguous:!1,matches:[]}}if(t.compositeKind==="membership"){if(!t.matches.length)return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${hs(n)}`,miss:!0,ambiguous:!1,matches:[]};if(t.inheritedNotOwn){let s=Me(t.entityType,2);return{content:`${t.ownerLabel?`${t.ownerLabel} has no own ${s}`:`no own ${s}`} \u2014 inherited from ${t.viaLabel}: ${ms(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches,inheritedNotOwn:!0}}return{content:`${ms(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="find"){let s=Me(t.entityType,1);if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} found matching "${t.term}".`,miss:!0,ambiguous:!1,matches:[]};let o=t.matches.length===1?BE(t.matches[0]):ms(t.matches);return t.broad?{content:`no exact ${s} named "${t.term}", but found a related ${t.matches.length===1?s:Me(t.entityType,2)}: ${o}.`,miss:!1,ambiguous:!1,matches:t.matches,relatedNotExact:!0}:{content:`${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="recentCommits"){if(!t.matches.length)return{content:"no commits recorded in this index.",miss:!0,ambiguous:!1,matches:[]};let s=i=>String((i.attributes||[]).find(a=>a.key==="date")?.value||""),o=t.matches.slice(0,zt).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>zt?` \u2026+${t.matches.length-zt} 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,zt).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>zt?` \u2026+${t.matches.length-zt} more`:"";return{content:`${t.matches.length} commit(s) changed ${t.op} ${t.pivotRaw}: ${o.join(", ")}${r}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="superlative"){if(!t.matches.length)return{content:`no ${Me(t.entityType,2)} to rank in this index.`,miss:!0,ambiguous:!1};let s=t.extreme==="most"?"the most":"the fewest",o=t.matches.length>1?` (${t.matches.length}-way tie)`:"";return{content:`${ms(t.matches)} \u2014 ${s} ${t.metricNoun} (${t.score})${o}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.compositeKind==="temporal"){let s=t.innerCount||0,o=t.entityType?Me(t.entityType,s||2):s===1?"entity":"entities",r=s===1?"was":"were";if(!s)return{content:`nothing in the index matches the inner set, so there is no change history to date. ${hs(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. ${hs(n)}`,miss:!0,ambiguous:!1,matches:[]};let i=t.matches[0],a=(i.attributes||[]).find(d=>d.key==="date")?.value||"";if(!a)return{content:`the ${o} in that set ${r} last touched by commit ${i.label}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1,matches:t.matches};let l=(i.attributes||[]).find(d=>d.key==="message")?.value||"",c=String(a).slice(0,10),u=t.matches.length-1;return{content:`the ${o} in that set ${r} last touched by commit ${i.label} on ${c}${l?` ("${l}")`:""}${u?`; ${u} earlier commit${u===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.matches.length){let s=UE(e,t.entityType)||hs(n);return{content:`nothing in the index matches that${t.entityType?` (${Me(t.entityType,2)})`:""}. ${s}`,miss:!0,ambiguous:!1,matches:[]}}return{content:`${ms(t.matches)}.`,miss:!1,ambiguous:!1,matches:t.matches}}function Xc(){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). `+bm()}function hs(e=null){return e&&mc(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 Ys(e){return new Set(String(e).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean))}function zi(e){if(e.length<5)return e;let t=e.replace(/(ing|ers|ors|er|or)$/,"");return t===e?e:t.length>=3&&t[t.length-1]===t[t.length-2]?t.slice(0,-1):t}function wm(e){return String(e||"").replace(/\.[a-z0-9]+$/i,"").toLowerCase().replace(/[/\-_.]+/g,"")}function GE(e){return String(e||"").trim().replace(/^(?:the|a|an)\s+/i,"").toLowerCase().replace(/[\s\-_]+/g,"")}function kr(e,t,{expectedClass:n=null}={}){let s=String(t||"").trim();if(!s)return{match:null,candidates:[],tier:null,ambiguous:!1};let o=s.toLowerCase(),r=n?e.individuals.filter(g=>g.class===n):e.individuals,i=o.match(/^(commit[:\s])?([0-9a-f]{7,40})$/);if(i){let g=i[2],b=r.filter(y=>y.class==="Commit"&&(String(y.id).toLowerCase().startsWith(`commit:${g}`)||String(y.label).toLowerCase().startsWith(g)));if(b.length===1)return{match:b[0],candidates:[],tier:1,ambiguous:!1};if(b.length>1)return{match:b[0],candidates:b.slice(1,5),tier:1,ambiguous:!0};if(i[1])return{match:null,candidates:[],tier:null,ambiguous:!1}}let a=r.find(g=>String(g.label).toLowerCase()===o||String(g.id).toLowerCase()===o);if(a)return{match:a,candidates:[],tier:1,ambiguous:!1};let l=`ext:${o}`,c=null;e:for(let g of e.relations)for(let b of g.edges)if(String(b.object).toLowerCase()===l){c=b.object;break e}if(c&&!n)return{match:{id:c,label:s,class:null},candidates:[],tier:2,ambiguous:!1};let u=s.split(/\s+and\s+/i).map(g=>g.trim()).filter(Boolean);if(u.length>1){let g=new Set;for(let b of u){let y=kr(e,b,{expectedClass:n});y.match&&!y.ambiguous&&g.add(y.match.id)}if(g.size>1)return{match:null,candidates:[],tier:null,ambiguous:!1}}let d=[],f=!o.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(o);if(f){let g=o.split(".").pop();for(let b of r){let y=String(b.label||"").toLowerCase();b.class==="Module"?y.split("/").pop()===o&&d.push({ind:b,score:1e3-Math.abs(y.length-o.length)}):y.includes(o)?d.push({ind:b,score:2e3-Math.abs(y.length-o.length)}):y.endsWith(`.${g}`)&&d.push({ind:b,score:1500-Math.abs(y.length-o.length)})}}else{let g=[...Ys(s)],b=o.split(/\s+/).find(v=>v.includes("/")),y=b?b.split("/").pop().replace(/\.[a-z0-9]+$/,""):null,$=s.trim().replace(/^(?:the|a|an)\s+/i,"").trim().split(/\s+/).filter(Boolean).length>=2,_=$?GE(s):null;for(let v of r){let x=String(v.label||"").toLowerCase(),E=x.split("/").pop().replace(/\.[a-z0-9]+$/,"");if(E===o){d.push({ind:v,score:5e3});continue}if(o.length>=4&&(E.startsWith(o)||E.endsWith(o))){d.push({ind:v,score:4e3-Math.abs(E.length-o.length)});continue}if($){let k=wm(v.label);if(k&&k===_){d.push({ind:v,score:5e3});continue}let A=/[/_-]/.test(v.label)||/\.[a-z0-9]+$/i.test(String(v.label||""));if(k&&A&&_.length>=4&&k.includes(_)){d.push({ind:v,score:2e3-Math.abs(k.length-_.length)});continue}}if(v.class==="Module"){let k=zi(o);if(k!==o&&k===zi(E)){let A=fs(o);if(Hn(E,o,A)>A){d.push({ind:v,score:3e3-Math.abs(E.length-o.length)});continue}}}if(o.length>=4&&x.includes(o)){d.push({ind:v,score:1e3-Math.abs(x.length-o.length)});continue}let S=Ys(v.label),R=g.filter(k=>S.has(k)).length;R>0&&(!y||S.has(y))&&d.push({ind:v,score:R/g.length*Ac})}}if(d.sort((g,b)=>b.score-g.score),d.length){let[g,...b]=d,y=b.filter($=>$.score===g.score),w=g.score>=Ac?b.filter($=>$.score>=Ac):b;return{match:g.ind,candidates:w.slice(0,4).map($=>$.ind),tier:3,ambiguous:y.length>0}}let p=f||o.includes("/"),m=null,h=!p&&typeof Bs=="function"?Bs(e.proseIndex,s).filter(g=>!n||e.byId.get(g.id)?.class===n):[];if(h.length){let[g,...b]=h,y=e.byId.get(g.id);if(y){let w=b.filter($=>$.score===g.score);if(m={match:y,candidates:b.slice(0,4).map($=>e.byId.get($.id)).filter(Boolean),tier:4,ambiguous:w.length>0,matchedVia:"prose"},!m.ambiguous&&g.via!=="spell")return m}}if(!i&&o.length>=4){let g=fs(o),b=g+1,y=[];for(let w of r){let $=Hn(String(w.label||"").toLowerCase(),o,g);if($>0)for(let _ of Ys(w.label)){if($<=0)break;$=Math.min($,Hn(_,o,g))}$<b?(b=$,y=[w]):$===b&&$<=g&&y.push(w)}if(b<=g&&y.length===1)return{match:y[0],candidates:[],tier:5,ambiguous:!1,matchedVia:"fuzzy"};if(b<=g&&y.length>1&&!m){let[w,...$]=y;return{match:w,candidates:$.slice(0,4),tier:5,ambiguous:!0,matchedVia:"fuzzy"}}}return m||{match:null,candidates:[],tier:null,ambiguous:!1}}function Cc(e,t){let n=wm(t),s=[...Ys(t)],o=[];for(let r of Ys(e))n.includes(r)||s.some(i=>zi(i)===zi(r))||Di.has(r)||$m.has(r)||o.push(r);return o}function Pi(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(Cc(t,r.label))).reduce((r,i)=>r.filter(a=>i.has(a)),Cc(t,s[0].label));return o.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:o,nearestLabel:gn(s.slice(0,4).map(r=>r.label))}:e}let n=Cc(t,e.match.label);return n.length?{match:null,candidates:[],tier:null,ambiguous:!1,unplacedWords:n,nearestLabel:e.match.label}:e}function wn(e,t,n={}){let{expectedClass:s=null}=n;if(!s){let o=String(t||"").trim(),r=o.replace(HE,"").trim(),i=r.match(VE);if(i){let a=r.slice(0,i.index).trim(),l=Ue[i[1].toLowerCase()];if(a&&l){let c=Pi(kr(e,a,{expectedClass:l}),a);if(c?.match?.id&&!c.ambiguous)return c}}if(r&&r!==o){let a=Pi(kr(e,r,n),r);if(a?.match?.id&&!a.ambiguous)return a}return Pi(kr(e,t,n),t)}return Pi(kr(e,t,n),t)}function qn(e,t,n){if(Ms.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 wn(e,t)}function Jc(e,t,n){let s=[];for(let o of qe(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 qE(e,t,n,s={}){let o=!n||n==="Change"||n==="Commit",r=o||n==="Module",i=o||gs.has(n),a=[...r?["touches"]:[],...i?["touchesSymbol"]:[]],l=a.flatMap(c=>qe(e,c)).filter(c=>c.subject===t.id).map(c=>e.byId.get(c.object)).filter(Boolean);return n&&gs.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 JE(e,t){let n=new Set(String(t||"").toLowerCase().split(/[\s-]+/).filter(Boolean));return(e.individuals||[]).filter(s=>s.class==="Module"&&Qc.has(Hf(s.label))).map(s=>({ind:s,named:n.has(Hf(s.label))?1:0,depth:String(s.label).split("/").length,fixture:XE(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 QE(e,t,n){return e==="reverse"&&(t==="imports"||t==="calls")&&(!n||n==="Module")}function Zc(e){return(e?.attributes||[]).find(t=>t.prop===ZE)?.value||null}function eS(e){return e==="SchemaClass"?"a class in the graph's schema":e==="SchemaPredicate"?"a predicate (relation) in the graph's schema":`${Ao(e)} ${e} in this graph's vocabulary`}function Ut(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 zE(e,t,{contextId:n,prev:s});if(t.ambiguousParse){let T=t.candidates.map(M=>{let B=Ut(e,M,{contextId:n,prev:s});return{parsed:M,result:B,rendered:bn(M,B,e)}});return{matches:[],objMatch:null,candidates:t.candidates,traversal:null,ambiguous:!0,branches:T}}let{shape:r,kind:i,entityType:a}=t;if(r==="meta"){let T=String(t.object||"").trim(),M=T.toLowerCase(),B=(e.individuals||[]).find(Z=>{if(!Zc(Z))return!1;if(String(Z.label).toLowerCase()===M)return!0;let J=(Z.attributes||[]).find(ne=>ne.key==="token")?.value;return J&&String(J).toLowerCase()===M});if(!B){let Z=cm(e,T);return Z?{matches:[Z.hit],objMatch:Z.hit,candidates:[],ambiguous:!1,metaCodeClass:!0,metaFallbackText:Z.text,traversal:`schema lookup for "${T}" (miss), then unique code-entity individual by label`}:{matches:[],objMatch:null,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}return{matches:[B],objMatch:B,candidates:[],traversal:`schema lookup for "${T}"`,ambiguous:!1}}if(r==="mentions"){let T=String(t.object||"").trim();return{matches:(typeof Bs=="function"?Bs(e.proseIndex,T):[]).map(Z=>e.byId.get(Z.id)).filter(Boolean),objMatch:null,candidates:[],ambiguous:!1,mentionsShape:!0,traversal:`proseIndex word lookup for "${T}"`}}if(r==="where"&&KE.test(String(t.object||"").trim())){let T=JE(e,t.object);return{matches:T,objMatch:T[0]||null,candidates:T.slice(1,5),ambiguous:!1,entryPointShape:!0,traversal:`Module individuals with an entry-point basename (${[...Qc].join("/")}), ranked query-named basename first, then shallower path, then non-test path`}}if(t.modifier&&t.modifier!=="direct"&&!QE(r,i,a))return{matches:[],objMatch:null,candidates:[],ambiguous:!1,unsupportedModifier:!0,traversal:`modifier "${t.modifier}" requested for a "${i}" query \u2014 no closure traversal exists for this combination yet`};if(r==="ask"){let T=qn(e,t.subject,n),M=qn(e,t.object,n);if(!T.match||!M.match||T.ambiguous||M.ambiguous)return{matches:[],objMatch:M.match,candidates:M.candidates,traversal:null,ambiguous:!1,answer:null,unresolvedPronoun:!!(T.unresolvedPronoun||M.unresolvedPronoun)};let[B,Z]=[T.match,M.match];i==="touches"&&Z.class==="Commit"&&B.class!=="Commit"&&([B,Z]=[Z,B]);let J=Oo[i],ne=[...new Set(J?[...Ot(i),J]:Ot(i))],D=ne.flatMap(z=>qe(e,z)).filter(z=>z.subject===B.id&&z.object===Z.id);return{matches:D,answer:t.negated?D.length===0:D.length>0,objMatch:M.match,subjMatch:T.match,candidates:[],traversal:`${ne.join("+")} edge from ${B.label} to ${Z.label}`,ambiguous:!1}}let l;if(o)l={match:o,candidates:[],ambiguous:!1,matchedVia:null};else{if(l=qn(e,t.object,n),t.altObject&&t.altObject!==t.object){let T=qn(e,t.altObject,n),M=!!l.match&&!l.ambiguous,B=!!T.match&&!T.ambiguous;!M&&B?l=T:M&&B&&l.match.id!==T.match.id&&(l={...l,ambiguous:!0,candidates:[T.match,...l.candidates||[]]})}if(t.kind==="tests"&&l.match&&!l.ambiguous&&!String(t.object||"").includes("/")){let T=Z=>Z.replace(/\.(?:test|spec|tests)(?=\.[^.]+$)/,""),M=T(String(t.object||"").trim().toLowerCase()),B=(e.individuals||[]).find(Z=>{if(Z.class!=="Module"||Z.id===l.match.id)return!1;let J=String(Z.label||"").toLowerCase().split("/").pop();return J!==T(J)&&T(J)===M});B&&(l={...l,ambiguous:!0,candidates:[B,...l.candidates||[]]})}}let{match:c,candidates:u,ambiguous:d,unresolvedPronoun:f,matchedVia:p,unplacedWords:m,nearestLabel:h}=l;if(!c)return{matches:[],objMatch:null,candidates:u,traversal:null,ambiguous:!1,unresolvedPronoun:f,unplacedWords:m,nearestLabel:h};if(d){let M=Kn([c,...u||[]]).slice(0,Ve).map(B=>{let Z=Ut(e,t,{contextId:n,prev:s,pinnedObjMatch:B});return{candidate:B,result:Z,rendered:bn(t,Z,e)}});return{matches:[],objMatch:c,candidates:u,traversal:null,ambiguous:!0,branches:M}}if(r==="where"){let T=(c.attributes||[]).find(M=>M.key==="site")?.value||null;return{matches:[c],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whereShape:!0,site:T,traversal:T?`site attribute of ${c.label}`:`class + defining module of ${c.label}`}}if(r==="when"){let T=Z=>String((Z.attributes||[]).find(J=>J.key==="date")?.value||""),M;if(c.class==="Commit")M=[c];else{let Z=["touches","touchesSymbol"].flatMap(ne=>qe(e,ne)).filter(ne=>ne.object===c.id),J=new Set;M=[];for(let ne of Z){if(J.has(ne.subject))continue;J.add(ne.subject);let D=e.byId.get(ne.subject);D&&D.class==="Commit"&&M.push(D)}M.sort((ne,D)=>T(D).localeCompare(T(ne)))}let B=M.length&&T(M[0])?[{kind:"event",class:"Commit",label:M[0].label,ids:[M[0].id],attrs:{date:T(M[0]).slice(0,10)},lane:"when"}]:[];return{matches:M,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whenShape:!0,referents:B,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit date first`}}if(r==="whoLast"){let T=ne=>String((ne.attributes||[]).find(D=>D.key==="date")?.value||""),M=["touches","touchesSymbol"].flatMap(ne=>qe(e,ne)).filter(ne=>ne.object===c.id),B=new Set,Z=[];for(let ne of M){if(B.has(ne.subject))continue;B.add(ne.subject);let D=e.byId.get(ne.subject);D&&D.class==="Commit"&&Z.push(D)}Z.sort((ne,D)=>T(D).localeCompare(T(ne)));let J=Z.length&&T(Z[0])?[{kind:"event",class:"Commit",label:Z[0].label,ids:[Z[0].id],attrs:{date:T(Z[0]).slice(0,10)},lane:"whoLast"}]:[];return{matches:Z,objMatch:c,candidates:u,ambiguous:d,matchedVia:p,whoLastShape:!0,referents:J,traversal:`touches+touchesSymbol edges where object = ${c.label}, newest commit's author`}}if(i==="touches"&&c.class==="Commit")return qE(e,c,a,{candidates:u,ambiguous:d,matchedVia:p});if(r==="forward"){let T=Oo[i],B=!!(T&&c.class&&gs.has(c.class))?[...new Set([...Ot(i),T])]:Ot(i);if(a&&a!=="Change"){let W=tm(e,B),C=Tc[a];if(W.size&&!W.has(a)&&!(C&&W.has(C)))return{matches:[],objMatch:c,candidates:u,ambiguous:d,matchedVia:p,forwardGrainMiss:!0,wantClasses:[...W],traversal:`${B.join("+")} edges where subject = ${c.label} (grain mismatch: this "${i}" relation never targets a ${Vn(a)})`}}let J=B.flatMap(W=>qe(e,W)).filter(W=>W.subject===c.id).map(W=>e.byId.get(W.object)).filter(Boolean),ne=Kn(J),D=ne,z="";if(a&&a!=="Change"){D=ne.filter(C=>C.class===a);let W=Tc[a];if(!D.length&&W){let C=ne.filter(I=>I.class===W);C.length&&(D=C,z=`, widened to ${W} subjects (no ${a} recorded)`)}}return{matches:D,objMatch:c,candidates:u,traversal:`${B.join("+")} edges where subject = ${c.label}${z}`,ambiguous:d,matchedVia:p}}if(t.modifier==="transitive")return{matches:ko(e,c,{maxDepth:Vf}).flat().map(B=>e.byId.get(B.id)).filter(Boolean),objMatch:c,candidates:u,ambiguous:d,matchedVia:p,traversal:`reverse dependency closure over imports+calls edges from ${c.label} (impactClosure, maxDepth=${Vf})`};let g=Oo[i]||Ot(i).find(T=>Xf.has(T))||null,b=!!(c.class&&gs.has(c.class));if(g&&(gs.has(a)||b)){let T=qe(e,g).filter(z=>z.object===c.id),M=Kn(T.map(z=>e.byId.get(z.subject)).filter(Boolean)),B=!a||a==="Change"?M:M.filter(z=>z.class===a),Z="",J=Tc[a];if(!B.length&&J){let z=M.filter(W=>W.class===J);z.length&&(B=z,Z=`, widened to ${J} subjects (no ${a} recorded)`)}let ne=(i==="touches"||i==="calls"||i==="uses")&&c.class==="Class"&&!qe(e,"contains").some(z=>z.subject===c.id),D=ne?e.byId.get(Io(e,c)||""):null;if(B.length||!(ne&&D))return{matches:B,objMatch:c,candidates:u,traversal:`${g} edges where object = ${c.label}${Z}`,ambiguous:d,matchedVia:p}}let y=c,w=u,$=d,_=p,v="",x=nm(e,i);if(x&&y.class&&y.class!==x){let T=wn(e,t.object,{expectedClass:x});if(T.match&&!T.ambiguous)y=T.match,w=T.candidates,$=T.ambiguous,_=T.matchedVia;else if(x==="Module"){let M=Io(e,y),B=M&&e.byId.get(M);if(B)v=`, refined from ${y.label} to its containing module`,y=B;else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${Vn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Vn(x)}, and no containing module could be found to refine to)`}}else return{matches:[],objMatch:y,candidates:w,ambiguous:$,matchedVia:_,wrongGrainMiss:!0,wantClass:x,traversal:`"${t.object}" resolved to ${Vn(y.class)} ${y.label} (grain mismatch: this "${i}" question needs a ${Vn(x)})`}}let E=Ot(i).flatMap(T=>qe(e,T)).filter(T=>T.object===y.id);i==="cochange"&&(E=E.concat(Ot(i).flatMap(T=>qe(e,T)).filter(T=>T.subject===y.id).map(T=>({...T,subject:T.object,object:T.subject}))));let S="";if(!E.length&&y.class){let T=`ext:${String(y.label).toLowerCase()}`;E=Ot(i).flatMap(M=>qe(e,M)).filter(M=>String(M.object).toLowerCase()===T),E.length&&(S=` (by name, via unresolved ${T} references)`)}let R=[],k=new Set;for(let T of E){let M=e.byId.get(T.subject);M&&!k.has(M.id)&&(k.add(M.id),R.push(M))}let A,P="";if(!a||a==="Change")A=R;else{let T=R.filter(M=>M.class===a);if(T.length)A=T;else if(a!=="Module"&&R.some(M=>M.class==="Module")){let M=new Set(R.filter(B=>B.class==="Module").map(B=>B.id));A=Jc(e,M,a),P=`, then ${Vn(a)} defined in the matched module(s)`}else A=[]}return{matches:A,objMatch:y,candidates:w,traversal:`${Ot(i).join("+")} edges where object = ${y.label}${S}${P}${v}`,ambiguous:$,matchedVia:_}}function Tr(e){if(e.class==="Module")return e.label;let t=(e.attributes||[]).find(s=>s.key==="site")?.value;if(t)return String(t).split(":")[0];let n=String(e.id||"").match(/^fn:(.+)#/);return n?n[1]:null}function Oc(e){let t=String(e.label||e.id||"");return["Function","Method"].includes(e.class)?`function ${t}()`:t}function tS(e){let t=String(e.label||e.id||""),n=(e.attributes||[]).find(s=>s.key==="author")?.value;return n?`${t} (${n})`:t}function gn(e){return e.length>1?`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`:e[0]}function jr(e){let t=e.object??e.subject??"?";return`${e.entityType?Me(e.entityType,2)+" that ":""}${e.kind} "${t}"`}function Bc(e){return ur[e]?.bare||e}function nS(e){let t=Bc(e);return t.endsWith("e")?`${t}d`:`${t}ed`}function sS(e){if(!Array.isArray(e.atoms)||e.atoms.length!==2)return null;let[t,n]=e.atoms;if(t.op!=="seed"||t.ast?.node!=="allOfClass"||n.op!=="difference")return null;let s=Me(e.entityType,2);if(n.kind==="qual")return`${s} that are not ${n.filters.join(" and not ")}`;if(n.kind!=="set"||!n.ast)return null;if(n.ast.node==="existsEdge")return`${s} that do not ${Bc(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 ${Bc(o.kind)} ${JSON.stringify(String(r))}`}function ym(e){if(!e)return null;if(e.ambiguousParse)return{english:`ambiguous: ${e.candidates.map(jr).join(" \u2014 or \u2014 ")}`,machine:`ambiguousParse(${e.candidates.map(r=>ym(r)?.machine).join(", ")})`};if(e.node)return{english:(e.node==="boolean"?sS(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 ":""}${qs(e.kind)} "${e.object}"?`;else if(e.shape==="meta")o=`what does "${e.object}" mean, in this graph's own vocabulary?`;else if(e.shape==="mentions")o=`where is "${e.object}" mentioned?`;else if(e.shape==="where")o=`where is "${e.object}" defined?`;else{let r=e.entityType?Me(e.entityType,2)+" that ":"";o=e.shape==="forward"?`what "${e.object}" itself ${qs(e.kind)}`:`${r}${qs(e.kind)} "${e.object}"`}return{english:o,machine:s}}function bn(e,t,n=null){let s=vm(e,t,n);return t&&t.matchedVia==="fuzzy"&&t.objMatch&&!s.ambiguous&&(s.content=`assuming you meant ${t.objMatch.label}: ${s.content}`),s}function vm(e,t,n){if(!e)return{content:`couldn't parse this as a graph question. Try: ${Xc()}`,miss:!0,ambiguous:!1};if(e.node)return WE(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 ${jr(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(or),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${or(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(or),candidateParses:e.candidates};if(t.unresolvedPronoun)return{content:`"${e.object??e.subject}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.unsupportedModifier)return{content:`the "${e.modifier}" modifier isn't supported for "${e.kind}" queries yet \u2014 only imports/calls (module-level) have a transitive closure today.`,miss:!0,ambiguous:!1};if(t.wrongGrainMiss){let i=t.objMatch.class?Pe(t.objMatch.class,1):"term",a=Pe(t.wantClass,1);return{content:`"${e.object}" resolved to the ${i} ${t.objMatch.label}, but this question needs a ${a} \u2014 no ${a} named "${e.object}" was found in the index.`,miss:!0,ambiguous:!1}}if(t.forwardGrainMiss){let i=t.wantClasses.map(a=>Pe(a,2));return{content:`${t.objMatch.label}'s "${Ts(e.kind)}" relation in this index never produces ${Pe(e.entityType,2)} \u2014 only ${dn(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=bc(t.objMatch)||"";return{content:`${t.objMatch.label} is ${px(t.objMatch.class)}: ${i}`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.mentionsShape){if(!t.matches.length)return{content:`"${e.object}" is not mentioned in any indexed identifier or doc-comment prose.`,miss:!0,ambiguous:!1};let i=t.matches.slice(0,qe).map(l=>`${l.label} (${Pe(l.class,1)})`),a=t.matches.length>qe?`, \u2026and ${t.matches.length-qe} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${dn(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 ${dn([...gc])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,qe).map(d=>d.label),c=a.length>qe?`, \u2026and ${a.length-qe} more`:"",u=a.length?` \u2014 also matched: ${dn(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&&Gp[e.entityType]?Pe(e.entityType,1):"module",l=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let c=dn(t.unplacedWords.map(f=>`"${f}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${l} matching "${e.object}" found in the index. ${c} ${u} nothing here, and reading past ${t.unplacedWords.length===1?"it":"them"} would answer a different question.${d}`,miss:!0,ambiguous:!1,candidates:[]}}return{content:`no ${l} matching "${e.object}" found in the index. ${ts(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(g=>g.class==="Commit")){let g=y=>!["Commit","Session","Source","Utterance"].includes(y?.class),b=i.filter(g);b.length&&(i=b,a?.length&&(a=a.filter(y=>g(y.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let g=String(e.object||"").toLowerCase(),b=new Set(bn(String(e.object||"")).filter(v=>v.length>=3)),y=new Set(i.map(v=>v.id)),w=null,$=0,j=1/0;if(b.size)for(let v of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(v.class)||y.has(v.id))continue;let E=bn(String(v.label)).filter(_=>b.has(_)).length;if(!E||E<$)continue;let k=Ln(String(v.label).toLowerCase(),g,8);(E>$||k<j)&&(w=v,$=E,j=k)}if(w&&(i=[...i,w],a)){let v=Dt(n,e,{pinnedObjMatch:w});a=[...a,{candidate:w,result:v,rendered:pn(e,v,n)}]}}let l=i.length&&i.every(g=>g.class==="Commit")?"commit":"module",c=i.slice(0,qe).map(g=>g.label),u=i.length>qe?`, \u2026and ${i.length-qe} more`:"",d=`"${e.object}" matches more than one ${l} ambiguously \u2014 did you mean ${dn(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${Xe(f)}\\b`,"gi"):null,m=g=>p?g.rendered.content.replace(p,g.candidate.label):g.rendered.content;return{content:a&&a.length?`${d}
58
- ${a.map((g,b)=>`${b+1}) ${g.candidate.label}: ${m(g)}`).join(`
59
- `)}`:d,miss:!1,ambiguous:!0,candidates:i.map(g=>g.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=String(t.site||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(a){let c=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${Ja(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=ar(i);return l?{content:`${Ja(i)} is defined in ${l} (no line span recorded in this index).`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${ts(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(f=>f.key==="date")?.value||"";if(!l)return{content:`commit ${a.label} touched ${i}, but this index records no commit dates \u2014 regenerate the graph to attach mgx:commitDate.`,miss:!0,ambiguous:!1};let c=(a.attributes||[]).find(f=>f.key==="message")?.value||"",u=String(l).slice(0,10);if(a.id===t.objMatch.id)return{content:`commit ${a.label} ${nr("is-dated",a.id,"is dated")} ${u}${c?` ("${c}")`:""}.`,miss:!1,ambiguous:!1,matches:t.matches};let d=t.matches.length-1;return{content:`${i} was last touched by commit ${a.label} on ${u}${c?` ("${c}")`:""}${d?`; ${d} earlier commit${d===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.whoLastShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${ts(n)}`,miss:!0,ambiguous:!1};let a=t.matches[0],l=(a.attributes||[]).find(u=>u.key==="author")?.value;if(!l)return{content:`commit ${a.label} last touched ${i}, but this index records no commit author \u2014 regenerate the graph to attach mgx:commitAuthor.`,miss:!0,ambiguous:!1};let c=t.matches.length-1;return{content:`${i} was last touched by ${l} (commit ${a.label})${c?`; ${c} earlier commit${c===1?"":"s"} recorded`:""}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.commitSubject){let i=`commit ${t.objMatch.label}`;if(!t.matches.length)return{content:`${i} touched nothing recorded in the index.`,miss:!0,ambiguous:!1};let a=new Map;for(let u of t.matches.slice(0,qe)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let l=[...a.entries()].map(([u,d])=>`${Pe(u,d.length)} ${dn(d)}`),c=t.matches.length>qe?`; \u2026and ${t.matches.length-qe} 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(to.includes(e.kind)&&n&&t.objMatch)for(let l of to){if(l===e.kind)continue;let c={...e,kind:l},u=Dt(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return hf(c,u,n)}return{content:`${t.objMatch.label} has no ${Ts(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}if(e.kind==="tests"&&!e.entityType)return{content:`No tests cover ${String(e.object||"").replace(Jv,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Pe(e.entityType||"Module",2),a=t.objMatch&&ys.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${Ts(e.kind)} ${a}. ${ts(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${mx(e.kind)} by ${t.matches[0].label}.`,miss:!1,ambiguous:!1,matches:t.matches};if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!ns.has(i.class))){let i=t.matches.slice(0,qe).map(l=>l.class==="Commit"?fx(l):l.label),a=t.matches.length>qe?`, \u2026and ${t.matches.length-qe} 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,qe)){let a=ar(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(Ja(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=dn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>qe?` \u2026and ${t.matches.length-qe} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function bf(e){if(e.length<4||wx.has(e))return null;let t=Qn(e),n=t+1,s=null,o=!1;for(let r of bx){let i=Ln(e,r,Math.min(n,t));i<n?(n=i,s=r,o=!1):i===n&&i<=t&&r!==s&&(o=!0)}return n<=t&&!o?s:null}function zp(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!bc(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=bf(n);return!!s&&s!==n&&!!Ue[s]}function wf(e,t,n){if(!t)return!1;if(t.ambiguousParse)return"ambiguous";if(t.node)return t.node!=="miss";if(t.shape==="meta"||t.shape==="mentions")return!0;let s=Nn(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||zp(s,t.object))return!1;if(t.shape==="ask"){let o=Nn(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!zp(o,t.subject))}return!0}function yx(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return zu.includes(t)}function vx(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=Jo(As(String(t||""))),i=nn(r);if(!i.length)return null;let a=[],l=[],c=x=>{let T=fn(e,x);return!!T.match&&T.tier!=null&&T.tier<=2},u=x=>{let T=fn(e,x);return!!T.match&&T.tier!=null&&T.tier<=3},d=x=>{let T=String(x||"").trim().toLowerCase();return ys.includes(T)?!0:nn(T).some(M=>{let A=M.toLowerCase();return!di.has(A)&&!ic.has(A)})},f=new Set(["reverse","forward","where","when","ask"]),p=x=>{let T=x.join(" "),M=ir(T,{nlp:n});return wf(e,M,s)!==!0||M&&!M.node&&f.has(M.shape)&&(M.object!=null&&!d(M.object)||M.shape==="ask"&&M.subject!=null&&!d(M.subject))||pn(M,Dt(e,M,{contextId:s,prev:o}),e).miss?null:{parsed:M,text:T}},m=x=>({parsed:x.parsed,from:r,to:x.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let x=-1;for(let A=0;A<i.length;A+=1){let P=i[A].toLowerCase();if(wc.has(P)&&!di.has(P)&&!c(i[A])){x=A;break}}if(x<0)break;let T=i[x];i=i.filter((A,P)=>P!==x),a.push(T),l.push(`strip noise "${T}" \u2192 "${i.join(" ")}"`);let M=p(i);if(M)return m(M)}let b=ir(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let x of[b.object,b.subject])for(let T of nn(String(x||"").toLowerCase()))y.add(T);let w=[],$=[],j=[];for(let x of i){let T=x.toLowerCase();if(!/^[a-z]+$/.test(T)||di.has(T)||ic.has(T)||u(x)){w.push(x);continue}let A=bf(T);if(A&&A!==T){w.push(A),j.push(`${x}\u2192${A}`);continue}if(y.has(T)){w.push(x);continue}$.push(x)}if((j.length||$.length)&&w.length){i=w,a.push(...$),j.length&&l.push(`fuzzy-correct ${JSON.stringify(j)} \u2192 "${i.join(" ")}"`),$.length&&l.push(`drop unmatched ${JSON.stringify($)} \u2192 "${i.join(" ")}"`);let x=p(i);if(x)return m(x)}let v=!1,E=i.map(x=>{let T=x.toLowerCase();return no[T]&&!u(x)?(v=!0,no[T]):x});if(v){l.push(`normalise synonyms \u2192 "${E.join(" ")}"`);let x=p(E);if(x)return m(x)}let k=nn(r).map(x=>x.toLowerCase()),_=[],R=[];for(let x of k){if(gf.has(x))continue;let T=Ue[x];T&&T!=="Change"?_.push(x):R.push(x)}if(_.length===1&&R.length===0){let x=p(["count",_[0]]);if(x)return l.push(`bare kind "${_[0]}" \u2192 count`),m(x)}return null}function xx(e,t){let n=String(t||"");if(!e||!Bp.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(Bp,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return $x.test(a)?`${a} touched`:i}function kx(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 yf(e,t){let n=kx(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function jx(e,t){let n=String(t||"").trim(),s=n.match(Ex),o=s?null:n.match(Sx),r=s||o;if(!r||!yc.test(r[2]||"")||Ue[r[1].toLowerCase()])return null;let i=yf(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 _x(e,t){let n=String(t||"").split(/\s*,\s*|\s+and\s+/i).map(r=>r.trim()).filter(Boolean);if(!n.length)return null;let s=[],o=[];for(let r of n){let i=r.replace(/^(?:all\s+)?(?:the\s+)?/i,"").trim();if(!/^[a-z][a-z'-]*$/i.test(i))return null;let a=yf(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function Tx(e,t){let n=String(t||"").trim(),s=n.match(Rx),o=s?Tu[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(Ax)?.[1];if(!r)return null;let i=_x(e,r);return i?{node:"worldRelation",relation:o,predicate:Zs[o].predicate,classes:i.classes,askedClasses:i.asked}:null}function Cx(e,t){let n=new Set(t.classes),s=new Map;for(let r of e?.relations||[])if(!(Up(r.prop)!==t.predicate&&Up(r.predicate)!==t.predicate))for(let i of r.edges||[]){let a=e.byId?.get(i.subject);a&&n.has(a.class)&&s.set(i.subject,{subject:a,object:i.object})}let o=[...s.values()].sort((r,i)=>String(r.subject.id).localeCompare(String(i.subject.id)));return{compositeKind:"worldRelation",relation:t.relation,askedClasses:t.askedClasses,pairs:o,matches:o.map(r=>r.subject)}}function Qa(e){let t=Ox.exec(String(e??""));return t?{base:t[1],stamp:Number(t[2])}:{base:String(e??""),stamp:0}}function Ix(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(Qa(a.subject).base,String(a.object));let s=new Set(Cu),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:l,stamp:c}=Qa(a.subject),u=n.get(l)||t(l);if(!u)continue;let d=`${a.predicate}\0${l}`,f=r.get(d);f&&f.stamp>c||(o.set(l,{id:l,label:l,class:u}),r.set(d,{stamp:c,predicate:a.predicate,subject:l,object:Qa(a.object).base}))}let i=new Map;for(let a of r.values())i.has(a.predicate)||i.set(a.predicate,{prop:a.predicate,predicate:a.predicate,examples:[]}),i.get(a.predicate).examples.push({subject:a.subject,object:a.object});return{individuals:[...o.values()],objectProperties:[...i.values()]}}function ss(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(yx(t))return{content:mc(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=xx(e,t);let r=ac(t,{nlp:s}),i=r.parsed,a=i,l=null;if(wf(e,i,n)===!1){let f=vx(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=Dt(e,a,{contextId:n,prev:o}),u=pn(a,c,e);if(u.miss&&!u.ambiguous){let f=jx(e,t);if(f){let p=Dt(e,f,{contextId:n,prev:o}),m=pn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(u.miss&&!u.ambiguous){let f=Tx(e,t);if(f){let p=Dt(e,f,{contextId:n,prev:o}),m=pn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=Qr(String(t||"")).trim().match(Lx)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=ir(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=Dt(e,m,{contextId:n,prev:o}),u=pn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=As(String(t||"")).match(Nx)?.[1]?.trim();if(p){let m=ir(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=Dt(e,m,{contextId:n,prev:o}),g=pn(m,h,e);!g.miss&&!g.ambiguous&&(c=h,u=g)}}}let d=l&&!u.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${u.content}`:u.content;if(!l&&!u.miss&&!u.ambiguous&&r.alternates.length){let f=r.alternates.map(p=>{let m=Dt(e,p.parsed,{contextId:n,prev:o}),h=pn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=Ep(f.map(m=>m.a),{answerFor:m=>f.find(h=>h.a===m)?.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(jr),candidateParses:e.candidates}:{content:`this could mean more than one thing: ${e.candidates.map((a,l)=>`${l+1}) ${jr(a)}`).join(" or ")} \u2014 try rephrasing more specifically.`,miss:!1,ambiguous:!0,candidates:e.candidates.map(jr),candidateParses:e.candidates};if(t.unresolvedPronoun)return{content:`"${e.object??e.subject}" needs a selected node to refer to \u2014 click a node first, or name it directly.`,miss:!0,ambiguous:!1};if(t.unsupportedModifier)return{content:`the "${e.modifier}" modifier isn't supported for "${e.kind}" queries yet \u2014 only imports/calls (module-level) have a transitive closure today.`,miss:!0,ambiguous:!1};if(t.wrongGrainMiss){let i=t.objMatch.class?Me(t.objMatch.class,1):"term",a=Me(t.wantClass,1);return{content:`"${e.object}" resolved to the ${i} ${t.objMatch.label}, but this question needs a ${a} \u2014 no ${a} named "${e.object}" was found in the index.`,miss:!0,ambiguous:!1}}if(t.forwardGrainMiss){let i=t.wantClasses.map(a=>Me(a,2));return{content:`${t.objMatch.label}'s "${qs(e.kind)}" relation in this index never produces ${Me(e.entityType,2)} \u2014 only ${gn(i)}.`,miss:!0,ambiguous:!1}}if(e.shape==="meta"){if(!t.objMatch)return{content:`"${e.object}" isn't a term in this graph's own vocabulary (no matching class or predicate).`,miss:!0,ambiguous:!1};if(t.metaCodeClass)return{content:t.metaFallbackText,miss:!1,ambiguous:!1,matches:t.matches};let i=Zc(t.objMatch)||"";return{content:`${t.objMatch.label} is ${eS(t.objMatch.class)}: ${i}`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.mentionsShape){if(!t.matches.length)return{content:`"${e.object}" is not mentioned in any indexed identifier or doc-comment prose.`,miss:!0,ambiguous:!1};let i=t.matches.slice(0,Ve).map(l=>`${l.label} (${Me(l.class,1)})`),a=t.matches.length>Ve?`, \u2026and ${t.matches.length-Ve} more`:"";return{content:`"${e.object}" is mentioned in the prose tokens of ${gn(i)}${a}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(t.entryPointShape){if(!t.matches.length)return{content:`no entry-point module found in the index \u2014 no module basename matches ${gn([...Qc])}.`,miss:!0,ambiguous:!1,candidates:[]};let[i,...a]=t.matches,l=a.slice(0,Ve).map(d=>d.label),c=a.length>Ve?`, \u2026and ${a.length-Ve} more`:"",u=a.length?` \u2014 also matched: ${gn(l)}${c}`:"";return{content:`ranked ${t.matches.length} entry-point match${t.matches.length===1?"":"es"}; top: ${i.label}${u}.`,miss:!1,ambiguous:!1,matches:t.matches}}if(!t.objMatch&&(!t.candidates||t.candidates.length===0)&&e.shape!=="ask"){let i=String(e.object||"").trim(),a=e.entityType&&Lc[e.entityType]?Me(e.entityType,1):"module",l=/^(?:commit[:\s])?[0-9a-f]{7,40}$/i.test(i)?"commit":!i.includes("/")&&/^[\w$]+(\.[\w$]+)+$/.test(i)?"symbol":a;if(t.unplacedWords?.length){let c=gn(t.unplacedWords.map(f=>`"${f}"`)),u=t.unplacedWords.length===1?"names":"name",d=t.nearestLabel?` Did you mean ${t.nearestLabel}?`:"";return{content:`no ${l} matching "${e.object}" found in the index. ${c} ${u} nothing here, and reading past ${t.unplacedWords.length===1?"it":"them"} would answer a different question.${d}`,miss:!0,ambiguous:!1,candidates:[]}}return{content:`no ${l} matching "${e.object}" found in the index. ${hs(n)}`,miss:!0,ambiguous:!1,candidates:[]}}if(t.ambiguous){let i=[t.objMatch,...t.candidates||[]].filter(Boolean),a=t.branches;if(e.kind&&e.kind!=="touches"&&!i.every(b=>b.class==="Commit")){let b=w=>!["Commit","Session","Source","Utterance"].includes(w?.class),y=i.filter(b);y.length&&(i=y,a?.length&&(a=a.filter(w=>b(w.candidate))))}if(n&&!/[/.]/.test(String(e.object||""))){let b=String(e.object||"").toLowerCase(),y=new Set(Sn(String(e.object||"")).filter(x=>x.length>=3)),w=new Set(i.map(x=>x.id)),$=null,_=0,v=1/0;if(y.size)for(let x of n.individuals){if(!["Function","Method","Class","GlobalVariable","Attribute"].includes(x.class)||w.has(x.id))continue;let E=Sn(String(x.label)).filter(R=>y.has(R)).length;if(!E||E<_)continue;let S=Hn(String(x.label).toLowerCase(),b,8);(E>_||S<v)&&($=x,_=E,v=S)}if($&&(i=[...i,$],a)){let x=Ut(n,e,{pinnedObjMatch:$});a=[...a,{candidate:$,result:x,rendered:bn(e,x,n)}]}}let l=i.length&&i.every(b=>b.class===i[0].class)?i[0].class:null,c=l?Lc[l]?Me(l,1):Vn(l):"module",u=i.slice(0,Ve).map(b=>b.label),d=i.length>Ve?`, \u2026and ${i.length-Ve} more`:"",f=`"${e.object}" matches more than one ${c} ambiguously \u2014 did you mean ${gn(u)}${d}? Try one of those. If you're not sure, narrow it to one name.`,p=String(e.object||""),m=p?new RegExp(`\\b${Xe(p)}\\b`,"gi"):null,h=b=>{let y=String(b.candidate.label||"");return!m||!y?b.rendered.content:b.rendered.content.split(y).map(w=>w.replace(m,y)).join(y)};return{content:a&&a.length?`${f}
58
+ ${a.map((b,y)=>`${y+1}) ${b.candidate.label}: ${h(b)}`).join(`
59
+ `)}`:f,miss:!1,ambiguous:!0,candidates:i.map(b=>b.label)}}if(t.whereShape){let i=t.objMatch;if(i.class==="Module")return{content:`${i.label} is a module \u2014 the label is its repo path.`,miss:!1,ambiguous:!1,matches:t.matches};if(i.class==="Commit")return{content:`${i.label} is a commit, not a code location \u2014 try "what did commit ${i.label} touch".`,miss:!0,ambiguous:!1};let a=String(t.site||"").match(/^(.*):(\d+)(?:-(\d+))?$/);if(a){let c=a[3]&&a[3]!==a[2]?`lines ${a[2]}-${a[3]}`:`line ${a[2]}`;return{content:`${Oc(i)} is defined in ${a[1]} at ${c}.`,miss:!1,ambiguous:!1,matches:t.matches}}let l=Tr(i);return l?{content:`${Oc(i)} is defined in ${l} (no line span recorded in this index).`,miss:!1,ambiguous:!1,matches:t.matches}:{content:`${i.label} has no recorded code location in this index \u2014 it carries no source site, and nothing places it in a module.`,miss:!0,ambiguous:!1}}if(t.whenShape){let i=t.objMatch.label;if(!t.matches.length)return{content:`no recorded commit touches ${i} in this index. ${hs(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} ${Sr("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. ${hs(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,Ve)){let d=u.class||"Module";a.has(d)||a.set(d,[]),a.get(d).push(["Function","Method"].includes(d)?`${u.label}()`:u.label)}let l=[...a.entries()].map(([u,d])=>`${Me(u,d.length)} ${gn(d)}`),c=t.matches.length>Ve?`; \u2026and ${t.matches.length-Ve} 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(bo.includes(e.kind)&&n&&t.objMatch)for(let l of bo){if(l===e.kind)continue;let c={...e,kind:l},u=Ut(n,c,{pinnedObjMatch:t.objMatch});if(u?.matches?.length&&!u.ambiguous)return vm(c,u,n)}return{content:`${t.objMatch.label} has no ${qs(e.kind)} edges in the index.`,miss:!0,ambiguous:!1}}if(e.kind==="tests"&&!e.entityType)return{content:`No tests cover ${String(e.object||"").replace(Px,"").trim()||String(e.object||"").trim()}.`,miss:!0,ambiguous:!1};let i=Me(e.entityType||"Module",2),a=t.objMatch&&Ms.includes(String(e.object||"").toLowerCase())?t.objMatch.label:e.object;return{content:`No ${i} found whose module directly ${qs(e.kind)} ${a}. ${hs(n)}`,miss:!0,ambiguous:!1}}if(e.polar&&t.matches.length===1)return{content:`Yes \u2014 ${t.objMatch?.label||e.object} is ${nS(e.kind)} by ${t.matches[0].label}.`,miss:!1,ambiguous:!1,matches:t.matches};if(e.shape==="forward"||e.entityType==="Module"||t.matches.every(i=>!gs.has(i.class))){let i=t.matches.slice(0,Ve).map(l=>l.class==="Commit"?tS(l):l.label),a=t.matches.length>Ve?`, \u2026and ${t.matches.length-Ve} 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,Ve)){let a=Tr(i)||"no recorded module";s.has(a)||s.set(a,[]),s.get(a).push(Oc(i))}let o=[...s.entries()].map(([i,a],l)=>{let c=gn(a);return l===0?`in ${i} there is ${c}`:`there is ${c} in ${i}`}),r=t.matches.length>Ve?` \u2026and ${t.matches.length-Ve} more`:"";return{content:o.join(" and ")+r+".",miss:!1,ambiguous:!1,matches:t.matches}}function xm(e){if(e.length<4||iS.has(e))return null;let t=fs(e),n=t+1,s=null,o=!1;for(let r of rS){let i=Hn(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 qf(e,t){if(!e?.match||e.matchedVia!=="fuzzy"||e.ambiguous||!Zc(e.match))return!1;let n=String(t||"").trim().toLowerCase(),s=xm(n);return!!s&&s!==n&&!!Ue[s]}function Em(e,t,n){if(!t)return!1;if(t.ambiguousParse)return"ambiguous";if(t.node)return t.node!=="miss";if(t.shape==="meta"||t.shape==="mentions")return!0;let s=qn(e,t.object,n);if(s.unresolvedPronoun)return"pronoun";if(!s.match||qf(s,t.object))return!1;if(t.shape==="ask"){let o=qn(e,t.subject,n);return o.unresolvedPronoun?"pronoun":!!(o.match&&!qf(o,t.subject))}return!0}function aS(e){let t=String(e||"").trim().toLowerCase().replace(/[?.!\s]+$/,"");return zd.includes(t)}function cS(e,t,{nlp:n=void 0,contextId:s=null,prev:o=null}={}){let r=yr(Vs(String(t||""))),i=Bt(r);if(!i.length)return null;let a=[],l=[],c=k=>{let A=wn(e,k);return!!A.match&&A.tier!=null&&A.tier<=2},u=k=>{let A=wn(e,k);return!!A.match&&A.tier!=null&&A.tier<=3},d=k=>{let A=String(k||"").trim().toLowerCase();return Ms.includes(A)?!0:Bt(A).some(P=>{let T=P.toLowerCase();return!Di.has(T)&&!Uc.has(T)})},f=new Set(["reverse","forward","where","when","ask"]),p=k=>{let A=k.join(" "),P=Rr(A,{nlp:n});return Em(e,P,s)!==!0||P&&!P.node&&f.has(P.shape)&&(P.object!=null&&!d(P.object)||P.shape==="ask"&&P.subject!=null&&!d(P.subject))||bn(P,Ut(e,P,{contextId:s,prev:o}),e).miss?null:{parsed:P,text:A}},m=k=>({parsed:k.parsed,from:r,to:k.text,dropped:[...a],steps:l}),h=0,g=Math.max(i.length,1)+12;for(;h<g;h+=1){let k=-1;for(let T=0;T<i.length;T+=1){let M=i[T].toLowerCase();if(el.has(M)&&!Di.has(M)&&!c(i[T])){k=T;break}}if(k<0)break;let A=i[k];i=i.filter((T,M)=>M!==k),a.push(A),l.push(`strip noise "${A}" \u2192 "${i.join(" ")}"`);let P=p(i);if(P)return m(P)}let b=Rr(i.join(" "),{nlp:n}),y=new Set;if(b&&!b.node&&f.has(b.shape))for(let k of[b.object,b.subject])for(let A of Bt(String(k||"").toLowerCase()))y.add(A);let w=[],$=[],_=[];for(let k of i){let A=k.toLowerCase();if(!/^[a-z]+$/.test(A)||Di.has(A)||Uc.has(A)||u(k)){w.push(k);continue}let T=xm(A);if(T&&T!==A){w.push(T),_.push(`${k}\u2192${T}`);continue}if(y.has(A)){w.push(k);continue}$.push(k)}if((_.length||$.length)&&w.length){i=w,a.push(...$),_.length&&l.push(`fuzzy-correct ${JSON.stringify(_)} \u2192 "${i.join(" ")}"`),$.length&&l.push(`drop unmatched ${JSON.stringify($)} \u2192 "${i.join(" ")}"`);let k=p(i);if(k)return m(k)}let v=!1,x=i.map(k=>{let A=k.toLowerCase();return wo[A]&&!u(k)?(v=!0,wo[A]):k});if(v){l.push(`normalise synonyms \u2192 "${x.join(" ")}"`);let k=p(x);if(k)return m(k)}let E=Bt(r).map(k=>k.toLowerCase()),S=[],R=[];for(let k of E){if($m.has(k))continue;let A=Ue[k];A&&A!=="Change"?S.push(k):R.push(k)}if(S.length===1&&R.length===0){let k=p(["count",S[0]]);if(k)return l.push(`bare kind "${S[0]}" \u2192 count`),m(k)}return null}function uS(e,t){let n=String(t||"");if(!e||!Kf.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(Kf,`commit ${r.label}`),a=i.trim().replace(/[?.!]+$/,"");return lS.test(a)?`${a} touched`:i}function dS(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 tl(e,t){let n=dS(t);for(let s of e?.individuals||[])if(s?.class&&n.includes(String(s.class).toLowerCase()))return s.class;return null}function mS(e,t){let n=String(t||"").trim(),s=n.match(pS),o=s?null:n.match(fS),r=s||o;if(!r||!nl.test(r[2]||"")||Ue[r[1].toLowerCase()])return null;let i=tl(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 hS(e,t){let n=String(t||"").split(/\s*,\s*|\s+and\s+/i).map(r=>r.trim()).filter(Boolean);if(!n.length)return null;let s=[],o=[];for(let r of n){let i=r.replace(/^(?:all\s+)?(?:the\s+)?/i,"").trim();if(!/^[a-z][a-z'-]*$/i.test(i))return null;let a=tl(e,i);if(!a)return null;s.push(i.toLowerCase()),o.push(a)}return{asked:[...new Set(s)],classes:[...new Set(o)]}}function yS(e,t){let n=String(t||"").trim().toLowerCase();if(!n)return null;let s=new Set;for(let o of e?.individuals||[])o?.id&&(String(o.id).toLowerCase()===n||String(o.label||"").toLowerCase()===n)&&s.add(o.id);return s.size===1?[...s][0]:null}function vS(e,t){let n=ui(String(t||"").trim()),s=n.match(gS),o=s?Cd[s[1].toLowerCase()]:"placement";if(!o)return null;let r=s?s[2]:n.match(bS)?.[1]||n.match(wS)?.[1];if(!r)return null;let i={node:"worldRelation",relation:o,predicate:Ns[o].predicate},a=hS(e,r);if(a)return{...i,classes:a.classes,asked:a.asked};let l=yS(e,r);return l?{...i,subjects:[l],asked:[l]}:null}function $S(e,t){return Ns[e].matchesLocativePredicates?ho(Bi(t.prop))||ho(Bi(t.predicate)):null}function xS(e,t){let n=t.classes?new Set(t.classes):null,s=t.subjects?new Set(t.subjects):null,o=Ns[t.relation],r=new Map,i=new Map;for(let l of e?.relations||[]){let c=Bi(l.prop),u=Bi(l.predicate),d=c===o.predicate||u===o.predicate,f=d?null:$S(t.relation,l);if(!(!d&&!f))for(let p of l.edges||[]){let m=e.byId?.get(p.subject);if(!m||!(s?s.has(p.subject):n.has(m.class)))continue;let g={subject:m,object:p.object,reads:d?o.reads:`is ${f}`};d?r.set(p.subject,g):i.set(`${c||u}\0${p.subject}`,g)}}let a=[...r.values(),...[...i.values()].filter(l=>!r.has(l.subject.id))].sort((l,c)=>String(l.subject.id).localeCompare(String(c.subject.id))||String(l.object).localeCompare(String(c.object)));return{compositeKind:"worldRelation",relation:t.relation,asked:t.asked,pairs:a,matches:a.map(l=>l.subject)}}function Ic(e){let t=ES.exec(String(e??""));return t?{base:t[1],stamp:Number(t[2])}:{base:String(e??""),stamp:0}}function SS(e,{classOf:t=()=>null}={}){let n=new Map;for(let a of e||[])a?.predicate==="rdf:type"&&a.subject&&a.object&&n.set(Ic(a.subject).base,String(a.object));let s=new Set(Od),o=new Map,r=new Map;for(let a of e||[]){if(!a?.subject||!s.has(a.predicate))continue;let{base:l,stamp:c}=Ic(a.subject),u=n.get(l)||t(l);if(!u)continue;let d=`${a.predicate}\0${l}`,f=r.get(d);f&&f.stamp>c||(o.set(l,{id:l,label:l,class:u}),r.set(d,{stamp:c,predicate:a.predicate,subject:l,object:Ic(a.object).base}))}let i=new Map;for(let a of r.values())i.has(a.predicate)||i.set(a.predicate,{prop:a.predicate,predicate:a.predicate,examples:[]}),i.get(a.predicate).examples.push({subject:a.subject,object:a.object});return{individuals:[...o.values()],objectProperties:[...i.values()]}}function _S(e,t,n){let s=String(t?.object||"").trim();if(!s)return!1;let o=tl(e,s);if(!o)return!1;let r=[n.objMatch,...n.candidates||[]].filter(Boolean),i=new Set(r.map(l=>l.id));if(i.size<2)return!1;let a=new Map;for(let l of e?.individuals||[])l?.id&&(a.has(l.id)||a.set(l.id,new Set),a.get(l.id).add(l.class));return[...i].every(l=>l===o||a.get(l)?.has(o))}function bs(e,t,{contextId:n=null,nlp:s=void 0,prev:o=null}={}){if(aS(t))return{content:Xc(),tmct_ask:{mechanical:!0,parsed:null,canonical:null,matches:[],traversal:null,miss:!0,ambiguous:!1,matchedVia:null,help:!0,relaxed:null}};t=uS(e,t);let r=Wc(t,{nlp:s}),i=r.parsed,a=i,l=null;if(Em(e,i,n)===!1){let f=cS(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=Ut(e,a,{contextId:n,prev:o}),u=bn(a,c,e);if(Yf(e,a,c,u)){let f=mS(e,t);if(f){let p=Ut(e,f,{contextId:n,prev:o}),m=bn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(Yf(e,a,c,u)){let f=vS(e,t);if(f){let p=Ut(e,f,{contextId:n,prev:o}),m=bn(f,p,e);m.miss||(a=f,c=p,u=m,l=null)}}if(a===null&&u.miss&&!u.ambiguous){let p=ji(String(t||"")).trim().match(kS)?.[1]?.trim();if(p&&!/\s+(?:for|about)$/i.test(p)){let m=Rr(`what is a ${p}`,{nlp:s});m?.shape==="meta"&&(c=Ut(e,m,{contextId:n,prev:o}),u=bn(m,c,e))}}if(a===null&&u.miss&&!u.ambiguous){let p=Vs(String(t||"")).match(jS)?.[1]?.trim();if(p){let m=Rr(`what is a ${p}`,{nlp:s});if(m?.shape==="meta"){let h=Ut(e,m,{contextId:n,prev:o}),g=bn(m,h,e);!g.miss&&!g.ambiguous&&(c=h,u=g)}}}let d=l&&!u.miss&&l.to!==l.from?`read as "${l.to}" \u2014 ${u.content}`:u.content;if(!l&&!u.miss&&!u.ambiguous&&r.alternates.length){let f=r.alternates.map(p=>{let m=Ut(e,p.parsed,{contextId:n,prev:o}),h=bn(p.parsed,m,e);return h.miss?null:{a:p,text:h.content}}).filter(Boolean);if(f.length){let p=Cf(f.map(m=>m.a),{answerFor:m=>f.find(h=>h.a===m)?.text||null});d=`${d}
60
60
  ${p.join(`
61
61
  `)}`}}if(!u.ambiguous&&c.objMatch&&Array.isArray(c.candidates)&&c.candidates.length){let f=new Set((c.matches||[]).map(m=>m&&m.id)),p=c.candidates.filter(m=>m&&m.id&&m.id!==c.objMatch.id&&!f.has(m.id));if(p.length){let m=p.slice(0,3).map(b=>b.label).filter(Boolean),h=p.length-m.length,g=m.join(", ")+(h>0?`, +${h} more`:"");d=`${d}
62
- (answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${g})`}}return!Array.isArray(c.referents)&&!u.miss&&!u.ambiguous&&(a?.shape==="reverse"||a?.shape==="forward")&&a.entityType&&Array.isArray(c.matches)&&c.matches.length&&c.matches.every(f=>f&&f.class===a.entityType)&&(c={...c,referents:cr(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:mf(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?ar(f):void 0})),traversal:c.traversal||null,miss:!!u.miss,ambiguous:!!u.ambiguous,relaxed:l,matchedVia:c.matchedVia||null,...Array.isArray(c.referents)&&c.referents.length?{discourse:c.referents}:{},...u.ambiguous?{candidates:u.candidates,candidateParses:u.candidateParses}:{}}}}var Ap,ho,ns,Ka,Hv,At,Wp,qe,Gp,Kv,Yv,Xv,Jv,Qv,Vp,Za,e$,cc,qp,jt,Hp,n$,o$,i$,c$,u$,d$,p$,f$,h$,b$,Jp,uc,Qp,Zp,j$,A$,Tp,I$,Cp,M$,Ip,Np,D$,B$,W$,Zn,Ya,sx,ox,ix,gc,ax,Fp,cx,Dp,dx,di,ic,wc,gf,gx,bx,wx,Bp,$x,Ex,Sx,yc,Rx,Ax,Up,Ox,Lx,Nx,os=L(()=>{Ie();Ea();An();Jn();Qo();ei();ti();Rp();Va();Yn();ai();Ha();po();Ap=new WeakMap;ho={calls:"callsSymbol",touches:"touchesSymbol"},ns=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),Ka={Function:"Method",Method:"Function"},Hv={uses:["imports","calls","callsSymbol"]},At=e=>Hv[e]||[e],Wp=new Set(Object.values(ho)),qe=12,Gp={Function:["function","functions"],Method:["method","methods"],Class:["class","classes"],Module:["module","modules"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Change:["change","changes"],Package:["package","packages"],Fact:["fact","facts"],Utterance:["utterance","utterances"],Session:["session","sessions"],Source:["source","sources"],Rule:["rule","rules"]};Kv={cochange:"cochanges",reexports:"export"};Yv={imports:"import",calls:"call",callsSymbol:"call",inherits:"inherit from",contains:"contain",tests:"test",touches:"touch",cochange:"cochange",reexports:"export",uses:"use",serves:"serve",denotes:"denote"},Xv=e=>Yv[e]||Ts(e),Jv=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),Qv=new Set(["imports"]);Vp=4,Za="zzinnerset",e$=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),cc=new Set(["which","what","who","list","show","find","give","me","us","all"]),qp=new Set(["are","is","was","were"]);jt=e=>Ue[e]?{entityType:Ue[e],placeholder:!1}:Rn.includes(e)?{entityType:null,placeholder:!0}:null,Hp=e=>!!de[e]&&e.endsWith("ing");n$=new Set(["which","the","all"]);o$=new Set(["all","every","each"]);i$=new Set(["what","which","thing","things","one","ones","stuff"]);c$=new Set(["those","them"]);u$=new Set(["did","was","were","do","does","has","have","had"]),d$=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),p$=new Set(["last","recently","ever","get","got","been","then","now","already"]),f$=new Set(["the","a","an","all","those","these","any"]);h$=new Set(["since","before","after","on"]);b$=/\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/;Jp=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);uc=new Set(["the","a","an","all","me","us"]),Qp=[...xs].sort((e,t)=>t.split(" ").length-e.split(" ").length),Zp="functions, classes, methods, modules, packages, attributes, variables, or commits",j$=new Set(["in","inside","under"]);A$=new Set(["called","named","about","like","containing","matching","with"]);Tp=new Set(["recent","latest","newest"]);I$=/^git:(.+)$/i;Cp=new WeakMap;M$=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);Ip=new WeakMap;Np={label:3,chain:2,attr:1};D$=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;B$=["imports","calls","callsSymbol","inherits","contains","tests"];W$=/^\d{4}-\d{2}-\d{2}$/;Zn=e=>dn(e.slice(0,qe).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>qe?`, \u2026and ${e.length-qe} more`:"");Ya=10;sx=/^(?:the|a|an)\s+/i,ox=new RegExp(`\\s+(${Object.keys(Ue).join("|")})$`,"i");ix=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,gc=new Set(["index","main","app","server","cli","__main__"]),ax=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Fp=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),cx=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>ax.has(t));Dp=8,dx="mgx:schemaDoc";di=new Set([...he(Object.keys(de)),...he(Object.keys(Ue)),...he(Object.keys(Ht)),...he(Object.keys(Ye)),...he($s),...he(Object.keys(Kn)),...he(Object.keys(gn)),...he(Object.keys(eo)),...he(Rn),...he(Go),...he(vs),...he(Zt),...he(un),...he(_n),...he(Object.keys(no))]),ic=new Set([...lt,...cc,...ys]),wc=new Set(he(Dr)),gf=new Set([...wc,...ic]),gx=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],bx=[...new Set([...he(Object.keys(de)),...Object.keys(Ue),...gx])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!lt.has(e)),wx=new Set(["impact","impacts","impacted"]);Bp=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,$x=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;Ex=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,Sx=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,yc=/^(?: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;Rx=new RegExp(`^(?:${Qp.map(Xe).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),Ax=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i;Up=e=>String(e||"").toLowerCase();Ox=/^(.+)@(?:turn|step)(\d+)$/;Lx=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,Nx=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i});function rs(e,t,n,s){let o=Math.max(1,t),r=Math.min(e.length,n),i=!1;s!=null&&r-o+1>s&&(r=o+s-1,i=!0);let a=e.slice(o-1,r).map((l,c)=>`${o+c} ${l}`).join(`
63
- `);return{start:o,end:r,text:a,truncated:i}}async function Pn({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=qt(t),a=qt(i,n);if(a!==i&&!a.startsWith(i+_u))throw new Re(`refusing to read outside the repository root: ${n}`);let c=(await e(a,"utf8")).split(`
64
- `);return s==null||o==null?{lines:c}:{lines:c,...rs(c,s,o,r)}}var fi=L(()=>{ze();Mt()});function wt(e){return{ok:!0,value:e}}function yt(e,{detail:t="",term:n=null}={}){if(!nt[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function yn(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 mi(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 $c,Mx,nt,xc,HT,$f,kc,Px,mn,vc,_t,KT,xf=L(()=>{$c="1.1.0",Mx="urn:tmct:core",nt=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),xc=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),HT=Object.freeze({imports:"tmct:imports",calls:"tmct:calls",callsSymbol:"tmct:calls",defines:"tmct:defines",tests:"tmct:covers",touches:"tmct:touches",touchesSymbol:"tmct:touches",contains:"tmct:contains",inherits:"tmct:extends",cochange:"tmct:dependsOn",reexports:"tmct:exports",serves:"tmct:serves",denotes:"tmct:denotes"}),$f=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),kc=Object.freeze(Object.values($f).flat()),Px=Object.freeze(new Set($f.source));mn="Individual",vc="Edge",_t="concurrent-safe: reads immutable graph truth; no shared mutable state",KT=Object.freeze({version:$c,ontology:Mx,missReasons:Object.values(nt),edgeKinds:[...xc],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: ${mn}, candidates: ${mn}[] }`,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: ${mn}, out: ${vc}[], incoming: ${vc}[] }`,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: ${mn}[], attributes: ${mn}[] }`,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: ${mn}[], subclasses: ${mn}[], levels: Array<${mn}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:_t,purpose:"Forward bases + the transitive reverse inheritance closure (who extends this). `subclasses` is the flat closure; `levels` groups the same individuals by inheritance depth (direct children first), mirroring `impact`'s leveled shape."},exports:{group:"resolution",args:{moduleId:"string"},result:`{ exports: ${mn}[] }`,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: ${vc}[] }`,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: ${mn}[] }`,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: ${mn}[] }`,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 Fx(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(mi(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(mi(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function Dx(e,t){for(let n of e.relations)if(In(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function Bx(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Pn({readFile:n,repoRoot:s,path:e.moduleLabel}))}catch{o=null}if(!o)return"";let r=[];if(t.anchor&&e.anchor?.site){let{start:i,end:a}=e.anchor.site;r.push(`
65
- ## anchor: ${e.anchor.label} (${e.anchor.class}) @ ${e.moduleLabel}:${i}-${a}`),r.push(rs(o,i,a,Ec).text),e.callHint&&r.push(e.callHint)}if(t.exemplar&&e.exemplar?.site){let{start:i,end:a}=e.exemplar.site,l=e.exemplar.decorators?` @${e.exemplar.decorators}`:"";r.push(`
66
- ## closest example (full body) \u2014 copy this style: ${e.exemplar.label} (${e.exemplar.class})${l} @ ${e.moduleLabel}:${i}-${a}`),r.push(rs(o,i,a,Ec).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=zx;for(let a of e.calleeBodies){if(i<=0)break;let l=a.site.start,u=a.site.path===e.moduleLabel?o:null;if(!u)try{({lines:u}=await Pn({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=rs(u,l,a.site.end,i);r.push(`
62
+ (answering for ${c.objMatch.label} \u2014 ${p.length} other match${p.length===1?"":"es"}: ${g})`}}return!Array.isArray(c.referents)&&!u.miss&&!u.ambiguous&&(a?.shape==="reverse"||a?.shape==="forward")&&a.entityType&&Array.isArray(c.matches)&&c.matches.length&&c.matches.every(f=>f&&f.class===a.entityType)&&(c={...c,referents:Ar(a.entityType,c.matches,"relationListing")}),{content:d,tmct_ask:{mechanical:!0,parsed:a&&!a.ambiguousParse?a:null,canonical:ym(a),matches:(c.matches||[]).map(f=>({id:f.id,label:f.label,type:f.class,module:f.class?Tr(f):void 0})),traversal:c.traversal||null,miss:!!u.miss,ambiguous:!!u.ambiguous,relaxed:l,matchedVia:c.matchedVia||null,...Array.isArray(c.referents)&&c.referents.length?{discourse:c.referents}:{},...u.ambiguous?{candidates:u.candidates,candidateParses:u.candidateParses}:{}}}}var Pf,Oo,gs,Tc,Ox,Ot,Xf,Ve,Lc,Ix,Lx,Nx,Px,Mx,Dx,zx,Jf,Nc,Ux,Gc,Qf,Tt,Zf,Gx,Vx,Kx,Xx,Qx,Zx,eE,tE,sE,rE,sm,Vc,om,rm,mE,bE,Mf,$E,Ff,SE,zf,Uf,_E,TE,CE,ms,Ac,HE,VE,KE,Qc,YE,Hf,XE,Vf,ZE,Di,Uc,el,$m,oS,rS,iS,Kf,lS,pS,fS,nl,gS,bS,wS,Bi,ES,kS,jS,Yf,ws=L(()=>{Ie();rc();zn();ps();vr();Ri();Ti();Nf();jc();as();Ni();Rc();To();Pf=new WeakMap;Oo={calls:"callsSymbol",touches:"touchesSymbol"},gs=new Set(["Function","Method","Class","Attribute","GlobalVariable"]),Tc={Function:"Method",Method:"Function"},Ox={uses:["imports","calls","callsSymbol"]},Ot=e=>Ox[e]||[e],Xf=new Set(Object.values(Oo)),Ve=12,Lc={Function:["function","functions"],Method:["method","methods"],Class:["class","classes"],Module:["module","modules"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Change:["change","changes"],Package:["package","packages"],Fact:["fact","facts"],Utterance:["utterance","utterances"],Session:["session","sessions"],Source:["source","sources"],Rule:["rule","rules"]};Ix={cochange:"cochanges",reexports:"export"};Lx={imports:"import",calls:"call",callsSymbol:"call",inherits:"inherit from",contains:"contain",tests:"test",touches:"touch",cochange:"cochange",reexports:"export",uses:"use",serves:"serve",denotes:"denote"},Nx=e=>Lx[e]||qs(e),Px=new RegExp(`^(?:${Object.keys(de).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})(?:s|ing|ed)?\\s+`,"i"),Mx=new Set(["imports"]);Dx=/^where\s+(?:does|do|did)\s+/i,zx=new Set(me(Xt));Jf=4,Nc="zzinnerset",Ux=new Set(["that","which","who","are","is","was","were","do","does","also","still","both","and","then","though"]),Gc=new Set(["which","what","who","list","show","find","give","me","us","all"]),Qf=new Set(["are","is","was","were"]);Tt=e=>Ue[e]?{entityType:Ue[e],placeholder:!1}:Dn.includes(e)?{entityType:null,placeholder:!0}:null,Zf=e=>!!de[e]&&e.endsWith("ing");Gx=new Set(["which","the","all"]);Vx=new Set(["all","every","each"]);Kx=new Set(["what","which","thing","things","one","ones","stuff"]);Xx=new Set(["those","them"]);Qx=new Set(["did","was","were","do","does","has","have","had"]),Zx=new Set(["change","changed","changes","update","updated","updates","modify","modified","modifies","touch","touched","touches","edit","edited","revise","revised"]),eE=new Set(["last","recently","ever","get","got","been","then","now","already"]),tE=new Set(["the","a","an","all","those","these","any"]);sE=new Set(["since","before","after","on"]);rE=/\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/;sm=new Set(["total","altogether","overall","exist","exists","existing","present","here","now","currently","graph","index","codebase","repo","repository","this","that"]);Vc=new Set(["the","a","an","all","me","us"]),om=[...zs].sort((e,t)=>t.split(" ").length-e.split(" ").length),rm="functions, classes, methods, modules, packages, attributes, variables, or commits",mE=new Set(["in","inside","under"]);bE=new Set(["called","named","about","like","containing","matching","with"]);Mf=new Set(["recent","latest","newest"]);$E=/^git:(.+)$/i;Ff=new WeakMap;SE=new Set(["Class","Function","Method","GlobalVariable","Attribute"]);zf=new WeakMap;Uf={label:3,chain:2,attr:1};_E=e=>e&&typeof e.value=="boolean"?{...e,value:!e.value}:null;TE=["imports","calls","callsSymbol","inherits","contains","tests"];CE=/^\d{4}-\d{2}-\d{2}$/;ms=e=>gn(e.slice(0,Ve).map(t=>["Function","Method"].includes(t.class)?`${t.label}()`:t.label))+(e.length>Ve?`, \u2026and ${e.length-Ve} more`:"");Ac=10;HE=/^(?:the|a|an)\s+/i,VE=new RegExp(`\\s+(${Object.keys(Ue).join("|")})$`,"i");KE=/^(?:the\s+)?(?:main\s+|primary\s+)?entry[\s-]?points?(?:\s+(?:of|to|for)\s+(?:this|the)\s+(?:codebase|code|repo|repository|project|app))?$/i,Qc=new Set(["index","main","app","server","cli","__main__"]),YE=new Set(["test","tests","__tests__","fixture","fixtures","spec","specs","testdata"]),Hf=e=>String(e).toLowerCase().split("/").pop().replace(/\.[a-z0-9]+$/,""),XE=e=>String(e).toLowerCase().split("/").slice(0,-1).some(t=>YE.has(t));Vf=8,ZE="mgx:schemaDoc";Di=new Set([...me(Object.keys(de)),...me(Object.keys(Ue)),...me(Object.keys(Jt)),...me(Object.keys(Ye)),...me(Ds),...me(Object.keys(is)),...me(Object.keys(En)),...me(Object.keys(go)),...me(Dn),...me(mr),...me(Fs),...me(Xt),...me(hn),...me(Fn),...me(Object.keys(wo))]),Uc=new Set([...st,...Gc,...Ms]),el=new Set(me(di)),$m=new Set([...el,...Uc]),oS=["many","count","number","quantity","total","tally","list","show","display","print","dump","enumerate","name"],rS=[...new Set([...me(Object.keys(de)),...Object.keys(Ue),...oS])].filter(e=>/^[a-z]+$/.test(e)&&e.length>=4&&!st.has(e)),iS=new Set(["impact","impacts","impacted"]);Kf=/\b(?:the\s+)?(?:last|latest|most\s+recent)\s+commit\b/i,lS=/^when\s+(?:was|were|is|did|does|do)\s+commit\s+[0-9a-fA-F:]+$/i;pS=/^(?:list|show(?:\s+me)?)\s+(?:all\s+|the\s+)?([a-z][a-z'-]*)\s*(.*)$/i,fS=/^(?:how\s+many|number\s+of|count(?:\s+the)?)\s+([a-z][a-z'-]*)\s*(.*)$/i,nl=/^(?: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;gS=new RegExp(`^(?:${om.map(Xe).join("|")})\\s+(?:all\\s+)?(?:the\\s+)?([a-z][a-z'-]*)\\s+(?:of|for)\\s+(.+?)[?.!\\s]*$`,"i"),bS=/^where(?:'s|\s+is|\s+are)\s+(?:all\s+)?(?:the\s+)?(.+?)[?.!\s]*$/i,wS=/^where\s+(?:does|do|did)\s+(?:all\s+)?(?:the\s+)?(.+?)\s+[a-z][a-z'-]*[?.!\s]*$/i;Bi=e=>String(e||"").toLowerCase();ES=/^(.+)@(?:turn|step)(\d+)$/;kS=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,jS=/^what\s+is\s+(?:the\s+)?(?!(?:an?|it|this|that|these|those)\s)(.+?)\s+(?:used\s+)?for[?.!\s]*$/i;Yf=(e,t,n,s)=>s.ambiguous?_S(e,t,n):!!s.miss});function ys(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 Yn({readFile:e,repoRoot:t,path:n,start:s,end:o,maxLines:r}){let i=Yt(t),a=Yt(i,n);if(a!==i&&!a.startsWith(i+Rd))throw new Re(`refusing to read outside the repository root: ${n}`);let c=(await e(a,"utf8")).split(`
64
+ `);return s==null||o==null?{lines:c}:{lines:c,...ys(c,s,o,r)}}var Ui=L(()=>{Be();Dt()});function yt(e){return{ok:!0,value:e}}function vt(e,{detail:t="",term:n=null}={}){if(!ot[e])throw new TypeError(`miss(): unknown reason "${e}" (not in MISS_REASONS)`);return{ok:!1,miss:{reason:e,detail:t,term:n}}}function jn(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 Wi(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 ol,RS,ot,rl,bI,km,il,TS,yn,sl,At,wI,jm=L(()=>{ol="1.1.0",RS="urn:tmct:core",ot=Object.freeze({UNRESOLVED_TERM:"UNRESOLVED_TERM",CAPABILITY_ABSENT:"CAPABILITY_ABSENT",TRUNCATED_GRAPH:"TRUNCATED_GRAPH",NO_SOURCE:"NO_SOURCE"}),rl=Object.freeze(["imports","calls","callsSymbol","defines","tests","touches","touchesSymbol","contains","inherits","cochange","reexports","serves","denotes"]),bI=Object.freeze({imports:"tmct:imports",calls:"tmct:calls",callsSymbol:"tmct:calls",defines:"tmct:defines",tests:"tmct:covers",touches:"tmct:touches",touchesSymbol:"tmct:touches",contains:"tmct:contains",inherits:"tmct:extends",cochange:"tmct:dependsOn",reexports:"tmct:exports",serves:"tmct:serves",denotes:"tmct:denotes"}),km=Object.freeze({resolution:["resolve","describe","members","subclasses","exports","signature"],traversal:["edges","impact"],source:["snippet","context"],aggregate:["architecture","untested","stats"],temporal:["history"],search:["search","ask"]}),il=Object.freeze(Object.values(km).flat()),TS=Object.freeze(new Set(km.source));yn="Individual",sl="Edge",At="concurrent-safe: reads immutable graph truth; no shared mutable state",wI=Object.freeze({version:ol,ontology:RS,missReasons:Object.values(ot),edgeKinds:[...rl],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: ${yn}, candidates: ${yn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:At,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: ${yn}, out: ${sl}[], incoming: ${sl}[] }`,misses:["UNRESOLVED_TERM"],concurrency:At,purpose:"Full typed portrait of one individual: its attributes and its outgoing/incoming edges."},members:{group:"resolution",args:{classId:"string"},result:`{ methods: ${yn}[], attributes: ${yn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:At,purpose:"A class's methods + attributes (via the contains relation) \u2014 replaces reading the class body."},subclasses:{group:"resolution",args:{classId:"string"},result:`{ bases: ${yn}[], subclasses: ${yn}[], levels: Array<${yn}[]> }`,misses:["UNRESOLVED_TERM"],concurrency:At,purpose:"Forward bases + the transitive reverse inheritance closure (who extends this). `subclasses` is the flat closure; `levels` groups the same individuals by inheritance depth (direct children first), mirroring `impact`'s leveled shape."},exports:{group:"resolution",args:{moduleId:"string"},result:`{ exports: ${yn}[] }`,misses:["UNRESOLVED_TERM"],concurrency:At,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:At,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: ${sl}[] }`,misses:["UNRESOLVED_TERM"],concurrency:At,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:At,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:At,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:At,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:At,purpose:"Package/module shape + the most-imported hub modules. Optional package prefix scopes it."},untested:{group:"aggregate",args:{},result:`{ modules: ${yn}[] }`,misses:[],concurrency:At,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:At,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:At,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: ${yn}[] }`,misses:[],concurrency:At,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:At,purpose:"The mechanical, zero-model NL query over the graph \u2014 tmct's whole reason to exist."}}})});function AS(e,t){let n=[],s=[];for(let o of e.relations)for(let r of o.edges)r.subject===t&&n.push(Wi(r,{predicate:o.predicate,prop:o.prop})),r.object===t&&s.push(Wi(r,{predicate:o.predicate,prop:o.prop}));return{out:n,incoming:s}}function CS(e,t){for(let n of e.relations)if(Gn(n)===t)return{predicate:n.predicate,prop:n.prop};return{predicate:t,prop:null}}async function IS(e,t,{readFile:n,repoRoot:s}){if(!e.moduleLabel)return"";let o=null;try{({lines:o}=await Yn({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(ys(o,i,a,al).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(ys(o,i,a,al).text),e.callHint&&r.push(e.callHint)}if(t.inlinedCallees&&e.calleeBodies.length){let i=OS;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 Yn({readFile:n,repoRoot:s,path:a.site.path}))}catch{u=null}if(!u)continue;let d=ys(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 hi(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:$c,capabilities:[...kc],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=Kt(e,String(c??""));return u?wt({match:yn(u),candidates:d.map(yn)}):yt(nt.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return yt(nt.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=Fx(e,c);return wt({individual:yn(u),out:d,incoming:f})},members(c){if(!a(c))return yt(nt.UNRESOLVED_TERM,{term:c});let d=Se(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let h=i.get(m.object),g=h?yn(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.class||"")==="Attribute"?p.push(g):f.push(g)}return wt({methods:f,attributes:p})},subclasses(c){if(!a(c))return yt(nt.UNRESOLVED_TERM,{term:c});let d=Se(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?yn(i.get(y.object)):{id:y.object,label:y.objectLabel||y.object,class:"Class",attributes:[]}),p=new Map;for(let y of d)p.has(y.object)||p.set(y.object,[]),p.get(y.object).push(y.subject);let m=new Set([c]),h=[],g=[],b=[c];for(let y=0;y<8&&b.length;y+=1){let w=[],$=[];for(let j of b)for(let v of p.get(j)||[]){if(m.has(v))continue;m.add(v);let E=i.get(v),k=E?yn(E):{id:v,label:v,class:"Class",attributes:[]};h.push(k),$.push(k),w.push(v)}$.length&&g.push($),b=w}return wt({bases:f,subclasses:h,levels:g})},exports(c){if(!a(c))return yt(nt.UNRESOLVED_TERM,{term:c});let f=Se(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?yn(i.get(p.object)):{id:p.object,label:p.objectLabel||p.object,class:"Entity",attributes:[]});return wt({exports:f})},signature(c){let u=a(c);if(!u)return yt(nt.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])zt(u,p)&&d.push(m);let f=zt(u,"visibility");return f&&d.push(f),wt({id:u.id,label:u.label,class:u.class||"Entity",params:zt(u,"params"),returns:zt(u,"returns"),raises:zt(u,"raises"),decorators:zt(u,"decorators"),doc:zt(u,"doc"),selfFields:zt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!xc.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return yt(nt.UNRESOLVED_TERM,{term:c});let m=Dx(e,u),h=Se(e,u).filter(g=>g.subject===c).map(g=>mi(g,m));return h=d==null?h.slice(f):h.slice(f,f+d),wt({kind:u,edges:h})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return yt(nt.UNRESOLVED_TERM,{term:c});let f=u==null?ao(e,d):ao(e,d,{maxDepth:u}),p=f.reduce((m,h)=>m+h.length,0);return wt({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return yt(nt.UNRESOLVED_TERM,{term:c});let d=Et(u);if(!l.sourceAccess)return yt(nt.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 yt(nt.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await Pn({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:Ec});return wt({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return yt(nt.NO_SOURCE,{term:c,detail:`could not read ${d.path}: ${f?.message||f}`})}},async context(c,{depth:u="auto"}={}){let{match:d}=Kt(e,String(c??""));if(!d)return yt(nt.UNRESOLVED_TERM,{term:String(c??"")});let f=co(e,d),p=String(u||"auto").trim().toLowerCase(),m,h;p==="min"?(m="TINY",h=Rs("TINY")):p==="full"?(m="FULL",h=Rs("FULL")):{tier:m,mask:h}=Jr(f,e,{});let g=Xd(f,h);if(!l.sourceAccess)return wt({text:g,tier:m});let b=await Bx(f,h,{readFile:s,repoRoot:n});return wt({text:b?`${g}
69
- ${b}`:g,tier:m})},architecture({package:c=""}={}){let u=String(c||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(b=>(b.class||"")==="Module"&&(!u||String(b.label||"").toLowerCase().startsWith(u))),f=new Map;for(let b of d){let y=b.label.includes("/")?b.label.slice(0,b.label.lastIndexOf("/")):"(root)";f.set(y,(f.get(y)||0)+1)}let p=new Set(d.map(b=>b.id)),m=new Map;for(let b of Se(e,"imports"))p.has(b.object)&&m.set(b.object,(m.get(b.object)||0)+1);let h=[...m.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),g=[...f.entries()].sort((b,y)=>y[1]-b[1]);return wt({modules:d.length,packages:g,hubs:h})},untested(){let c=new Set(Se(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(yn);return wt({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 wt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return yt(nt.UNRESOLVED_TERM,{term:c});let d=[...Se(e,"touches"),...Se(e,"touchesSymbol")].filter(m=>m.object===c),f=new Set,p=[];for(let m of d){if(f.has(m.subject))continue;f.add(m.subject);let h=i.get(m.subject);p.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?zt(h,"author")??zt(h,"commitAuthor"):null,date:h?zt(h,"date")??zt(h,"commitDate"):null,message:h?zt(h,"message")??zt(h,"commitMessage"):null})}return wt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=Hr,offset:m=0}={}){let h=String(c||""),g=String(u||"").trim().toLowerCase(),b=String(d||"").trim(),y=String(f||"").trim().toLowerCase(),w;if(g&&g!=="module"){let j=null;if(b){let E=Na(b);if(E.error)return yt(nt.UNRESOLVED_TERM,{term:b,detail:E.error});j=E}let v=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=Fa(e,v,{kind:g,decFilter:y,nameRe:j}).map(E=>E.ind)}catch(E){return yt(nt.UNRESOLVED_TERM,{term:b,detail:String(E?.message||E)})}}else{let j=new Map;for(let v of e.individuals)(v.class||"")==="Module"&&j.set(v.label,v);w=_d(e,h).map(({path:v})=>j.get(v)).filter(Boolean)}let $=w.slice(m,m+p).map(yn);return wt({results:$})},ask(c){if(typeof r!="function")return yt(nt.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return wt({content:u,tmct_ask:d})}};if(o)for(let c of kc){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=>(kf(o,c,performance.now()-f,m),m)):(kf(o,c,performance.now()-f,p),p)})}return l}function kf(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:Ux(s)})}catch{}}function Ux(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 zt,Ec,zx,gi=L(()=>{Ie();fi();xf();zt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;Ec=200,zx=120});async function lr(e,t){let n=await t.fetchEntities(e),s=qr(n);if(!s.individuals.length){let o=new Re(`the graph at ${e.graphFile} is empty \u2014 no entities to answer from yet (this repo starts with no graph; the chat session folds the conversation into one).`);throw o.emptyGraph=!0,o}return s}var bi=L(()=>{Mt();Ie()});function is({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function et(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Re(`${t} is required`);return n}function vt(e,t,n){let{match:s,candidates:o}=Kt(e.graph,t);if(!s)throw new Re(`no entity matching ${n} "${t}" in the code-map graph. Try a repo-relative path (e.g. path/to/module), a basename, or tmct_search for a fuzzy lookup.`);return{match:s,candidates:o}}var ur,st,Ge=L(()=>{Mt();Ie();ur=200;st=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=vt(s,et(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function Ef(e,{config:t,source:n=ro,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Re("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,l=!!e?.untuned,c=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await lr(t,n),f=xe(xe(t.graphFile)),p=hi(d,{sourceAccess:!0,repoRoot:f,readFile:Be,tel:o,ask:ss}),{match:m}=vt(p,r,"symbol"),h=co(d,m),g,b,y=!1;a||i==="min"?(g="TINY",b=Rs("TINY")):c||i==="full"?(g="FULL",b=Rs("FULL"),y=!0):{tier:g,mask:b,topup:y}=Jr(h,d,{untuned:l}),s&&!c&&(b=Kd(b));let w=null;if(h.moduleLabel)try{({lines:w}=await Pn({readFile:Be,repoRoot:f,path:h.moduleLabel}))}catch{w=null}let $=E=>w&&w[E-1]!=null?w[E-1].trim():"",j=(E,k)=>rs(w,E,k,ur).text,v=[`Edit context for ${h.moduleLabel} [${g}${s?" secondary":""}] \u2014 assembled from the typed graph + that file. You do NOT need to Read it; write the new code directly after reviewing this.`];if(b.anchor&&h.anchor?.site&&w){let{start:E,end:k}=h.anchor.site;v.push(`
70
- ## anchor: ${h.anchor.label} (${h.anchor.class}) @ ${h.moduleLabel}:${E}-${k}`),v.push(j(E,k)),h.callHint&&v.push(h.callHint)}if(b.registration&&h.globals.length){v.push(`
71
- ## registration / module globals (replicate this pattern):`);for(let E of h.globals)v.push(` ${E.label} = ${E.value}${E.site?` [:${E.site.start}]`:""}`)}if(b.exemplar&&h.exemplar?.site&&w){let{start:E,end:k}=h.exemplar.site,_=h.exemplar.decorators?` @${h.exemplar.decorators}`:"";v.push(`
72
- ## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${_} @ ${h.moduleLabel}:${E}-${k}`),v.push(j(E,k)),h.callHint&&v.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let E=120;for(let k of h.calleeBodies){if(E<=0)break;let _=k.site.start,x=k.site.path===h.moduleLabel&&w?w:await Pn({readFile:Be,repoRoot:f,path:k.site.path}).then(M=>M.lines).catch(()=>null);if(!x)continue;let T=rs(x,_,k.site.end,E);v.push(`
73
- ## inlined callee body (depth-1 in-repo call): ${k.label} @ ${k.site.path}:${_}-${k.site.end}`),v.push(T.text),E-=T.end-_+1}}if(b.classMembers&&h.classMembers&&h.classMembers.members.length){v.push(`
74
- ## members of ${h.classMembers.className} (the edit likely lives INSIDE this class \u2014 copy a member's shape, do not read the class body):`);for(let E of h.classMembers.members){let k=String(E.label).split(".").pop(),_=E.params!=null&&E.params!==""?`(${E.params})${E.returns?` -> ${E.returns}`:""}`:"",R=E.decorators?`@${E.decorators} `:"",x=E.raises?` raises=${E.raises}`:"";v.push(` ${E.class} ${k}${E.site?` :${E.site.start}`:""} ${R}${k}${_}${x}`)}}if(b.siblings&&h.siblings.length){v.push(`
75
- ## sibling symbols to copy the style of (most relevant first; ${h.siblings.length} total):`);for(let E of h.siblings.slice(0,h.siblingCap)){let k=E.site?$(E.site.start):"",_=E.decorators?`@${E.decorators} `:"",R=E.raises?` raises=${E.raises}`:"";v.push(` ${E.class} ${E.label}${E.site?` :${E.site.start}`:""} ${_}${k}${R}`)}h.siblings.length>h.siblingCap&&v.push(` \u2026+${h.siblings.length-h.siblingCap} more (use ${u}search kind=function or ${u}snippet <name> for any of them)`)}if(b.allExports&&h.allExports&&v.push(`
68
+ `)}function Gi(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:ol,capabilities:[...il],sourceAccess:!!t,graph:e,resolve(c){let{match:u,candidates:d}=Qt(e,String(c??""));return u?yt({match:jn(u),candidates:d.map(jn)}):vt(ot.UNRESOLVED_TERM,{term:String(c??"")})},describe(c){let u=a(c);if(!u)return vt(ot.UNRESOLVED_TERM,{term:c});let{out:d,incoming:f}=AS(e,c);return yt({individual:jn(u),out:d,incoming:f})},members(c){if(!a(c))return vt(ot.UNRESOLVED_TERM,{term:c});let d=ke(e,"contains").filter(m=>m.subject===c),f=[],p=[];for(let m of d){let h=i.get(m.object),g=h?jn(h):{id:m.object,label:m.objectLabel||m.object,class:"Entity",attributes:[]};(h?.class||"")==="Attribute"?p.push(g):f.push(g)}return yt({methods:f,attributes:p})},subclasses(c){if(!a(c))return vt(ot.UNRESOLVED_TERM,{term:c});let d=ke(e,"inherits"),f=d.filter(y=>y.subject===c).map(y=>i.get(y.object)?jn(i.get(y.object)):{id:y.object,label:y.objectLabel||y.object,class:"Class",attributes:[]}),p=new Map;for(let y of d)p.has(y.object)||p.set(y.object,[]),p.get(y.object).push(y.subject);let m=new Set([c]),h=[],g=[],b=[c];for(let y=0;y<8&&b.length;y+=1){let w=[],$=[];for(let _ of b)for(let v of p.get(_)||[]){if(m.has(v))continue;m.add(v);let x=i.get(v),E=x?jn(x):{id:v,label:v,class:"Class",attributes:[]};h.push(E),$.push(E),w.push(v)}$.length&&g.push($),b=w}return yt({bases:f,subclasses:h,levels:g})},exports(c){if(!a(c))return vt(ot.UNRESOLVED_TERM,{term:c});let f=ke(e,"reexports").filter(p=>p.subject===c).map(p=>i.get(p.object)?jn(i.get(p.object)):{id:p.object,label:p.objectLabel||p.object,class:"Entity",attributes:[]});return yt({exports:f})},signature(c){let u=a(c);if(!u)return vt(ot.UNRESOLVED_TERM,{term:c});let d=[];for(let[p,m]of[["isStatic","static"],["isAbstract","abstract"],["isConstant","constant"]])Wt(u,p)&&d.push(m);let f=Wt(u,"visibility");return f&&d.push(f),yt({id:u.id,label:u.label,class:u.class||"Entity",params:Wt(u,"params"),returns:Wt(u,"returns"),raises:Wt(u,"raises"),decorators:Wt(u,"decorators"),doc:Wt(u,"doc"),selfFields:Wt(u,"self_fields"),flags:d})},edges(c,u,{limit:d,offset:f=0}={}){if(!rl.includes(u))throw new TypeError(`edges(): unknown kind "${u}" (not in EDGE_KINDS)`);if(!a(c))return vt(ot.UNRESOLVED_TERM,{term:c});let m=CS(e,u),h=ke(e,u).filter(g=>g.subject===c).map(g=>Wi(g,m));return h=d==null?h.slice(f):h.slice(f,f+d),yt({kind:u,edges:h})},impact(c,{maxDepth:u}={}){let d=a(c);if(!d)return vt(ot.UNRESOLVED_TERM,{term:c});let f=u==null?ko(e,d):ko(e,d,{maxDepth:u}),p=f.reduce((m,h)=>m+h.length,0);return yt({total:p,levels:f})},async snippet(c){let u=a(c);if(!u)return vt(ot.UNRESOLVED_TERM,{term:c});let d=_t(u);if(!l.sourceAccess)return vt(ot.NO_SOURCE,{term:c,detail:d?`span is ${d.path}:${d.start}-${d.end}; this provider exposes no working tree`:"no source span in the graph"});if(!d)return vt(ot.NO_SOURCE,{term:c,detail:"no source span in the graph (likely a module)"});try{let f=await Yn({readFile:s,repoRoot:n,path:d.path,start:d.start,end:d.end,maxLines:al});return yt({path:d.path,span:{start:d.start,end:d.end},body:f.text})}catch(f){return vt(ot.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 vt(ot.UNRESOLVED_TERM,{term:String(c??"")});let f=jo(e,d),p=String(u||"auto").trim().toLowerCase(),m,h;p==="min"?(m="TINY",h=Hs("TINY")):p==="full"?(m="FULL",h=Hs("FULL")):{tier:m,mask:h}=ki(f,e,{});let g=nf(f,h);if(!l.sourceAccess)return yt({text:g,tier:m});let b=await IS(f,h,{readFile:s,repoRoot:n});return yt({text:b?`${g}
69
+ ${b}`:g,tier:m})},architecture({package:c=""}={}){let u=String(c||"").trim().toLowerCase().replace(/^\.?\//,""),d=e.individuals.filter(b=>(b.class||"")==="Module"&&(!u||String(b.label||"").toLowerCase().startsWith(u))),f=new Map;for(let b of d){let y=b.label.includes("/")?b.label.slice(0,b.label.lastIndexOf("/")):"(root)";f.set(y,(f.get(y)||0)+1)}let p=new Set(d.map(b=>b.id)),m=new Map;for(let b of ke(e,"imports"))p.has(b.object)&&m.set(b.object,(m.get(b.object)||0)+1);let h=[...m.entries()].sort((b,y)=>y[1]-b[1]).map(([b,y])=>({id:b,label:i.get(b)?.label||b,importers:y})),g=[...f.entries()].sort((b,y)=>y[1]-b[1]);return yt({modules:d.length,packages:g,hubs:h})},untested(){let c=new Set(ke(e,"tests").map(d=>d.object)),u=e.individuals.filter(d=>(d.class||"")==="Module"&&!c.has(d.id)&&!/\.test\./.test(d.label||"")).map(jn);return yt({modules:u})},stats(){let c=new Map;for(let d of e.individuals){let f=d.class||"Entity";c.set(f,(c.get(f)||0)+1)}let u=[...c.entries()].map(([d,f])=>({class:d,count:f})).sort((d,f)=>f.count-d.count||d.class.localeCompare(f.class));return yt({total:e.individuals.length,classes:u,truncated:(e.truncated||[]).length>0})},history(c){if(!a(c))return vt(ot.UNRESOLVED_TERM,{term:c});let d=[...ke(e,"touches"),...ke(e,"touchesSymbol")].filter(m=>m.object===c),f=new Set,p=[];for(let m of d){if(f.has(m.subject))continue;f.add(m.subject);let h=i.get(m.subject);p.push({id:m.subject,label:m.subjectLabel||h?.label||m.subject,author:h?Wt(h,"author")??Wt(h,"commitAuthor"):null,date:h?Wt(h,"date")??Wt(h,"commitDate"):null,message:h?Wt(h,"message")??Wt(h,"commitMessage"):null})}return yt({commits:p})},search(c,{kind:u="",name:d="",decorator:f="",limit:p=$i,offset:m=0}={}){let h=String(c||""),g=String(u||"").trim().toLowerCase(),b=String(d||"").trim(),y=String(f||"").trim().toLowerCase(),w;if(g&&g!=="module"){let _=null;if(b){let x=gc(b);if(x.error)return vt(ot.UNRESOLVED_TERM,{term:b,detail:x.error});_=x}let v=h.toLowerCase().split(/[^a-z0-9_]+/).filter(Boolean);try{w=yc(e,v,{kind:g,decFilter:y,nameRe:_}).map(x=>x.ind)}catch(x){return vt(ot.UNRESOLVED_TERM,{term:b,detail:String(x?.message||x)})}}else{let _=new Map;for(let v of e.individuals)(v.class||"")==="Module"&&_.set(v.label,v);w=Ip(e,h).map(({path:v})=>_.get(v)).filter(Boolean)}let $=w.slice(m,m+p).map(jn);return yt({results:$})},ask(c){if(typeof r!="function")return vt(ot.CAPABILITY_ABSENT,"this provider was constructed without an ask answerer");let{content:u,tmct_ask:d}=r(e,String(c||""));return yt({content:u,tmct_ask:d})}};if(o)for(let c of il){let u=l[c];typeof u=="function"&&(l[c]=(...d)=>{let f=performance.now(),p=u.apply(l,d);return p&&typeof p.then=="function"?p.then(m=>(_m(o,c,performance.now()-f,m),m)):(_m(o,c,performance.now()-f,p),p)})}return l}function _m(e,t,n,s){try{e.record({tool:`ri.${t}`,perf:{ms_total:n},response:LS(s)})}catch{}}function LS(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 Wt,al,OS,Hi=L(()=>{Ie();Ui();jm();Wt=(e,t)=>(e?.attributes||[]).find(n=>n.key===t)?.value??null;al=200,OS=120});async function Cr(e,t){let n=await t.fetchEntities(e),s=vi(n);if(!s.individuals.length){let o=new Re(`the graph at ${e.graphFile} is empty \u2014 no entities to answer from yet (this repo starts with no graph; the chat session folds the conversation into one).`);throw o.emptyGraph=!0,o}return s}var Vi=L(()=>{Dt();Ie()});function vs({content:e,data:t,text:n=null}){return{content:e,data:t,text:n??e}}function et(e,t){let n=String(e?.[t]||"").trim();if(!n)throw new Re(`${t} is required`);return n}function $t(e,t,n){let{match:s,candidates:o}=Qt(e.graph,t);if(!s)throw new Re(`no entity matching ${n} "${t}" in the code-map graph. Try a repo-relative path (e.g. path/to/module), a basename, or tmct_search for a fuzzy lookup.`);return{match:s,candidates:o}}var Or,rt,Ge=L(()=>{Dt();Ie();Or=200;rt=e=>(t,{graph:n,svc:s,config:o})=>{let{match:r}=$t(s,et(t,"symbol"),"symbol");return e(n,r,{toolNamePrefix:o?.toolNamePrefix})}});async function Rm(e,{config:t,source:n=$o,trim:s=!1,tel:o=null}={}){let r=String(e?.symbol||"").trim();if(!r)throw new Re("symbol is required");let i=String(e?.depth||"auto").trim().toLowerCase(),a=!!e?.min,l=!!e?.untuned,c=!!e?.max,u=t?.toolNamePrefix||"tmct_",d=await Cr(t,n),f=$e($e(t.graphFile)),p=Gi(d,{sourceAccess:!0,repoRoot:f,readFile:ze,tel:o,ask:bs}),{match:m}=$t(p,r,"symbol"),h=jo(d,m),g,b,y=!1;a||i==="min"?(g="TINY",b=Hs("TINY")):c||i==="full"?(g="FULL",b=Hs("FULL"),y=!0):{tier:g,mask:b,topup:y}=ki(h,d,{untuned:l}),s&&!c&&(b=ef(b));let w=null;if(h.moduleLabel)try{({lines:w}=await Yn({readFile:ze,repoRoot:f,path:h.moduleLabel}))}catch{w=null}let $=x=>w&&w[x-1]!=null?w[x-1].trim():"",_=(x,E)=>ys(w,x,E,Or).text,v=[`Edit context for ${h.moduleLabel} [${g}${s?" secondary":""}] \u2014 assembled from the typed graph + that file. You do NOT need to Read it; write the new code directly after reviewing this.`];if(b.anchor&&h.anchor?.site&&w){let{start:x,end:E}=h.anchor.site;v.push(`
70
+ ## anchor: ${h.anchor.label} (${h.anchor.class}) @ ${h.moduleLabel}:${x}-${E}`),v.push(_(x,E)),h.callHint&&v.push(h.callHint)}if(b.registration&&h.globals.length){v.push(`
71
+ ## registration / module globals (replicate this pattern):`);for(let x of h.globals)v.push(` ${x.label} = ${x.value}${x.site?` [:${x.site.start}]`:""}`)}if(b.exemplar&&h.exemplar?.site&&w){let{start:x,end:E}=h.exemplar.site,S=h.exemplar.decorators?` @${h.exemplar.decorators}`:"";v.push(`
72
+ ## closest example (full body) \u2014 copy this style: ${h.exemplar.label} (${h.exemplar.class})${S} @ ${h.moduleLabel}:${x}-${E}`),v.push(_(x,E)),h.callHint&&v.push(h.callHint)}if(b.inlinedCallees&&h.calleeBodies.length&&w){let x=120;for(let E of h.calleeBodies){if(x<=0)break;let S=E.site.start,k=E.site.path===h.moduleLabel&&w?w:await Yn({readFile:ze,repoRoot:f,path:E.site.path}).then(P=>P.lines).catch(()=>null);if(!k)continue;let A=ys(k,S,E.site.end,x);v.push(`
73
+ ## inlined callee body (depth-1 in-repo call): ${E.label} @ ${E.site.path}:${S}-${E.site.end}`),v.push(A.text),x-=A.end-S+1}}if(b.classMembers&&h.classMembers&&h.classMembers.members.length){v.push(`
74
+ ## members of ${h.classMembers.className} (the edit likely lives INSIDE this class \u2014 copy a member's shape, do not read the class body):`);for(let x of h.classMembers.members){let E=String(x.label).split(".").pop(),S=x.params!=null&&x.params!==""?`(${x.params})${x.returns?` -> ${x.returns}`:""}`:"",R=x.decorators?`@${x.decorators} `:"",k=x.raises?` raises=${x.raises}`:"";v.push(` ${x.class} ${E}${x.site?` :${x.site.start}`:""} ${R}${E}${S}${k}`)}}if(b.siblings&&h.siblings.length){v.push(`
75
+ ## sibling symbols to copy the style of (most relevant first; ${h.siblings.length} total):`);for(let x of h.siblings.slice(0,h.siblingCap)){let E=x.site?$(x.site.start):"",S=x.decorators?`@${x.decorators} `:"",R=x.raises?` raises=${x.raises}`:"";v.push(` ${x.class} ${x.label}${x.site?` :${x.site.start}`:""} ${S}${E}${R}`)}h.siblings.length>h.siblingCap&&v.push(` \u2026+${h.siblings.length-h.siblingCap} more (use ${u}search kind=function or ${u}snippet <name> for any of them)`)}if(b.allExports&&h.allExports&&v.push(`
76
76
  ## module __all__ \u2014 this module curates its public API; ADD your new public symbol to this list so it is importable:
77
77
  ${h.allExports}`),b.reexports&&h.exports&&h.exports.length&&v.push(`
78
- ## re-exported symbols (resolved __all__ \u2192 defining module): ${h.exports.join(", ")}`),b.insertionRegion&&h.insertionRegion&&w){let E=h.insertionRegion.start,k=Math.min(w.length,E+40-1);v.push(`
79
- ## insertion region (write your new sibling here) \u2014 ${h.moduleLabel}:${E}-${k}`),v.push(w.slice(E-1,k).map((_,R)=>`${E+R} ${_}`).join(`
78
+ ## re-exported symbols (resolved __all__ \u2192 defining module): ${h.exports.join(", ")}`),b.insertionRegion&&h.insertionRegion&&w){let x=h.insertionRegion.start,E=Math.min(w.length,x+40-1);v.push(`
79
+ ## insertion region (write your new sibling here) \u2014 ${h.moduleLabel}:${x}-${E}`),v.push(w.slice(x-1,E).map((S,R)=>`${x+R} ${S}`).join(`
80
80
  `))}else h.insertion&&v.push(`
81
81
  ## insert the new sibling after line ~${h.insertion} (end of the last top-level definition).`);return b.tests&&h.tests.length&&v.push(`
82
82
  ## covering tests: ${h.tests.join(", ")}`),b.cochange&&h.cochange&&h.cochange.length&&v.push(`
83
- ## usually changed together (consider editing these too): ${h.cochange.map(E=>`${E.label} (\xD7${E.weight})`).join(", ")}`),v.push(`
83
+ ## usually changed together (consider editing these too): ${h.cochange.map(x=>`${x.label} (\xD7${x.weight})`).join(", ")}`),v.push(`
84
84
  You now have the snippet, the sibling style, the registration anchor and the tests. Write the new code with Edit/Write \u2014 do NOT Read ${h.moduleLabel}.`),g!=="FULL"&&v.push(`(bundle tier ${g}; for any omitted sections run ${u}context_more {"symbol":"${r}"}, or ${u}context with depth="full".)`),{text:v.join(`
85
- `),tier:g,topup:y}}async function Sc(e,{config:t,source:n,tel:s}){return(await Ef(e,{config:t,source:n,tel:s})).text}var jc=L(()=>{kt();ze();Mt();fi();qo();Ie();os();gi();bi();Ge();Sc.ownsGraphLoad=!0});function Sf(e,{graph:t,svc:n}){let{match:s}=vt(n,et(e,"symbol"),"symbol");return Yd(co(t,s))}var jf=L(()=>{Ie();Ge()});function wi(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 dr(e){return wi(e).toString(16).padStart(8,"0")}function Gx(e){let t=new TextEncoder().encode(String(e)),n=t.length*8,s=new Uint8Array((t.length+8>>6)+1<<6);s.set(t),s[t.length]=128;let o=new DataView(s.buffer);o.setUint32(s.length-8,Math.floor(n/4294967296)),o.setUint32(s.length-4,n>>>0);let r=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),i=new Uint32Array(64),a=(u,d)=>u>>>d|u<<32-d;for(let u=0;u<s.length;u+=64){for(let w=0;w<16;w+=1)i[w]=o.getUint32(u+w*4);for(let w=16;w<64;w+=1){let $=a(i[w-15],7)^a(i[w-15],18)^i[w-15]>>>3,j=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+$+i[w-7]+j>>>0}let[d,f,p,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let $=a(h,6)^a(h,11)^a(h,25),j=h&g^~h&b,v=y+$+j+Wx[w]+i[w]>>>0,E=a(d,2)^a(d,13)^a(d,22),k=d&f^d&p^f&p,_=E+k>>>0;y=b,b=g,g=h,h=m+v>>>0,m=p,p=f,f=d,d=v+_>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+f>>>0,r[2]=r[2]+p>>>0,r[3]=r[3]+m>>>0,r[4]=r[4]+h>>>0,r[5]=r[5]+g>>>0,r[6]=r[6]+b>>>0,r[7]=r[7]+y>>>0}let l=new Uint8Array(32),c=new DataView(l.buffer);for(let u=0;u<8;u+=1)c.setUint32(u*4,r[u]);return l}function Vx(e,t){let n=Gx(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function X(e){let t=Fn(e);return t=t.replace(/^\/c\/[a-z]{2,3}\//i,""),t=t.replace(/^[a-z][\w.-]*:/i,""),t=t.replace(/_/g," ").replace(/\s+/g," ").trim(),t=t.replace(/^(?:the|an?)\s+/i,""),t.toLowerCase()}function Dn(e){let t=Fn(e);return Hx.get(t)??t}function ge(e,t,n){return pr(X(e),Dn(t),X(n))}var Wx,qx,Fn,Hx,pr,Yt=L(()=>{Wx=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]);qx=2e3,Fn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,qx);Hx=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"],["mgx:used-for","mgx:usedFor"],["mgx:made-of","mgx:madeOf"]]);pr=(e,t,n)=>`fact:${Vx(`${e}\0${t}\0${n}`,8)}`});var on={};Sn(on,{CARDINALITY_RULE_CONFIDENCE:()=>ek,CAX_DW_RULE:()=>Rc,CAX_DW_RULE_CONFIDENCE:()=>Tc,CAX_MAXC0_RULE_CONFIDENCE:()=>nk,CLS_SVF1_RULE:()=>Cc,CLS_SVF1_RULE_CONFIDENCE:()=>Ic,DEFAULT_MAX_ENVIRONMENTS:()=>yi,DISJOINT_PREDICATE:()=>yo,ENTAILED_DISJOINT_PROVENANCE:()=>Ac,ENTAILED_PROVENANCE:()=>Af,ENTAILED_SCM_SVF_PROVENANCE:()=>Mc,ENTAILED_SVF1_PROVENANCE:()=>Oc,ENTAILED_TYPE_PROVENANCE:()=>Cf,ON_PROPERTY_PREDICATE:()=>vn,SCM_SVF_RULE:()=>Nc,SCM_SVF_RULE_CONFIDENCE:()=>Pc,SOME_VALUES_FROM_PREDICATE:()=>$n,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>Tt,buildCardinalityRestrictions:()=>Zx,buildRelevanceFrontier:()=>_c,deriveDisjointViolations:()=>Nf,deriveSomeValuesFromApplication:()=>Mf,deriveSomeValuesFromSubsumption:()=>Pf,deriveSubClassClosure:()=>Of,deriveSubClassClosureDelta:()=>If,deriveTypePropagation:()=>Lf,entailedTrustFrom:()=>Yx,findConsistencyViolations:()=>ok,findIsaChain:()=>Fc,proveCardinalityAtLeast:()=>tk,proveMaxCardinalityZeroDenial:()=>sk,retractSubClassOf:()=>lk,syllogise:()=>rk});function _f(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 Yx(e,t=1){let n=(Array.isArray(e)?e:[]).filter(o=>typeof o=="number");if(!n.length)return null;let s=Math.max(0,Math.min(1,Math.min(...n)*t));return Number(s.toFixed(6))}function zn(e){if(!e)return null;let t=e instanceof Set?[...e]:Array.isArray(e)?e:[],n=new Set;for(let s of t){let o=X(s);o&&n.add(o)}return n.size?n:null}function Of(e,{depth:t=32,budget:n=50,focus:s=null}={}){let o=new Set,r=new Map;for(let[u,d]of e||[])!u||!d||u===d||(o.add(`${u}${Le}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:zn(s),a=(u,d,f)=>!i||i.has(u)||i.has(d)||i.has(f),l=[],c=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[p,m]of r)for(let h of m){let g=r.get(h);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,h,b)&&d.push([p,h,b,y])}}if(!d.length)break;d.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let f=!1;for(let[p,m,h,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:h,via:m}),r.has(p)||r.set(p,new Set),r.get(p).add(h),f=!0}if(l.length>=n||!f)break}return l}function If(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[m,h]of e||[])!m||!h||m===h||(r.add(`${m}${Le}${h}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),a.has(h)||a.set(h,new Set),a.get(h).add(m));let l=[],c=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let g=`${m}${Le}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:zn(o),d=(m,h,g)=>!u||u.has(m)||u.has(h)||u.has(g),f=[],p=new Set;for(let m=0;m<n&&l.length;m+=1){let h=[],g=(w,$,j)=>{if(w===j)return;let v=`${w}${Le}${j}`;r.has(v)||p.has(v)||d(w,$,j)&&h.push([w,$,j,v])};for(let[w,$]of l){for(let j of i.get($)||[])g(w,$,j);for(let j of a.get(w)||[])g(j,w,$)}if(!h.length)break;h.sort((w,$)=>w[0].localeCompare($[0])||w[2].localeCompare($[2])||w[1].localeCompare($[1]));let b=!1,y=[];for(let[w,$,j,v]of h)if(!p.has(v)){if(f.length>=s)break;p.add(v),f.push({subject:w,object:j,via:$}),i.has(w)||i.set(w,new Set),i.get(w).add(j),a.has(j)||a.set(j,new Set),a.get(j).add(w),y.push([w,j]),b=!0}if(f.length>=s||!b)break;l=y}return f}function xn(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 Xx(e){return xn((e||[]).map(([t,n])=>[n,t]))}function _c(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||(as(c.predicate)?n.push([c.subject,c.object]):Ls(c.predicate)?s.push([c.subject,c.object]):vo(c.predicate)?o.set(c.subject,c.object):mr(c.predicate)&&r.set(c.subject,c.object));let i=Xx(n),a=new Set;for(let c of t||[]){let u=X(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 Lf(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=xn(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Le}${m}`);let l=s instanceof Set?s.size?s:null:zn(s),c=(p,m,h)=>!l||l.has(p)||l.has(m)||l.has(h),u=[];for(let[p,m]of e||[]){if(!p||!m)continue;let h=`${p}${Le}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,m,g)&&u.push([p,m,g,b])}}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let d=[],f=new Set;for(let[p,m,h,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:h,via:m})}return d}function Nf(e,t,n,{budget:s=50,focus:o=null}={}){let r=xn(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Le}${h}`),a.add(`${h}${Le}${m}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(m));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:zn(o),u=(m,h,g)=>!c||c.has(m)||c.has(h)||c.has(g),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let g=`${m}${Le}${h}`;if(!l.has(g)){l.add(g);for(let b of[h,...r(h)]){let y=i.get(b);if(y)for(let w of y){if(w===m)continue;let $=`${m}${Le}${w}`;a.has($)||u(m,h,w)&&d.push([m,h,b,w,$])}}}}d.sort((m,h)=>m[0].localeCompare(h[0])||m[3].localeCompare(h[3])||m[2].localeCompare(h[2])||m[1].localeCompare(h[1]));let f=[],p=new Set;for(let[m,h,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:m,object:b,viaType:h,viaClass:g})}return f}function Mf(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=xn(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Le}${g.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(g.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[g,b]of t||[])!g||!b||(l.add(`${g}${Le}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:zn(r),d=(g,b,y)=>!u||u.has(g)||u.has(b)||u.has(y),f=new Set,p=[];for(let[g,b,y]of e||[]){if(!g||!b||!y)continue;let w=X(b),$=`${g}${Le}${w}${Le}${y}`;if(f.has($))continue;f.add($);let j=c.get(y);if(j)for(let v of j)for(let E of[v,...i(v)]){let k=a.get(`${w}${Le}${E}`);if(k)for(let _ of k){if(g===_)continue;let R=`${g}${Le}${_}`;l.has(R)||d(g,y,_)&&p.push([g,b,w,y,v,E,_,R])}}}p.sort((g,b)=>g[0].localeCompare(b[0])||g[6].localeCompare(b[6])||g[1].localeCompare(b[1])||g[3].localeCompare(b[3]));let m=[],h=new Set;for(let[g,b,y,w,$,j,v,E]of p)if(!h.has(E)){if(m.length>=o)break;h.add(E),m.push({subject:g,object:v,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:$,viaTarget:j})}return m}function Zx(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(vo(r.predicate))t.set(r.subject,r.object);else if(Kx(r.predicate))s.set(r.subject,r.object);else{let i=Qx[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)!==Jx)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 Pf(e,t,{budget:n=50,focus:s=null}={}){let o=xn(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=X(f.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:f.restriction,target:f.target})}let i=new Set;for(let[f,p]of t||[])f&&p&&i.add(`${f}${Le}${p}`);let a=s instanceof Set?s.size?s:null:zn(s),l=(f,p)=>!a||a.has(f)||a.has(p),c=[];for(let[,f]of r)if(!(f.length<2))for(let p of f)for(let m of f){if(p.restriction===m.restriction||p.target===m.target||!o(p.target).has(m.target))continue;let h=`${p.restriction}${Le}${m.restriction}`;i.has(h)||l(p.restriction,m.restriction)&&c.push([p.restriction,m.restriction,p.target,m.target,h])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,m,h,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:m,viaY2:h})}return u}function Ff(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=xn(e),a=r instanceof Set?r.size?r:null:zn(r),l=f=>!a||a.has(n)||a.has(f),c=new Map;for(let[f,p]of e||[])!f||!p||(c.has(f)||c.set(f,new Set),c.get(f).add(p));let u=new Map((t||[]).map(f=>[f.restriction,f])),d=0;for(let f of[n,...i(n)]){if(d>=o)break;if(d+=1,!!l(f))for(let p of c.get(f)||[]){let m=u.get(p);if(m&&s(m))return{viaClass:f,viaRestriction:p,record:m}}}return null}function tk(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Ff(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 sk(e,t,n,s,o={}){if(!s)return null;let r=Ff(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 ok(e,t,n,{budget:s=50,focus:o=null}={}){let r=xn(t),i=new Map;for(let[p,m]of n||[])!p||!m||p===m||(i.has(p)||i.set(p,new Set),i.get(p).add(m),i.has(m)||i.set(m,new Set),i.get(m).add(p));if(!i.size)return[];let a=new Map;for(let[p,m]of e||[])!p||!m||(a.has(p)||a.set(p,new Set),a.get(p).add(m));let l=o instanceof Set?o.size?o:null:zn(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,m]of a){if(!c(p))continue;let h=[...m].sort();for(let g=0;g<h.length;g+=1)for(let b=g+1;b<h.length;b+=1){let[y,w]=[h[g],h[b]],$=[y,...r(y)],j=[w,...r(w)],v=null;for(let k of $){let _=i.get(k);if(_){for(let R of j)if(_.has(R)){v=[k,R];break}if(v)break}}if(!v)continue;let E=`${p}${Le}${y}${Le}${w}`;d.has(E)||(d.add(E),u.push([p,y,w,v[0],v[1]]))}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[1].localeCompare(m[1])||p[2].localeCompare(m[2]));let f=[];for(let[p,m,h,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:m,classB:h,viaA:g,viaB:b})}return f}async function rk(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=yi,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=_f(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(S=>as(S.predicate)).map(S=>[S.subject,S.object]),h=p.filter(S=>Ls(S.predicate)).map(S=>[S.subject,S.object]),g=p.filter(S=>Is(S.predicate)).map(S=>[S.subject,S.object]),b=new Map,y=new Map,w=[];for(let S of p){let le=String(S.predicate||"").trim().toLowerCase();vo(S.predicate)?b.set(S.subject,S.object):mr(S.predicate)?y.set(S.subject,S.object):Lc.has(le)||w.push([S.subject,S.predicate,S.object])}let $=[];for(let[S,le]of b){let Ae=y.get(S);Ae&&$.push({restriction:S,property:le,target:Ae})}let j=zn(s),v=o&&j?_c(p,[...j]):j,E=v===null&&d?await a.loadSyllogiseState(e):null,k=new Set(p.map(S=>S.id)),_=Array.isArray(E?.factIds)?E.factIds.filter(S=>!k.has(S)):[],R=E&&Array.isArray(E.factIds)&&!_.length&&!i?"delta":"full",x=R==="delta"?new Set(E.factIds):null,T=R==="delta"?p.filter(S=>!x.has(S.id)):p,M=T.length,A=new Map;for(let S of p)A.set(`${S.subject}${Le}${S.predicate}${Le}${S.object}`,S.trust);let P=(S,le,Ae)=>A.get(`${S}${Le}${le}${Le}${Ae}`),G=(S,le,Ae)=>A.has(`${S}${Le}${le}${Le}${Ae}`),J=S=>S.filter(le=>typeof le=="number"),ee=R==="delta"&&!T.length,ie=R==="delta"?T.filter(S=>as(S.predicate)).map(S=>[S.subject,S.object]):[],D=R==="delta"?ie.length?If(m,ie,{depth:t,budget:n,focus:v}):[]:Of(m,{depth:t,budget:n,focus:v}),z=m.concat(D.map(S=>[S.subject,S.object])),U=v,C=null;if(R==="delta"&&!ee){let S=p.concat(D.map(Ae=>({subject:Ae.subject,predicate:Fe,object:Ae.object}))),le=[];for(let Ae of T)le.push(Ae.subject,Ae.object);C=_c(S,le),U=C}let I=S=>!C||C.has(S),O=C?h.filter(([S,le])=>I(S)||I(le)):h,N=new Set;if(C)for(let S of T)Is(S.predicate)&&(N.add(S.subject),N.add(S.object));let F=C&&N.size?xn(z):null,W=C?h.filter(([S,le])=>I(S)||I(le)||F&&[...F(le)].some(Ae=>N.has(Ae))):h,H=new Set;if(C){for(let S of T)if(vo(S.predicate)||mr(S.predicate)){let le=b.get(S.subject);le&&H.add(X(le))}}let ae=C?w.filter(([S,le,Ae])=>I(S)||I(Ae)||H.has(X(le))):w,ce=Math.max(0,n-D.length),K=ce>0&&!ee?Lf(O,z,{budget:ce,focus:U,presentTypeEdges:h}):[],Z=Math.max(0,n-D.length-K.length),V=Z>0&&!ee?Nf(W,z,g,{budget:Z,focus:U}):[],ne=Math.max(0,n-D.length-K.length-V.length),te=ne>0&&$.length&&!ee?Mf(ae,h,z,$,{budget:ne,focus:U}):[],$e=Math.max(0,n-D.length-K.length-V.length-te.length),Te=$e>0&&$.length>1&&!ee?Pf($,z,{budget:$e,focus:U}):[],pe=new Map($.map(S=>[S.restriction,S])),re=[...D.map(S=>({subject:S.subject,predicate:Fe,object:S.object,provenance:Af,justification:[[ge(S.subject,Fe,S.via),ge(S.via,Fe,S.object)]]})),...K.map(S=>({subject:S.subject,predicate:Tt,object:S.object,provenance:Cf,justification:[[ge(S.subject,Tt,S.via),ge(S.via,Fe,S.object)]]})),...V.map(S=>{let le=G(S.viaClass,yo,S.object),[Ae,En]=le?[S.viaClass,S.object]:[S.object,S.viaClass],Qs=J([P(S.subject,Tt,S.viaType),P(Ae,yo,En),...S.viaClass!==S.viaType?[P(S.viaType,Fe,S.viaClass)]:[]]);return{subject:S.subject,predicate:yo,object:S.object,provenance:Ac,justification:[[ge(S.subject,Tt,S.viaType),ge(Ae,yo,En),...S.viaClass!==S.viaType?[ge(S.viaType,Fe,S.viaClass)]:[]]],...Qs.length?{premiseTrusts:Qs,ruleConfidence:Tc}:{}}}),...te.map(S=>{let le=J([P(S.subject,S.viaProperty,S.viaValue),P(S.viaValue,Tt,S.viaType),P(S.object,vn,S.viaPropertyKey),P(S.object,$n,S.viaTarget),...S.viaType!==S.viaTarget?[P(S.viaType,Fe,S.viaTarget)]:[]]);return{subject:S.subject,predicate:Tt,object:S.object,provenance:Oc,justification:[[ge(S.subject,S.viaProperty,S.viaValue),ge(S.viaValue,Tt,S.viaType),ge(S.object,vn,S.viaPropertyKey),ge(S.object,$n,S.viaTarget),...S.viaType!==S.viaTarget?[ge(S.viaType,Fe,S.viaTarget)]:[]]],...le.length?{premiseTrusts:le,ruleConfidence:Ic}:{}}}),...Te.map(S=>{let le=pe.get(S.subject),Ae=pe.get(S.object),En=J([le&&P(S.subject,vn,le.property),P(S.subject,$n,S.viaY1),Ae&&P(S.object,vn,Ae.property),P(S.object,$n,S.viaY2),P(S.viaY1,Fe,S.viaY2)]);return{subject:S.subject,predicate:Fe,object:S.object,provenance:Mc,justification:[[...le?[ge(S.subject,vn,le.property)]:[],ge(S.subject,$n,S.viaY1),...Ae?[ge(S.object,vn,Ae.property)]:[],ge(S.object,$n,S.viaY2),ge(S.viaY1,Fe,S.viaY2)]],...En.length?{premiseTrusts:En,ruleConfidence:Pc}:{}}})],fe=re.map(S=>({id:ge(S.subject,S.predicate,S.object),subject:S.subject,predicate:S.predicate,object:S.object,environments:S.justification,write:S})),be=zf(p.concat(fe.map(S=>({id:S.id,subject:S.subject,predicate:S.predicate,object:S.object})))),Ce=new Map(p.map(S=>[S.id,S])),ue=S=>as(S)||Ls(S)||Is(S),q=S=>R!=="delta"||C!==null&&(C.has(S.subject)||C.has(S.object)),se=p.filter(S=>ue(S.predicate)&&Df(S.provenance)&&fr(S).length<r&&q(S)).map(S=>({id:S.id,subject:S.subject,predicate:S.predicate,object:S.object,environments:fr(S),provenance:S.provenance})),Ze=[...fe,...se].sort((S,le)=>S.subject.localeCompare(le.subject)||S.predicate.localeCompare(le.predicate)||S.object.localeCompare(le.object)),De=0,Ve=!1,Jt=0;for(let S of Ze){if(Jt>=n){Ve=!0;break}Jt+=1;let le=be(S,{maxEnvironments:r+1}),{kept:Ae,truncated:En}=ak(S.environments,le,r);if(En&&(Ve=!0),!(Ae.length<=S.environments.length)){if(De+=Ae.length-S.environments.length,S.write){S.write.justification=Ae;continue}re.push({subject:S.subject,predicate:S.predicate,object:S.object,justification:Ae,...Bf(S.provenance,Ae,Qs=>Ce.get(Qs)?.trust)||{}})}}let{ids:Qt}=await u(e,re),Gt=[],Lt=0;for(let S of D)Gt.push({id:Qt[Lt],subject:S.subject,object:S.object,via:S.via,rule:Rf}),Lt+=1;for(let S of K)Gt.push({id:Qt[Lt],subject:S.subject,object:S.object,via:S.via,rule:Tf}),Lt+=1;for(let S of V)Gt.push({id:Qt[Lt],subject:S.subject,object:S.object,via:S.viaClass,rule:Rc}),Lt+=1;for(let S of te)Gt.push({id:Qt[Lt],subject:S.subject,object:S.object,via:S.viaValue,rule:Cc}),Lt+=1;for(let S of Te)Gt.push({id:Qt[Lt],subject:S.subject,object:S.object,via:S.viaY1,rule:Nc}),Lt+=1;let Nr=Gt.length>=n;if(v===null&&d&&!Nr){let S=new Set(k);for(let le of Qt)S.add(le);await a.saveSyllogiseState(e,{version:1,factIds:[...S].sort(),completedAt:new Date().toISOString()})}return{derived:Gt,count:Gt.length,budget:n,depth:t,truncated:Nr,mode:R,deltaSize:M,environmentsAdded:De,alternatesTruncated:Ve}}function Df(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function ik(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();as(u.predicate)?t.push([u.subject,u.object]):Ls(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):Is(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)):vo(u.predicate)?o.set(u.subject,u.object):mr(u.predicate)?r.set(u.subject,u.object):Lc.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([X(u.predicate),u.object]))}let a=xn(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:X(d),target:f}:null};return u=>{if(as(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(Ls(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(Is(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 zf(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();as(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)):Ls(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):Is(p.predicate)?(r.add(`${p.subject}${Le}${p.object}`),i.has(p.subject)||i.set(p.subject,new Set),i.get(p.subject).add(p.object),i.has(p.object)||i.set(p.object,new Set),i.get(p.object).add(p.subject)):vo(p.predicate)?a.set(p.subject,p.object):mr(p.predicate)?l.set(p.subject,p.object):Lc.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=xn(n),d=p=>s.get(p)||new Set,f=p=>{let m=a.get(p),h=l.get(p);return m&&h?{property:m,propertyKey:X(m),target:h}:null};return(p,{maxEnvironments:m=yi}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every($=>t.has($)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),h.push(y))};if(as(p.predicate)){for(let y of[...d(p.subject)].sort()){if(h.length>=m)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([ge(p.subject,Fe,y),ge(y,Fe,p.object)])}if(h.length<m){let y=f(p.subject),w=f(p.object);y&&w&&y.propertyKey===w.propertyKey&&y.target!==w.target&&d(y.target).has(w.target)&&b([ge(p.subject,vn,y.property),ge(p.subject,$n,y.target),ge(p.object,vn,w.property),ge(p.object,$n,w.target),ge(y.target,Fe,w.target)])}return h}if(Ls(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(h.length>=m)break;w!==p.object&&d(w).has(p.object)&&b([ge(p.subject,Tt,w),ge(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([$])=>X($)===y.propertyKey).sort(($,j)=>$[0].localeCompare(j[0])||$[1].localeCompare(j[1]));for(let[$,j]of w){if(h.length>=m)break;for(let v of[...o.get(j)||[]].sort()){if(h.length>=m)break;v!==y.target&&!d(v).has(y.target)||b([ge(p.subject,$,j),ge(j,Tt,v),ge(p.object,vn,y.propertyKey),ge(p.object,$n,y.target),...v!==y.target?[ge(v,Fe,y.target)]:[]])}}}return h}if(Is(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let $ of[w,...u(w)])(i.get($)||new Set).has(p.object)&&y.push([w,$]);y.sort((w,$)=>w[0].localeCompare($[0])||w[1].localeCompare($[1]));for(let[w,$]of y){if(h.length>=m)break;let j=r.has(`${$}${Le}${p.object}`),[v,E]=j?[$,p.object]:[p.object,$];b([ge(p.subject,Tt,w),ge(v,yo,E),...$!==w?[ge(w,Fe,$)]:[]])}return h}return h}}function ak(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 Bf(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=ck.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 lk(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=yi,store:i}={}){let{loadMemory:a,readFactRows:l,removeFacts:c}=_f(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),u=typeof i?.appendFacts=="function"?i.appendFacts:null,d=X(t),f=X(n),p=ge(d,Fe,f),m=await a(e),h=l(m),g=new Map(h.map(R=>[R.id,R]));if(!g.has(p))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let b=h.filter(R=>fr(R).length&&Df(R.provenance)),y=new Map;for(let R of b)for(let x of fr(R))for(let T of x)y.has(T)||y.set(T,new Set),y.get(T).add(R.id);let w=new Set([p]),$=[p],j=new Map,v=!1,E=0,k=[p];for(;E<o;E+=1){let R=new Set;for(let ee of k)for(let ie of y.get(ee)||[])w.has(ie)||R.add(ie);let x=[...R].map(ee=>g.get(ee)).sort((ee,ie)=>ee.subject.localeCompare(ie.subject)||ee.predicate.localeCompare(ie.predicate)||ee.object.localeCompare(ie.object));if(!x.length)break;let T=h.filter(ee=>!w.has(ee.id)&&!R.has(ee.id)),M=new Set(T.map(ee=>ee.id)),A=zf(T),P=ik(T),G=!1,J=!1;k=[];for(let ee of x){if(w.size>=s){J=!0;break}let ie=fr(ee),D=ie.filter(U=>U.every(C=>M.has(C)));if(D.length){D.length!==ie.length&&j.set(ee.id,D);continue}let z=A(ee,{maxEnvironments:r});if(z.length){j.set(ee.id,z);continue}P(ee)||(w.add(ee.id),$.push(ee.id),k.push(ee.id),G=!0)}if(J){v=!0;break}if(!G)break}!v&&E>=o&&(v=b.some(R=>!w.has(R.id)&&R.justification.some(x=>w.has(x))));let{removed:_}=await c(e,$);if(u){let R=[...j.entries()].filter(([x])=>!w.has(x)).sort((x,T)=>x[0].localeCompare(T[0])).map(([x,T])=>{let M=g.get(x);return{subject:M.subject,predicate:M.predicate,object:M.object,justification:T,...Bf(M.provenance,T,A=>g.get(A)?.trust)||{}}});R.length&&await u(e,R)}return{retracted:_,count:_.length,budget:s,depth:o,truncated:v,found:!0}}function Fc(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:Tt,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Fe,object:c}]});let l=new Set([e]);for(let c=1;c<=o&&a.length;c+=1){for(let{node:d,path:f}of a)if(r.has(d))return f;if(c===o)break;let u=[];for(let{node:d,path:f}of a)if(!l.has(d)){l.add(d);for(let p of i.get(d)||[])l.has(p)||u.push({node:p,path:[...f,{subject:d,predicate:Fe,object:p}]})}a=u}return null}var Fe,Rf,Af,Tt,Tf,Cf,yo,Rc,Ac,Tc,vn,$n,Cc,Oc,Ic,yi,Le,as,Ls,Is,vo,mr,Kx,Lc,Jx,Qx,Nc,Mc,Pc,ek,nk,fr,ck,Bt=L(()=>{Yt();Fe="rdfs:subClassOf",Rf="subClassOf",Af=`entailed:${Rf}`,Tt="rdf:type",Tf="type",Cf=`entailed:${Tf}`,yo="owl:disjointWith",Rc="disjointWith",Ac=`entailed:${Rc}`,Tc=.95,vn="owl:onProperty",$n="owl:someValuesFrom",Cc="someValuesFrom",Oc=`entailed:${Cc}`,Ic=.95,yi=4,Le="\u241F",as=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Ls=e=>String(e||"").trim().toLowerCase()==="rdf:type",Is=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",vo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",mr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",Kx=e=>String(e||"").trim().toLowerCase()==="owl:onclass",Lc=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);Jx="has",Qx={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};Nc="someValuesFromSubsumption",Mc=`entailed:${Nc}`,Pc=.95;ek=.95;nk=.95;fr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);ck=new Map([[Ac,Tc],[Oc,Ic],[Mc,Pc]])});function Eo(e){let t=String(e||""),n=Uf.get(t);return n||(t.startsWith(Dc)?$o+t.slice(Dc.length):t)}function Wf(e){let t=String(e||""),n=uk.get(t);return n||(t.startsWith($o)?Dc+t.slice($o.length):null)}function qf(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=Fc(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function xi(e,t,n,{maxHops:s=3}={}){let o=ko(e),r=ko(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Vf(i),c=i.filter(b=>(b.predicate===$i||b.predicate===xo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===xo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=qf(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:Bc(o,r,i,{maxHops:s})};u.sort((b,y)=>b.hops-y.hops||(y.fact.trust||0)-(b.fact.trust||0));let d=u[0].hops,f=u.filter(b=>b.hops===d),p=f.filter(b=>b.polarity==="positive").map(b=>b.fact),m=f.filter(b=>b.polarity==="negative").map(b=>b.fact),h=m.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==h)||null;return{verdict:p.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:p,negative:m,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function Bc(e,t,n,{maxHops:s=3}={}){let o=ko(e),r=ko(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===Tt),l=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(h=>h.object===c&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let g=i.find(b=>b.subject===h&&r.has(b.object)&&(b.predicate===$i||b.predicate===xo));return g?{name:h,polarity:g.predicate===xo?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=Vf(i);return{klass:c,kinds:u.length,positive:f.filter(h=>h.polarity==="positive"),negative:f.filter(h=>h.polarity==="negative"),unknown:f.filter(h=>h.polarity==="unknown"),chain:qf(o,c,p,m,s)}}function Uc(e,t,{exclude:n=[],maxHops:s=3}={}){let o=ko(e),r=ko(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==$i||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),xi(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(dk)}var $o,Dc,vi,Uf,uk,Gf,$i,xo,zc,dk,ko,Vf,Wc=L(()=>{Bt();$o="mgxneg:",Dc="mgx:",vi="mgxneg:subClassOf",Uf=new Map([[Fe,vi]]),uk=new Map([...Uf].map(([e,t])=>[t,e]));Gf=e=>String(e||"").startsWith($o),$i="mgx:capableOf",xo=Eo($i),zc=6,dk=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),ko=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Vf=e=>({typeEdges:e.filter(t=>t.predicate===Tt).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function So(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function hk(e,t){(!e?.class||!pk.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function gk(e,t){for(let s of["rdf:subject","rdf:predicate","rdf:object"])ki(So(e,s))||t.push(`a Fact needs a non-empty ${s}`);for(let s of["rdf:subject","rdf:object"]){let o=So(e,s);o!==void 0&&mk.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=So(e,"mgx:factProvenance");n!==void 0&&!ki(n)&&t.push("mgx:factProvenance, when present, must be non-empty")}function bk(e,t){ki(So(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=So(e,"mgx:ruleKind");if(!n||!Hf.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...Hf].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of fk[n])ki(So(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function wk(e){let t=[];return hk(e,t),e?.class==="Fact"&&gk(e,t),e?.class==="Rule"&&bk(e,t),{ok:t.length===0,violations:t}}function Gc(e){let t=wk(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 pk,Hf,fk,mk,ki,Kf=L(()=>{pk=new Set(["Utterance","Fact","Session","Source","Rule"]),Hf=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),fk={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"]},mk=/[.!?]\s+\w/;ki=e=>typeof e=="string"&&e.trim().length>0});var Yf={};Sn(Yf,{access:()=>$k,appendFile:()=>Ek,basename:()=>zk,copyFile:()=>Ck,createInterface:()=>Vk,createReadStream:()=>Ik,createRequire:()=>yk,createWriteStream:()=>Lk,default:()=>Hk,dirname:()=>Pk,existsSync:()=>Nk,fileURLToPath:()=>Uk,isAbsolute:()=>Dk,join:()=>Mk,mkdir:()=>Sk,mkdtemp:()=>jk,randomBytes:()=>Wk,readFile:()=>xk,readFileSync:()=>vk,readdir:()=>Ok,rename:()=>_k,resolve:()=>Fk,rm:()=>Ak,sep:()=>Bk,spawnSync:()=>Gk,stat:()=>Tk,tmpdir:()=>qk,unlink:()=>Rk,writeFile:()=>kk});var ut,yk,vk,$k,xk,kk,Ek,Sk,jk,_k,Rk,Ak,Tk,Ck,Ok,Ik,Lk,Nk,Mk,Pk,Fk,Dk,zk,Bk,Uk,Wk,Gk,Vk,qk,Hk,Xf=L(()=>{ut=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},yk=ut("createRequire"),vk=ut("readFileSync"),$k=ut("access"),xk=ut("readFile"),kk=ut("writeFile"),Ek=ut("appendFile"),Sk=ut("mkdir"),jk=ut("mkdtemp"),_k=ut("rename"),Rk=ut("unlink"),Ak=ut("rm"),Tk=ut("stat"),Ck=ut("copyFile"),Ok=ut("readdir"),Ik=ut("createReadStream"),Lk=ut("createWriteStream"),Nk=()=>!1,Mk=(...e)=>e.join("/"),Pk=e=>String(e).replace(/\/[^/]*$/,""),Fk=(...e)=>e.join("/"),Dk=e=>String(e).startsWith("/"),zk=e=>String(e).split("/").pop(),Bk="/",Uk=e=>String(e),Wk=ut("randomBytes"),Gk=ut("spawnSync"),Vk=ut("createInterface"),qk=()=>"/tmp",Hk={}});var Kk,hr,Vc=L(()=>{Kk=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,hr=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(Kk);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 Yk(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function Xk(e,t,n){let s=e.split(/\r\n|\n|\r/g),o="",r=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let a=s[i-1];a&&(o+=i.toString().padEnd(r," "),o+=": ",o+=a,o+=`
85
+ `),tier:g,topup:y}}async function cl(e,{config:t,source:n,tel:s}){return(await Rm(e,{config:t,source:n,tel:s})).text}var ll=L(()=>{jt();Be();Dt();Ui();gr();Ie();ws();Hi();Vi();Ge();cl.ownsGraphLoad=!0});function Tm(e,{graph:t,svc:n}){let{match:s}=$t(n,et(e,"symbol"),"symbol");return tf(jo(t,s))}var Am=L(()=>{Ie();Ge()});function qi(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 Ir(e){return qi(e).toString(16).padStart(8,"0")}function PS(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,_=a(i[w-2],17)^a(i[w-2],19)^i[w-2]>>>10;i[w]=i[w-16]+$+i[w-7]+_>>>0}let[d,f,p,m,h,g,b,y]=r;for(let w=0;w<64;w+=1){let $=a(h,6)^a(h,11)^a(h,25),_=h&g^~h&b,v=y+$+_+NS[w]+i[w]>>>0,x=a(d,2)^a(d,13)^a(d,22),E=d&f^d&p^f&p,S=x+E>>>0;y=b,b=g,g=h,h=m+v>>>0,m=p,p=f,f=d,d=v+S>>>0}r[0]=r[0]+d>>>0,r[1]=r[1]+f>>>0,r[2]=r[2]+p>>>0,r[3]=r[3]+m>>>0,r[4]=r[4]+h>>>0,r[5]=r[5]+g>>>0,r[6]=r[6]+b>>>0,r[7]=r[7]+y>>>0}let l=new Uint8Array(32),c=new DataView(l.buffer);for(let u=0;u<8;u+=1)c.setUint32(u*4,r[u]);return l}function MS(e,t){let n=PS(e),s="";for(let o=0;o<t;o+=1)s+=n[o].toString(16).padStart(2,"0");return s}function X(e){let t=Xn(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 Jn(e){let t=Xn(e);return DS.get(t)??t}function ge(e,t,n){return Po(X(e),Jn(t),X(n))}var NS,FS,Xn,DS,Po,Zt=L(()=>{NS=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]);FS=2e3,Xn=e=>String(e??"").replace(/\s+/g," ").trim().slice(0,FS);DS=new Map([["mgx:cause","mgx:causes"],["mgx:desire","mgx:desires"],["mgx:want","mgx:desires"],["mgx:require","mgx:hasPrerequisite"],["mgx:involve","mgx:hasSubevent"],["mgx:used-for","mgx:usedFor"],["mgx:made-of","mgx:madeOf"]]);Po=(e,t,n)=>`fact:${MS(`${e}\0${t}\0${n}`,8)}`});var cn={};Mn(cn,{CARDINALITY_RULE_CONFIDENCE:()=>VS,CAX_DW_RULE:()=>dl,CAX_DW_RULE_CONFIDENCE:()=>fl,CAX_MAXC0_RULE_CONFIDENCE:()=>KS,CLS_SVF1_RULE:()=>ml,CLS_SVF1_RULE_CONFIDENCE:()=>gl,DEFAULT_MAX_ENVIRONMENTS:()=>Ki,DISJOINT_PREDICATE:()=>Mo,ENTAILED_DISJOINT_PROVENANCE:()=>pl,ENTAILED_PROVENANCE:()=>Im,ENTAILED_SCM_SVF_PROVENANCE:()=>yl,ENTAILED_SVF1_PROVENANCE:()=>hl,ENTAILED_TYPE_PROVENANCE:()=>Nm,ON_PROPERTY_PREDICATE:()=>_n,SCM_SVF_RULE:()=>wl,SCM_SVF_RULE_CONFIDENCE:()=>vl,SOME_VALUES_FROM_PREDICATE:()=>Rn,SUBCLASS_PREDICATE:()=>Fe,TYPE_PREDICATE:()=>It,buildCardinalityRestrictions:()=>HS,buildRelevanceFrontier:()=>ul,deriveDisjointViolations:()=>Dm,deriveSomeValuesFromApplication:()=>zm,deriveSomeValuesFromSubsumption:()=>Bm,deriveSubClassClosure:()=>Pm,deriveSubClassClosureDelta:()=>Mm,deriveTypePropagation:()=>Fm,entailedTrustFrom:()=>BS,findConsistencyViolations:()=>XS,findIsaChain:()=>$l,proveCardinalityAtLeast:()=>qS,proveMaxCardinalityZeroDenial:()=>YS,retractSubClassOf:()=>tk,syllogise:()=>JS});function Cm(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 BS(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 Qn(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=X(s);o&&n.add(o)}return n.size?n:null}function Pm(e,{depth:t=32,budget:n=50,focus:s=null}={}){let o=new Set,r=new Map;for(let[u,d]of e||[])!u||!d||u===d||(o.add(`${u}${Le}${d}`),r.has(u)||r.set(u,new Set),r.get(u).add(d));let i=s instanceof Set?s.size?s:null:Qn(s),a=(u,d,f)=>!i||i.has(u)||i.has(d)||i.has(f),l=[],c=new Set;for(let u=0;u<t;u+=1){let d=[];for(let[p,m]of r)for(let h of m){let g=r.get(h);if(g)for(let b of g){if(p===b)continue;let y=`${p}${Le}${b}`;o.has(y)||c.has(y)||a(p,h,b)&&d.push([p,h,b,y])}}if(!d.length)break;d.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let f=!1;for(let[p,m,h,g]of d)if(!c.has(g)){if(l.length>=n)break;c.add(g),l.push({subject:p,object:h,via:m}),r.has(p)||r.set(p,new Set),r.get(p).add(h),f=!0}if(l.length>=n||!f)break}return l}function Mm(e,t,{depth:n=32,budget:s=50,focus:o=null}={}){let r=new Set,i=new Map,a=new Map;for(let[m,h]of e||[])!m||!h||m===h||(r.add(`${m}${Le}${h}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),a.has(h)||a.set(h,new Set),a.get(h).add(m));let l=[],c=new Set;for(let[m,h]of t||[]){if(!m||!h||m===h)continue;let g=`${m}${Le}${h}`;c.has(g)||(c.add(g),l.push([m,h]))}let u=o instanceof Set?o.size?o:null:Qn(o),d=(m,h,g)=>!u||u.has(m)||u.has(h)||u.has(g),f=[],p=new Set;for(let m=0;m<n&&l.length;m+=1){let h=[],g=(w,$,_)=>{if(w===_)return;let v=`${w}${Le}${_}`;r.has(v)||p.has(v)||d(w,$,_)&&h.push([w,$,_,v])};for(let[w,$]of l){for(let _ of i.get($)||[])g(w,$,_);for(let _ of a.get(w)||[])g(_,w,$)}if(!h.length)break;h.sort((w,$)=>w[0].localeCompare($[0])||w[2].localeCompare($[2])||w[1].localeCompare($[1]));let b=!1,y=[];for(let[w,$,_,v]of h)if(!p.has(v)){if(f.length>=s)break;p.add(v),f.push({subject:w,object:_,via:$}),i.has(w)||i.set(w,new Set),i.get(w).add(_),a.has(_)||a.set(_,new Set),a.get(_).add(w),y.push([w,_]),b=!0}if(f.length>=s||!b)break;l=y}return f}function Tn(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 US(e){return Tn((e||[]).map(([t,n])=>[n,t]))}function ul(e,t){let n=[],s=[],o=new Map,r=new Map;for(let c of e||[])!c||!c.subject||!c.predicate||!c.object||($s(c.predicate)?n.push([c.subject,c.object]):Js(c.predicate)?s.push([c.subject,c.object]):Fo(c.predicate)?o.set(c.subject,c.object):Nr(c.predicate)&&r.set(c.subject,c.object));let i=US(n),a=new Set;for(let c of t||[]){let u=X(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 Fm(e,t,{budget:n=50,focus:s=null,presentTypeEdges:o=e}={}){let r=Tn(t),i=new Set,a=new Set;for(let[p,m]of o||[])p&&m&&i.add(`${p}${Le}${m}`);let l=s instanceof Set?s.size?s:null:Qn(s),c=(p,m,h)=>!l||l.has(p)||l.has(m)||l.has(h),u=[];for(let[p,m]of e||[]){if(!p||!m)continue;let h=`${p}${Le}${m}`;if(!a.has(h)){a.add(h);for(let g of r(m)){if(g===m||g===p)continue;let b=`${p}${Le}${g}`;i.has(b)||c(p,m,g)&&u.push([p,m,g,b])}}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[2].localeCompare(m[2])||p[1].localeCompare(m[1]));let d=[],f=new Set;for(let[p,m,h,g]of u)if(!f.has(g)){if(d.length>=n)break;f.add(g),d.push({subject:p,object:h,via:m})}return d}function Dm(e,t,n,{budget:s=50,focus:o=null}={}){let r=Tn(t),i=new Map,a=new Set;for(let[m,h]of n||[])!m||!h||m===h||(a.add(`${m}${Le}${h}`),a.add(`${h}${Le}${m}`),i.has(m)||i.set(m,new Set),i.get(m).add(h),i.has(h)||i.set(h,new Set),i.get(h).add(m));if(!i.size)return[];let l=new Set,c=o instanceof Set?o.size?o:null:Qn(o),u=(m,h,g)=>!c||c.has(m)||c.has(h)||c.has(g),d=[];for(let[m,h]of e||[]){if(!m||!h)continue;let g=`${m}${Le}${h}`;if(!l.has(g)){l.add(g);for(let b of[h,...r(h)]){let y=i.get(b);if(y)for(let w of y){if(w===m)continue;let $=`${m}${Le}${w}`;a.has($)||u(m,h,w)&&d.push([m,h,b,w,$])}}}}d.sort((m,h)=>m[0].localeCompare(h[0])||m[3].localeCompare(h[3])||m[2].localeCompare(h[2])||m[1].localeCompare(h[1]));let f=[],p=new Set;for(let[m,h,g,b,y]of d)if(!p.has(y)){if(f.length>=s)break;p.add(y),f.push({subject:m,object:b,viaType:h,viaClass:g})}return f}function zm(e,t,n,s,{budget:o=50,focus:r=null}={}){let i=Tn(n),a=new Map;for(let g of s||[]){if(!g||!g.restriction||!g.property||!g.target)continue;let b=`${g.property}${Le}${g.target}`;a.has(b)||a.set(b,new Set),a.get(b).add(g.restriction)}if(!a.size)return[];let l=new Set,c=new Map;for(let[g,b]of t||[])!g||!b||(l.add(`${g}${Le}${b}`),c.has(g)||c.set(g,new Set),c.get(g).add(b));let u=r instanceof Set?r.size?r:null:Qn(r),d=(g,b,y)=>!u||u.has(g)||u.has(b)||u.has(y),f=new Set,p=[];for(let[g,b,y]of e||[]){if(!g||!b||!y)continue;let w=X(b),$=`${g}${Le}${w}${Le}${y}`;if(f.has($))continue;f.add($);let _=c.get(y);if(_)for(let v of _)for(let x of[v,...i(v)]){let E=a.get(`${w}${Le}${x}`);if(E)for(let S of E){if(g===S)continue;let R=`${g}${Le}${S}`;l.has(R)||d(g,y,S)&&p.push([g,b,w,y,v,x,S,R])}}}p.sort((g,b)=>g[0].localeCompare(b[0])||g[6].localeCompare(b[6])||g[1].localeCompare(b[1])||g[3].localeCompare(b[3]));let m=[],h=new Set;for(let[g,b,y,w,$,_,v,x]of p)if(!h.has(x)){if(m.length>=o)break;h.add(x),m.push({subject:g,object:v,viaProperty:b,viaPropertyKey:y,viaValue:w,viaType:$,viaTarget:_})}return m}function HS(e){let t=new Map,n=new Map,s=new Map;for(let r of e||[])if(!(!r||!r.subject||!r.predicate))if(Fo(r.predicate))t.set(r.subject,r.object);else if(zS(r.predicate))s.set(r.subject,r.object);else{let i=GS[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)!==WS)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 Bm(e,t,{budget:n=50,focus:s=null}={}){let o=Tn(t),r=new Map;for(let f of e||[]){if(!f||!f.restriction||!f.property||!f.target)continue;let p=X(f.property);r.has(p)||r.set(p,[]),r.get(p).push({restriction:f.restriction,target:f.target})}let i=new Set;for(let[f,p]of t||[])f&&p&&i.add(`${f}${Le}${p}`);let a=s instanceof Set?s.size?s:null:Qn(s),l=(f,p)=>!a||a.has(f)||a.has(p),c=[];for(let[,f]of r)if(!(f.length<2))for(let p of f)for(let m of f){if(p.restriction===m.restriction||p.target===m.target||!o(p.target).has(m.target))continue;let h=`${p.restriction}${Le}${m.restriction}`;i.has(h)||l(p.restriction,m.restriction)&&c.push([p.restriction,m.restriction,p.target,m.target,h])}c.sort((f,p)=>f[0].localeCompare(p[0])||f[1].localeCompare(p[1]));let u=[],d=new Set;for(let[f,p,m,h,g]of c)if(!d.has(g)){if(u.length>=n)break;d.add(g),u.push({subject:f,object:p,viaY1:m,viaY2:h})}return u}function Um(e,t,n,s,{budget:o=20,focus:r=null}={}){if(!n)return null;let i=Tn(e),a=r instanceof Set?r.size?r:null:Qn(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 qS(e,t,n,s,o,r={}){if(!s||!Number.isFinite(o))return null;let i=Um(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 YS(e,t,n,s,o={}){if(!s)return null;let r=Um(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 XS(e,t,n,{budget:s=50,focus:o=null}={}){let r=Tn(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:Qn(o),c=p=>!l||l.has(p),u=[],d=new Set;for(let[p,m]of a){if(!c(p))continue;let h=[...m].sort();for(let g=0;g<h.length;g+=1)for(let b=g+1;b<h.length;b+=1){let[y,w]=[h[g],h[b]],$=[y,...r(y)],_=[w,...r(w)],v=null;for(let E of $){let S=i.get(E);if(S){for(let R of _)if(S.has(R)){v=[E,R];break}if(v)break}}if(!v)continue;let x=`${p}${Le}${y}${Le}${w}`;d.has(x)||(d.add(x),u.push([p,y,w,v[0],v[1]]))}}u.sort((p,m)=>p[0].localeCompare(m[0])||p[1].localeCompare(m[1])||p[2].localeCompare(m[2]));let f=[];for(let[p,m,h,g,b]of u){if(f.length>=s)break;f.push({subject:p,classA:m,classB:h,viaA:g,viaB:b})}return f}async function JS(e,{depth:t=32,budget:n=50,focus:s=null,expandFocus:o=!1,maxEnvironments:r=Ki,full:i=!1,store:a}={}){let{loadMemory:l,readFactRows:c,appendFacts:u}=Cm(a,["loadMemory","readFactRows","appendFacts"],"syllogise"),d=typeof a?.loadSyllogiseState=="function"&&typeof a?.saveSyllogiseState=="function",f=await l(e),p=c(f),m=p.filter(j=>$s(j.predicate)).map(j=>[j.subject,j.object]),h=p.filter(j=>Js(j.predicate)).map(j=>[j.subject,j.object]),g=p.filter(j=>Xs(j.predicate)).map(j=>[j.subject,j.object]),b=new Map,y=new Map,w=[];for(let j of p){let le=String(j.predicate||"").trim().toLowerCase();Fo(j.predicate)?b.set(j.subject,j.object):Nr(j.predicate)?y.set(j.subject,j.object):bl.has(le)||w.push([j.subject,j.predicate,j.object])}let $=[];for(let[j,le]of b){let Te=y.get(j);Te&&$.push({restriction:j,property:le,target:Te})}let _=Qn(s),v=o&&_?ul(p,[..._]):_,x=v===null&&d?await a.loadSyllogiseState(e):null,E=new Set(p.map(j=>j.id)),S=Array.isArray(x?.factIds)?x.factIds.filter(j=>!E.has(j)):[],R=x&&Array.isArray(x.factIds)&&!S.length&&!i?"delta":"full",k=R==="delta"?new Set(x.factIds):null,A=R==="delta"?p.filter(j=>!k.has(j.id)):p,P=A.length,T=new Map;for(let j of p)T.set(`${j.subject}${Le}${j.predicate}${Le}${j.object}`,j.trust);let M=(j,le,Te)=>T.get(`${j}${Le}${le}${Le}${Te}`),B=(j,le,Te)=>T.has(`${j}${Le}${le}${Le}${Te}`),Z=j=>j.filter(le=>typeof le=="number"),J=R==="delta"&&!A.length,ne=R==="delta"?A.filter(j=>$s(j.predicate)).map(j=>[j.subject,j.object]):[],D=R==="delta"?ne.length?Mm(m,ne,{depth:t,budget:n,focus:v}):[]:Pm(m,{depth:t,budget:n,focus:v}),z=m.concat(D.map(j=>[j.subject,j.object])),W=v,C=null;if(R==="delta"&&!J){let j=p.concat(D.map(Te=>({subject:Te.subject,predicate:Fe,object:Te.object}))),le=[];for(let Te of A)le.push(Te.subject,Te.object);C=ul(j,le),W=C}let I=j=>!C||C.has(j),O=C?h.filter(([j,le])=>I(j)||I(le)):h,N=new Set;if(C)for(let j of A)Xs(j.predicate)&&(N.add(j.subject),N.add(j.object));let F=C&&N.size?Tn(z):null,G=C?h.filter(([j,le])=>I(j)||I(le)||F&&[...F(le)].some(Te=>N.has(Te))):h,q=new Set;if(C){for(let j of A)if(Fo(j.predicate)||Nr(j.predicate)){let le=b.get(j.subject);le&&q.add(X(le))}}let ae=C?w.filter(([j,le,Te])=>I(j)||I(Te)||q.has(X(le))):w,ce=Math.max(0,n-D.length),K=ce>0&&!J?Fm(O,z,{budget:ce,focus:W,presentTypeEdges:h}):[],ee=Math.max(0,n-D.length-K.length),H=ee>0&&!J?Dm(G,z,g,{budget:ee,focus:W}):[],se=Math.max(0,n-D.length-K.length-H.length),te=se>0&&$.length&&!J?zm(ae,h,z,$,{budget:se,focus:W}):[],xe=Math.max(0,n-D.length-K.length-H.length-te.length),Ae=xe>0&&$.length>1&&!J?Bm($,z,{budget:xe,focus:W}):[],pe=new Map($.map(j=>[j.restriction,j])),ie=[...D.map(j=>({subject:j.subject,predicate:Fe,object:j.object,provenance:Im,justification:[[ge(j.subject,Fe,j.via),ge(j.via,Fe,j.object)]]})),...K.map(j=>({subject:j.subject,predicate:It,object:j.object,provenance:Nm,justification:[[ge(j.subject,It,j.via),ge(j.via,Fe,j.object)]]})),...H.map(j=>{let le=B(j.viaClass,Mo,j.object),[Te,Pn]=le?[j.viaClass,j.object]:[j.object,j.viaClass],mo=Z([M(j.subject,It,j.viaType),M(Te,Mo,Pn),...j.viaClass!==j.viaType?[M(j.viaType,Fe,j.viaClass)]:[]]);return{subject:j.subject,predicate:Mo,object:j.object,provenance:pl,justification:[[ge(j.subject,It,j.viaType),ge(Te,Mo,Pn),...j.viaClass!==j.viaType?[ge(j.viaType,Fe,j.viaClass)]:[]]],...mo.length?{premiseTrusts:mo,ruleConfidence:fl}:{}}}),...te.map(j=>{let le=Z([M(j.subject,j.viaProperty,j.viaValue),M(j.viaValue,It,j.viaType),M(j.object,_n,j.viaPropertyKey),M(j.object,Rn,j.viaTarget),...j.viaType!==j.viaTarget?[M(j.viaType,Fe,j.viaTarget)]:[]]);return{subject:j.subject,predicate:It,object:j.object,provenance:hl,justification:[[ge(j.subject,j.viaProperty,j.viaValue),ge(j.viaValue,It,j.viaType),ge(j.object,_n,j.viaPropertyKey),ge(j.object,Rn,j.viaTarget),...j.viaType!==j.viaTarget?[ge(j.viaType,Fe,j.viaTarget)]:[]]],...le.length?{premiseTrusts:le,ruleConfidence:gl}:{}}}),...Ae.map(j=>{let le=pe.get(j.subject),Te=pe.get(j.object),Pn=Z([le&&M(j.subject,_n,le.property),M(j.subject,Rn,j.viaY1),Te&&M(j.object,_n,Te.property),M(j.object,Rn,j.viaY2),M(j.viaY1,Fe,j.viaY2)]);return{subject:j.subject,predicate:Fe,object:j.object,provenance:yl,justification:[[...le?[ge(j.subject,_n,le.property)]:[],ge(j.subject,Rn,j.viaY1),...Te?[ge(j.object,_n,Te.property)]:[],ge(j.object,Rn,j.viaY2),ge(j.viaY1,Fe,j.viaY2)]],...Pn.length?{premiseTrusts:Pn,ruleConfidence:vl}:{}}})],fe=ie.map(j=>({id:ge(j.subject,j.predicate,j.object),subject:j.subject,predicate:j.predicate,object:j.object,environments:j.justification,write:j})),be=Gm(p.concat(fe.map(j=>({id:j.id,subject:j.subject,predicate:j.predicate,object:j.object})))),Ce=new Map(p.map(j=>[j.id,j])),ue=j=>$s(j)||Js(j)||Xs(j),V=j=>R!=="delta"||C!==null&&(C.has(j.subject)||C.has(j.object)),oe=p.filter(j=>ue(j.predicate)&&Wm(j.provenance)&&Lr(j).length<r&&V(j)).map(j=>({id:j.id,subject:j.subject,predicate:j.predicate,object:j.object,environments:Lr(j),provenance:j.provenance})),Ze=[...fe,...oe].sort((j,le)=>j.subject.localeCompare(le.subject)||j.predicate.localeCompare(le.predicate)||j.object.localeCompare(le.object)),De=0,He=!1,nn=0;for(let j of Ze){if(nn>=n){He=!0;break}nn+=1;let le=be(j,{maxEnvironments:r+1}),{kept:Te,truncated:Pn}=ZS(j.environments,le,r);if(Pn&&(He=!0),!(Te.length<=j.environments.length)){if(De+=Te.length-j.environments.length,j.write){j.write.justification=Te;continue}ie.push({subject:j.subject,predicate:j.predicate,object:j.object,justification:Te,...Hm(j.provenance,Te,mo=>Ce.get(mo)?.trust)||{}})}}let{ids:sn}=await u(e,ie),qt=[],Mt=0;for(let j of D)qt.push({id:sn[Mt],subject:j.subject,object:j.object,via:j.via,rule:Om}),Mt+=1;for(let j of K)qt.push({id:sn[Mt],subject:j.subject,object:j.object,via:j.via,rule:Lm}),Mt+=1;for(let j of H)qt.push({id:sn[Mt],subject:j.subject,object:j.object,via:j.viaClass,rule:dl}),Mt+=1;for(let j of te)qt.push({id:sn[Mt],subject:j.subject,object:j.object,via:j.viaValue,rule:ml}),Mt+=1;for(let j of Ae)qt.push({id:sn[Mt],subject:j.subject,object:j.object,via:j.viaY1,rule:wl}),Mt+=1;let ii=qt.length>=n;if(v===null&&d&&!ii){let j=new Set(E);for(let le of sn)j.add(le);await a.saveSyllogiseState(e,{version:1,factIds:[...j].sort(),completedAt:new Date().toISOString()})}return{derived:qt,count:qt.length,budget:n,depth:t,truncated:ii,mode:R,deltaSize:P,environmentsAdded:De,alternatesTruncated:He}}function Wm(e){let t=String(e||"").split(" | ").filter(Boolean);return t.length>0&&t.every(n=>n.startsWith("entailed:"))}function QS(e){let t=[],n=new Map,s=new Map,o=new Map,r=new Map,i=new Map;for(let u of e){let d=String(u.predicate||"").trim().toLowerCase();$s(u.predicate)?t.push([u.subject,u.object]):Js(u.predicate)?(n.has(u.subject)||n.set(u.subject,new Set),n.get(u.subject).add(u.object)):Xs(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)):Fo(u.predicate)?o.set(u.subject,u.object):Nr(u.predicate)?r.set(u.subject,u.object):bl.has(d)||(i.has(u.subject)||i.set(u.subject,[]),i.get(u.subject).push([X(u.predicate),u.object]))}let a=Tn(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:X(d),target:f}:null};return u=>{if($s(u.predicate)){if(l(u.subject,u.object))return!0;let d=c(u.subject),f=c(u.object);return!!(d&&f&&d.property===f.property&&l(d.target,f.target))}if(Js(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(Xs(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 Gm(e){let t=new Set,n=[],s=new Map,o=new Map,r=new Set,i=new Map,a=new Map,l=new Map,c=new Map;for(let p of e){if(!p||!p.subject||!p.predicate||!p.object)continue;p.id&&t.add(p.id);let m=String(p.predicate||"").trim().toLowerCase();$s(p.predicate)?(n.push([p.subject,p.object]),s.has(p.subject)||s.set(p.subject,new Set),s.get(p.subject).add(p.object)):Js(p.predicate)?(o.has(p.subject)||o.set(p.subject,new Set),o.get(p.subject).add(p.object)):Xs(p.predicate)?(r.add(`${p.subject}${Le}${p.object}`),i.has(p.subject)||i.set(p.subject,new Set),i.get(p.subject).add(p.object),i.has(p.object)||i.set(p.object,new Set),i.get(p.object).add(p.subject)):Fo(p.predicate)?a.set(p.subject,p.object):Nr(p.predicate)?l.set(p.subject,p.object):bl.has(m)||(c.has(p.subject)||c.set(p.subject,[]),c.get(p.subject).push([p.predicate,p.object]))}let u=Tn(n),d=p=>s.get(p)||new Set,f=p=>{let m=a.get(p),h=l.get(p);return m&&h?{property:m,propertyKey:X(m),target:h}:null};return(p,{maxEnvironments:m=Ki}={})=>{let h=[],g=new Set,b=y=>{if(h.length>=m||p.id&&y.includes(p.id)||!y.every($=>t.has($)))return;let w=[...y].sort().join(" ");g.has(w)||(g.add(w),h.push(y))};if($s(p.predicate)){for(let y of[...d(p.subject)].sort()){if(h.length>=m)break;y===p.subject||y===p.object||d(y).has(p.object)&&b([ge(p.subject,Fe,y),ge(y,Fe,p.object)])}if(h.length<m){let y=f(p.subject),w=f(p.object);y&&w&&y.propertyKey===w.propertyKey&&y.target!==w.target&&d(y.target).has(w.target)&&b([ge(p.subject,_n,y.property),ge(p.subject,Rn,y.target),ge(p.object,_n,w.property),ge(p.object,Rn,w.target),ge(y.target,Fe,w.target)])}return h}if(Js(p.predicate)){for(let w of[...o.get(p.subject)||[]].sort()){if(h.length>=m)break;w!==p.object&&d(w).has(p.object)&&b([ge(p.subject,It,w),ge(w,Fe,p.object)])}let y=f(p.object);if(y){let w=[...c.get(p.subject)||[]].filter(([$])=>X($)===y.propertyKey).sort(($,_)=>$[0].localeCompare(_[0])||$[1].localeCompare(_[1]));for(let[$,_]of w){if(h.length>=m)break;for(let v of[...o.get(_)||[]].sort()){if(h.length>=m)break;v!==y.target&&!d(v).has(y.target)||b([ge(p.subject,$,_),ge(_,It,v),ge(p.object,_n,y.propertyKey),ge(p.object,Rn,y.target),...v!==y.target?[ge(v,Fe,y.target)]:[]])}}}return h}if(Xs(p.predicate)){let y=[];for(let w of o.get(p.subject)||[])for(let $ of[w,...u(w)])(i.get($)||new Set).has(p.object)&&y.push([w,$]);y.sort((w,$)=>w[0].localeCompare($[0])||w[1].localeCompare($[1]));for(let[w,$]of y){if(h.length>=m)break;let _=r.has(`${$}${Le}${p.object}`),[v,x]=_?[$,p.object]:[p.object,$];b([ge(p.subject,It,w),ge(v,Mo,x),...$!==w?[ge(w,Fe,$)]:[]])}return h}return h}}function ZS(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 Hm(e,t,n){let s;for(let i of String(e||"").split(" | ")){let a=ek.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 tk(e,t,n,{budget:s=50,depth:o=32,maxEnvironments:r=Ki,store:i}={}){let{loadMemory:a,readFactRows:l,removeFacts:c}=Cm(i,["loadMemory","readFactRows","removeFacts"],"retractSubClassOf"),u=typeof i?.appendFacts=="function"?i.appendFacts:null,d=X(t),f=X(n),p=ge(d,Fe,f),m=await a(e),h=l(m),g=new Map(h.map(R=>[R.id,R]));if(!g.has(p))return{retracted:[],count:0,budget:s,depth:o,truncated:!1,found:!1};let b=h.filter(R=>Lr(R).length&&Wm(R.provenance)),y=new Map;for(let R of b)for(let k of Lr(R))for(let A of k)y.has(A)||y.set(A,new Set),y.get(A).add(R.id);let w=new Set([p]),$=[p],_=new Map,v=!1,x=0,E=[p];for(;x<o;x+=1){let R=new Set;for(let J of E)for(let ne of y.get(J)||[])w.has(ne)||R.add(ne);let k=[...R].map(J=>g.get(J)).sort((J,ne)=>J.subject.localeCompare(ne.subject)||J.predicate.localeCompare(ne.predicate)||J.object.localeCompare(ne.object));if(!k.length)break;let A=h.filter(J=>!w.has(J.id)&&!R.has(J.id)),P=new Set(A.map(J=>J.id)),T=Gm(A),M=QS(A),B=!1,Z=!1;E=[];for(let J of k){if(w.size>=s){Z=!0;break}let ne=Lr(J),D=ne.filter(W=>W.every(C=>P.has(C)));if(D.length){D.length!==ne.length&&_.set(J.id,D);continue}let z=T(J,{maxEnvironments:r});if(z.length){_.set(J.id,z);continue}M(J)||(w.add(J.id),$.push(J.id),E.push(J.id),B=!0)}if(Z){v=!0;break}if(!B)break}!v&&x>=o&&(v=b.some(R=>!w.has(R.id)&&R.justification.some(k=>w.has(k))));let{removed:S}=await c(e,$);if(u){let R=[..._.entries()].filter(([k])=>!w.has(k)).sort((k,A)=>k[0].localeCompare(A[0])).map(([k,A])=>{let P=g.get(k);return{subject:P.subject,predicate:P.predicate,object:P.object,justification:A,...Hm(P.provenance,A,T=>g.get(T)?.trust)||{}}});R.length&&await u(e,R)}return{retracted:S,count:S.length,budget:s,depth:o,truncated:v,found:!0}}function $l(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:It,object:u}]});for(let c of i.get(e)||[])a.push({node:c,path:[{subject:e,predicate:Fe,object:c}]});let l=new Set([e]);for(let c=1;c<=o&&a.length;c+=1){for(let{node:d,path:f}of a)if(r.has(d))return f;if(c===o)break;let u=[];for(let{node:d,path:f}of a)if(!l.has(d)){l.add(d);for(let p of i.get(d)||[])l.has(p)||u.push({node:p,path:[...f,{subject:d,predicate:Fe,object:p}]})}a=u}return null}var Fe,Om,Im,It,Lm,Nm,Mo,dl,pl,fl,_n,Rn,ml,hl,gl,Ki,Le,$s,Js,Xs,Fo,Nr,zS,bl,WS,GS,wl,yl,vl,VS,KS,Lr,ek,Gt=L(()=>{Zt();Fe="rdfs:subClassOf",Om="subClassOf",Im=`entailed:${Om}`,It="rdf:type",Lm="type",Nm=`entailed:${Lm}`,Mo="owl:disjointWith",dl="disjointWith",pl=`entailed:${dl}`,fl=.95,_n="owl:onProperty",Rn="owl:someValuesFrom",ml="someValuesFrom",hl=`entailed:${ml}`,gl=.95,Ki=4,Le="\u241F",$s=e=>String(e||"").trim().toLowerCase()==="rdfs:subclassof",Js=e=>String(e||"").trim().toLowerCase()==="rdf:type",Xs=e=>String(e||"").trim().toLowerCase()==="owl:disjointwith",Fo=e=>String(e||"").trim().toLowerCase()==="owl:onproperty",Nr=e=>String(e||"").trim().toLowerCase()==="owl:somevaluesfrom",zS=e=>String(e||"").trim().toLowerCase()==="owl:onclass",bl=new Set(["rdfs:subclassof","rdf:type","owl:disjointwith","owl:onproperty","owl:somevaluesfrom","owl:intersectionof"]);WS="has",GS={"owl:cardinality":"exactly","owl:mincardinality":"min","owl:maxcardinality":"max"};wl="someValuesFromSubsumption",yl=`entailed:${wl}`,vl=.95;VS=.95;KS=.95;Lr=e=>e.environments||(Array.isArray(e.justification)&&e.justification.length?[e.justification]:[]);ek=new Map([[pl,fl],[hl,gl],[yl,vl]])});function Uo(e){let t=String(e||""),n=Vm.get(t);return n||(t.startsWith(xl)?Do+t.slice(xl.length):t)}function qm(e){let t=String(e||""),n=nk.get(t);return n||(t.startsWith(Do)?xl+t.slice(Do.length):null)}function Xm(e,t,n,s,o){let r=null;for(let i of e){if(i===t)return[];let a=$l(i,new Set([t]),n,s,{maxHops:o});a&&(!r||a.length<r.length)&&(r=a)}return r}function Ji(e,t,n,{maxHops:s=3}={}){let o=Bo(e),r=Bo(t),i=Array.isArray(n)?n:[],{typeEdges:a,subClassEdges:l}=Ym(i),c=i.filter(b=>(b.predicate===Xi||b.predicate===zo)&&r.has(b.object)),u=[];for(let b of c){let y=b.predicate===zo?"negative":"positive";if(o.has(b.subject)){u.push({fact:b,polarity:y,hops:0,chain:null});continue}let w=Xm(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:Sl(o,r,i,{maxHops:s})};u.sort((b,y)=>b.hops-y.hops||(y.fact.trust||0)-(b.fact.trust||0));let d=u[0].hops,f=u.filter(b=>b.hops===d),p=f.filter(b=>b.polarity==="positive").map(b=>b.fact),m=f.filter(b=>b.polarity==="negative").map(b=>b.fact),h=m.length&&!p.length?"negative":"positive",g=u.find(b=>b.hops>d&&b.polarity!==h)||null;return{verdict:p.length&&m.length?"both":m.length?"no":"yes",hops:d,positive:p,negative:m,chain:u[0].chain,overrides:g?{fact:g.fact,chain:g.chain}:null,baseRate:null}}function Sl(e,t,n,{maxHops:s=3}={}){let o=Bo(e),r=Bo(t),i=Array.isArray(n)?n:[],a=i.filter(h=>h.predicate===Fe||h.predicate===It),l=a.filter(h=>o.has(h.subject)).map(h=>h.object);if(!l.length)return null;let c=l[0],u=[...new Set(a.filter(h=>h.object===c&&!o.has(h.subject)).map(h=>h.subject))],d=h=>{let g=i.find(b=>b.subject===h&&r.has(b.object)&&(b.predicate===Xi||b.predicate===zo));return g?{name:h,polarity:g.predicate===zo?"negative":"positive",fact:g}:{name:h,polarity:"unknown",fact:null}},f=u.map(d),{typeEdges:p,subClassEdges:m}=Ym(i);return{klass:c,kinds:u.length,positive:f.filter(h=>h.polarity==="positive"),negative:f.filter(h=>h.polarity==="negative"),unknown:f.filter(h=>h.polarity==="unknown"),chain:Xm(o,c,p,m,s)}}function kl(e,t,{exclude:n=[],maxHops:s=3}={}){let o=Bo(e),r=Bo(n),i=Array.isArray(t)?t:[],a=new Set,l=[];for(let c of i)c.predicate!==Xi||!o.has(c.object)||r.has(c.subject)||a.has(c.subject)||(a.add(c.subject),Ji(new Set([c.subject]),o,i,{maxHops:s}).verdict==="yes"&&l.push(c));return l.sort(sk)}var Do,xl,Yi,Vm,nk,Km,Xi,zo,El,sk,Bo,Ym,Qi=L(()=>{Gt();Do="mgxneg:",xl="mgx:",Yi="mgxneg:subClassOf",Vm=new Map([[Fe,Yi]]),nk=new Map([...Vm].map(([e,t])=>[t,e]));Km=e=>String(e||"").startsWith(Do),Xi="mgx:capableOf",zo=Uo(Xi),El=6,sk=(e,t)=>(t.trust||0)-(e.trust||0)||String(e.subject).localeCompare(String(t.subject)),Bo=e=>e instanceof Set?e:new Set(Array.isArray(e)?e:[e]),Ym=e=>({typeEdges:e.filter(t=>t.predicate===It).map(t=>[t.subject,t.object]),subClassEdges:e.filter(t=>t.predicate===Fe).map(t=>[t.subject,t.object])})});function Zi(e){let t=String(e||"");return Rl.has(t)?jl:rk.has(t)||ik.test(t)?Pr:ak.has(t)?Jm:_l}function ck(e){let t=e?.observedAt;if(t&&Number.isFinite(Date.parse(t)))return String(t);if(np.has(e?.sourceType)){for(let n of[e?.assertedAt,e?.createdAt])if(n&&Number.isFinite(Date.parse(n)))return String(n)}}function lk(e,t){let n=null;for(let s of e?.assertions||[]){let o=Date.parse(ck(s)??"");Number.isFinite(o)&&(n===null||(t?o<n:o>n))&&(n=o)}return n}function Tl(e,t){let n=t===Jm;if(!n&&t!==Pr)return null;let s=(e||[]).map(r=>({row:r,at:lk(r,n)}));s.sort((r,i)=>{if(r.at!==i.at)return r.at===null?1:i.at===null?-1:n?r.at-i.at:i.at-r.at;let a=(i.row.trust||0)-(r.row.trust||0);if(a)return a;let[l,c]=[String(r.row.object),String(i.row.object)];return l<c?-1:l>c?1:0});let o=s.map(r=>r.row);return{winner:o[0]||null,ranked:o,contested:s.length>1&&s[0].at===s[1].at}}var jl,Pr,Jm,_l,ok,Rl,rk,ik,ak,Qm=L(()=>{Qi();us();jl="merge",Pr="latest-observation-wins",Jm="first-claim-wins",_l="contradiction",ok=["mgx:hasA","mgx:capableOf","rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:partOf","mgx:usedFor","mgx:receivesAction","mgx:causes","mgx:causesDesire","mgx:hasSubevent","mgx:hasPrerequisite","mgx:motivatedByGoal","mgx:obstructedBy","mgx:desires","mgx:hasProperty","mgx:madeOf","mgx:atLocation","mgx:locatedNear","mgx:createdBy","mgx:mannerOf","mgx:relatedTo","mgx:synonym","mgx:antonym","mgx:similarTo","mgx:symbolOf","mgx:knows-about"],Rl=new Set(ok.flatMap(e=>[e,Uo(e)])),rk=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in","mgx:on-top-of","mgx:on-plane","mgx:under","mgx:is-open","mgx:hasMass","mgx:feels","mgx:faces","mgx:pose","mgx:display-name","mgx:nodeName","mgx:worldName"]),ik=/^mgx:has-exit-([a-z]+)$/,ak=new Set(["mgx:playedBy"])});function Dr(e){let t=String(e||""),n=t.indexOf(ea);return n<0?"":t.slice(n+ea.length)}function mk(e){let t=1,n=0;for(let s of e)t*=1-pk(s),n+=1;return n?fk(Math.min(1,1-t)):0}function sh(e,t,n){let s=Date.parse(e),o=Date.parse(t);return Number.isFinite(s)?Number.isFinite(o)?n(s,o)===s?String(e):String(t):String(e):Number.isFinite(o)?String(t):""}function ih(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt),o=Number.isFinite(n)?n:-1/0,r=Number.isFinite(s)?s:-1/0;return o!==r?r-o:e.id<t.id?-1:e.id>t.id?1:0}function ah(e,t="",n=""){let s=t,o=n;for(let r of e)s=oh(s,r.assertedAt),o=rh(o,r.assertedAt);return{earliest:s,latest:o}}function Il({id:e,sourceKey:t,template:n,idsProp:s,ids:o,earliest:r,latest:i,priorFor:a}){let l=[...new Set(o)].filter(Boolean).sort(),c=a?mk(l.map(u=>a(u))):void 0;return{id:e,label:n?.label||"",class:uk,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:n?.subject||""},{prop:"rdf:predicate",key:"predicate",value:n?.predicate||""},{prop:"rdf:object",key:"object",value:n?.object||""},{prop:"mgx:createdAt",key:"createdAt",value:r},{prop:"mgx:sourceId",key:"sourceId",value:t},{prop:s,key:s===Wo?"rollupSourceIds":"rollupRecordIds",value:l.join(" ")},{prop:Fr,key:"rollupCount",value:String(l.length)},{prop:An,key:"rollupEarliest",value:r},{prop:Cn,key:"rollupLatest",value:i},...c===void 0?[]:[{prop:Go,key:"rollupPrior",value:String(c)}]]}}function ch({groupId:e,sourceType:t,heads:n=[],existing:s=null,priorFor:o}){if(!e||!t||n.length<64||n.length<=8)return null;let i=n.slice().sort(ih).slice(8);if(!i.length)return null;let{earliest:a,latest:l}=ah(i,xt(s,An),xt(s,Cn));return{rollup:Il({id:Al(e,t),sourceKey:`rollup:${t}`,template:Ll(i[0].record||s),idsProp:Wo,ids:[...sa(s),...i.map(u=>u.sourceId)],earliest:a,latest:l,priorFor:o}),absorbed:i.map(u=>u.id),absorbedSourceIds:i.map(u=>u.sourceId)}}function lh({groupId:e,sourceId:t,leaves:n=[],existing:s=null}){if(!e||!t||n.length<8||n.length<=2)return null;let o=n.slice().sort(ih),r=o.slice(0,2),i=o.slice(2);if(!i.length)return null;let{earliest:a,latest:l}=ah(i,xt(s,An),xt(s,Cn));return{rollup:Il({id:Cl(e,t),sourceKey:t,template:Ll(i[0].record||s),idsProp:Mr,ids:[...dk(s),...i.map(u=>u.id)],earliest:a,latest:l}),absorbed:i.map(u=>u.id),rewire:r[r.length-1]?.id||""}}function Nl(e,t,{priorFor:n}={}){let s=e?.id||t?.id,o=xs(s),r=o?Wo:Mr,i=a=>Ol(xt(a,r));return Il({id:s,sourceKey:xt(e,"mgx:sourceId")||xt(t,"mgx:sourceId"),template:Ll(xt(e,"rdf:subject")?e:t),idsProp:r,ids:[...i(e),...i(t)],earliest:oh(xt(e,An),xt(t,An)),latest:rh(xt(e,Cn),xt(t,Cn)),priorFor:o?n:void 0})}function uh(e,t){if(!t)return!1;for(let n of e||[])if(sa(n).includes(t))return!0;return!1}var uk,Zm,eh,ta,th,Wo,Mr,Fr,An,Cn,Go,ea,nh,Al,Cl,xs,Ho,na,xt,Ol,sa,dk,pk,fk,oh,rh,Ll,Pl=L(()=>{uk="Fact",Zm=64,eh=8,ta=8,th=2,Wo="mgx:rollupSourceIds",Mr="mgx:rollupRecordIds",Fr="mgx:rollupCount",An="mgx:rollupEarliest",Cn="mgx:rollupLatest",Go="mgx:rollupPrior",ea="@rollup:",nh="#rollup",Al=(e,t)=>`${e}${ea}${t}`,Cl=(e,t)=>`${e}@${t}${nh}`,xs=e=>String(e||"").includes(ea),Ho=e=>String(e||"").endsWith(nh),na=e=>xs(e)||Ho(e);xt=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Ol=e=>String(e||"").split(" ").filter(Boolean),sa=e=>Ol(xt(e,Wo)),dk=e=>Ol(xt(e,Mr)),pk=e=>Math.max(0,Math.min(1,Number(e)||0)),fk=e=>Number(e.toFixed(6));oh=(e,t)=>sh(e,t,Math.min),rh=(e,t)=>sh(e,t,Math.max);Ll=e=>({label:e?.label||"",subject:xt(e,"rdf:subject"),predicate:xt(e,"rdf:predicate"),object:xt(e,"rdf:object")})});function Zn(e,t){let n=(e?.attributes||[]).find(s=>s?.prop===t);return n?String(n.value??""):void 0}function vk(e,t){(!e?.class||!hk.has(e.class))&&t.push(`must have a class from the closed vocabulary Utterance | Fact | Session | Source | Rule (got ${JSON.stringify(e?.class)})`)}function $k(e,t){for(let i of["rdf:subject","rdf:predicate","rdf:object"])zr(Zn(e,i))||t.push(`a Fact needs a non-empty ${i}`);for(let i of["rdf:subject","rdf:object"]){let a=Zn(e,i);a!==void 0&&bk.test(a)&&t.push(`a Fact's ${i} must be a single term, not text spanning a sentence boundary (got ${JSON.stringify(a)})`)}let n=Zn(e,"mgx:factProvenance");n!==void 0&&!zr(n)&&t.push("mgx:factProvenance, when present, must be non-empty");let s=typeof e?.id=="string"?e.id:"";wk(s)&&!ph.test(s)&&t.push(`a Fact record id must read <groupId>@<sourceId>, optionally suffixed #v<n> once superseded (got ${JSON.stringify(s)})`);let o=Zn(e,"mgx:sourceId");o!==void 0&&!zr(o)&&t.push("mgx:sourceId, when present, must be non-empty (every assertion record has a key, src:none included)");let r=Zn(e,"mgx:observedAt");r!==void 0&&!Number.isFinite(Date.parse(r))&&t.push(`mgx:observedAt, when present, must be a parseable instant (got ${JSON.stringify(r)})`);for(let i of yk){let a=Zn(e,i);if(a===void 0)continue;let l=a.split(" ").filter(Boolean);l.length||t.push(`${i}, when present, must name at least one record id`);for(let c of l)ph.test(c)||t.push(`${i} must name Fact record ids (got ${JSON.stringify(c)})`)}}function xk(e,t){zr(Zn(e,"mgx:ruleName"))||t.push("a Rule needs a non-empty mgx:ruleName");let n=Zn(e,"mgx:ruleKind");if(!n||!dh.has(n)){t.push(`a Rule's mgx:ruleKind must be one of ${[...dh].join(" | ")} (got ${JSON.stringify(n)})`);return}for(let s of gk[n])zr(Zn(e,s))||t.push(`a ${n} Rule needs a non-empty ${s}`)}function Ek(e){let t=[];return vk(e,t),e?.class==="Fact"&&$k(e,t),e?.class==="Rule"&&xk(e,t),{ok:t.length===0,violations:t}}function Ml(e){let t=Ek(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 hk,dh,gk,bk,ph,wk,yk,zr,fh=L(()=>{hk=new Set(["Utterance","Fact","Session","Source","Rule"]),dh=new Set(["compose2","filter","recursive","action-signature","action-precond","action-effect","action-constraint"]),gk={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"]},bk=/[.!?]\s+\w/,ph=/^[^@]+@(.+?)(#v[1-9][0-9]*)?$/,wk=e=>e.includes("@")||/#v\d/.test(e),yk=["mgx:supersedes","mgx:supersededBy"];zr=e=>typeof e=="string"&&e.trim().length>0});var mh={};Mn(mh,{access:()=>jk,appendFile:()=>Tk,basename:()=>Hk,copyFile:()=>Pk,createInterface:()=>Xk,createReadStream:()=>Fk,createRequire:()=>Sk,createWriteStream:()=>Dk,default:()=>Qk,dirname:()=>Uk,existsSync:()=>zk,fileURLToPath:()=>qk,isAbsolute:()=>Gk,join:()=>Bk,mkdir:()=>Ak,mkdtemp:()=>Ck,randomBytes:()=>Kk,readFile:()=>_k,readFileSync:()=>kk,readdir:()=>Mk,rename:()=>Ok,resolve:()=>Wk,rm:()=>Lk,sep:()=>Vk,spawnSync:()=>Yk,stat:()=>Nk,tmpdir:()=>Jk,unlink:()=>Ik,writeFile:()=>Rk});var dt,Sk,kk,jk,_k,Rk,Tk,Ak,Ck,Ok,Ik,Lk,Nk,Pk,Mk,Fk,Dk,zk,Bk,Uk,Wk,Gk,Hk,Vk,qk,Kk,Yk,Xk,Jk,Qk,hh=L(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},Sk=dt("createRequire"),kk=dt("readFileSync"),jk=dt("access"),_k=dt("readFile"),Rk=dt("writeFile"),Tk=dt("appendFile"),Ak=dt("mkdir"),Ck=dt("mkdtemp"),Ok=dt("rename"),Ik=dt("unlink"),Lk=dt("rm"),Nk=dt("stat"),Pk=dt("copyFile"),Mk=dt("readdir"),Fk=dt("createReadStream"),Dk=dt("createWriteStream"),zk=()=>!1,Bk=(...e)=>e.join("/"),Uk=e=>String(e).replace(/\/[^/]*$/,""),Wk=(...e)=>e.join("/"),Gk=e=>String(e).startsWith("/"),Hk=e=>String(e).split("/").pop(),Vk="/",qk=e=>String(e),Kk=dt("randomBytes"),Yk=dt("spawnSync"),Xk=dt("createInterface"),Jk=()=>"/tmp",Qk={}});var Zk,Br,Fl=L(()=>{Zk=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,Br=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(Zk);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 ej(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function tj(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 me,Ns=L(()=>{me=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=Yk(n.toml,n.ptr),r=Xk(n.toml,s,o);super(`Invalid TOML document: ${t}
87
+ `))}return o}var he,Qs=L(()=>{he=class extends Error{line;column;codeblock;constructor(t,n){let[s,o]=ej(n.toml,n.ptr),r=tj(n.toml,s,o);super(`Invalid TOML document: ${t}
88
88
 
89
- ${r}`,n),this.line=s,this.column=o,this.codeblock=r}}});function Ei(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 oa(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 me("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 me("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 me("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 me("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new me("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new me("unfinished string",{toml:e,ptr:t})}function Jf(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=Jk.test(e);if(o||Qk.test(e)){if(Zk.test(e))throw new me("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new me("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new me("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new hr(e);if(!r.isValid())throw new me("invalid value",{toml:t,ptr:n});return r}var Jk,Qk,Zk,qc=L(()=>{Vc();Ns();Jk=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,Qk=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,Zk=/^[+-]?0[0-9_]/});function Si(e,t=0,n=e.length){let s=e.indexOf(`
95
- `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function jo(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 he("control characters are not allowed in strings",{toml:e,ptr:c});if((!l||l===3)&&n===s&&(!r||e[c+1]===s&&e[c+2]===s))return r&&(e[c+3]===s&&c++,e[c+3]===s&&c++),[l?i:i+e.slice(a,c),c+(r?3:1)];if(!l)!o&&n==="\\"&&(i+=e.slice(a,a=c),l=1);else if(l===1)if(n==="x"||n==="u"||n==="U"){let u=0,d=n==="x"?2:n==="u"?4:8;for(let f=0;f<d;f++,c++){let p=e.charCodeAt(c+1),m=p>=48&&p<=57?p-48:p>=65&&p<=70?p-65+10:p>=97&&p<=102?p-97+10:-1;if(m<0)throw new he("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});u=u<<4|m}if(u<0||u>1114111||u>=55296&&u<=57343)throw new he("invalid unicode escape",{toml:e,ptr:c});i+=String.fromCodePoint(u),a=c+1,l=0}else if(n===" "||n===" ")l=2;else{if(n==="b")i+="\b";else if(n==="t")i+=" ";else if(n==="n")i+=`
94
+ `;else if(n==="f")i+="\f";else if(n==="r")i+="\r";else if(n==="e")i+="\x1B";else if(n==='"')i+='"';else if(n==="\\")i+="\\";else throw new he("unrecognized escape sequence",{toml:e,ptr:c});a=c+1,l=0}else if(n!==" "&&n!==" "){if(l===2)throw new he("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:a});l=!o&&n==="\\"?1:0,a=c}}throw new he("unfinished string",{toml:e,ptr:t})}function gh(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=nj.test(e);if(o||sj.test(e)){if(oj.test(e))throw new he("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let i=+e;if(isNaN(i))throw new he("invalid number",{toml:t,ptr:n});if(o){if((o=!Number.isSafeInteger(i))&&!s)throw new he("integer value cannot be represented losslessly",{toml:t,ptr:n});(o||s===!0)&&(i=BigInt(e))}return i}let r=new Br(e);if(!r.isValid())throw new he("invalid value",{toml:t,ptr:n});return r}var nj,sj,oj,Dl=L(()=>{Fl();Qs();nj=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,sj=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,oj=/^[+-]?0[0-9_]/});function ra(e,t=0,n=e.length){let s=e.indexOf(`
95
+ `,t);return e[s-1]==="\r"&&s--,s<=n?s:-1}function Vo(e,t){for(let n=t;n<e.length;n++){let s=e[n];if(s===`
96
96
  `)return n;if(s==="\r"&&e[n+1]===`
97
- `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new me("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function kn(e,t,n,s){let o;for(;;){for(;(o=e[t])===" "||o===" "||!n&&(o===`
97
+ `)return n+1;if(s<" "&&s!==" "||s==="\x7F")throw new he("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function On(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=jo(e,t)}return t}function Qf(e,t,n,s,o=!1){if(!s)return t=Si(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=Si(e,r);else{if(i===n)return r+1;if(i===s||o&&(i===`
99
+ `);)t++;if(s||o!=="#")break;t=Vo(e,t)}return t}function bh(e,t,n,s,o=!1){if(!s)return t=ra(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let i=e[r];if(i==="#")r=ra(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 me("cannot find end of structure",{toml:e,ptr:t})}var ji=L(()=>{Ns();});function eE(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(jo(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function gr(e,t,n,s,o){if(s===0)throw new me("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?em(e,t,s,o):Zf(e,t,s,o);if(n){if(c=kn(e,c),e[c]===",")c++;else if(e[c]!==n)throw new me("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=Ei(e,t);if(n){if(c=kn(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
- `&&e[c]!=="\r")throw new me("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=Qf(e,t,",",n),a=eE(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new me("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=kn(e,t+a[1]),e[i]===","&&i++),[Jf(a[0],e,t,o),i]}var Hc=L(()=>{qc();Kc();ji();Ns();});function _i(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new me("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 me("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=Ei(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=Si(c);if(u>-1)throw new me("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new me("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new me("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(!tE.test(a))throw new me("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,kn(e,r+1,!0,!0)]}function Zf(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new me("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=jo(e,t);else if(i!==" "&&i!==" "&&i!==`
103
- `&&i!=="\r"){let a,l=o,c=!1,[u,d]=_i(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 me("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 me("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=gr(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new me("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function em(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new me("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=jo(e,t);else if(r!==" "&&r!==" "&&r!==`
104
- `&&r!=="\r"){let i=gr(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new me("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var tE,Kc=L(()=>{qc();Hc();ji();Ns();tE=/^[a-zA-Z0-9-_]+[ \t]*$/});function tm(e,t,n,s){let o=t,r=n,i,a=!1,l;for(let c=0;c<e.length;c++){if(c){if(o=a?o[i]:o[i]={},r=(l=r[i]).c,s===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=o.length-1;o=o[u],r=r[u].c}}if(i=e[c],(a=Object.hasOwn(o,i))&&r[i]?.t===0&&r[i]?.d)return null;a||(i==="__proto__"&&(Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(r,i,{enumerable:!0,configurable:!0,writable:!0})),r[i]={t:c<e.length-1&&s===2?3:s,d:!1,i:0,c:{}})}if(l=r[i],l.t!==s&&!(s===1&&l.t===3)||(s===2&&(l.d||(l.d=!0,o[i]=[]),o[i].push(o={}),l.c[l.i++]=l={t:1,d:!1,i:0,c:{}}),l.d))return null;if(l.d=!0,s===1)o=a?o[i]:o[i]={};else if(s===0&&a)return null;return[i,o,l.c]}function _o(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=kn(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=_i(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new me("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=tm(c[0],s,o,l?2:1);if(!u)throw new me("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=_i(e,a),c=tm(l[0],r,i,0);if(!c)throw new me("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=gr(e,l[1],void 0,t,n);c[1][c[0]]=u[0],a=u[1]}if(a=kn(e,a,!0),e[a]&&e[a]!==`
105
- `&&e[a]!=="\r")throw new me("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=kn(e,a)}return s}var nm=L(()=>{Kc();Hc();ji();Ns();});var sm=L(()=>{});var Ri=L(()=>{nm();sm();Vc();Ns();});var im={};Sn(im,{CONFIG_FILE:()=>Ti,loadTomlConfig:()=>Yc,mergeEffective:()=>rm,normalizeConfig:()=>om});async function Yc(e,{file:t}={}){let n=t||Q(e,Ti),s;try{s=await Be(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return _o(s)}catch(o){throw new Error(`Invalid ${Ti} at ${n}: ${o&&o.message?o.message:o}`)}}async function nE(e,t){let n;if(Array.isArray(e))n=e;else{let o=qt(t,String(e));n=(await Be(o,"utf8")).split(`
106
- `)}let s=[];for(let o of n){let r=String(o).trim();!r||r.startsWith("#")||s.push(qt(t,r))}return s}async function om(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await nE(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=qt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=qt(s,String(n.graph_file))),n.graph_files!==void 0){let w=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=w.map($=>qt(s,String($)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},l={};a.enabled!==void 0&&(l.enabled=a.enabled),a.limit!==void 0&&(l.limit=a.limit),a.capture_unknown_context!==void 0&&(l.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(l.unknownContextLimit=a.unknown_context_limit),Object.keys(l).length&&(o.seed=l),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.discourse!==void 0&&(o.discourse=n.discourse);let c=n.index||{},u={};c.languages!==void 0&&(u.languages=c.languages),c.exclude!==void 0&&(u.exclude=c.exclude),c.secret_exclude!==void 0&&(u.secretExclude=c.secret_exclude),c.history_depth!==void 0&&(u.historyDepth=c.history_depth),c.include_text!==void 0&&(u.includeText=c.include_text),c.include_structure!==void 0&&(u.includeStructure=c.include_structure),c.respect_gitignore!==void 0&&(u.respectGitignore=c.respect_gitignore),c.markdown_sections!==void 0&&(u.markdownSections=c.markdown_sections),c.vue!==void 0&&(u.vue=c.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},f={};d.score_gap_k!==void 0&&(f.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(f.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(f.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(f.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(f.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(f.beamSearch=d.beam_search),d.beam_width!==void 0&&(f.beamWidth=d.beam_width),d.prose_layers!==void 0&&(f.proseLayers=d.prose_layers);let p=d.expansion||{},m={};p.strategy!==void 0&&(m.strategy=p.strategy),p.nodes!==void 0&&(m.nodes=p.nodes),p.q!==void 0&&(m.q=p.q),p.depth!==void 0&&(m.depth=p.depth),Object.keys(m).length&&(f.expansion=m),Object.keys(f).length&&(o.tune=f);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.enabled});let g=n.memory||{},b={};g.retention_versions!==void 0&&(b.retentionVersions=g.retention_versions),g.backend!==void 0&&(b.backend=g.backend),Object.keys(b).length&&(o.memory=b);let y=[];for(let[w,$]of sE)n[w]&&n[w][$]!==void 0&&y.push(`${w}.${$}`);return o.unwired=y,o}function Ai(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:Ai(o,r,n)}return n}function rm({args:e={},toml:t=null,defaults:n={}}={}){let s=Ai(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?Ai(o):{},i=Ai(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 Ti,sE,Ci=L(()=>{kt();ze();Ri();Ti="tmct.toml";sE=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var us={};Sn(us,{CANONICALISED_FROM_PROP:()=>il,CAPABLE_OF_PREDICATE:()=>km,CREATED_AT_PROP:()=>Pt,DEFAULT_RETENTION:()=>Zc,FACT_CLASS:()=>cs,HAS_A_PREDICATE:()=>zs,IN_REPLY_TO_PROP:()=>rl,MEMORY_DIR_REL:()=>yr,MEMORY_GRAPH_REL:()=>tl,MEMORY_MANIFEST_REL:()=>hm,MEMORY_SESSION_CLASS:()=>sl,MULTI_VALUED_PREDICATES:()=>Em,OPERATOR_SOURCE_ID:()=>Oi,RULE_CLASS:()=>Ao,RULE_KIND_ACTION_CONSTRAINT:()=>fl,RULE_KIND_ACTION_EFFECT:()=>jr,RULE_KIND_ACTION_PRECOND:()=>Fi,RULE_KIND_ACTION_SIGNATURE:()=>pl,RULE_KIND_COMPOSE2:()=>Er,RULE_KIND_FILTER:()=>Sr,RULE_KIND_PROP:()=>Co,RULE_KIND_RECURSIVE:()=>dl,SAID_IN_SESSION_PROP:()=>ol,SOURCE_CLASS:()=>Ro,SOURCE_RELIABILITY_PROP:()=>lm,STATED_BY_PROP:()=>Un,SYLLOGISE_STATE_REL:()=>ul,UPDATED_AT_PROP:()=>Es,UTTERANCE_CLASS:()=>nl,appendCanonicalisedFromEdges:()=>DE,appendFact:()=>zE,appendFacts:()=>kr,appendRule:()=>ml,appendUtterance:()=>FE,appendUtterances:()=>vm,applySeedPayload:()=>aE,cloneMemoryPayload:()=>cE,closeSqliteMemoryStore:()=>pm,createInMemoryStore:()=>Ni,createSqliteMemoryStore:()=>dm,emptyMemory:()=>vr,factIdForTriple:()=>ge,findContradictions:()=>Sm,findRuleByName:()=>hl,findRulesByName:()=>VE,isMemoryOrSqliteHandle:()=>cl,loadMemory:()=>Xt,loadSyllogiseState:()=>SE,normFactPredicate:()=>Dn,normFactTerm:()=>X,openConfiguredMemoryBackend:()=>ls,openMemoryBackend:()=>fm,provSourceClassFor:()=>TE,provenanceTagToSource:()=>Ho,readFactRows:()=>Ct,readRuleRows:()=>gl,removeFacts:()=>qE,resolveMemoryGraphFile:()=>br,resolveRelationChase:()=>bl,resolveRelationChaseReverse:()=>xm,saveSyllogiseState:()=>jE,snapshotMemory:()=>xE});function vr(){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:iE.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function br(e,t=null){if(To(e)||Ms(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Q(e,tl):Q(e,yr,`graph.v${t}.json`)}function To(e){return!!e&&typeof e=="object"&&e.backend===al}function Ms(e){return!!e&&typeof e=="object"&&e.backend===um}function cl(e){return To(e)||Ms(e)}function Ni(){return{backend:al,payload:vr()}}function aE(e,t){t&&(e.payload={...e.payload,...t})}function cE(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function dE(){if(cm)return;cm=!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 dm(e){dE();let{DatabaseSync:t}=await Promise.resolve().then(()=>(Xf(),Yf)),n=new t(e);return n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(lE),{backend:um,db:n,dbPath:e}}function pm(e){Ms(e)&&e.db.close()}async function fm(e,t){if(t===al)return{dir:Ni(),close:async()=>{}};let n=Q(e,".tmct","memory","graph.sqlite"),s=r=>Ru(r).then(()=>!0,()=>!1);!await s(n)&&await s(Q(e,tl))&&process.stderr.write(`found .tmct/memory/graph.json \u2014 the flat-file memory backend is retired; starting a fresh sqlite store (the old file is left untouched)
107
- `),await jn(xe(n),{recursive:!0});let o=await dm(n);return{dir:o,close:async()=>pm(o)}}async function ls(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(Ci(),im));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return fm(e,n)}function pE(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=fE(e),e.cachedDataVersion=t),Bn(e.cachedPayload)}function fE(e){let t=e.db,n=vr(),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 mE(e,t){let n=Bn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function hE(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function gE(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 bE(e,t,n){let s=`${t.subject}\0${t.object}`;e.examples=e.examples.filter(r=>`${r.subject}\0${r.object}`!==s);let o={subject:t.subject,object:t.object,subjectLabel:t.subjectLabel??null,objectLabel:t.objectLabel??null};n.length&&Object.assign(o,Bn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function wE(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function yE(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function vE(e,t){let n=e.db,s=vr(),o=e.cachedPayload||null;n.exec("BEGIN IMMEDIATE");try{let r=n.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)");r.run("generated_at",JSON.stringify(t.generated_at??s.generated_at)),r.run("memory",JSON.stringify(t.memory??s.memory)),r.run("prefixes",JSON.stringify(t.prefixes??s.prefixes)),r.run("vocabulary",JSON.stringify(t.vocabulary??s.vocabulary)),r.run("classes",JSON.stringify(t.classes??s.classes)),r.run("proseIndex",JSON.stringify(t.proseIndex??s.proseIndex)),o&&(o.generated_at=Bn(t.generated_at??s.generated_at),o.memory=Bn(t.memory??s.memory),o.prefixes=Bn(t.prefixes??s.prefixes),o.vocabulary=Bn(t.vocabulary??s.vocabulary),o.classes=Bn(t.classes??s.classes),o.proseIndex=Bn(t.proseIndex??s.proseIndex));let i=n.prepare("SELECT ord, json FROM individuals WHERE id = ?"),l=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM individuals").get().m+1,c=n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),u=new Set;for(let $ of t.individuals||[]){u.add($.id);let j=JSON.stringify($),v=i.get($.id);if(v&&v.json===j)continue;let E=v?v.ord:l++;c.run($.id,E,$.class??null,$.label??null,j),o&&mE(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&&hE(o,u);let f=n.prepare("SELECT ord FROM relations WHERE prop = ?"),m=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,h=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),g=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),b=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),y=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),w=new Set;for(let $ of t.objectProperties||[]){w.add($.prop);let j=g.all($.prop),v=new Map(j.map(x=>[`${x.subject}\0${x.object}`,x])),E=new Set,k=o?gE(o,$.prop):null;for(let x of $.examples||[]){let T=`${x.subject}\0${x.object}`;E.add(T);let M=Object.keys(x).filter(J=>!uE.has(J)),A=M.length?JSON.stringify(Object.fromEntries(M.map(J=>[J,x[J]]))):null,P=v.get(T);P&&(P.subject_label??null)===(x.subjectLabel??null)&&(P.object_label??null)===(x.objectLabel??null)&&(P.extra??null)===(A??null)||(b.run($.prop,x.subject,x.object,x.subjectLabel??null,x.objectLabel??null,A),k&&bE(k,x,M))}for(let x of v.keys()){if(E.has(x))continue;let[T,M]=x.split("\0");y.run($.prop,T,M)}k&&wE(k,E);let _=Number.isFinite($.count)?$.count:($.examples||[]).length,R=f.get($.prop)?.ord??m++;h.run($.prop,R,$.predicate??null,_),k&&(k.predicate=$.predicate??null,k.count=_)}for(let $ of n.prepare("SELECT prop FROM relations").all())w.has($.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run($.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run($.prop));o&&yE(o,w),n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,r}}async function mm(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await Do(n,t),await Fr(n,e)}async function ll(e,t){await mm(e,JSON.stringify(t))}async function xE(e,{retentionVersions:t}={}){if(cl(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=br(e),s;try{s=await Be(n,"utf8")}catch(u){if(u?.code==="ENOENT")return{skipped:!0,version:null,prunedVersion:null};throw u}let o=$E(e),r;try{r=JSON.parse(await Be(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Zc}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Zc);let i=r.version,a=br(e,i);await jn(xe(a),{recursive:!0}),await mm(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await pa(br(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await ll(o,r),{skipped:!1,version:i,prunedVersion:l}}async function Xt(e){if(To(e))return Xc(e.payload);if(Ms(e))return Xc(pE(e));let t;try{t=await Be(Qc(e),"utf8")}catch(n){if(n?.code==="ENOENT")return vr();throw n}return Xc(JSON.parse(t))}function Xc(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==cs||!kE.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=pr(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 EE(e,t){if(To(e)){e.payload=t;return}if(Ms(e)){vE(e,t);return}await jn(xe(Qc(e)),{recursive:!0}),await ll(Qc(e),t)}async function SE(e){if(To(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(Ms(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(gm);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await Be(Q(e,ul),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function jE(e,t){if(To(e)){e.syllogiseState=structuredClone(t);return}if(Ms(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(gm,JSON.stringify(t));return}let n=Q(e,ul);await jn(xe(n),{recursive:!0}),await ll(n,t)}function _E(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===Ro&&n.set(r.id,r));let o=(e.objectProperties||[]).find(r=>r?.prop===Un);for(let r of o?.examples||[]){if(!r?.subject)continue;let i=s.get(r.subject);i?i.push(r.object):s.set(r.subject,[r.object])}return e[el]={individualsById:t,sourcesById:n,statedByBySubject:s},e[el]}async function Fs(e,t){let n=await Xt(e);_E(n);let s=await t(n)??n;return LE(s),ME(s),s.proseIndex=Yu(s.individuals),await EE(e,s),s}function $r(e,t){return e?.attributes?.find(n=>n?.prop===Pt)?.value||t||Ii()}function wr(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function RE(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${Oi}:${e.sessionId}`:Oi,type:"operator"};case"teach":return{id:e.sessionId?`${Jc}:${e.sessionId}`:Jc,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:${dr(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 TE(e){return AE[e]||null}function CE(e,t,n){let s=RE(t);if(!s)return null;let o=Ps(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=$r(r,t?.createdAt||n),a={id:s.id,label:bm(s.id),class:Ro,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:Pt,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=xr(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function OE(e){let t=Ps(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===Ro&&(n[s.id]=s);return n}function IE(e,t){let n=Ps(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===Un)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function wm(e,t,n=Date.now(),s={}){let o=IE(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===Pt)?.value||"",{score:i,inputs:a}=td({sourceIds:o,createdAt:r},OE(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});wr(t,Ur,"trustScore",String(i)),wr(t,ka,"trustInputs",JSON.stringify(a)),wr(t,Es,"updatedAt",new Date(n).toISOString())}function Pi(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===Pt)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=Ho(i);if(!a)continue;let l=CE(e,a,r);l&&Li(e,{predicate:"statedBy",prop:Un},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:bm(l)})}wm(e,t,n,s)}function LE(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===Un),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==cs||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(Pi(e,r,o),s=!0);s&&Ds(e)}function ME(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=Ct(e),n=new Set;for(let a of Sm(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(!NE(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=Ps(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(wr(c,lm,"sourceReliability",String(nd(l))),wr(c,Es,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===Un),i=new Set;for(let a of r?.examples||[])s.has(a?.object)&&i.add(a.subject);for(let a of i){let l=o?o.individualsById.get(a):e.individuals.find(c=>c?.id===a);l&&wm(e,l)}}function xr(e,t){let n=Ps(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 Li(e,{predicate:t,prop:n},s){let o=e.objectProperties.find(l=>l?.prop===n);o||(o={predicate:t,prop:n,count:0,examples:[]},e.objectProperties.push(o));let r=n===Un?Ps(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||Ii()}),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||Ii();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 Ds(e){let t=[sl,nl,cs,Ro,Ao];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 PE(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:sl,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Pt,key:"createdAt",value:n||Ii()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function ym(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!rE.has(t))throw new Error(`utterance role must be "visitor" or "tmct", got ${JSON.stringify(t)}`);if(!o)throw new Error("utterance needs a sessionId");let c=String(s||""),u=Fn(n),d=`utt:${o}#${c}#${t}`,f=Mi(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=Br({doc:u}),m=e.individuals.find(y=>y?.id===d),h=$r(m,l||c),g={id:d,label:f,class:nl,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:Pt,key:"createdAt",value:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};xr(e,g);let b=PE(e,o,r);if(Li(e,{predicate:"saidInSession",prop:ol},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&Li(e,{predicate:"inReplyTo",prop:rl},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function FE(e,t){let n;return await Fs(e,s=>{n=ym(s,t),Ds(s)}),{id:n}}async function vm(e,t){let n=[];return t?.length?(await Fs(e,s=>{for(let o of t)n.push(ym(s,o));Ds(s)}),{ids:n}):{ids:n}}async function DE(e,t){t?.length&&await Fs(e,n=>{for(let s of t)Li(n,{predicate:"canonicalisedFrom",prop:il},{subject:s.factId,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}async function zE(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",quantifier:i="",premiseTrusts:a,ruleConfidence:l}={}){let c=X(t),u=Dn(n),d=X(s);if(!c||!u||!d)throw new Error("a fact needs subject, predicate and object");let f=pr(c,u,d),p=`${c} ${u} ${d}`,m=Br({doc:p}),h=Fn(i);return await Fs(e,async g=>{let b=g.individuals.find(k=>k?.id===f),y=b?.attributes?.find(k=>k?.prop==="mgx:factProvenance")?.value||"",w=[...new Set([...y.split(" | "),Fn(o)].filter(Boolean))],$=$r(b,r),j=b?.attributes?.find(k=>k?.prop==="mgx:factQuantifier")?.value||"",v=h||j,E={id:f,label:Mi(p),class:cs,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:Pt,key:"createdAt",value:$},...w.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.join(" | ")}]:[],...m.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:m.join(" ")}]:[],...v?[{prop:"mgx:factQuantifier",key:"quantifier",value:v}]:[]]};await Gc(E),xr(g,E),Pi(g,g.individuals.find(k=>k?.id===f),void 0,{premiseTrusts:a,ruleConfidence:l}),Ds(g)}),{id:f}}function BE(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 kr(e,t){let n=[],s=0;for(let r of t||[]){let i=X(r?.subject),a=Dn(r?.predicate),l=X(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:pr(i,a,l),s:i,p:a,o:l,text:c,tokens:Br({doc:c}),provenance:Fn(r?.provenance),createdAt:r?.createdAt||"",quantifier:Fn(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:BE(r?.justification)})}let o=[];return n.length?(await Fs(e,r=>{let i=Ps(r),a=i?i.individualsById:new Map(r.individuals.map(d=>[d?.id,d])),l=[],c=new Set,u=new Map;for(let d of n){let f=a.get(d.id),p=f?.attributes?.find($=>$?.prop==="mgx:factProvenance")?.value||"",m=[...new Set([...p.split(" | "),d.provenance].filter(Boolean))],h=$r(f,d.createdAt),g=f?.attributes?.find($=>$?.prop==="mgx:factQuantifier")?.value||"",b=d.quantifier||g,y={id:d.id,label:Mi(d.text),class:cs,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:Pt,key:"createdAt",value:h},...m.length?[{prop:"mgx:factProvenance",key:"provenance",value:m.join(" | ")}]:[],...d.tokens.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:d.tokens.join(" ")}]:[],...b?[{prop:"mgx:factQuantifier",key:"quantifier",value:b}]:[],...d.environments?[{prop:"mgx:factJustification",key:"justification",value:d.environments.map($=>$.join(" ")).join(" | ")}]:[]]},w=xr(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)Pi(r,a.get(d),void 0,u.get(d));Ds(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function ml(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=$m[n];if(!i)throw new Error(`a rule kind must be one of ${UE.join(", ")}, got ${JSON.stringify(n)}`);let a=X(t);if(!a)throw new Error("a rule needs a name");let l=WE[n]||new Set,c=i.map(([p])=>X(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===jr){let p=c[i.findIndex(([h])=>h==="objectRole")],m=c[i.findIndex(([h])=>h==="value")];if(!p&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=GE(n,a,c),f=Mi(`${a} = ${n}(${c.join(", ")})`);return await Fs(e,async p=>{let m=p.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...h.split(" | "),Fn(o)].filter(Boolean))],b=$r(m,r),y={id:d,label:f,class:Ao,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:Di,key:"ruleName",value:a},{prop:Co,key:"ruleKind",value:n},...i.map(([w,$],j)=>({prop:$,key:w,value:c[j],skip:!c[j]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...$})=>$),{prop:Pt,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await Gc(y),xr(p,y),Pi(p,p.individuals.find(w=>w?.id===d)),Ds(p)}),{id:d}}function hl(e,t){let n=X(t);return(e?.individuals||[]).find(s=>s?.class===Ao&&(s.attributes||[]).find(o=>o?.prop===Di)?.value===n)}function VE(e,t){let n=X(t),s=o=>(o.attributes||[]).find(r=>r?.prop===Co)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===Ao&&(o.attributes||[]).find(r=>r?.prop===Di)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function gl(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==Ao)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(Co),r=$m[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(Di)||"",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 bl(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(X,n),h=l(X,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(g.length){let w=g.slice().sort(($,j)=>c($.fact,j.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map($=>`${a($)}${$.provenance?` (source: ${$.provenance})`:""}`)]}}let b=hl(e,p),y=b?.attributes?.find(w=>w.prop===Co)?.value;if(b&&y===Er){let w=b.attributes.find(M=>M.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(M=>M.prop==="mgx:ruleBase2")?.value,j=X(n),v=X(s);if(!w||!$||!j||!v)return null;let R=f({entity:j,hopsTaken:0},M=>M.hopsTaken===2&&M.entity===v,M=>{if(M.hopsTaken>=2)return[];let A=M.hopsTaken===0?w:$;return r(A).filter(P=>P.fact.subject===M.entity).map(P=>({action:P,nextState:{entity:P.fact.object,hopsTaken:M.hopsTaken+1}}))},{maxDepth:2,stateKey:M=>`${M.entity}#${M.hopsTaken}`});if(!R)return null;let x=new Set,T=[];for(let M of R.actions){T.push(i(M.fact));for(let A of M.aliasFacts){let P=A.id||`${A.subject}|${A.predicate}|${A.object}`;x.has(P)||(x.add(P),T.push(`${a(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{citation:T}}if(b&&y===Sr){let w=b.attributes.find(_=>_.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(_=>_.prop==="mgx:ruleFilterProperty")?.value;if(!w||!$)return null;let j=await bl(e,w,n,s,o);if(!j)return null;let v=X(n),E=X($),k=u.find(_=>_.predicate===d&&_.subject===v&&X(_.object)===E);return k?{citation:[...j.citation,i(k)]}:null}return null}async function xm(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(X,n),m=o(f).filter(b=>p.has(b.fact.object));if(m.length){let b=new Map;for(let y of m)b.has(y.fact.subject)||b.set(y.fact.subject,[]),b.get(y.fact.subject).push(y);return[...b.entries()].map(([y,w])=>{let $=w.slice().sort((j,v)=>l(j.fact,v.fact))[0];return{subject:y,citation:[r($.fact),...$.aliasFacts.map(j=>`${i(j)}${j.provenance?` (source: ${j.provenance})`:""}`)]}})}let h=hl(e,f),g=h?.attributes?.find(b=>b.prop===Co)?.value;if(h&&g===Er){let b=h.attributes.find(E=>E.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(E=>E.prop==="mgx:ruleBase2")?.value,w=X(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},E=>{if(E.hopsTaken>=2)return[];let k=E.hopsTaken===0?y:b;return o(k).filter(_=>_.fact.object===E.entity).map(_=>({action:_,nextState:{entity:_.fact.subject,hopsTaken:E.hopsTaken+1}}))},{maxDepth:2,stateKey:E=>`${E.entity}#${E.hopsTaken}`}).filter(E=>E.node.hopsTaken===2).map(({node:E,path:k})=>{let _=new Set,R=[];for(let x of k.actions.slice().reverse()){R.push(r(x.fact));for(let T of x.aliasFacts){let M=T.id||`${T.subject}|${T.predicate}|${T.object}`;_.has(M)||(_.add(M),R.push(`${i(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{subject:E.entity,citation:R}})}if(h&&g===Sr){let b=h.attributes.find(v=>v.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(v=>v.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await xm(e,b,n,s),$=X(y),j=[];for(let v of w){let E=X(v.subject),k=c.find(_=>_.predicate===u&&_.subject===E&&X(_.object)===$);k&&j.push({subject:v.subject,citation:[...v.citation,r(k)]})}return j}return[]}function Ct(e){let t=e?.individuals||[],n=new Map(t.filter(i=>i?.class===Ro).map(i=>[i.id,i])),s=(e?.objectProperties||[]).find(i=>i?.prop===Un),o=new Map;for(let i of s?.examples||[])o.has(i.subject)||o.set(i.subject,[]),o.get(i.subject).push(i.object);let r=[];for(let i of t){if(i?.class!==cs)continue;let a=m=>(i.attributes||[]).find(h=>h?.key===m)?.value||"",l=o.get(i.id)||[],c=l.map(m=>(n.get(m)?.attributes||[]).find(h=>h?.prop==="mgx:sourceType")?.value).filter(Boolean),u=a("justification"),d=[];if(u)for(let m of u.split(" | ")){let h=m.split(" ").filter(Boolean);h.length&&d.push(h)}let f=[],p=new Set;for(let m of d)for(let h of m)p.has(h)||(p.add(h),f.push(h));r.push({id:i.id,subject:a("subject"),predicate:a("predicate"),object:a("object"),provenance:a("provenance"),quantifier:a("quantifier"),sourceIds:l,sourceTypes:c,trust:Number((i.attributes||[]).find(m=>m?.prop===Ur)?.value)||0,environments:d,justification:f})}return r}async function qE(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await Fs(e,o=>{if(o.individuals=(o.individuals||[]).filter(i=>i?.class===cs&&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}Ds(o)}),{removed:s}):{removed:s}}function Sm(e,{floor:t=HE}={}){let n=Ct(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(Em.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 yr,tl,nl,cs,sl,Ro,Ao,ol,rl,oE,Un,il,lm,Oi,Jc,rE,am,iE,Qc,al,um,lE,uE,cm,Bn,hm,Zc,$E,kE,ul,gm,el,Ps,Mi,Ii,bm,AE,NE,Er,Sr,dl,pl,Fi,jr,fl,UE,Di,Co,$m,WE,GE,HE,zs,km,Em,Je=L(()=>{kt();ze();Yn();Yt();Yt();Ss();Ss();Wc();Kf();yr=Q(".tmct","memory"),tl=Q(yr,"graph.json"),nl="Utterance",cs="Fact",sl="Session",Ro="Source",Ao="Rule",ol="mgx:saidInSession",rl="mgx:inReplyTo",oE="mgx:derivedFrom",Un="mgx:statedBy",il="mgx:canonicalisedFrom",lm="mgx:sourceReliability",Oi="src:operator-chat",Jc="src:teach-chat",rE=new Set(["visitor","tmct"]),am=48,iE=[{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:ol,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:rl,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:Pt,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:Es,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:oE,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:Un,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:il,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:Ur,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:ka,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:$o,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)"}];Qc=e=>br(e),al="memory",um="sqlite";lE=`
101
+ `))return r}}throw new he("cannot find end of structure",{toml:e,ptr:t})}var ia=L(()=>{Qs();});function rj(e,t,n){let s=e.slice(t,n),o=s.indexOf("#");return o>-1&&(Vo(e,o),s=s.slice(0,o)),[s.trimEnd(),o]}function Ur(e,t,n,s,o){if(s===0)throw new he("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[l,c]=r==="["?yh(e,t,s,o):wh(e,t,s,o);if(n){if(c=On(e,c),e[c]===",")c++;else if(e[c]!==n)throw new he("expected comma or end of structure",{toml:e,ptr:c})}return[l,c]}if(r==='"'||r==="'"){let[l,c]=oa(e,t);if(n){if(c=On(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==`
102
+ `&&e[c]!=="\r")throw new he("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[l,c]}let i=bh(e,t,",",n),a=rj(e,t,i-(e[i-1]===","?1:0));if(!a[0])throw new he("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&a[1]>-1&&(i=On(e,t+a[1]),e[i]===","&&i++),[gh(a[0],e,t,o),i]}var zl=L(()=>{Dl();Bl();ia();Qs();});function aa(e,t,n="="){let s=t-1,o=[],r=e.indexOf(n,t);if(r<0)throw new he("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let i=e[t=++s];if(i!==" "&&i!==" ")if(i==='"'||i==="'"){if(i===e[t+1]&&i===e[t+2])throw new he("multiline strings are not allowed in keys",{toml:e,ptr:t});let[a,l]=oa(e,t);s=e.indexOf(".",l);let c=e.slice(l,s<0||s>r?r:s),u=ra(c);if(u>-1)throw new he("newlines are not allowed in keys",{toml:e,ptr:t+s+u});if(c.trimStart())throw new he("found extra tokens after the string part",{toml:e,ptr:l});if(r<l&&(r=e.indexOf(n,l),r<0))throw new he("incomplete key-value: cannot find end of key",{toml:e,ptr:t});o.push(a)}else{s=e.indexOf(".",t);let a=e.slice(t,s<0||s>r?r:s);if(!ij.test(a))throw new he("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});o.push(a.trimEnd())}}while(s+1&&s<r);return[o,On(e,r+1,!0,!0)]}function wh(e,t,n,s){let o={},r=new Set,i;for(t++;(i=e[t++])!=="}"&&i;){if(i===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(i==="#")t=Vo(e,t);else if(i!==" "&&i!==" "&&i!==`
103
+ `&&i!=="\r"){let a,l=o,c=!1,[u,d]=aa(e,t-1);for(let m=0;m<u.length;m++){if(m&&(l=c?l[a]:l[a]={}),a=u[m],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||r.has(l[a])))throw new he("trying to redefine an already defined value",{toml:e,ptr:t});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:!0,configurable:!0,writable:!0})}if(c)throw new he("trying to redefine an already defined value",{toml:e,ptr:t});let[f,p]=Ur(e,d,"}",n-1,s);r.add(f),l[a]=f,t=p}}if(!i)throw new he("unfinished table encountered",{toml:e,ptr:t});return[o,t]}function yh(e,t,n,s){let o=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new he("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=Vo(e,t);else if(r!==" "&&r!==" "&&r!==`
104
+ `&&r!=="\r"){let i=Ur(e,t-1,"]",n-1,s);o.push(i[0]),t=i[1]}}if(!r)throw new he("unfinished array encountered",{toml:e,ptr:t});return[o,t]}var ij,Bl=L(()=>{Dl();zl();ia();Qs();ij=/^[a-zA-Z0-9-_]+[ \t]*$/});function vh(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 qo(e,{maxDepth:t=1e3,integersAsBigInt:n}={}){let s={},o={},r=s,i=o;for(let a=On(e,0);a<e.length;){if(e[a]==="["){let l=e[++a]==="[",c=aa(e,a+=+l,"]");if(l){if(e[c[1]-1]!=="]")throw new he("expected end of table declaration",{toml:e,ptr:c[1]-1});c[1]++}let u=vh(c[0],s,o,l?2:1);if(!u)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});i=u[2],r=u[1],a=c[1]}else{let l=aa(e,a),c=vh(l[0],r,i,0);if(!c)throw new he("trying to redefine an already defined table or value",{toml:e,ptr:a});let u=Ur(e,l[1],void 0,t,n);c[1][c[0]]=u[0],a=u[1]}if(a=On(e,a,!0),e[a]&&e[a]!==`
105
+ `&&e[a]!=="\r")throw new he("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:a});a=On(e,a)}return s}var $h=L(()=>{Bl();zl();ia();Qs();});var xh=L(()=>{});var ca=L(()=>{$h();xh();Fl();Qs();});var kh={};Mn(kh,{CONFIG_FILE:()=>ua,loadTomlConfig:()=>Ul,mergeEffective:()=>Sh,normalizeConfig:()=>Eh});async function Ul(e,{file:t}={}){let n=t||Q(e,ua),s;try{s=await ze(n,"utf8")}catch(o){if(o&&o.code==="ENOENT")return null;throw o}try{return qo(s)}catch(o){throw new Error(`Invalid ${ua} at ${n}: ${o&&o.message?o.message:o}`)}}async function aj(e,t){let n;if(Array.isArray(e))n=e;else{let o=Yt(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(Yt(t,r))}return s}async function Eh(e,{configDir:t}={}){let n=e||{},s=t||process.cwd(),o={};if(n.repositories!==void 0&&(o.repositories=await aj(n.repositories,s)),n.out_root!==void 0&&(o.outRoot=Yt(s,String(n.out_root))),n.graph_file!==void 0&&(o.graphFile=Yt(s,String(n.graph_file))),n.graph_files!==void 0){let w=Array.isArray(n.graph_files)?n.graph_files:[n.graph_files];o.graphFiles=w.map($=>Yt(s,String($)))}let r=n.graph||{};r.read_only!==void 0&&(o.graph={readOnly:r.read_only});let i=n.corpus||{};i.tier!==void 0&&(o.corpus={tier:i.tier});let a=n.seed||{},l={};a.enabled!==void 0&&(l.enabled=a.enabled),a.limit!==void 0&&(l.limit=a.limit),a.capture_unknown_context!==void 0&&(l.captureUnknownContext=a.capture_unknown_context),a.unknown_context_limit!==void 0&&(l.unknownContextLimit=a.unknown_context_limit),Object.keys(l).length&&(o.seed=l),n.extensions!==void 0&&(o.extensions=n.extensions),n.bias!==void 0&&(o.bias=n.bias),n.games!==void 0&&(o.games=n.games),n.planning!==void 0&&(o.planning=n.planning),n.research!==void 0&&(o.research=n.research),n.discourse!==void 0&&(o.discourse=n.discourse);let c=n.index||{},u={};c.languages!==void 0&&(u.languages=c.languages),c.exclude!==void 0&&(u.exclude=c.exclude),c.secret_exclude!==void 0&&(u.secretExclude=c.secret_exclude),c.history_depth!==void 0&&(u.historyDepth=c.history_depth),c.include_text!==void 0&&(u.includeText=c.include_text),c.include_structure!==void 0&&(u.includeStructure=c.include_structure),c.respect_gitignore!==void 0&&(u.respectGitignore=c.respect_gitignore),c.markdown_sections!==void 0&&(u.markdownSections=c.markdown_sections),c.vue!==void 0&&(u.vue=c.vue),Object.keys(u).length&&(o.index=u);let d=n.tune||{},f={};d.score_gap_k!==void 0&&(f.scoreGapK=d.score_gap_k),d.literal_mention!==void 0&&(f.literalMention=d.literal_mention),d.demote_non_prod!==void 0&&(f.demoteNonProd=d.demote_non_prod),d.call_adjacency!==void 0&&(f.callAdjacency=d.call_adjacency),d.impl_of_interface!==void 0&&(f.implOfInterface=d.impl_of_interface),d.beam_search!==void 0&&(f.beamSearch=d.beam_search),d.beam_width!==void 0&&(f.beamWidth=d.beam_width),d.prose_layers!==void 0&&(f.proseLayers=d.prose_layers);let p=d.expansion||{},m={};p.strategy!==void 0&&(m.strategy=p.strategy),p.nodes!==void 0&&(m.nodes=p.nodes),p.q!==void 0&&(m.q=p.q),p.depth!==void 0&&(m.depth=p.depth),Object.keys(m).length&&(f.expansion=m),Object.keys(f).length&&(o.tune=f);let h=n.telemetry||{};h.enabled!==void 0&&(o.telemetry={enabled:h.enabled});let g=n.memory||{},b={};g.retention_versions!==void 0&&(b.retentionVersions=g.retention_versions),g.backend!==void 0&&(b.backend=g.backend),Object.keys(b).length&&(o.memory=b);let y=[];for(let[w,$]of cj)n[w]&&n[w][$]!==void 0&&y.push(`${w}.${$}`);return o.unwired=y,o}function la(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:la(o,r,n)}return n}function Sh({args:e={},toml:t=null,defaults:n={}}={}){let s=la(n),o=null;if(t){let{unwired:u,...d}=t;o=d}let r=o?la(o):{},i=la(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 ua,cj,da=L(()=>{jt();Be();ca();ua="tmct.toml";cj=[["index","include_text"],["index","include_structure"],["index","respect_gitignore"],["index","markdown_sections"],["index","vue"]]});var _s={};Mn(_s,{CANONICALISED_FROM_PROP:()=>tu,CAPABLE_OF_PREDICATE:()=>p_,CHAIN_KEEP_DEPTH:()=>th,CHAIN_ROLLUP_THRESHOLD:()=>ta,CREATED_AT_PROP:()=>nt,DEFAULT_RETENTION:()=>Kl,FACT_CLASS:()=>Et,GROUP_ROLLUP_THRESHOLD:()=>Zm,HAS_A_PREDICATE:()=>tr,IN_REPLY_TO_PROP:()=>eu,MEMORY_DIR_REL:()=>Xo,MEMORY_GRAPH_REL:()=>Xl,MEMORY_MANIFEST_REL:()=>Hh,MEMORY_SESSION_CLASS:()=>Ql,MULTI_VALUED_PREDICATES:()=>f_,NODE_ID_REL:()=>iu,OPERATOR_SOURCE_ID:()=>pa,ROLLUP_COUNT_PROP:()=>Fr,ROLLUP_EARLIEST_PROP:()=>An,ROLLUP_KEEP_PER_TYPE:()=>eh,ROLLUP_LATEST_PROP:()=>Cn,ROLLUP_PRIOR_PROP:()=>Go,ROLLUP_RECORD_IDS_PROP:()=>Mr,ROLLUP_SOURCE_IDS_PROP:()=>Wo,RULE_CLASS:()=>Qo,RULE_KIND_ACTION_CONSTRAINT:()=>pu,RULE_KIND_ACTION_EFFECT:()=>Jr,RULE_KIND_ACTION_PRECOND:()=>ya,RULE_KIND_ACTION_SIGNATURE:()=>du,RULE_KIND_COMPOSE2:()=>Yr,RULE_KIND_FILTER:()=>Xr,RULE_KIND_PROP:()=>er,RULE_KIND_RECURSIVE:()=>uu,SAID_IN_SESSION_PROP:()=>Zl,SOURCE_CLASS:()=>Jo,SOURCE_RELIABILITY_PROP:()=>Th,STATED_BY_PROP:()=>ln,SYLLOGISE_STATE_REL:()=>ru,UPDATED_AT_PROP:()=>cs,UTTERANCE_CLASS:()=>Jl,appendCanonicalisedFromEdges:()=>e_,appendFact:()=>o_,appendFacts:()=>Kr,appendRule:()=>fu,appendUtterance:()=>Zj,appendUtterances:()=>Qh,applySeedPayload:()=>pj,attachFactHeads:()=>Mh,chainRollupIdFor:()=>Cl,cloneMemoryPayload:()=>fj,closeSqliteMemoryStore:()=>Bh,createInMemoryStore:()=>ha,createSqliteMemoryStore:()=>zh,emptyMemory:()=>Vr,factGroupId:()=>Ln,factHeadsOf:()=>Fh,factIdForTriple:()=>ge,factRecordIdsFor:()=>Zo,findContradictions:()=>ag,findRuleByName:()=>mu,findRulesByName:()=>l_,headRollupIdFor:()=>Al,isChainRollupId:()=>Ho,isHeadRollupId:()=>xs,isMemoryOrSqliteHandle:()=>su,isRollupId:()=>na,loadMemory:()=>en,loadNodeId:()=>Wj,loadSyllogiseState:()=>Bj,normFactPredicate:()=>Jn,normFactTerm:()=>X,openConfiguredMemoryBackend:()=>ks,openMemoryBackend:()=>Uh,provSourceClassFor:()=>Hj,provenanceTagToSource:()=>ls,readFactRows:()=>Lt,readObjectSupersessions:()=>Sj,readRuleRows:()=>hu,removeFacts:()=>u_,resolveMemoryGraphFile:()=>Wr,resolveRelationChase:()=>gu,resolveRelationChaseReverse:()=>ig,saveNodeId:()=>Gj,saveSyllogiseState:()=>Uj,snapshotMemory:()=>Pj});function Vr(){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:dj.map(e=>({...e})),classes:[],objectProperties:[],individuals:[],proseIndex:{}}}function Wr(e,t=null){if(Ss(e)||In(e))throw new Error("resolveMemoryGraphFile: dir is a memory/sqlite handle, not a file path (Backend A only)");return t===null?Q(e,Xl):Q(e,Xo,`graph.v${t}.json`)}function Ss(e){return!!e&&typeof e=="object"&&e.backend===nu}function In(e){return!!e&&typeof e=="object"&&e.backend===Ch}function su(e){return Ss(e)||In(e)}function ha(){return{backend:nu,payload:Vr()}}function pj(e,t){t&&(e.payload={...e.payload,...t})}function fj(e){if(!e)return null;try{return structuredClone(e)}catch{return JSON.parse(JSON.stringify(e))}}function Oh(e){for(let t of String(e||"").split(" | ")){if(!t)continue;let n=cu(ls(t));if(n)return n}return{id:es,type:""}}function Ln(e){let t=String(e||""),n=t.indexOf("@");return n<0?t:t.slice(0,n)}function hj(e){return cu(ls(e))||{id:es,type:""}}function Ih(e){let t=new Map;for(let n of String(e||"").split(" | ")){let s=n.trim();if(!s)continue;let{id:o,type:r}=hj(s),i=t.get(o)||{sourceId:o,sourceType:r,tags:[]};i.tags.includes(s)||i.tags.push(s),t.set(o,i)}return t.size||t.set(es,{sourceId:es,sourceType:"",tags:[]}),[...t.values()]}function Vl(e,t=Math.max){let n="",s=null;for(let o of e||[]){let r=ls(o)?.createdAt||"",i=Date.parse(r);Number.isFinite(i)&&(s===null||t(i,s)===i)&&(n=r,s=i)}return n}function ou(e,t="",n=Math.max){return Vl(e,n)||(Number.isFinite(Date.parse(t))?String(t):"")}function gj(e,t){let n=Date.parse(e.assertedAt),s=Date.parse(t.assertedAt);return!Number.isFinite(n)||!Number.isFinite(s)?!1:n>s?!0:n===s&&!!e.observedAt&&!t.observedAt}function Lh(e,t){let n=i=>(e.attributes||[]).find(a=>a?.prop===i)?.value||"",s=Oh(n("mgx:factProvenance")),o=n(qr).split(" ").filter(Boolean)[0]||null,r=Dr(e.id);return[e.id,Ln(e.id),n("rdf:subject"),n("rdf:predicate"),n("rdf:object"),n(Ko)||s.id,r||s.type,Number(n(r?Go:Eo))||0,n(nt),n(Gr)||null,o,t]}function bj(e){if(e.prepare("SELECT id FROM facts LIMIT 1").get()||!e.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Et))return;let t=e.prepare(Nh);e.exec("BEGIN IMMEDIATE");try{for(let n of e.prepare("SELECT json FROM individuals WHERE class = ?").all(Et))t.run(...Lh(JSON.parse(n.json),n.json));e.exec("COMMIT")}catch(n){throw e.exec("ROLLBACK"),n}}function yj(e){return(e||[]).map(t=>({sourceId:t.sourceId||"",sourceType:t.sourceType||"",ownTrust:t.ownTrust,assertedAt:t.assertedAt||""}))}function Mh(e,t){return e&&t&&(e[Ph]=t),e}function $j(e){let t=new Map;for(let n of e.prepare("SELECT triple_hash, trust_base, inputs_json FROM fact_heads").all())t.set(n.triple_hash,{trustBase:n.trust_base,inputs:JSON.parse(n.inputs_json)});return t}function Dh(e,t,n,s){let o=e.prepare(vj),r=e.prepare("DELETE FROM fact_heads WHERE triple_hash = ?"),i=Es();for(let a of n){let l=t.groups.get(a);if(!l?.length){r.run(a),s?.delete(a);continue}let c=yj(wu(a,l,t).assertions),u=ap(c).score;o.run(a,u,JSON.stringify(c),i),s?.set(a,{trustBase:u,inputs:c})}}function xj(e){let t=e.db;if(t.prepare("SELECT triple_hash FROM fact_heads LIMIT 1").get()||!t.prepare("SELECT id FROM individuals WHERE class = ? LIMIT 1").get(Et))return;let n=bu(Wh(e));t.exec("BEGIN IMMEDIATE");try{Dh(t,n,n.groups.keys(),null),t.exec("COMMIT")}catch(s){throw t.exec("ROLLBACK"),s}}function Ej(e,t,n){let s=e.prepare("SELECT ord, to_id FROM fact_object_supersessions WHERE subject = ? AND predicate = ? ORDER BY ord DESC LIMIT 1"),o=e.prepare("INSERT INTO fact_object_supersessions(subject, predicate, ord, from_id, to_id, recorded_at) VALUES (?, ?, ?, ?, ?, ?)"),r=Es();for(let i of n){let[a,l]=i.split("\0");if(Zi(l)!==Pr)continue;let c=t.groupsByPair.get(i)||[];if(c.length<2)continue;let u=c.map(p=>{let m=wu(p,t.groups.get(p),t);return m.trust=gi(m.assertions).score,m});if(new Set(u.map(p=>p.object)).size<2)continue;let d=Tl(u,Pr)?.winner?.id;if(!d)continue;let f=s.get(a,l);f?.to_id!==d&&o.run(a,l,(f?.ord??-1)+1,f?.to_id||"",d,r)}}function Sj(e,{subject:t,predicate:n}={}){if(!In(e))return[];let s=t&&n?" WHERE subject = ? AND predicate = ?":"",o=s?[t,n]:[];return e.db.prepare(`SELECT subject, predicate, ord, from_id, to_id, recorded_at FROM fact_object_supersessions${s} ORDER BY subject, predicate, ord`).all(...o).map(r=>({subject:r.subject,predicate:r.predicate,ord:r.ord,fromId:r.from_id,toId:r.to_id,recordedAt:r.recorded_at}))}function jj(){if(_h)return;_h=!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 zh(e){jj();let{DatabaseSync:t}=await Promise.resolve().then(()=>(hh(),mh)),n=new t(e);n.exec("PRAGMA journal_mode = WAL"),n.exec("PRAGMA synchronous = NORMAL"),n.exec(mj),bj(n);let s={backend:Ch,db:n,dbPath:e};return xj(s),s}function Bh(e){In(e)&&e.db.close()}async function Uh(e,t){if(t===nu)return{dir:ha(),close:async()=>{}};let n=Q(e,".tmct","memory","graph.sqlite"),s=r=>Td(r).then(()=>!0,()=>!1);!await s(n)&&await s(Q(e,Xl))&&process.stderr.write(`found .tmct/memory/graph.json \u2014 the flat-file memory backend is retired; starting a fresh sqlite store (the old file is left untouched)
107
+ `),await xn($e(n),{recursive:!0});let o=await zh(n);return{dir:o,close:async()=>Bh(o)}}async function ks(e,t=process.env){let n=String(t?.TMCT_MEMORY_BACKEND||"").trim().toLowerCase();if(!n)try{let{loadTomlConfig:s}=await Promise.resolve().then(()=>(da(),kh));n=String((await s(e))?.memory?.backend||"").trim().toLowerCase()}catch{n=""}return Uh(e,n)}function _j(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=Wh(e),e.cachedFactHeads=$j(e.db),e.cachedDataVersion=t),Mh(vn(e.cachedPayload),e.cachedFactHeads)}function Wh(e){let t=e.db,n=Vr(),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 Rj(e,t){let n=vn(t),s=e.individuals.findIndex(o=>o?.id===t.id);s>=0?e.individuals[s]=n:e.individuals.push(n)}function Tj(e,t){e.individuals=e.individuals.filter(n=>t.has(n?.id))}function Aj(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 Cj(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,vn(Object.fromEntries(n.map(r=>[r,t[r]])))),e.examples.push(o)}function Oj(e,t){e.examples=e.examples.filter(n=>t.has(`${n.subject}\0${n.object}`))}function Ij(e,t){e.objectProperties=e.objectProperties.filter(n=>t.has(n?.prop))}function Lj(e,t){let n=e.db,s=Vr(),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=vn(t.generated_at??s.generated_at),o.memory=vn(t.memory??s.memory),o.prefixes=vn(t.prefixes??s.prefixes),o.vocabulary=vn(t.vocabulary??s.vocabulary),o.classes=vn(t.classes??s.classes),o.proseIndex=vn(t.proseIndex??s.proseIndex));let i=n.prepare("SELECT ord, json FROM individuals WHERE id = ?"),l=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM individuals").get().m+1,c=n.prepare("INSERT OR REPLACE INTO individuals(id, ord, class, label, json) VALUES (?, ?, ?, ?, ?)"),u=n.prepare(Nh),d=new Set,f=new Set,p=new Set;for(let S of t.individuals||[]){d.add(S.id);let R=JSON.stringify(S),k=i.get(S.id);if(k&&k.json===R)continue;let A=k?k.ord:l++;c.run(S.id,A,S.class??null,S.label??null,R),S.class===Et&&(u.run(...Lh(S,R)),f.add(Ln(S.id)),p.add(ql(Hr(S,"subject"),Hr(S,"predicate")))),o&&Rj(o,S)}let m=n.prepare("DELETE FROM individuals WHERE id = ?"),h=n.prepare("DELETE FROM facts WHERE id = ?"),g=n.prepare("SELECT triple_hash, subject, predicate FROM facts WHERE id = ?");for(let S of n.prepare("SELECT id FROM individuals").all()){if(d.has(S.id))continue;let R=g.get(S.id);R&&(f.add(R.triple_hash),p.add(ql(R.subject,R.predicate))),m.run(S.id),h.run(S.id)}o&&Tj(o,d);let b=n.prepare("SELECT ord FROM relations WHERE prop = ?"),w=n.prepare("SELECT COALESCE(MAX(ord), -1) AS m FROM relations").get().m+1,$=n.prepare("INSERT OR REPLACE INTO relations(prop, ord, predicate, count) VALUES (?, ?, ?, ?)"),_=n.prepare("SELECT subject, object, subject_label, object_label, extra FROM edges WHERE prop = ?"),v=n.prepare("INSERT OR REPLACE INTO edges(prop, subject, object, subject_label, object_label, extra) VALUES (?, ?, ?, ?, ?, ?)"),x=n.prepare("DELETE FROM edges WHERE prop = ? AND subject = ? AND object = ?"),E=new Set;for(let S of t.objectProperties||[]){E.add(S.prop);let R=_.all(S.prop),k=new Map(R.map(B=>[`${B.subject}\0${B.object}`,B])),A=new Set,P=o?Aj(o,S.prop):null;for(let B of S.examples||[]){let Z=`${B.subject}\0${B.object}`;A.add(Z);let J=Object.keys(B).filter(W=>!kj.has(W)),ne=J.length?JSON.stringify(Object.fromEntries(J.map(W=>[W,B[W]]))):null,D=k.get(Z);D&&(D.subject_label??null)===(B.subjectLabel??null)&&(D.object_label??null)===(B.objectLabel??null)&&(D.extra??null)===(ne??null)||(v.run(S.prop,B.subject,B.object,B.subjectLabel??null,B.objectLabel??null,ne),P&&Cj(P,B,J))}for(let B of k.keys()){if(A.has(B))continue;let[Z,J]=B.split("\0");x.run(S.prop,Z,J)}P&&Oj(P,A);let T=Number.isFinite(S.count)?S.count:(S.examples||[]).length,M=b.get(S.prop)?.ord??w++;$.run(S.prop,M,S.predicate??null,T),P&&(P.predicate=S.predicate??null,P.count=T)}for(let S of n.prepare("SELECT prop FROM relations").all())E.has(S.prop)||(n.prepare("DELETE FROM edges WHERE prop = ?").run(S.prop),n.prepare("DELETE FROM relations WHERE prop = ?").run(S.prop));if(o&&Ij(o,E),f.size){let S=bu(t);Dh(n,S,f,e.cachedFactHeads),Ej(n,S,p)}n.exec("COMMIT")}catch(r){throw n.exec("ROLLBACK"),e.cachedPayload=void 0,e.cachedFactHeads=void 0,r}}async function Gh(e,t){let n=`${e}.tmp-${process.pid}-${Math.random().toString(36).slice(2,10)}`;await lr(n,t),await li(n,e)}async function ga(e,t){await Gh(e,JSON.stringify(t))}async function Pj(e,{retentionVersions:t}={}){if(su(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=Wr(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=Nj(e),r;try{r=JSON.parse(await ze(o,"utf8"))}catch(u){if(u?.code!=="ENOENT")throw u;r={version:0,retentionVersions:t??Kl}}Number.isInteger(r.version)||(r.version=0),Number.isInteger(r.retentionVersions)||(r.retentionVersions=t??Kl);let i=r.version,a=Wr(e,i);await xn($e(a),{recursive:!0}),await Gh(a,s),r.version=i+1;let l=null,c=i-r.retentionVersions;if(c>=0)try{await qa(Wr(e,c)),l=c}catch(u){if(u?.code!=="ENOENT")throw u}return await ga(o,r),{skipped:!1,version:i,prunedVersion:l}}async function en(e){if(Ss(e))return Wl(e.payload);if(In(e))return Wl(_j(e));let t;try{t=await ze(Hl(e),"utf8")}catch(n){if(n?.code==="ENOENT")return Vr();throw n}return Wl(JSON.parse(t))}function Fj(e){if(!Array.isArray(e?.individuals))return e;let t=new Map;for(let s of e.individuals){if(s?.class!==Et||!Mj.test(s.id||""))continue;let o=i=>(s.attributes||[]).find(a=>a?.key===i)?.value||"",r=Po(o("subject"),o("predicate"),o("object"));r!==s.id&&(t.set(s.id,r),s.id=r)}if(!t.size)return e;let n=s=>t.get(s)||s;for(let s of e.objectProperties||[])for(let o of s.examples||[])o&&(t.has(o.subject)&&(o.subject=t.get(o.subject)),t.has(o.object)&&(o.object=t.get(o.object)));for(let s of e.individuals){Array.isArray(s?.derived_from)&&s.derived_from.length&&(s.derived_from=s.derived_from.map(n));let o=(s?.attributes||[]).find(r=>r?.prop==="mgx:factJustification");o?.value&&(o.value=o.value.split(" | ").map(r=>r.split(" ").filter(Boolean).map(n).join(" ")).filter(Boolean).join(" | "))}return e}function Dj(e){if(!Array.isArray(e?.individuals))return e;let t=(e.objectProperties||[]).find(l=>l?.prop===ln),n=new Map;for(let l of t?.examples||[]){if(!l?.subject)continue;let c=n.get(l.subject);c?c.push(l):n.set(l.subject,[l])}let s=new Set,o=new Map,r=[],i=[],a=[];for(let l of e.individuals){if(l?.class!==Et||String(l.id||"").includes("@")){a.push(l);continue}let c=w=>(l.attributes||[]).find($=>$?.prop===w)?.value||"",u=c("rdf:subject"),d=c("rdf:predicate"),f=c("rdf:object");if(!u||!d||!f){a.push(l);continue}let p=Po(u,d,f),m=c(nt),h=c("mgx:factProvenance"),g=n.get(l.id)||[],b=h?Ih(h):[];for(let w of g)b.some($=>$.sourceId===w.object)||b.push({sourceId:w.object,sourceType:"",tags:[]});b.length||b.push({sourceId:es,sourceType:"",tags:[]});let y=[];for(let w of b){let $={id:`${p}@${w.sourceId}`,label:l.label,class:Et,derived_from:vn(l.derived_from)||[],mentions:vn(l.mentions)||[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:u},{prop:"rdf:predicate",key:"predicate",value:d},{prop:"rdf:object",key:"object",value:f},{prop:nt,key:"createdAt",value:ou(w.tags,m,Math.min)||m||Es()},{prop:Ko,key:"sourceId",value:w.sourceId},...w.tags.length?[{prop:"mgx:factProvenance",key:"provenance",value:w.tags.join(" | ")}]:[],...c("mgx:hasProseTokens")?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:c("mgx:hasProseTokens")}]:[],...c("mgx:factQuantifier")?[{prop:"mgx:factQuantifier",key:"quantifier",value:c("mgx:factQuantifier")}]:[],...w.sourceType==="entailed"&&c("mgx:factJustification")?[{prop:"mgx:factJustification",key:"justification",value:c("mgx:factJustification")}]:[]]};if(a.push($),r.push($),y.push($.id),w.sourceId!==es){let _=g.find(v=>v?.object===w.sourceId);i.push({..._||{},subject:$.id,object:w.sourceId,subjectLabel:$.label,objectLabel:lu(w.sourceId)})}}s.add(l.id),o.set(l.id,y)}if(!s.size)return e;t?(t.examples=(t.examples||[]).filter(l=>!s.has(l?.subject)),t.examples.push(...i),t.count=t.examples.length):i.length&&(e.objectProperties=e.objectProperties||[],e.objectProperties.push({predicate:"statedBy",prop:ln,count:i.length,examples:i}));for(let l of e.objectProperties||[]){if(l?.prop===ln||!l?.examples?.length)continue;let c=[];for(let u of l.examples){let d=s.has(u?.subject)?o.get(u.subject)||[]:[u?.subject],f=s.has(u?.object)?o.get(u.object)||[]:[u?.object];for(let p of d)for(let m of f)c.push({...u,subject:p,object:m})}l.examples=c,l.count=c.length}e.individuals=a,Kh(e);for(let l of r)Yo(e,l);return js(e),e}async function zj(e,t){if(Ss(e)){e.payload=t;return}if(In(e)){Lj(e,t);return}await xn($e(Hl(e)),{recursive:!0}),await ga(Hl(e),t)}async function Bj(e){if(Ss(e))return e.syllogiseState?structuredClone(e.syllogiseState):null;if(In(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(Vh);return t?.v?JSON.parse(t.v):null}try{return JSON.parse(await ze(Q(e,ru),"utf8"))}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function Uj(e,t){if(Ss(e)){e.syllogiseState=structuredClone(t);return}if(In(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(Vh,JSON.stringify(t));return}let n=Q(e,ru);await xn($e(n),{recursive:!0}),await ga(n,t)}async function Wj(e){if(Ss(e))return e.nodeId||null;if(In(e)){let t=e.db.prepare("SELECT v FROM meta WHERE k = ?").get(qh);return t?.v&&JSON.parse(t.v).nodeId||null}try{return JSON.parse(await ze(Q(e,iu),"utf8")).nodeId||null}catch(t){if(t?.code==="ENOENT")return null;throw t}}async function Gj(e,t){if(Ss(e)){e.nodeId=t;return}if(In(e)){e.db.prepare("INSERT OR REPLACE INTO meta(k, v) VALUES (?, ?)").run(qh,JSON.stringify({nodeId:t}));return}let n=Q(e,iu);await xn($e(n),{recursive:!0}),await ga(n,{nodeId:t})}function Kh(e){let t=new Map,n=new Map,s=new Map,o=new Map;for(let i of e.individuals||[])if(i?.id&&(t.set(i.id,i),i.class===Jo&&n.set(i.id,i),i.class===Et)){let a=Ln(i.id),l=o.get(a);l?l.push(i.id):o.set(a,[i.id])}let r=(e.objectProperties||[]).find(i=>i?.prop===ln);for(let i of r?.examples||[]){if(!i?.subject)continue;let a=s.get(i.subject);a?a.push(i.object):s.set(i.subject,[i.object])}return e[Yl]={individualsById:t,sourcesById:n,statedByBySubject:s,factRecordsByGroup:o},e[Yl]}async function to(e,t){let n=await en(e);Kh(n);let s=await t(n)??n;return Yj(s),Jj(s),s.proseIndex=Yd(s.individuals),await zj(e,s),s}function au(e,t){return e?.attributes?.find(n=>n?.prop===nt)?.value||t||Es()}function un(e,t,n,s){e.attributes=(e.attributes||[]).filter(o=>o?.prop!==t),e.attributes.push({prop:t,key:n,value:s})}function cu(e){switch(e?.kind){case"operator":return{id:e.sessionId?`${pa}:${e.sessionId}`:pa,type:"operator"};case"teach":return{id:e.sessionId?`${Gl}:${e.sessionId}`:Gl,type:"teach"};case"teachNode":return{id:`${Ah}:${e.nodeId}`,type:"teach"};case"provider":return{id:`src:provider:${e.name}`,type:"provider"};case"corpus":return{id:`src:corpus:${e.name}`,type:"corpus"};case"corpusWeak":return{id:`src:corpus-weak:${e.name}`,type:"corpusWeak"};case"reference":return{id:`src:reference:${e.pack}:${e.article}`,type:"reference"};case"referenceLive":return{id:`src:reference:${e.pack}:${e.article}`,type:"referenceLive"};case"extracted":return{id:`src:extracted:${e.name}`,type:"extracted"};case"optimisticExtract":return{id:`src:optimistic-extract:${e.name}`,type:"optimisticExtract"};case"web":return{id:`src:learned:web:${Ir(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 Hj(e){return oc[e]||null}function Vj(e,t,n){let s=cu(t);if(!s)return null;let o=tn(e),r=o?o.individualsById.get(s.id):e.individuals.find(c=>c?.id===s.id),i=au(r,t?.createdAt||n),a={id:s.id,label:lu(s.id),class:Jo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:sourceType",key:"sourceType",value:s.type},{prop:nt,key:"createdAt",value:i},...s.url?[{prop:"mgx:sourceUrl",key:"sourceUrl",value:s.url}]:[],...s.rule?[{prop:"mgx:sourceRule",key:"sourceRule",value:s.rule}]:[]]},l=Zs(e,a);return o&&o.sourcesById.set(s.id,l),s.id}function wa(e){let t=tn(e),n={};if(t){for(let[s,o]of t.sourcesById)n[s]=o;return n}for(let s of e.individuals)s?.class===Jo&&(n[s.id]=s);return n}function Yh(e,t){let n=tn(e);return n?(n.statedByBySubject.get(t)||[]).slice():(e.objectProperties.find(o=>o?.prop===ln)?.examples||[]).filter(o=>o?.subject===t).map(o=>o.object)}function qj(e,t,n=Date.now(),s={}){let o=Yh(e,t.id),r=(t.attributes||[]).find(l=>l?.prop===nt)?.value||"",{score:i,inputs:a}=ip({sourceIds:o,createdAt:r},wa(e),{now:n,...Array.isArray(s?.premiseTrusts)?{premiseTrusts:s.premiseTrusts}:{},...typeof s?.ruleConfidence=="number"?{ruleConfidence:s.ruleConfidence}:{}});un(t,Eo,"trustScore",String(i)),un(t,mi,"trustInputs",JSON.stringify(a)),un(t,cs,"updatedAt",new Date(n).toISOString())}function Kj(e,t,n=Date.now(),s={}){let[o]=Yh(e,t.id),r=o?wa(e)[o]:null,i=(r?.attributes||[]).find(c=>c?.prop==="mgx:sourceType")?.value||"",a=hi(i,r);if(i==="entailed"&&Array.isArray(s?.premiseTrusts)&&s.premiseTrusts.length){let c=typeof s.ruleConfidence=="number"?s.ruleConfidence:1;a=Math.max(0,Math.min(1,Math.min(...s.premiseTrusts)*c))}let l=(t.attributes||[]).find(c=>c?.prop===nt)?.value||"";un(t,Eo,"trustScore",String(a)),un(t,mi,"trustInputs",JSON.stringify({sourceType:i,sourceId:o||"",createdAt:l})),un(t,cs,"updatedAt",new Date(n).toISOString())}function Xh(e,t,n,s){t?.class===Et?Kj(e,t,n,s):qj(e,t,n,s)}function Yo(e,t,n=Date.now(),s={}){let o=(t.attributes||[]).find(i=>i?.prop==="mgx:factProvenance")?.value||"",r=(t.attributes||[]).find(i=>i?.prop===nt)?.value||new Date(n).toISOString();for(let i of o.split(" | ").filter(Boolean)){let a=ls(i);if(!a)continue;let l=Vj(e,a,r);l&&ma(e,{predicate:"statedBy",prop:ln},{subject:t.id,object:l,subjectLabel:t.label,objectLabel:lu(l)})}Xh(e,t,n,s)}function Yj(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=e.objectProperties.find(r=>r?.prop===ln),n=new Set((t?.examples||[]).map(r=>r.subject)),s=!1,o=Date.now();for(let r of e.individuals)r?.class!==Et||n.has(r.id)||!(r.attributes||[]).find(a=>a?.prop==="mgx:factProvenance")?.value||(Yo(e,r,o),s=!0);s&&js(e)}function Jj(e){if(!Array.isArray(e?.individuals)||!Array.isArray(e?.objectProperties))return;let t=Lt(e),n=new Set;for(let a of ag(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(!Xj(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=tn(e);for(let[a,l]of s){let c=o?o.individualsById.get(a):e.individuals.find(u=>u?.id===a);c&&(un(c,Th,"sourceReliability",String(cp(l))),un(c,cs,"updatedAt",new Date().toISOString()))}let r=e.objectProperties.find(a=>a?.prop===ln),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&&Xh(e,l)}}function Rh(e,t,n){if(!na(n?.id))return n;let s=Dr(n.id);if(!s)return Nl(t,n);let o=wa(e);return Nl(t,n,{priorFor:r=>hi(s,o[r])})}function Zs(e,t){let n=tn(e);if(n){let o=n.individualsById.get(t.id);if(o)return Object.assign(o,Rh(e,o,t)),o;if(e.individuals.push(t),n.individualsById.set(t.id,t),t.class===Et){let r=Ln(t.id),i=n.factRecordsByGroup.get(r);i?i.push(t.id):n.factRecordsByGroup.set(r,[t.id])}return t}let s=e.individuals.findIndex(o=>o?.id===t.id);return s>=0?(e.individuals[s]=Rh(e,e.individuals[s],t),e.individuals[s]):(e.individuals.push(t),t)}function ma(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===ln?tn(e):null;if(r){let l=r.statedByBySubject.get(s.subject);if(!l||!l.includes(s.object)){o.examples.push({...s,createdAt:s.createdAt||Es()}),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||Es();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 js(e){let t=[Ql,Jl,Et,Jo,Qo];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 Qj(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:Ql,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:nt,key:"createdAt",value:n||Es()},...n?[{prop:"mgx:sessionStarted",key:"started",value:n}]:[]]}),s}function Jh(e,{role:t,text:n,ts:s,sessionId:o,sessionStarted:r="",parsed:i=null,replyTo:a=null,createdAt:l=""}){if(!uj.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=Xn(n),d=`utt:${o}#${c}#${t}`,f=ba(u)||(t==="visitor"?"a-visitor-said":"a-tmct-said"),p=fi({doc:u}),m=e.individuals.find(y=>y?.id===d),h=au(m,l||c),g={id:d,label:f,class:Jl,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:"mgx:utteranceRole",key:"role",value:t},{prop:"mgx:utteranceText",key:"text",value:u},{prop:"mgx:utteranceTs",key:"ts",value:c},{prop:nt,key:"createdAt",value:h},...i!=null?[{prop:"mgx:utteranceParsed",key:"parsed",value:JSON.stringify(i)}]:[],...p.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:p.join(" ")}]:[]]};Zs(e,g);let b=Qj(e,o,r);if(ma(e,{predicate:"saidInSession",prop:Zl},{subject:d,object:b,subjectLabel:f,objectLabel:String(o).slice(0,8)}),a){let y=e.individuals.find(w=>w?.id===a);y&&ma(e,{predicate:"inReplyTo",prop:eu},{subject:d,object:a,subjectLabel:f,objectLabel:y.label})}return c&&c>String(e.generated_at||"")&&(e.generated_at=c),d}async function Zj(e,t){let n;return await to(e,s=>{n=Jh(s,t),js(s)}),{id:n}}async function Qh(e,t){let n=[];return t?.length?(await to(e,s=>{for(let o of t)n.push(Jh(s,o));js(s)}),{ids:n}):{ids:n}}async function e_(e,t){t?.length&&await to(e,n=>{for(let s of t)for(let o of Zo(n,s.factId))ma(n,{predicate:"canonicalisedFrom",prop:tu},{subject:o,object:s.uttId,subjectLabel:s.factLabel,objectLabel:s.uttLabel})})}function Zo(e,t){let n=tn(e);return n?(n.factRecordsByGroup.get(t)||[]).slice():(e?.individuals||[]).filter(s=>s?.class===Et&&Ln(s.id)===t).map(s=>s.id)}function Zh(e,t,n){let s=Ih(n);if(s.length===1&&s[0].sourceId===es&&Zo(e,t).length)return[];let o=t_(e,t);return o.length?s.filter(r=>!uh(o,r.sourceId)):s}function t_(e,t){let n=tn(e),s=n?n.factRecordsByGroup.get(t):Zo(e,t),o=[];for(let r of s||[]){if(!xs(r))continue;let i=eo(e,r);i&&o.push(i)}return o}function eg(e,t,{quantifier:n,environments:s}){let o=Zo(e,t).map(i=>eo(e,i)).filter(i=>i&&!(i.attributes||[]).some(a=>a?.prop===qr)),r=new Set;if(s){let i=o.filter(a=>(a.attributes||[]).some(l=>l?.prop==="mgx:factJustification"));for(let a of i.length?i:o)un(a,"mgx:factJustification","justification",s.map(l=>l.join(" ")).join(" | ")),r.add(a.id)}if(n)for(let i of o)(i.attributes||[]).some(a=>a?.prop==="mgx:factQuantifier")||(un(i,"mgx:factQuantifier","quantifier",n),r.add(i.id));return[...r]}function n_(e){let t=0,n=(e.attributes||[]).find(s=>s?.prop===fa)?.value||"";for(let s of n.split(" ").filter(Boolean)){let o=/#v([1-9][0-9]*)$/.exec(s);o&&(t=Math.max(t,Number(o[1])))}return t+1}function tg(e,t){let{groupId:n,s,p:o,o:r,label:i,tokens:a,group:l,createdAt:c,observedAt:u,quantifier:d,environments:f}=t,p=`${n}@${l.sourceId}`,m=tn(e),h=m?m.individualsById.get(p):e.individuals.find(R=>R?.id===p),g=R=>(h?.attributes||[]).find(k=>k?.prop===R)?.value||"",b=g("mgx:factProvenance").split(" | ").filter(Boolean),y={assertedAt:Vl(l.tags),observedAt:u},w=null,$=l.tags,_=y.assertedAt||c||Es(),v=u,x=[],E=d;if(h){let R={assertedAt:Vl(b),observedAt:g(Gr)};gj(y,R)?(w={head:h,id:`${p}#v${n_(h)}`},x=[w.id]):($=[...new Set([...b,...l.tags])],_=g(nt)||_,v=u||g(Gr),x=g(fa).split(" ").filter(Boolean)),E=d||g("mgx:factQuantifier")}return{candidate:{id:p,label:i,class:Et,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"rdf:Statement"},{prop:"rdf:subject",key:"subject",value:s},{prop:"rdf:predicate",key:"predicate",value:o},{prop:"rdf:object",key:"object",value:r},{prop:nt,key:"createdAt",value:_},{prop:Ko,key:"sourceId",value:l.sourceId},...$.length?[{prop:"mgx:factProvenance",key:"provenance",value:$.join(" | ")}]:[],...v?[{prop:Gr,key:"observedAt",value:v}]:[],...a.length?[{prop:"mgx:hasProseTokens",key:"prose_tokens",value:a.join(" ")}]:[],...E?[{prop:"mgx:factQuantifier",key:"quantifier",value:E}]:[],...f?[{prop:"mgx:factJustification",key:"justification",value:f.map(R=>R.join(" ")).join(" | ")}]:[],...x.length?[{prop:fa,key:"supersedes",value:x.join(" ")}]:[]]},demote:w}}function s_(e,t){let n=`${t}@${es}`,s=tn(e);if((s?!s.individualsById.has(n):!e.individuals.some(r=>r?.id===n))||(e.individuals=e.individuals.filter(r=>r?.id!==n),!s))return;s.individualsById.delete(n);let o=(s.factRecordsByGroup.get(t)||[]).filter(r=>r!==n);o.length?s.factRecordsByGroup.set(t,o):s.factRecordsByGroup.delete(t)}function ng(e,{candidate:t,demote:n}){let s=[];if(t.id.endsWith(`@${es}`)||s_(e,Ln(t.id)),n){let o={...n.head,id:n.id,attributes:(n.head.attributes||[]).map(r=>({...r}))};un(o,qr,"supersededBy",t.id),Zs(e,o),s.push(o.id)}return Zs(e,t),s.push(t.id),s}function eo(e,t){let n=tn(e);return n?n.individualsById.get(t):e.individuals.find(s=>s?.id===t)}function sg(e,t){let n=new Set(t);if(!n.size)return;e.individuals=(e.individuals||[]).filter(o=>!n.has(o?.id));for(let o of e.objectProperties||[]){let r=o.examples||[],i=r.filter(a=>!n.has(a?.subject)&&!n.has(a?.object));i.length!==r.length&&(o.examples=i,o.count=i.length)}let s=tn(e);if(s)for(let o of n){s.individualsById.delete(o),s.statedByBySubject.delete(o);let r=Ln(o),i=(s.factRecordsByGroup.get(r)||[]).filter(a=>a!==o);i.length?s.factRecordsByGroup.set(r,i):s.factRecordsByGroup.delete(r)}}function og(e,t){let n=tn(e),s=(n?n.factRecordsByGroup.get(t):Zo(e,t))||[];if(s.length<8)return[];let o=new Map,r=new Map,i=new Map,a=new Map;for(let u of s.slice()){let d=eo(e,u);if(!d)continue;let f=y=>(d.attributes||[]).find(w=>w?.prop===y)?.value||"";if(xs(u)){i.set(Dr(u),d);continue}if(Ho(u)){a.set(f(Ko),d);continue}let p=f("mgx:factProvenance"),m=Oh(p),h=p.split(" | ").filter(Boolean),g={id:u,sourceId:f(Ko)||m.id,assertedAt:ou(h,f(nt)),record:d};if(f(qr)){let y=r.get(g.sourceId);y?y.push(g):r.set(g.sourceId,[g]);continue}if(!m.type)continue;let b=o.get(m.type);b?b.push(g):o.set(m.type,[g])}let l=wa(e),c=[];for(let[u,d]of o){let f=ch({groupId:t,sourceType:u,heads:d,existing:i.get(u)||null,priorFor:p=>hi(u,l[p])});if(f){Zs(e,f.rollup),c.push(...f.absorbed);for(let p of f.absorbedSourceIds){for(let h of r.get(p)||[])c.push(h.id);r.delete(p);let m=a.get(p);m&&c.push(m.id),a.delete(p)}}}for(let[u,d]of r){let f=lh({groupId:t,sourceId:u,leaves:d,existing:a.get(u)||null});if(!f)continue;Zs(e,f.rollup),c.push(...f.absorbed);let p=eo(e,f.rewire);p&&un(p,fa,"supersedes",f.rollup.id)}return c}async function o_(e,{subject:t,predicate:n,object:s,provenance:o="",createdAt:r="",observedAt:i="",quantifier:a="",premiseTrusts:l,ruleConfidence:c}={}){let u=X(t),d=Jn(n),f=X(s);if(!u||!d||!f)throw new Error("a fact needs subject, predicate and object");let p=Po(u,d,f),m=`${u} ${d} ${f}`,h=fi({doc:m}),g=Xn(a);return await to(e,async b=>{let y=Zh(b,p,Xn(o));for(let w of y.length?[]:eg(b,p,{quantifier:g}))Yo(b,eo(b,w),void 0,{premiseTrusts:l,ruleConfidence:c});for(let w of y){let $=tg(b,{groupId:p,s:u,p:d,o:f,label:ba(m),tokens:h,group:w,createdAt:r,observedAt:i,quantifier:g});await Ml($.candidate);for(let _ of ng(b,$))Yo(b,eo(b,_),void 0,_===$.candidate.id?{premiseTrusts:l,ruleConfidence:c}:void 0)}sg(b,og(b,p)),js(b)}),{id:p}}function r_(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 Kr(e,t){let n=[],s=0;for(let r of t||[]){let i=X(r?.subject),a=Jn(r?.predicate),l=X(r?.object);if(!i||!a||!l){s+=1;continue}let c=`${i} ${a} ${l}`;n.push({id:Po(i,a,l),s:i,p:a,o:l,text:c,tokens:fi({doc:c}),provenance:Xn(r?.provenance),createdAt:r?.createdAt||"",observedAt:r?.observedAt||"",quantifier:Xn(r?.quantifier),premiseTrusts:Array.isArray(r?.premiseTrusts)?r.premiseTrusts:void 0,ruleConfidence:typeof r?.ruleConfidence=="number"?r.ruleConfidence:void 0,environments:r_(r?.justification)})}let o=[];return n.length?(await to(e,r=>{let i=[],a=new Set,l=new Map;for(let u of n){let d=Zh(r,u.id,u.provenance);for(let f of d.length?[]:eg(r,u.id,{quantifier:u.quantifier,environments:u.environments}))a.has(f)||(a.add(f),i.push(f)),(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(f,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence});for(let f of d){let p=tg(r,{groupId:u.id,s:u.s,p:u.p,o:u.o,label:ba(u.text),tokens:u.tokens,group:f,createdAt:u.createdAt,observedAt:u.observedAt,quantifier:u.quantifier,environments:u.environments});for(let m of ng(r,p))a.has(m)||(a.add(m),i.push(m));(u.premiseTrusts!==void 0||u.ruleConfidence!==void 0)&&l.set(p.candidate.id,{premiseTrusts:u.premiseTrusts,ruleConfidence:u.ruleConfidence})}o.push(u.id)}for(let u of i)Yo(r,eo(r,u),void 0,l.get(u));let c=[];for(let u of new Set(o))c.push(...og(r,u));sg(r,c),js(r)}),{ids:o,appended:o.length,skipped:s}):{ids:o,appended:0,skipped:s}}async function fu(e,{name:t,kind:n,slots:s,provenance:o="",createdAt:r=""}={}){let i=rg[n];if(!i)throw new Error(`a rule kind must be one of ${i_.join(", ")}, got ${JSON.stringify(n)}`);let a=X(t);if(!a)throw new Error("a rule needs a name");let l=a_[n]||new Set,c=i.map(([p])=>X(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===Jr){let p=c[i.findIndex(([h])=>h==="objectRole")],m=c[i.findIndex(([h])=>h==="value")];if(!p&&!m)throw new Error(`a ${n} rule needs an objectRole or a value`)}let d=c_(n,a,c),f=ba(`${a} = ${n}(${c.join(", ")})`);return await to(e,async p=>{let m=p.individuals.find(w=>w?.id===d),h=m?.attributes?.find(w=>w?.prop==="mgx:factProvenance")?.value||"",g=[...new Set([...h.split(" | "),Xn(o)].filter(Boolean))],b=au(m,r),y={id:d,label:f,class:Qo,derived_from:[],mentions:[],attributes:[{prop:"rdf:type",key:"type",value:"owl:NamedIndividual"},{prop:va,key:"ruleName",value:a},{prop:er,key:"ruleKind",value:n},...i.map(([w,$],_)=>({prop:$,key:w,value:c[_],skip:!c[_]&&l.has(w)})).filter(w=>!w.skip).map(({skip:w,...$})=>$),{prop:nt,key:"createdAt",value:b},...g.length?[{prop:"mgx:factProvenance",key:"provenance",value:g.join(" | ")}]:[]]};await Ml(y),Zs(p,y),Yo(p,p.individuals.find(w=>w?.id===d)),js(p)}),{id:d}}function mu(e,t){let n=X(t);return(e?.individuals||[]).find(s=>s?.class===Qo&&(s.attributes||[]).find(o=>o?.prop===va)?.value===n)}function l_(e,t){let n=X(t),s=o=>(o.attributes||[]).find(r=>r?.prop===er)?.value||"";return(e?.individuals||[]).filter(o=>o?.class===Qo&&(o.attributes||[]).find(r=>r?.prop===va)?.value===n).sort((o,r)=>s(o).localeCompare(s(r))||String(o.id).localeCompare(String(r.id)))}function hu(e){let t=[];for(let n of e?.individuals||[]){if(n?.class!==Qo)continue;let s=a=>(n.attributes||[]).find(l=>l?.prop===a)?.value,o=s(er),r=rg[o];if(!r)continue;let i={};for(let[a,l]of r)i[a]=s(l)??"";t.push({id:n.id,name:s(va)||"",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 gu(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(X,n),h=l(X,s),g=r(p).filter(w=>m.has(w.fact.subject)&&h.has(w.fact.object));if(g.length){let w=g.slice().sort(($,_)=>c($.fact,_.fact))[0];return{citation:[i(w.fact),...w.aliasFacts.map($=>`${a($)}${$.provenance?` (source: ${$.provenance})`:""}`)]}}let b=mu(e,p),y=b?.attributes?.find(w=>w.prop===er)?.value;if(b&&y===Yr){let w=b.attributes.find(P=>P.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(P=>P.prop==="mgx:ruleBase2")?.value,_=X(n),v=X(s);if(!w||!$||!_||!v)return null;let R=f({entity:_,hopsTaken:0},P=>P.hopsTaken===2&&P.entity===v,P=>{if(P.hopsTaken>=2)return[];let T=P.hopsTaken===0?w:$;return r(T).filter(M=>M.fact.subject===P.entity).map(M=>({action:M,nextState:{entity:M.fact.object,hopsTaken:P.hopsTaken+1}}))},{maxDepth:2,stateKey:P=>`${P.entity}#${P.hopsTaken}`});if(!R)return null;let k=new Set,A=[];for(let P of R.actions){A.push(i(P.fact));for(let T of P.aliasFacts){let M=T.id||`${T.subject}|${T.predicate}|${T.object}`;k.has(M)||(k.add(M),A.push(`${a(T)}${T.provenance?` (source: ${T.provenance})`:""}`))}}return{citation:A}}if(b&&y===Xr){let w=b.attributes.find(S=>S.prop==="mgx:ruleBase1")?.value,$=b.attributes.find(S=>S.prop==="mgx:ruleFilterProperty")?.value;if(!w||!$)return null;let _=await gu(e,w,n,s,o);if(!_)return null;let v=X(n),x=X($),E=u.find(S=>S.predicate===d&&S.subject===v&&X(S.object)===x);return E?{citation:[..._.citation,i(E)]}:null}return null}async function ig(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(X,n),m=o(f).filter(b=>p.has(b.fact.object));if(m.length){let b=new Map;for(let y of m)b.has(y.fact.subject)||b.set(y.fact.subject,[]),b.get(y.fact.subject).push(y);return[...b.entries()].map(([y,w])=>{let $=w.slice().sort((_,v)=>l(_.fact,v.fact))[0];return{subject:y,citation:[r($.fact),...$.aliasFacts.map(_=>`${i(_)}${_.provenance?` (source: ${_.provenance})`:""}`)]}})}let h=mu(e,f),g=h?.attributes?.find(b=>b.prop===er)?.value;if(h&&g===Yr){let b=h.attributes.find(x=>x.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(x=>x.prop==="mgx:ruleBase2")?.value,w=X(n);return!b||!y||!w?[]:d({entity:w,hopsTaken:0},x=>{if(x.hopsTaken>=2)return[];let E=x.hopsTaken===0?y:b;return o(E).filter(S=>S.fact.object===x.entity).map(S=>({action:S,nextState:{entity:S.fact.subject,hopsTaken:x.hopsTaken+1}}))},{maxDepth:2,stateKey:x=>`${x.entity}#${x.hopsTaken}`}).filter(x=>x.node.hopsTaken===2).map(({node:x,path:E})=>{let S=new Set,R=[];for(let k of E.actions.slice().reverse()){R.push(r(k.fact));for(let A of k.aliasFacts){let P=A.id||`${A.subject}|${A.predicate}|${A.object}`;S.has(P)||(S.add(P),R.push(`${i(A)}${A.provenance?` (source: ${A.provenance})`:""}`))}}return{subject:x.entity,citation:R}})}if(h&&g===Xr){let b=h.attributes.find(v=>v.prop==="mgx:ruleBase1")?.value,y=h.attributes.find(v=>v.prop==="mgx:ruleFilterProperty")?.value;if(!b||!y)return[];let w=await ig(e,b,n,s),$=X(y),_=[];for(let v of w){let x=X(v.subject),E=c.find(S=>S.predicate===u&&S.subject===x&&X(S.object)===$);E&&_.push({subject:v.subject,citation:[...v.citation,r(E)]})}return _}return[]}function Lt(e,t={}){let n=bu(e),s=Fh(e),o=[];for(let[r,i]of n.groups){let a=wu(r,i,n),l=s?.get(r);a.trust=gi(l?l.inputs:a.assertions,t).score,o.push(a)}return o}function bu(e){let t=e?.individuals||[],n=new Map(t.filter(a=>a?.class===Jo).map(a=>[a.id,a])),s=(e?.objectProperties||[]).find(a=>a?.prop===ln),o=new Map;for(let a of s?.examples||[])o.has(a.subject)||o.set(a.subject,[]),o.get(a.subject).push(a.object);let r=new Map;for(let a of t){if(a?.class!==Et||(a.attributes||[]).some(u=>u?.prop===qr)||Ho(a.id))continue;let l=Ln(a.id),c=r.get(l);c?c.push(a):r.set(l,[a])}let i=new Map;for(let[a,l]of r){l.sort((d,f)=>d.id<f.id?-1:d.id>f.id?1:0);let c=ql(Hr(l[0],"subject"),Hr(l[0],"predicate")),u=i.get(c);u?u.push(a):i.set(c,[a])}return{groups:r,groupsByPair:i,statedByRecord:o,sourceTypeOf:a=>(n.get(a)?.attributes||[]).find(l=>l?.prop==="mgx:sourceType")?.value||""}}function wu(e,t,n){let{statedByRecord:s,sourceTypeOf:o}=n,r=wj,i=Hr,a=[],l=[],c=[],u=new Set,d=[],f=new Set,p="";for(let g of t){if(xs(g.id)){let x=Dr(g.id),E=sa(g);for(let S of E)l.includes(S)||(l.push(S),x&&c.push(x));a.push({id:g.id,sourceId:"",sourceType:x,provenance:"",createdAt:r(g,An),ownTrust:Number(r(g,Go))||0,assertedAt:r(g,Cn),rollup:{count:Number(r(g,Fr))||E.length,sourceIds:E,earliest:r(g,An),latest:r(g,Cn)}});continue}let b=r(g,"mgx:factProvenance").split(" | ").filter(Boolean);for(let x of b)u.add(x);let[y]=s.get(g.id)||[],w=y||r(g,Ko),$=o(w);y&&!l.includes(y)&&(l.push(y),$&&c.push($));let _=r(g,nt),v=r(g,Gr);a.push({id:g.id,sourceId:w,sourceType:$,provenance:b.join(" | "),createdAt:_,...v?{observedAt:v}:{},ownTrust:Number(r(g,Eo))||0,assertedAt:ou(b,_)}),p=p||i(g,"quantifier");for(let x of i(g,"justification").split(" | ")){let E=x.split(" ").filter(Boolean);if(!E.length)continue;let S=E.join(" ");f.has(S)||(f.add(S),d.push(E))}}let m=[],h=new Set;for(let g of d)for(let b of g)h.has(b)||(h.add(b),m.push(b));return{id:e,subject:i(t[0],"subject"),predicate:i(t[0],"predicate"),object:i(t[0],"object"),provenance:[...u].sort().join(" | "),quantifier:p,sourceIds:l,sourceTypes:c,environments:d,justification:m,assertions:a}}async function u_(e,t){let n=new Set((t||[]).filter(Boolean)),s=[];return n.size?(await to(e,o=>{let r=new Set,i=new Set;o.individuals=(o.individuals||[]).filter(a=>{if(a?.class!==Et)return!0;let l=Ln(a.id),c=n.has(a.id)?a.id:n.has(l)?l:"";return c?(i.add(c),r.add(a.id),!1):!0});for(let a of i)s.push(a);if(s.length){for(let a of o.objectProperties||[]){let l=a.examples||[];a.examples=l.filter(c=>!r.has(c?.subject)&&!r.has(c?.object)),a.count=a.examples.length}js(o)}}),{removed:s}):{removed:s}}function ag(e,{floor:t=d_}={}){let n=Lt(e).filter(r=>r.trust>=t),s=new Map;for(let r of n){if(Zi(r.predicate)===jl)continue;let i=`${r.subject} ${r.predicate}`;s.has(i)||s.set(i,[]),s.get(i).push(r)}let o=[];for(let r of s.values()){if(new Set(r.map(a=>a.object)).size<2)continue;let i=Zi(r[0].predicate);i!==_l&&!Tl(r,i).contested||o.push(r.slice().sort((a,l)=>l.trust-a.trust||a.object.localeCompare(l.object)))}return o.sort((r,i)=>`${r[0].subject} ${r[0].predicate}`.localeCompare(`${i[0].subject} ${i[0].predicate}`))}var Xo,Xl,Jl,Et,Ql,Jo,Qo,Zl,eu,lj,ln,tu,Th,pa,Gl,Ah,uj,jh,dj,Hl,nu,Ch,mj,es,Gr,Ko,fa,qr,Nh,wj,Hr,ql,Ph,Fh,vj,kj,_h,vn,Hh,Kl,Nj,Wl,Mj,ru,Vh,iu,qh,Yl,tn,ba,Es,lu,Xj,Yr,Xr,uu,du,ya,Jr,pu,i_,va,er,rg,a_,c_,d_,tr,p_,f_,Je=L(()=>{jt();Be();as();Zt();Zt();us();Qm();us();Qi();Pl();fh();Pl();Xo=Q(".tmct","memory"),Xl=Q(Xo,"graph.json"),Jl="Utterance",Et="Fact",Ql="Session",Jo="Source",Qo="Rule",Zl="mgx:saidInSession",eu="mgx:inReplyTo",lj="mgx:derivedFrom",ln="mgx:statedBy",tu="mgx:canonicalisedFrom",Th="mgx:sourceReliability",pa="src:operator-chat",Gl="src:teach-chat",Ah="src:teach-node",uj=new Set(["visitor","tmct"]),jh=48,dj=[{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:Zl,predicate:"saidInSession",note:"Utterance \u2192 Session it was said in; runtime observation, owned (no SEON term)"},{prop:eu,predicate:"inReplyTo",note:"tmct Utterance \u2192 the visitor Utterance it answers (the Q/A pairing)"},{prop:"rdf:subject",note:"reified fact: the triple's subject term"},{prop:"rdf:predicate",note:"reified fact: the triple's predicate term"},{prop:"rdf:object",note:"reified fact: the triple's object term"},{prop:"mgx:factProvenance",note:"LEGACY COMPAT SHIM: the ' | '-joined provenance tag string a fact came from; the source-of-truth is now the mgx:statedBy edges derived from it"},{prop:"mgx:sourceId",note:"the assertion key a Fact record is filed under \u2014 the Source id of the ONE party asserting it, which is also the @-suffix of the record's own id. `src:none` when no tag names a Source, so every record has a key rather than a hole"},{prop:"mgx:observedAt",note:"OPTIONAL valid time: when the asserting party WITNESSED the claim, as against mgx:createdAt's transaction time (when this store recorded it). A stale article read today loses to an eyewitness report from yesterday. Stored only when a caller supplies one \u2014 never fabricated, never backfilled"},{prop:"mgx:supersedes",note:"the record id(s) this one replaced when its own source re-asserted the triple with a newer embedded timestamp. A space-joined LIST; absent, never empty, until the first supersession"},{prop:"mgx:supersededBy",note:"the record id(s) that replaced this one. Its presence is what makes a record a demoted leaf rather than a live head, and the group fold skips it: a source's past belief is not a second vote for the present one. A LIST, because one source with two live replicas can fork before they sync"},{prop:"mgx:factQuantifier",note:"OPTIONAL: the quantifier word a plural class-membership teach used ('every'/'some'/'a few'), for literal recall by 'how many Xs are Ys' \u2014 never real cardinality counting"},{prop:"mgx:factJustification",note:"an entailed Fact's supporting premise fact ids: ' | '-separated environments, one space-separated premise-id list per independent derivation, capped by syllogise's maxEnvironments knob; a value with no ' | ' is a single environment"},{prop:"mgx:ruleName",note:"a taught Rule's own name (e.g. 'grandparent') \u2014 the query-dispatcher's lookup key, PLAN_TAUGHT_RELATIONS.md \xA72/\xA73"},{prop:"mgx:ruleKind",note:"a taught Rule's SHAPE tag \u2014 the closed vocabulary compose2 | filter | recursive (structural, like 'Fact'/'Rule' themselves, never a domain word)"},{prop:"mgx:ruleBase1",note:"compose2: the first hop's base relation name; filter: the base rule/relation being filtered (same 'base relation' role in both kinds, so the name is shared)"},{prop:"mgx:ruleBase2",note:"compose2 only: the second hop's base relation name"},{prop:"mgx:ruleFilterProperty",note:"filter only: the property literal candidates are filtered by (an mgx:hasProperty-shaped Fact lookup)"},{prop:"mgx:ruleBaseCase",note:"recursive only: the base-case relation name (hop zero)"},{prop:"mgx:ruleRecStep",note:"recursive only: the self-referential recursive-step relation name"},{prop:nt,note:"when an individual was FIRST written, ISO-8601 (first-write-wins on upsert); the audit 'when', the recency input to trust, the novelty signal"},{prop:cs,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:lj,predicate:"derivedFrom",note:"umbrella: a Fact derived from a Source (or another Fact). ext ref prov:wasDerivedFrom (UNVERIFIED-pending-web-check)"},{prop:ln,predicate:"statedBy",note:"subPropertyOf derivedFrom: a Source directly asserts this Fact (one edge per independent source \u2014 replaces the factProvenance union)"},{prop:tu,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:Eo,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:mi,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:Do,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)"}];Hl=e=>Wr(e),nu="memory",Ch="sqlite";mj=`
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
- `,uE=new Set(["subject","object","subjectLabel","objectLabel"]),cm=!1;Bn=e=>e===void 0?e:structuredClone(e);hm=Q(yr,"manifest.json"),Zc=5,$E=e=>Q(e,hm);kE=/^fact:[0-9a-f]{8}$/;ul=Q(yr,"syllogise-state.json"),gm="syllogiseState";el=Symbol("mutateMemory lookup index");Ps=e=>e?.[el]||null;Mi=e=>e.length>am?e.slice(0,am-1)+"\u2026":e,Ii=()=>new Date().toISOString();bm=e=>String(e).replace(/^src:/,""),AE=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"}});NE=e=>typeof e=="string"&&(e.startsWith(`${Oi}:`)||e.startsWith(`${Jc}:`));Er="compose2",Sr="filter",dl="recursive",pl="action-signature",Fi="action-precond",jr="action-effect",fl="action-constraint",UE=Object.freeze([Er,Sr,dl,pl,Fi,jr,fl]),Di="mgx:ruleName",Co="mgx:ruleKind",$m={[Er]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[Sr]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[dl]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[pl]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[Fi]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[jr]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[fl]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},WE={[Fi]:new Set(["value","negate"]),[jr]:new Set(["objectRole","value"])},GE=(e,t,n)=>`rule:${dr([e,t,...n].join("\0"))}`;HE=.5,zs="mgx:hasA",km="mgx:capableOf",Em=new Set([zs,km].flatMap(e=>[e,Eo(e)]))});async function rn(e,t=null){try{if(t)return Ct(await Xt(t));let{dir:n,close:s}=await ls(xe(xe(e.graphFile)));try{return Ct(await Xt(n))}finally{await s()}}catch{return[]}}function _m(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 zi(e,t){let n=X(t),s=e.filter(a=>jm.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,Bs),i=o.length>Bs?`
114
- \u2026+${o.length-Bs} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
113
+ CREATE TABLE IF NOT EXISTS facts (
114
+ id TEXT PRIMARY KEY,
115
+ triple_hash TEXT NOT NULL,
116
+ subject TEXT NOT NULL,
117
+ predicate TEXT NOT NULL,
118
+ object TEXT NOT NULL,
119
+ source_id TEXT NOT NULL,
120
+ source_type TEXT NOT NULL,
121
+ trust_score REAL NOT NULL,
122
+ created_at TEXT NOT NULL,
123
+ observed_at TEXT,
124
+ superseded_by TEXT,
125
+ json TEXT NOT NULL
126
+ );
127
+ CREATE INDEX IF NOT EXISTS facts_by_triple_hash ON facts(triple_hash);
128
+ CREATE INDEX IF NOT EXISTS facts_by_subject_predicate ON facts(subject, predicate);
129
+ CREATE INDEX IF NOT EXISTS facts_by_predicate_object ON facts(predicate, object);
130
+ CREATE INDEX IF NOT EXISTS facts_current ON facts(triple_hash, source_id, superseded_by);
131
+ CREATE TABLE IF NOT EXISTS fact_heads (
132
+ triple_hash TEXT PRIMARY KEY,
133
+ trust_base REAL NOT NULL,
134
+ inputs_json TEXT NOT NULL,
135
+ updated_at TEXT NOT NULL
136
+ );
137
+ CREATE TABLE IF NOT EXISTS fact_object_supersessions (
138
+ subject TEXT NOT NULL,
139
+ predicate TEXT NOT NULL,
140
+ ord INTEGER NOT NULL,
141
+ from_id TEXT NOT NULL,
142
+ to_id TEXT NOT NULL,
143
+ recorded_at TEXT NOT NULL,
144
+ PRIMARY KEY (subject, predicate, ord)
145
+ );
146
+ `,es="src:none",Gr="mgx:observedAt",Ko="mgx:sourceId",fa="mgx:supersedes",qr="mgx:supersededBy";Nh="INSERT OR REPLACE INTO facts(id, triple_hash, subject, predicate, object, source_id, source_type, trust_score, created_at, observed_at, superseded_by, json) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";wj=(e,t)=>(e?.attributes||[]).find(n=>n?.prop===t)?.value||"",Hr=(e,t)=>(e?.attributes||[]).find(n=>n?.key===t)?.value||"",ql=(e,t)=>`${e}\0${t}`;Ph=Symbol("materialised fact_heads index");Fh=e=>e?.[Ph]||null,vj="INSERT OR REPLACE INTO fact_heads(triple_hash, trust_base, inputs_json, updated_at) VALUES (?, ?, ?, ?)";kj=new Set(["subject","object","subjectLabel","objectLabel"]),_h=!1;vn=e=>e===void 0?e:structuredClone(e);Hh=Q(Xo,"manifest.json"),Kl=5,Nj=e=>Q(e,Hh);Wl=e=>Dj(Fj(e)),Mj=/^fact:[0-9a-f]{8}$/;ru=Q(Xo,"syllogise-state.json"),Vh="syllogiseState";iu=Q(Xo,"node-id.json"),qh="nodeId";Yl=Symbol("mutateMemory lookup index");tn=e=>e?.[Yl]||null;ba=e=>e.length>jh?e.slice(0,jh-1)+"\u2026":e,Es=()=>new Date().toISOString();lu=e=>String(e).replace(/^src:/,"");Xj=e=>typeof e=="string"&&(e.startsWith(`${pa}:`)||e.startsWith(`${Gl}:`)||e.startsWith(`${Ah}:`));Yr="compose2",Xr="filter",uu="recursive",du="action-signature",ya="action-precond",Jr="action-effect",pu="action-constraint",i_=Object.freeze([Yr,Xr,uu,du,ya,Jr,pu]),va="mgx:ruleName",er="mgx:ruleKind",rg={[Yr]:[["base1","mgx:ruleBase1"],["base2","mgx:ruleBase2"]],[Xr]:[["base","mgx:ruleBase1"],["property","mgx:ruleFilterProperty"]],[uu]:[["baseCase","mgx:ruleBaseCase"],["recStep","mgx:ruleRecStep"]],[du]:[["subjectClass","mgx:ruleActionSubjectClass"],["targetClass","mgx:ruleActionTargetClass"]],[ya]:[["shape","mgx:ruleActionPrecondShape"],["predicate","mgx:ruleActionPrecondPredicate"],["role","mgx:ruleActionPrecondRole"],["scope","mgx:ruleActionPrecondScope"],["value","mgx:ruleActionPrecondValue"],["negate","mgx:ruleActionPrecondNegate"]],[Jr]:[["predicate","mgx:ruleActionEffectPredicate"],["subjectRole","mgx:ruleActionEffectSubject"],["objectRole","mgx:ruleActionEffectObject"],["value","mgx:ruleActionEffectValue"]],[pu]:[["left","mgx:ruleActionConstraintLeft"],["right","mgx:ruleActionConstraintRight"],["guard","mgx:ruleActionConstraintGuard"]]},a_={[ya]:new Set(["value","negate"]),[Jr]:new Set(["objectRole","value"])},c_=(e,t,n)=>`rule:${Ir([e,t,...n].join("\0"))}`;d_=.5,tr="mgx:hasA",p_="mgx:capableOf",f_=Rl});async function dn(e,t=null){try{if(t)return Lt(await en(t));let{dir:n,close:s}=await ks($e($e(e.graphFile)));try{return Lt(await en(n))}finally{await s()}}catch{return[]}}function lg(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 $a(e,t){let n=X(t),s=e.filter(a=>cg.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,no),i=o.length>no?`
147
+ \u2026+${o.length-no} more`:"";return`"${t}" is not a code-map entity \u2014 answering from memory/corpus facts. ${o.length} known subclass(es):
115
148
  ${r.join(`
116
149
  `)}${i}
117
- (${_m(s)})`}function Bi(e,t){let n=X(t),s=e.filter(a=>jm.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,Bs).join(", ")}`),r.length){let a=r.length>Bs?`, +${r.length-Bs} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,Bs).join(", ")}${a}`)}return i.push(`(${_m(s)})`),i.join(`
118
- `)}var jm,Bs,Us=L(()=>{ze();Je();jm=new Set(["rdfs:subClassOf","rdf:type"]),Bs=40});async function Rm(e,{graph:t,svc:n,config:s}){let o=et(e,"symbol"),{match:r,candidates:i}=Kt(n.graph,o);if(r)return La(t,r,{candidates:i});let a=Bi(await rn(s),o);if(a)return a;vt(n,o,"symbol")}var Am=L(()=>{Ie();Us();Ge()});async function Tm(e,{graph:t,svc:n,repoRoot:s}){let o=et(e,"symbol"),{match:r,candidates:i}=vt(n,o,"symbol"),a=Et(r);if(!a)throw new Re(`"${r.label}" (${r.class||"Entity"}) has no source span in the graph \u2014 it is likely a module. Use tmct_describe for its contents, then tmct_snippet one of the functions/classes it defines.`);let l;try{l=await Pn({readFile:Be,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:ur})}catch(g){throw g instanceof Re?g:new Re(`could not read ${a.path} (${g?.code||g?.message||g})`)}let{text:c,truncated:u}=l,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,f=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,p=u?`
119
- \u2026 (truncated to ${ur} lines; full span ${d})`:"",m=i.length?`
120
- (other matches: ${i.map(g=>g.label).join(", ")})`:"",h=Pa(t,r);return`${f}
150
+ (${lg(s)})`}function xa(e,t){let n=X(t),s=e.filter(a=>cg.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,no).join(", ")}`),r.length){let a=r.length>no?`, +${r.length-no} more`:"";i.push(`known subclasses (${r.length}): ${r.slice(0,no).join(", ")}${a}`)}return i.push(`(${lg(s)})`),i.join(`
151
+ `)}var cg,no,so=L(()=>{Be();Je();cg=new Set(["rdfs:subClassOf","rdf:type"]),no=40});async function ug(e,{graph:t,svc:n,config:s}){let o=et(e,"symbol"),{match:r,candidates:i}=Qt(n.graph,o);if(r)return hc(t,r,{candidates:i});let a=xa(await dn(s),o);if(a)return a;$t(n,o,"symbol")}var dg=L(()=>{Ie();so();Ge()});async function pg(e,{graph:t,svc:n,repoRoot:s}){let o=et(e,"symbol"),{match:r,candidates:i}=$t(n,o,"symbol"),a=_t(r);if(!a)throw new Re(`"${r.label}" (${r.class||"Entity"}) has no source span in the graph \u2014 it is likely a module. Use tmct_describe for its contents, then tmct_snippet one of the functions/classes it defines.`);let l;try{l=await Yn({readFile:ze,repoRoot:s,path:a.path,start:a.start,end:a.end,maxLines:Or})}catch(g){throw g instanceof Re?g:new Re(`could not read ${a.path} (${g?.code||g?.message||g})`)}let{text:c,truncated:u}=l,d=a.end>a.start?`${a.start}-${a.end}`:`${a.start}`,f=`${r.label} \u2014 ${r.class||"Entity"} @ ${a.path}:${d}`,p=u?`
152
+ \u2026 (truncated to ${Or} lines; full span ${d})`:"",m=i.length?`
153
+ (other matches: ${i.map(g=>g.label).join(", ")})`:"",h=wc(t,r);return`${f}
121
154
  ${c}${p}${h?`
122
- ${h}`:""}${m}`}var Cm=L(()=>{kt();Mt();fi();Ie();Ge()});var Om,Im=L(()=>{Ie();Ge();Om=st(Td)});function Lm(e,{graph:t,svc:n}){let{match:s}=vt(n,et(e,"module"),"module");return yd(t,s)}var Nm=L(()=>{Ie();Ge()});async function Mm(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Re("query is required");let r=Rd(t,s,{kind:o,decorator:String(e?.decorator||"").trim(),name:String(e?.name||"").trim(),toolNamePrefix:n?.toolNamePrefix});if(!o&&/^no module matches/.test(r)){let i=Bi(await rn(n),s);if(i)return i}return r}var Pm=L(()=>{Mt();Ie();Us()});async function Fm(e,{graph:t,svc:n,config:s}){let o=et(e,"class"),{match:r}=Kt(n.graph,o);if(r)return Ad(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=zi(await rn(s),o);if(i)return i;vt(n,o,"class")}var Dm=L(()=>{Ie();Us();Ge()});async function zm(e,{graph:t,svc:n,config:s}){let o=et(e,"class"),{match:r}=Kt(n.graph,o);if(r)return Cd(t,r);let i=zi(await rn(s),o);if(i)return i;vt(n,o,"class")}var Bm=L(()=>{Ie();Us();Ge()});function XE(e,{conceptBase:t="concept:",relationMap:n=YE}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=g=>{r.has(g)||r.set(g,g)},a=g=>{let b=g;for(;r.get(b)!==b;)b=r.get(b);for(;r.get(g)!==b;){let y=r.get(g);r.set(g,b),g=y}return b},l=(g,b)=>{let y=a(g),w=a(b);y!==w&&(y<w?r.set(w,y):r.set(y,w))},c=[];for(let g of e){let b=g.predicate;if(!s.has(b)&&!o.has(b))continue;let y=X(g.subject),w=X(g.object);!y||!w||(i(y),i(w),s.has(b)?l(y,w):c.push({s:y,o:w}))}let u=g=>t+g.replace(/ /g,"_"),d=new Map;for(let g of r.keys()){let b=a(g);d.has(b)||d.set(b,new Set),d.get(b).add(g)}let f=[];for(let[g,b]of d){let y=[...b].sort();f.push({id:u(g),prefLabel:g,altLabels:y.filter(w=>w!==g)})}f.sort((g,b)=>g.id<b.id?-1:g.id>b.id?1:0);let p=new Set,m=[];for(let{s:g,o:b}of c){let y=u(a(g)),w=u(a(b));if(y===w)continue;let $=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has($)||(p.add($),m.push({subject:y,object:w}))}return m.sort((g,b)=>`${g.subject}${g.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:m,conceptIdForTerm:g=>{let b=X(g);return r.has(b)?u(a(b)):null},namespace:KE}}function wl(e,t,n={}){let s=XE(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=X(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 KE,YE,yl=L(()=>{Yt();KE="http://www.w3.org/2004/02/skos/core#",YE={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function vl(e,{config:t,memoryBackend:n=null}){let s=et(e,"term"),o=wl(await rn(t,n),s);if(!o)throw new Re(`no synonym or related facts for "${s}" in the memory graph. This view answers where the store holds mgx:synonym / mgx:relatedTo facts (a corpus import seeds them).`);let r=[`${o.prefLabel} [${o.conceptId}]`];return o.synonyms.length&&r.push(`synonyms (skos:altLabel): ${o.synonyms.join(", ")}`),o.related.length&&r.push(`related (skos:related): ${o.related.map(i=>i.prefLabel).join(", ")}`),r.push("(from the memory graph's mgx:synonym / mgx:relatedTo / mgx:similarTo facts)"),is({content:r.join(`
123
- `),data:o})}var Um=L(()=>{Mt();yl();Us();Ge();vl.ownsGraphLoad=!0});function uS(e,t){let n=[];for(let s of t||[])s?.predicate===JE&&X(s.subject)===e&&n.push(X(s.object));return n}function Ui(e,t){let n=X(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of uS(i,t))s.has(a)||o.push(a)}}return r}var JE,QE,ZE,eS,tS,nS,sS,oS,rS,iS,aS,cS,lS,Wm,$l=L(()=>{Yt();JE="rdfs:subClassOf",QE='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="10" r="3.4" fill="currentColor"/><circle cx="12" cy="15.6" r="4.6" fill="currentColor"/><g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round"><path d="M9 8 L2 4"/><path d="M9 10 L1.5 9"/><path d="M9 12.5 L2 14"/><path d="M9 15.5 L3 19"/><path d="M15 8 L22 4"/><path d="M15 10 L22.5 9"/><path d="M15 12.5 L22 14"/><path d="M15 15.5 L21 19"/></g></svg>',ZE='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13.2" rx="3.2" ry="5" fill="currentColor"/><circle cx="12" cy="7" r="2.6" fill="currentColor"/><g fill="currentColor" opacity="0.55"><path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/><path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/></g></svg>',eS='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/></svg>',tS='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/><circle cx="7" cy="8.5" r="4" fill="currentColor"/><g fill="currentColor"><circle cx="4" cy="6" r="1.6"/><circle cx="7" cy="4.2" r="1.7"/><circle cx="10" cy="6" r="1.6"/></g><rect x="18.5" y="14" width="2.2" height="6" rx="1.1" fill="currentColor"/><circle cx="19.6" cy="13" r="1.5" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19.5" x2="9" y2="22"/><line x1="17" y1="19.5" x2="17" y2="22"/></g></svg>',nS='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.2" fill="currentColor"/><circle cx="7" cy="9" r="3.6" fill="currentColor"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="currentColor"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>',sS='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13" rx="7" ry="4.4" fill="currentColor"/><circle cx="12" cy="7" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="7" y1="17" x2="7" y2="21"/><line x1="17" y1="17" x2="17" y2="21"/></g></svg>',oS='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/></svg>',rS='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="3" rx="1" fill="currentColor"/><rect x="4" y="8" width="3" height="12" fill="currentColor"/><rect x="17" y="8" width="3" height="12" fill="currentColor"/></svg>',iS='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/><path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor" opacity="0.28"/></svg>',aS='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/></svg>',cS='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/><rect x="15.5" y="13.5" width="4.5" height="5" rx="1" fill="currentColor" opacity="0.6"/></svg>',lS='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/><path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor" opacity="0.7"/><rect x="10.6" y="9.4" width="2.8" height="2.2" rx="0.4" fill="currentColor" opacity="0.35"/></svg>',Wm=Object.freeze({spider:QE,fly:ZE,egg:eS,poodle:tS,dog:nS,animal:sS,room:oS,furniture:rS,portable:iS,person:aS,adventurer:cS,container:lS})});function dS(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function Gm(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of dS(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var Vm=L(()=>{});function pS(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function fS(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function Km(e){return fS(e).filter(t=>t?.property&&t.value!==void 0)}function mS(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function hS(e,t){let n=null,s=0;for(let o of e){let r=Km(o);r.length<=s||mS(r,t)&&(n=o,s=r.length)}return n}function gS(e,t,n){if(typeof n=="string"&&t.placeholder)return e.split(t.placeholder).join(n);if(n&&typeof n=="object"&&t.placeholders){let s=e;for(let[o,r]of Object.entries(t.placeholders)){if(!Object.prototype.hasOwnProperty.call(n,o))return null;s=s.split(r).join(n[o])}return s}return null}function qm(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(l=>l.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,l.object));if(!i)continue;let a=gS(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function bS(e){let t=[];for(let n of Object.values(e.parameters||{})){n?.placeholder&&t.push(n.placeholder);for(let s of Object.values(n?.placeholders||{}))t.push(s)}return t}function wS(e,t){let n=t;for(let s of bS(e))n=n.split(s).join("");return n}function Hm(e,t,n){let s=pS(e,n),o=hS(s,t);if(o&&!o.parameters)return o.svg;if(o)return wS(o,qm(o,t)||o.svg);for(let i of s){if(i.match||!i.parameters)continue;let a=qm(i,t);if(a)return a}let r=s.find(i=>!i.match&&!i.parameters);return r?r.svg:null}function yS(e,t,n,s,o,r){for(let a of Ui(e,t)){let l=Hm(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=Hm(r,n,s);return i||o[r]}function Ym(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=yS(e,t,n,s,o,r);return i?Gm(a,i):a}var tI,nI,xl=L(()=>{$l();Vm();tI=Object.freeze(["left","half-left","half-right","right"]),nI=Object.freeze(["moving"])});function kl(e){for(let t of e||[])if(t?.predicate===vS&&Object.prototype.hasOwnProperty.call(Xm,t.object))return Xm[t.object];return 1}var vS,Xm,Jm=L(()=>{vS="mgx:hasProperty",Xm=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function Qm(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},l=a.resolveSpriteAsset;if(typeof l!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let c=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],f=a.rootFallback||"animal",p=a.classAncestorChain,m=a.sizeScaleFor,h=a.expressionPalette,g=[];r&&g.push({predicate:n,object:r}),i&&g.push({predicate:s,object:i});let b={rootFallback:f};a.instanceKey&&(b.instanceKey=a.instanceKey);let y=l(o,d,g,c,u,b),w=R=>l(R,[],g,c,{},{rootFallback:R}),$=R=>Object.prototype.hasOwnProperty.call(u,R),j=(R,x)=>{let T=c.filter(P=>P&&Array.isArray(P.classes)&&P.classes.indexOf(R)>=0),A=T.find(P=>P.svg===x)||T.find(P=>!P.match&&P.parameters)||null;return A?{classes:A.classes.slice(),parameters:Object.keys(A.parameters||{}).sort(),match:A.match||null}:null},v=null,E=null;if(typeof p=="function"){v=[];for(let R of p(o,d)){let x=w(R);if(v.push({term:R,template:!!x,registry:$(R)}),x){E={term:R,via:"template",hops:v.length-1,root:!1,template:j(R,x)};break}if($(R)){E={term:R,via:"registry",hops:v.length-1,root:!1,template:null};break}}if(!E){let R=w(f);v.push({term:f,template:!!R,registry:$(f),root:!0}),E={term:f,via:R?"template":"registry",hops:v.length-1,root:!0,template:R?j(f,R):null}}}let k=a.instanceKey?l(o,d,g,c,u,{rootFallback:f}):y,_=r?l(o,d,g.filter(R=>R.predicate!==n),c,u,{rootFallback:f}):null;return{class:o,expression:r||null,size:i||null,svg:y,scale:typeof m=="function"?m(g):1,sizeKnown:i&&typeof m=="function"?m([{predicate:s,object:i}])!==1:null,expressionKnown:r&&h?Object.prototype.hasOwnProperty.call(h,r):null,expressionApplied:r?k!==_:null,rootFallback:f,fellBackToRoot:E?!!E.root:null,chain:v,matched:E}}var Zm=L(()=>{});var eh,th,nh=L(()=>{xl();eh="icon tier",th="sprite tier"});var sh,oh=L(()=>{sh=()=>[]});var rh,ih=L(()=>{rh=()=>[]});function ES(){let e=rh();return e.length?{templates:e,tier:th}:{templates:sh(),tier:eh}}function ah(e){return e.map(t=>t.term).join(" -> ")}async function El(e,{config:t,memoryBackend:n=null}){let s=et(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(so,o))throw new Re(`"${o}" is not a sprite expression. The palette holds: ${xS().join(", ")}.`);if(r&&!kS(r))throw new Re(`"${r}" is not a size the sprite scale recognises \u2014 it reads a taught mgx:hasProperty size word off the individual, and has no entry for this one.`);let{templates:i,tier:a}=ES(),l=await rn(t,n),c=Qm({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:Wm,resolveSpriteAsset:Ym,classAncestorChain:Ui,sizeScaleFor:kl,expressionPalette:so});if(!c.svg||c.fellBackToRoot)throw new Re(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${ah(c.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!c.expressionApplied)throw new Re(`the ${a} draws "${s}" (matched at "${c.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,c.matched.hops===0?`matched at "${c.matched.term}", the class itself, via its own ${c.matched.via}`:`matched at "${c.matched.term}", ${c.matched.hops} hop(s) up the ancestor chain, via its ${c.matched.via}`,`ancestor chain walked: ${ah(c.chain)}`];return c.matched.template?.parameters.length&&d.push(`template parameters: ${c.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${c.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${c.svg.length} characters of SVG markup`),is({content:d.join(`
124
- `),data:{class:c.class,expression:c.expression,size:c.size,tier:a,scale:c.scale,svg:c.svg,chain:c.chain,matched:c.matched,expressionApplied:c.expressionApplied}})}var $S,xS,kS,ch=L(()=>{Mt();$l();xl();ba();Jm();Zm();nh();oh();ih();Us();Ge();$S="mgx:hasProperty",xS=()=>Object.keys(so).sort(),kS=e=>!!e&&kl([{predicate:$S,object:String(e)}])!==1;El.ownsGraphLoad=!0});function lh(e,{graph:t}){return Od(t,{pkg:String(e?.package||"").trim()})}var uh=L(()=>{Ie()});function dh(e,{graph:t,svc:n}){let{match:s}=vt(n,et(e,"module"),"module");return Zd(t,s)}var ph=L(()=>{Ie();Ge()});function fh(e,{graph:t}){return Nd(t)}var mh=L(()=>{Ie()});function gh(e,{graph:t}){let{content:n,tmct_ask:s}=ss(t,et(e,"query"));return is({content:n,data:s,text:`${n}${hh}${JSON.stringify(s,null,2)}`})}var hh,Sl=L(()=>{os();Ge();hh=`
155
+ ${h}`:""}${m}`}var fg=L(()=>{jt();Dt();Ui();Ie();Ge()});var mg,hg=L(()=>{Ie();Ge();mg=rt(Pp)});function gg(e,{graph:t,svc:n}){let{match:s}=$t(n,et(e,"module"),"module");return kp(t,s)}var bg=L(()=>{Ie();Ge()});async function wg(e,{graph:t,config:n}){let s=String(e?.query||"").trim(),o=String(e?.kind||"").trim();if(!s&&!o)throw new Re("query is required");let r=Lp(t,s,{kind:o,decorator:String(e?.decorator||"").trim(),name:String(e?.name||"").trim(),toolNamePrefix:n?.toolNamePrefix});if(!o&&/^no module matches/.test(r)){let i=xa(await dn(n),s);if(i)return i}return r}var yg=L(()=>{Dt();Ie();so()});async function vg(e,{graph:t,svc:n,config:s}){let o=et(e,"class"),{match:r}=Qt(n.graph,o);if(r)return Np(t,r,{toolNamePrefix:s?.toolNamePrefix});let i=$a(await dn(s),o);if(i)return i;$t(n,o,"class")}var $g=L(()=>{Ie();so();Ge()});async function xg(e,{graph:t,svc:n,config:s}){let o=et(e,"class"),{match:r}=Qt(n.graph,o);if(r)return Mp(t,r);let i=$a(await dn(s),o);if(i)return i;$t(n,o,"class")}var Eg=L(()=>{Ie();so();Ge()});function g_(e,{conceptBase:t="concept:",relationMap:n=h_}={}){let s=new Set(n.synonym||[]),o=new Set(n.related||[]),r=new Map,i=g=>{r.has(g)||r.set(g,g)},a=g=>{let b=g;for(;r.get(b)!==b;)b=r.get(b);for(;r.get(g)!==b;){let y=r.get(g);r.set(g,b),g=y}return b},l=(g,b)=>{let y=a(g),w=a(b);y!==w&&(y<w?r.set(w,y):r.set(y,w))},c=[];for(let g of e){let b=g.predicate;if(!s.has(b)&&!o.has(b))continue;let y=X(g.subject),w=X(g.object);!y||!w||(i(y),i(w),s.has(b)?l(y,w):c.push({s:y,o:w}))}let u=g=>t+g.replace(/ /g,"_"),d=new Map;for(let g of r.keys()){let b=a(g);d.has(b)||d.set(b,new Set),d.get(b).add(g)}let f=[];for(let[g,b]of d){let y=[...b].sort();f.push({id:u(g),prefLabel:g,altLabels:y.filter(w=>w!==g)})}f.sort((g,b)=>g.id<b.id?-1:g.id>b.id?1:0);let p=new Set,m=[];for(let{s:g,o:b}of c){let y=u(a(g)),w=u(a(b));if(y===w)continue;let $=y<w?`${y}\0${w}`:`${w}\0${y}`;p.has($)||(p.add($),m.push({subject:y,object:w}))}return m.sort((g,b)=>`${g.subject}${g.object}`<`${b.subject}${b.object}`?-1:1),{concepts:f,related:m,conceptIdForTerm:g=>{let b=X(g);return r.has(b)?u(a(b)):null},namespace:m_}}function yu(e,t,n={}){let s=g_(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=X(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 m_,h_,vu=L(()=>{Zt();m_="http://www.w3.org/2004/02/skos/core#",h_={synonym:["mgx:synonym"],related:["mgx:relatedTo","mgx:similarTo"]}});async function $u(e,{config:t,memoryBackend:n=null}){let s=et(e,"term"),o=yu(await dn(t,n),s);if(!o)throw new Re(`no synonym or related facts for "${s}" in the memory graph. This view answers where the store holds mgx:synonym / mgx:relatedTo facts (a corpus import seeds them).`);let r=[`${o.prefLabel} [${o.conceptId}]`];return o.synonyms.length&&r.push(`synonyms (skos:altLabel): ${o.synonyms.join(", ")}`),o.related.length&&r.push(`related (skos:related): ${o.related.map(i=>i.prefLabel).join(", ")}`),r.push("(from the memory graph's mgx:synonym / mgx:relatedTo / mgx:similarTo facts)"),vs({content:r.join(`
156
+ `),data:o})}var Sg=L(()=>{Dt();vu();so();Ge();$u.ownsGraphLoad=!0});function A_(e,t){let n=[];for(let s of t||[])s?.predicate===b_&&X(s.subject)===e&&n.push(X(s.object));return n}function Ea(e,t){let n=X(e),s=new Set,o=[n],r=[];for(;o.length;){let i=o.shift();if(!s.has(i)){s.add(i),r.push(i);for(let a of A_(i,t))s.has(a)||o.push(a)}}return r}var b_,w_,y_,v_,$_,x_,E_,S_,k_,j_,__,R_,T_,kg,xu=L(()=>{Zt();b_="rdfs:subClassOf",w_='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="10" r="3.4" fill="currentColor"/><circle cx="12" cy="15.6" r="4.6" fill="currentColor"/><g stroke="currentColor" stroke-width="1.1" fill="none" stroke-linecap="round"><path d="M9 8 L2 4"/><path d="M9 10 L1.5 9"/><path d="M9 12.5 L2 14"/><path d="M9 15.5 L3 19"/><path d="M15 8 L22 4"/><path d="M15 10 L22.5 9"/><path d="M15 12.5 L22 14"/><path d="M15 15.5 L21 19"/></g></svg>',y_='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13.2" rx="3.2" ry="5" fill="currentColor"/><circle cx="12" cy="7" r="2.6" fill="currentColor"/><g fill="currentColor" opacity="0.55"><path d="M9 10 C3 6 2 4 3 2 C6 2 9 6 10.5 10 Z"/><path d="M15 10 C21 6 22 4 21 2 C18 2 15 6 13.5 10 Z"/></g></svg>',v_='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2 C7 2 4 10 4 15.5 C4 20 7.6 22 12 22 C16.4 22 20 20 20 15.5 C20 10 17 2 12 2 Z" fill="currentColor"/></svg>',$_='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.6" fill="currentColor"/><circle cx="7" cy="8.5" r="4" fill="currentColor"/><g fill="currentColor"><circle cx="4" cy="6" r="1.6"/><circle cx="7" cy="4.2" r="1.7"/><circle cx="10" cy="6" r="1.6"/></g><rect x="18.5" y="14" width="2.2" height="6" rx="1.1" fill="currentColor"/><circle cx="19.6" cy="13" r="1.5" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19.5" x2="9" y2="22"/><line x1="17" y1="19.5" x2="17" y2="22"/></g></svg>',x_='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="13" cy="15" rx="6.4" ry="4.2" fill="currentColor"/><circle cx="7" cy="9" r="3.6" fill="currentColor"/><path d="M4.5 6.5 L2 3 L6 5 Z" fill="currentColor"/><path d="M19 13 C22 12 22.5 15 20 16 Z" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="9" y1="19" x2="9" y2="22"/><line x1="17" y1="19" x2="17" y2="22"/></g></svg>',E_='<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="13" rx="7" ry="4.4" fill="currentColor"/><circle cx="12" cy="7" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="7" y1="17" x2="7" y2="21"/><line x1="17" y1="17" x2="17" y2="21"/></g></svg>',S_='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="1" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="M9 21 L9 13 A3 3 0 0 1 15 13 L15 21" fill="none" stroke="currentColor" stroke-width="1.6"/></svg>',k_='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="5" width="16" height="3" rx="1" fill="currentColor"/><rect x="4" y="8" width="3" height="12" fill="currentColor"/><rect x="17" y="8" width="3" height="12" fill="currentColor"/></svg>',j_='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6 C7.5 6 5 9.4 5 13.4 C5 17.7 8.1 20 12 20 C15.9 20 19 17.7 19 13.4 C19 9.4 16.5 6 12 6 Z" fill="currentColor"/><path d="M9.4 6.4 C9.9 4.6 10.8 3.4 12 3.4 C13.2 3.4 14.1 4.6 14.6 6.4" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><ellipse cx="9.8" cy="11.6" rx="1.6" ry="2.1" fill="currentColor" opacity="0.28"/></svg>',__='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/></svg>',R_='<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="6.5" r="3.2" fill="currentColor"/><path d="M6 21 C6 15.5 8.7 13 12 13 C15.3 13 18 15.5 18 21 Z" fill="currentColor"/><rect x="15.5" y="13.5" width="4.5" height="5" rx="1" fill="currentColor" opacity="0.6"/></svg>',T_='<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="10" width="18" height="10" rx="1.2" fill="currentColor"/><path d="M3 10 L5 5 H19 L21 10 Z" fill="currentColor" opacity="0.7"/><rect x="10.6" y="9.4" width="2.8" height="2.2" rx="0.4" fill="currentColor" opacity="0.35"/></svg>',kg=Object.freeze({spider:w_,fly:y_,egg:v_,poodle:$_,dog:x_,animal:E_,room:S_,furniture:k_,portable:j_,person:__,adventurer:R_,container:T_})});function C_(e){return[...new Set([...e.matchAll(/\bid="([^"]+)"/g)].map(t=>t[1]))]}function jg(e,t){if(!t||typeof e!="string")return e;let n=String(t).replace(/[^a-zA-Z0-9_-]/g,"-"),s=e;for(let o of C_(e)){let r=`${o}-${n}`;s=s.split(`id="${o}"`).join(`id="${r}"`),s=s.split(`url(#${o})`).join(`url(#${r})`)}return s}var _g=L(()=>{});function O_(e,t){return(t||[]).filter(n=>Array.isArray(n?.classes)&&n.classes.includes(e))}function I_(e){let t=e?.match;return t?Array.isArray(t)?t:[t]:[]}function Ag(e){return I_(e).filter(t=>t?.property&&t.value!==void 0)}function L_(e,t){return e.length?e.every(n=>(t||[]).some(s=>s.predicate===n.property&&s.object===n.value)):!1}function N_(e,t){let n=null,s=0;for(let o of e){let r=Ag(o);r.length<=s||L_(r,t)&&(n=o,s=r.length)}return n}function P_(e,t,n){if(typeof n=="string"&&t.placeholder)return e.split(t.placeholder).join(n);if(n&&typeof n=="object"&&t.placeholders){let s=e;for(let[o,r]of Object.entries(t.placeholders)){if(!Object.prototype.hasOwnProperty.call(n,o))return null;s=s.split(r).join(n[o])}return s}return null}function Rg(e,t){let n=e.svg,s=0;for(let o of Object.values(e.parameters||{})){let r=o?.values||{},i=(t||[]).find(l=>l.predicate===o.property&&Object.prototype.hasOwnProperty.call(r,l.object));if(!i)continue;let a=P_(n,o,r[i.object]);a&&(n=a,s+=1)}return s>0?n:null}function M_(e){let t=[];for(let n of Object.values(e.parameters||{})){n?.placeholder&&t.push(n.placeholder);for(let s of Object.values(n?.placeholders||{}))t.push(s)}return t}function F_(e,t){let n=t;for(let s of M_(e))n=n.split(s).join("");return n}function Tg(e,t,n){let s=O_(e,n),o=N_(s,t);if(o&&!o.parameters)return o.svg;if(o)return F_(o,Rg(o,t)||o.svg);for(let i of s){if(i.match||!i.parameters)continue;let a=Rg(i,t);if(a)return a}let r=s.find(i=>!i.match&&!i.parameters);return r?r.svg:null}function D_(e,t,n,s,o,r){for(let a of Ea(e,t)){let l=Tg(a,n,s);if(l)return l;if(Object.prototype.hasOwnProperty.call(o,a))return o[a]}let i=Tg(r,n,s);return i||o[r]}function Cg(e,t,n,s,o,{rootFallback:r="animal",instanceKey:i}={}){let a=D_(e,t,n,s,o,r);return i?jg(a,i):a}var IN,LN,Eu=L(()=>{xu();_g();IN=Object.freeze(["left","half-left","half-right","right"]),LN=Object.freeze(["moving"])});function Su(e){for(let t of e||[])if(t?.predicate===z_&&Object.prototype.hasOwnProperty.call(Og,t.object))return Og[t.object];return 1}var z_,Og,Ig=L(()=>{z_="mgx:hasProperty",Og=Object.freeze({small:.8,large:1.3,long:1.2,tall:1.25})});function Lg(e,t){let n="mgx:feels",s="mgx:hasProperty",o=String(e&&e.class||"").trim(),r=String(e&&e.expression||"").trim(),i=String(e&&e.size||"").trim(),a=t||{},l=a.resolveSpriteAsset;if(typeof l!="function")throw new TypeError("resolveSpriteRequest needs deps.resolveSpriteAsset");let c=a.templates||[],u=a.spriteRegistry||{},d=a.factRows||[],f=a.rootFallback||"animal",p=a.classAncestorChain,m=a.sizeScaleFor,h=a.expressionPalette,g=[];r&&g.push({predicate:n,object:r}),i&&g.push({predicate:s,object:i});let b={rootFallback:f};a.instanceKey&&(b.instanceKey=a.instanceKey);let y=l(o,d,g,c,u,b),w=R=>l(R,[],g,c,{},{rootFallback:R}),$=R=>Object.prototype.hasOwnProperty.call(u,R),_=(R,k)=>{let A=c.filter(M=>M&&Array.isArray(M.classes)&&M.classes.indexOf(R)>=0),T=A.find(M=>M.svg===k)||A.find(M=>!M.match&&M.parameters)||null;return T?{classes:T.classes.slice(),parameters:Object.keys(T.parameters||{}).sort(),match:T.match||null}:null},v=null,x=null;if(typeof p=="function"){v=[];for(let R of p(o,d)){let k=w(R);if(v.push({term:R,template:!!k,registry:$(R)}),k){x={term:R,via:"template",hops:v.length-1,root:!1,template:_(R,k)};break}if($(R)){x={term:R,via:"registry",hops:v.length-1,root:!1,template:null};break}}if(!x){let R=w(f);v.push({term:f,template:!!R,registry:$(f),root:!0}),x={term:f,via:R?"template":"registry",hops:v.length-1,root:!0,template:R?_(f,R):null}}}let E=a.instanceKey?l(o,d,g,c,u,{rootFallback:f}):y,S=r?l(o,d,g.filter(R=>R.predicate!==n),c,u,{rootFallback:f}):null;return{class:o,expression:r||null,size:i||null,svg:y,scale:typeof m=="function"?m(g):1,sizeKnown:i&&typeof m=="function"?m([{predicate:s,object:i}])!==1:null,expressionKnown:r&&h?Object.prototype.hasOwnProperty.call(h,r):null,expressionApplied:r?E!==S:null,rootFallback:f,fellBackToRoot:x?!!x.root:null,chain:v,matched:x}}var Ng=L(()=>{});var Pg,Mg,B_,DN,Fg=L(()=>{Eu();Pg="icon tier",Mg="sprite tier",B_=Object.freeze({takeParameter:Object.freeze({predicate:"mgx:take-parameter",comment:"sprite class -> parameter name: a parameter that class's own templates declare."}),offerVariant:Object.freeze({predicate:"mgx:offer-variant",comment:"sprite class -> variant value: a hand-authored [match] constraint that class's templates offer."})}),DN=Object.freeze(Object.values(B_).map(e=>e.predicate))});var Dg,zg=L(()=>{Dg=()=>[]});var Bg,Ug=L(()=>{Bg=()=>[]});function H_(){let e=Bg();return e.length?{templates:e,tier:Mg}:{templates:Dg(),tier:Pg}}function Wg(e){return e.map(t=>t.term).join(" -> ")}async function ku(e,{config:t,memoryBackend:n=null}){let s=et(e,"class").toLowerCase(),o=String(e?.expression||"").trim().toLowerCase(),r=String(e?.size||"").trim().toLowerCase();if(o&&!Object.hasOwn(yo,o))throw new Re(`"${o}" is not a sprite expression. The palette holds: ${W_().join(", ")}.`);if(r&&!G_(r))throw new Re(`"${r}" is not a size the sprite scale recognises \u2014 it reads a taught mgx:hasProperty size word off the individual, and has no entry for this one.`);let{templates:i,tier:a}=H_(),l=await dn(t,n),c=Lg({class:s,expression:o,size:r},{factRows:l,templates:i,spriteRegistry:kg,resolveSpriteAsset:Cg,classAncestorChain:Ea,sizeScaleFor:Su,expressionPalette:yo});if(!c.svg||c.fellBackToRoot)throw new Re(`no sprite for "${s}" \u2014 neither it nor any rdfs:subClassOf ancestor the memory graph knows (${Wg(c.chain)}) carries one in the ${a}. Teach the class its superclass first, or ask for a class the catalog draws.`);if(o&&!c.expressionApplied)throw new Re(`the ${a} draws "${s}" (matched at "${c.matched.term}") but that template takes no expression, so "${o}" would not show. Ask for the plain sprite, or a class whose template carries an emotion parameter.`);let u=[o?`expression ${o}`:"",r?`size ${r}`:""].filter(Boolean),d=[`sprite for "${s}"${u.length?` (${u.join(", ")})`:""}, from the ${a}`,c.matched.hops===0?`matched at "${c.matched.term}", the class itself, via its own ${c.matched.via}`:`matched at "${c.matched.term}", ${c.matched.hops} hop(s) up the ancestor chain, via its ${c.matched.via}`,`ancestor chain walked: ${Wg(c.chain)}`];return c.matched.template?.parameters.length&&d.push(`template parameters: ${c.matched.template.parameters.join(", ")}`),r&&d.push(`render scale: ${c.scale} (from the taught mgx:hasProperty "${r}")`),d.push(`${c.svg.length} characters of SVG markup`),vs({content:d.join(`
157
+ `),data:{class:c.class,expression:c.expression,size:c.size,tier:a,scale:c.scale,svg:c.svg,chain:c.chain,matched:c.matched,expressionApplied:c.expressionApplied}})}var U_,W_,G_,Gg=L(()=>{Dt();xu();Eu();Za();Ig();Ng();Fg();zg();Ug();so();Ge();U_="mgx:hasProperty",W_=()=>Object.keys(yo).sort(),G_=e=>!!e&&Su([{predicate:U_,object:String(e)}])!==1;ku.ownsGraphLoad=!0});function Hg(e,{graph:t}){return Fp(t,{pkg:String(e?.package||"").trim()})}var Vg=L(()=>{Ie()});function qg(e,{graph:t,svc:n}){let{match:s}=$t(n,et(e,"module"),"module");return rf(t,s)}var Kg=L(()=>{Ie();Ge()});function Yg(e,{graph:t}){return Bp(t)}var Xg=L(()=>{Ie()});function Qg(e,{graph:t}){let{content:n,tmct_ask:s}=bs(t,et(e,"query"));return vs({content:n,data:s,text:`${n}${Jg}${JSON.stringify(s,null,2)}`})}var Jg,ju=L(()=>{ws();Ge();Jg=`
125
158
 
126
159
  ---tmct_ask---
127
- `});var bh,wh=L(()=>{Ie();Ge();bh=st(Ld)});var yh,vh=L(()=>{Ie();Ge();yh=st(Md)});var $h,xh=L(()=>{Ie();Ge();$h=st(Wd)});var kh,Eh=L(()=>{Ie();Ge();kh=st(Vd)});var Sh,jh=L(()=>{Ie();Ge();Sh=st(qd)});var _h,Rh=L(()=>{Ie();Ge();_h=st(Fd)});var Ah,Th=L(()=>{Ie();Ge();Ah=st(Dd)});var Ch,Oh=L(()=>{Ie();Ge();Ch=st(Bd)});var Ih,Lh=L(()=>{Ie();Ge();Ih=st(Qd)});function SS(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function jS(e){let t=(e||[]).map(SS);return t.map(n=>JSON.stringify(n)).join(`
160
+ `});var Zg,eb=L(()=>{Ie();Ge();Zg=rt(zp)});var tb,nb=L(()=>{Ie();Ge();tb=rt(Up)});var sb,ob=L(()=>{Ie();Ge();sb=rt(Yp)});var rb,ib=L(()=>{Ie();Ge();rb=rt(Jp)});var ab,cb=L(()=>{Ie();Ge();ab=rt(Qp)});var lb,ub=L(()=>{Ie();Ge();lb=rt(Gp)});var db,pb=L(()=>{Ie();Ge();db=rt(Hp)});var fb,mb=L(()=>{Ie();Ge();fb=rt(qp)});var hb,gb=L(()=>{Ie();Ge();hb=rt(of)});function V_(e){let t={subject:e.subject,predicate:e.predicate,object:e.object,provenance:e.provenance||""};return e.quantifier&&(t.quantifier=e.quantifier),t}function q_(e){let t=(e||[]).map(V_);return t.map(n=>JSON.stringify(n)).join(`
128
161
  `)+(t.length?`
129
- `:"")}function Nh(e){return jS(Ct(e))}var Mh=L(()=>{Je()});async function jl(e,{config:t,memoryBackend:n=null}){let s=n?null:await ls(xe(xe(t.graphFile))),o=n||s.dir;try{return Nh(await Xt(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var Ph=L(()=>{Mh();ze();Je();jl.ownsGraphLoad=!0});async function _l(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 ls(xe(xe(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 is({content:l?`${c}
162
+ `:"")}function bb(e){return q_(Lt(e))}var wb=L(()=>{Je()});async function _u(e,{config:t,memoryBackend:n=null}){let s=n?null:await ks($e($e(t.graphFile))),o=n||s.dir;try{return bb(await en(o))||"(the memory store holds no facts to export)"}finally{s&&await s.close()}}var yb=L(()=>{wb();Be();Je();_u.ownsGraphLoad=!0});async function Ru(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 ks($e($e(t.graphFile)));try{let a=await n(s,{memoryDir:r,config:t,sourceTag:"tool",optimistic:o,canonical:!0}),l=a.extracted.length+a.optimistic.length,c=`${a.sentences} sentence(s), ${a.recognized} recognized`+(o?`, ${a.optimistic.length} optimistic candidate(s)`:"")+`, ${a.skipped} skipped \u2014 ${l} fact(s) grounded.`;return vs({content:l?`${c}
130
163
  ${a.canonical.join(`
131
- `)}`:c,data:{...a,grounded:l}})}finally{await i()}}var Fh=L(()=>{ze();Je();Ge();_l.ownsGraphLoad=!0});var _S,Dh=L(()=>{jc();jf();Am();Cm();Im();Nm();Pm();Dm();Bm();Um();ch();uh();ph();mh();Sl();wh();vh();xh();Eh();jh();Rh();Th();Oh();Lh();Ph();Fh();_S=Object.freeze({tmct_context:Sc,tmct_context_more:Sf,tmct_describe:Rm,tmct_snippet:Tm,tmct_signature:Om,tmct_impact:Lm,tmct_search:Mm,tmct_members:Fm,tmct_subclasses:zm,tmct_related:vl,tmct_sprite:El,tmct_architecture:lh,tmct_exports:dh,tmct_untested:fh,tmct_ask:gh,tmct_tests_for:bh,tmct_history:yh,tmct_file_history:$h,tmct_method_history:kh,tmct_class_history:Sh,tmct_callers:_h,tmct_callees:Ah,tmct_calls:Ch,tmct_cochanges:Ih,tmct_export:jl,tmct_ingest:_l})});var Rl=L(()=>{});var Wi,Al=L(()=>{Wi=()=>({relations:[],constructions:[]})});var zh,Bh=L(()=>{kt();ze();Gu();Mt();qo();os();gi();bi();Dh();Ge();po();si();Rl();Al();bi();jc();Sl();oi(void 0);ni(Wi);zh=Wu.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var cN,lN,uN,Gi=L(()=>{cN=Object.freeze(["entity","set","event","measure"]),lN=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),uN=Object.freeze({it:Object.freeze(["entity","event","measure"]),this:Object.freeze(["entity","event","measure"]),that:Object.freeze(["entity","event","measure"]),"this one":Object.freeze(["entity","event","measure"]),"that one":Object.freeze(["entity","event","measure"]),those:Object.freeze(["set"]),them:Object.freeze(["set"]),these:Object.freeze(["set"]),here:Object.freeze(["entity"])})});var dt,pN,fN,mN,hN,gN,bN,wN,yN,vN,$N,xN,kN,EN,SN,jN,_N,RS,RN,AN,Uh=L(()=>{dt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},pN=dt("createRequire"),fN=dt("readFileSync"),mN=dt("access"),hN=dt("readFile"),gN=dt("writeFile"),bN=dt("appendFile"),wN=dt("mkdir"),yN=dt("mkdtemp"),vN=dt("rename"),$N=dt("unlink"),xN=dt("rm"),kN=dt("stat"),EN=dt("copyFile"),SN=dt("readdir"),jN=dt("createReadStream"),_N=dt("createWriteStream"),RS=dt("randomBytes"),RN=dt("spawnSync"),AN=dt("createInterface")});var Vi=L(()=>{Uh()});var pt,IN,LN,NN,MN,PN,FN,DN,zN,BN,UN,WN,GN,VN,qN,HN,KN,Ut,YN,XN,JN,ds=L(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},IN=pt("createRequire"),LN=pt("readFileSync"),NN=pt("access"),MN=pt("readFile"),PN=pt("writeFile"),FN=pt("appendFile"),DN=pt("mkdir"),zN=pt("mkdtemp"),BN=pt("rename"),UN=pt("unlink"),WN=pt("rm"),GN=pt("stat"),VN=pt("copyFile"),qN=pt("readdir"),HN=pt("createReadStream"),KN=pt("createWriteStream"),Ut=e=>String(e),YN=pt("randomBytes"),XN=pt("spawnSync"),JN=pt("createInterface")});var AS,Wh,n0,s0,o0,Cl=L(()=>{kt();ds();ze();AS={},Wh=Q(xe(Ut(AS.url)),"..","..",".."),n0=Q(Wh,"data","templates","responses.jsonl"),s0=Q(Wh,"data","phrasebook","software-phrases.txt"),o0=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function CS(e,t={}){let n=TS.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function OS(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>CS(s,t))):1}function Qe(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:OS(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 TS,Gh=L(()=>{TS=/^src:corpus:(.+)$/});var ft,a0,Oo,c0,l0,u0,d0,p0,f0,m0,h0,g0,b0,w0,y0,IS,LS,v0,$0,x0,Ws=L(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},a0=ft("createRequire"),Oo=ft("readFileSync"),c0=ft("access"),l0=ft("readFile"),u0=ft("writeFile"),d0=ft("appendFile"),p0=ft("mkdir"),f0=ft("mkdtemp"),m0=ft("rename"),h0=ft("unlink"),g0=ft("rm"),b0=ft("stat"),w0=ft("copyFile"),y0=ft("readdir"),IS=ft("createReadStream"),LS=ft("createWriteStream"),v0=ft("randomBytes"),$0=ft("spawnSync"),x0=ft("createInterface")});function Vh(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 FS(e=MS){let t=_o(Oo(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function Ol(){if(qi===null)try{qi=FS()}catch{qi=[]}return qi}var DS,NS,MS,PS,T0,qi,Il=L(()=>{Ws();ds();ze();Ri();Cl();DS={},NS=xe(Ut(DS.url)),MS=Q(NS,"..","..","data","templates","grammar-rules.toml"),PS=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),T0=Object.freeze(new Set(PS.filter(e=>e!=="prose")));qi=null});function zS(){if(_r!==void 0)return _r;try{let e=qh?qh():BS();_r=e&&e.winkNLP&&e.model?e:null}catch{_r=null}return _r}function BS(){let e=process.getBuiltinModule("node:module").createRequire(US.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function Ll(){if(Io!==void 0)return Io;let e=zS();if(!e)return Io=null,null;try{Io=e.winkNLP(e.model)}catch{Io=null}return Io}var US,qh,_r,Io,Nl=L(()=>{US={}});var Hh=L(()=>{Nl()});var Yh,Kh=L(()=>{Yh={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});function HS(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 Xh(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!KS.has(o.property))throw new Error(`lexicon noun "${n}": property must be "data" or "object", got ${JSON.stringify(o.property)}`);e.nouns.set(n,o),o.plural&&e.nounPlurals.set(o.plural,n)}for(let[n,s]of Object.entries(t.verbs||{}))e.verbs.set(n,{lemma:n,...s||{}});for(let[n,s]of Object.entries(t.adjectives||{})){let o={lemma:n,...s||{}};if(!YS.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=GS){if(!e&&Ml.has(t))return Ml.get(t);let n=Yh,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Xh(s,n),e?(Xh(s,e),s):(Ml.set(t,s),s)}function Rr(e,t,n={}){return XS(e,t,n)[0]??null}function XS(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 HS(s))l(e.nouns.get(c));return i}var GS,P0,F0,VS,qS,D0,KS,YS,Ml,Gs=L(()=>{Kh();GS="tmct:",P0=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),F0=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),VS=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),qS=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),D0=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});KS=new Set(["data","object"]),YS=new Set(["subclass","data"]);Ml=new Map});var W0,G0,V0,JS,q0,H0,K0,Jh=L(()=>{os();Ie();W0=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),G0=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),V0=Object.freeze({Class:[e=>`which classes inherit from ${e}`,e=>`what does ${e} contain`,e=>`where is ${e} defined`],Module:[e=>`what does ${e} import`,e=>`which modules import ${e}`,e=>`where is ${e} defined`],Function:[e=>`what calls ${e}`,e=>`what does ${e} call`,e=>`where is ${e} defined`],Method:[e=>`which class contains ${e}`,e=>`what calls ${e}`,e=>`where is ${e} defined`],Attribute:[e=>`which class contains ${e}`,e=>`where is ${e} defined`],GlobalVariable:[e=>`where is ${e} defined`,e=>`where is ${e} mentioned`],Commit:[e=>`what did commit ${e} touch`,e=>`when did ${e} change`]}),JS=Object.freeze({import:"imports",imports:"imports",importing:"imports",imported:"imports",call:"calls",calls:"calls",calling:"calls",called:"calls",invoke:"calls",invokes:"calls",invoking:"calls",contain:"contains",contains:"contains",containing:"contains",containment:"contains",member:"contains",members:"contains",inherit:"inherits",inherits:"inherits",inheriting:"inherits",inheritance:"inherits",extend:"inherits",extends:"inherits",extending:"inherits",subclass:"inherits",subclasses:"inherits",subclassing:"inherits",test:"tests",tests:"tests",testing:"tests",tested:"tests",coverage:"tests",define:"defines",defines:"defines",defining:"defines",defined:"defines",definition:"defines",definitions:"defines",declaration:"defines",touch:"touches",touches:"touches",touching:"touches",touched:"touches",cochange:"cochange","co-change":"cochange","change-coupling":"cochange",coupled:"cochange",export:"reexports",exports:"reexports",exporting:"reexports",exported:"reexports",reexport:"reexports",reexports:"reexports",reexporting:"reexports","re-export":"reexports","re-exports":"reexports","re-exporting":"reexports",serve:"serves",serves:"serves",serving:"serves",served:"serves",denote:"denotes",denotes:"denotes",denoting:"denotes",denoted:"denotes"}),q0=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"],serves:["serves"],denotes:["denotes"]}),H0=Object.freeze({imports:{verb:"imports",edgeNoun:"import"},calls:{verb:"calls",edgeNoun:"call"},contains:{verb:"contains",edgeNoun:"containment"},inherits:{verb:"inherits from",edgeNoun:"inheritance"},tests:{verb:"tests",edgeNoun:"test"},defines:{verb:"defines",edgeNoun:"definition"},touches:{verb:"touches",edgeNoun:"touch"},cochange:{verb:"changes together with",edgeNoun:"change-coupling"},reexports:{verb:"re-exports",edgeNoun:"re-export"},serves:{verb:"serves",edgeNoun:"service"},denotes:{verb:"denotes",edgeNoun:"denotation"}}),K0=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});var Hi=L(()=>{Yt();Gs();Jh()});var Ki,Yi=L(()=>{Ki=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var ZS,a1,Qh=L(()=>{Ws();Yi();ds();ze();Hi();ZS={},a1=Q(xe(Ut(ZS.url)),"..","..","..")});var Zh=L(()=>{Yt();Gs();Hi()});var ej,tj,y1,Pl=L(()=>{Yt();Gs();po();ej=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),tj=["this","is","about","the"],y1=tj.length});var eg=L(()=>{kt();ze()});var Fl=L(()=>{Yt()});var nj,L1,tg=L(()=>{Ws();Yi();ds();ze();Fl();Yt();nj={},L1=Q(xe(Ut(nj.url)),"..","..","..")});var M1,P1,F1,ng=L(()=>{M1=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),P1=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"})}),F1=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 Ar(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 Xi(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 sg(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 Dl(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,Dl(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function sj(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 oj(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=sg(e,n),c=sg(t,n);if(l.has(t)||c.has(e))return{distinct:!1,reason:"subsumes",lcs:l.has(t)?t:e};if(s.size)for(let h of l){let g=s.get(h);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(h=>c.has(h));if(!u.length)return l.size<2||c.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=h=>Dl(h,n,o,new Set),f=u[0],p=d(f);for(let h of u){let g=d(h);(g>p||g===p&&h<f)&&(f=h,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let h=a.get(f);return typeof h=="number"&&h<r?{distinct:!0,reason:"low-ic",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}return 2*p/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}function Ji(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||Ar(t),c=sj(s),u=new Map,d=new Map(a.map(y=>[y,y])),f=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let $=f(y),j=f(w);$!==j&&d.set($<j?j:$,$<j?$:j)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let $=oj(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...$}),$.distinct||p(a[y],a[w])}let h=new Map;for(let y of a){let w=f(y);h.has(w)||h.set(w,[]),h.get(w).push(y)}let g=y=>Dl(y,l,u,new Set),b=[...h.values()].map(y=>{let w=[...y].sort(),$=w[0],j=g($);for(let v of w){let E=g(v);E>j&&(j=E,$=v)}return{objects:w,label:$}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:m}}var Qi=L(()=>{Bt()});function zl(e){return typeof e=="string"&&rj.test(e)}function og(e){return!!e&&typeof e=="object"&&Vs(e.s)}function Bl(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&zl(e.world)&&Vs(e.subject)&&Vs(e.predicate)&&Vs(e.object)}function Ul(e){if(!e||typeof e!="object"||e.kind!=="rule"||!zl(e.world)||!Vs(e.name)||!aj.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(Vs)}function Wl(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&zl(e.world)&&Vs(e.opening)}function rg(e){return Bl(e)||Ul(e)||Wl(e)}function ig(e){let t=e||[],n=t.filter(c=>c.predicate===cj).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 rj,ij,aj,Vs,cj,Tr=L(()=>{rj=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,ij=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),aj=new Set(ij),Vs=e=>typeof e=="string"&&e.trim()!=="";cj="mgx:default-contains"});var uj,dj,pj,fj,mj,hj,gj,bj,wj,X1,yj,ag,J1,Q1,cg=L(()=>{Gs();Qo();uj="subClassOf",dj="typeAssertion",pj="relation",fj="someValuesFrom",mj="cardinality",hj="disjointWith",gj="possessive",bj="adjective",wj="capability",X1=Object.freeze([uj,dj,pj,fj,mj,hj,gj,bj,wj]),yj=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),ag=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"]]),J1=Math.max(...[...ag.keys()].map(e=>e.split(" ").length)),Q1=[...new Set([...yj,...[...ag.keys()].map(e=>e.split(" ")[0])])]});var qs=L(()=>{});var Gl=L(()=>{Ie();os();qs()});function xt({name:e,label:t,question:n,params:s=[],preconditions:o=[],add:r=[],del:i=[]}){return Object.freeze({type:fs.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 vj,fs,ke,rM,Or,tt,Ot,Wt,$j,lg,$t,xj,kj,ug,iM,aM,cM,dg=L(()=>{vj=Object.freeze({cap:"urn:tmct:cap#",taught:"urn:tmct:taught#",mgx:"urn:tmct:mgx#",seon:"http://se-on.org/ontologies/seon.owl#"}),fs=Object.freeze({Capability:"cap:Capability",Parameter:"cap:Parameter",Precondition:"cap:Precondition",Effect:"cap:Effect"}),ke=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),rM=Object.freeze([ke.MemoryTerm]),Or=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),tt=(e,t,{arg:n=e,required:s=!0,note:o=""}={})=>Object.freeze({type:fs.Parameter,name:e,kind:t,arg:n,required:s,note:o}),Ot=()=>Object.freeze({type:fs.Precondition,pred:Or.graphLoaded}),Wt=(e,t)=>Object.freeze({type:fs.Precondition,pred:Or.resolves,param:e,as:t}),$j=e=>Object.freeze({type:fs.Precondition,pred:Or.anyPresent,params:Object.freeze([...e])}),lg=()=>Object.freeze({type:fs.Precondition,pred:Or.memoryFacts}),$t=(e,t=null)=>Object.freeze({type:fs.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});xj=Object.freeze([xt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[tt("query",ke.Query,{required:!1,note:"required unless a kind filter is given"}),tt("kind",ke.Kind,{required:!1}),tt("name",ke.Query,{required:!1}),tt("decorator",ke.Query,{required:!1})],preconditions:[Ot(),$j(["query","kind"])],add:[$t("matches","query")]}),xt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("description","symbol")]}),xt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("signature","symbol")]}),xt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[tt("module",ke.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Ot(),Wt("module",ke.Symbol)],add:[$t("impact","module")]}),xt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[tt("class",ke.Class,{arg:"class"})],preconditions:[Ot(),Wt("class",ke.Class)],add:[$t("members","class")]}),xt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[tt("class",ke.Class,{arg:"class"})],preconditions:[Ot(),Wt("class",ke.Class)],add:[$t("subclasses","class")]}),xt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[tt("module",ke.Module)],preconditions:[Ot(),Wt("module",ke.Module)],add:[$t("exports","module")]}),xt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("callers","symbol")]}),xt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("callees","symbol")]}),xt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("calls","symbol")]}),xt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("tests","symbol")]}),xt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Ot()],add:[$t("untested",null)]}),xt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("history","symbol")]}),xt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[tt("symbol",ke.Symbol)],preconditions:[Ot(),Wt("symbol",ke.Symbol)],add:[$t("cochanges","symbol")]}),xt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[tt("package",ke.Package,{required:!1})],preconditions:[Ot()],add:[$t("architecture","package")]}),xt({name:"tmct_related",label:"related",question:"a term's synonyms and related concepts (the SKOS view over the conversational-memory graph)",params:[tt("term",ke.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[lg(),Wt("term",ke.MemoryTerm)],add:[$t("related","term")]}),xt({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[tt("class",ke.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),tt("expression",ke.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),tt("size",ke.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[lg(),Wt("class",ke.MemoryTerm)],add:[$t("sprite","class")]})]),kj=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),ug=xj,iM=kj(ug),aM=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"}),cM=Object.freeze({prefixes:vj,vocab:fs,kinds:ke,precond:Or,get capabilities(){return ug}})});var pg=L(()=>{dg()});var fg=L(()=>{Ss()});function Sj(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Q(Ej,"corpus","worlds")}function mg(e){try{return Ki(Oo(e))}catch{return null}}function hg(e){if(Vl.has(e))return Vl.get(e);let t=null,n=mg(Q(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Vl.set(e,t),t}function jj(e,t){let n=hg(e);if(!n)return null;let s=n[String(t??"")];if(!og(s))return null;let o=`${e}\0${t}`;if(ql.has(o))return ql.get(o);let r=null,i=mg(Q(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
132
- `))if(u.trim())try{let d=JSON.parse(u);if(!rg(d)||d.world!==t)continue;Bl(d)?a.push(d):Ul(d)?l.push(d):Wl(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:ig(a),rules:l,meta:c})}return ql.set(o,r),r}var Rj,Ej,Vl,ql,_j,$M,Hl=L(()=>{Ws();Yi();ds();ze();Tr();Rj={},Ej=Q(xe(Ut(Rj.url)),"..","..","..");Vl=new Map,ql=new Map;_j=e=>({list:async()=>{let t=hg(e());return t?Object.keys(t).sort():null},load:async t=>jj(e(),t)}),$M=_j(()=>Sj())});var TM,gg=L(()=>{kt();ze();Yn();Yo();Ss();Je();TM=Q(".tmct","memory","blocks")});var bg=L(()=>{qs()});var yg=L(()=>{Yn();Yo();qs()});var Kl=L(()=>{Yn();Yo();qs()});var vg=L(()=>{Kl();Yn();_s();qs()});var $g=L(()=>{});var xg=L(()=>{bg();yg();Kl();vg();$g();qs()});var kg=L(()=>{gg();Je();gi();Il();xg();Gl()});var Nj,Mj,Pj,Fj,Dj,zj,Bj,zP,BP,Sg=L(()=>{Tr();cg();Gs();Gi();Gl();pg();fg();Hl();Je();kg();Nj="mgx:world-epoch",Mj=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),Pj=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),Fj="mgx:is-open",Dj="mgx:hasMass",zj="mgx:knows-about",Bj="mgx:display-name",zP=new Set([...Mj,...Pj,Fj,Dj,zj,Bj,"rdf:type",Nj]),BP=new RegExp("^(?:what\\s+foods?\\s+(?:do\\s+you\\s+know(?:\\s+about)?|have\\s+you\\s+(?:found|seen|heard\\s+(?:about|of))|do\\s+you\\s+know\\s+of)|what\\s+do\\s+you\\s+know\\s+about\\s+(?:any\\s+)?foods?|do\\s+you\\s+know\\s+(?:about|of)\\s+(?:any\\s+)?foods?|where\\s+is\\s+(?:the\\s+)?food)[?.!\\s]*$","i")});var Zi,WP,GP,VP,qP,Lo=L(()=>{Zi=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),planning:Object.freeze({maxDepth:300})}),WP=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"}),GP=Object.freeze({mole_initial_mass:"moleInitialMass",mole_mass_decrement_per_turn:"moleMassDecrementPerTurn",mole_speed:"moleSpeed",mole_dig_reach:"moleDigReach",vole_initial_mass:"voleInitialMass",vole_mass_decrement_per_turn:"voleMassDecrementPerTurn",vole_speed:"voleSpeed",vole_dig_reach:"voleDigReach",badger_initial_mass:"badgerInitialMass",badger_mass_decrement_per_turn:"badgerMassDecrementPerTurn",badger_speed:"badgerSpeed",badger_dig_reach:"badgerDigReach",groundhog_initial_mass:"groundhogInitialMass",groundhog_mass_decrement_per_turn:"groundhogMassDecrementPerTurn",groundhog_speed:"groundhogSpeed",groundhog_dig_reach:"groundhogDigReach",meerkat_initial_mass:"meerkatInitialMass",meerkat_mass_decrement_per_turn:"meerkatMassDecrementPerTurn",meerkat_speed:"meerkatSpeed",meerkat_dig_reach:"meerkatDigReach"}),VP=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),qP=Object.freeze({max_depth:"maxDepth"})});var Uj,jg,YP,Yl=L(()=>{Lo();Uj=Object.freeze({x:2,y:2}),jg=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})}),YP=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 _g=L(()=>{});var Rg=L(()=>{Yl();_s();Je();Tr();_g();Yt();Lo()});var jF,Ag=L(()=>{Yl();Rg();Tr();Hl();Je();Lo();jF=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 mt,RF,AF,TF,CF,OF,IF,LF,NF,MF,PF,FF,DF,zF,BF,UF,WF,GF,VF,qF,Tg=L(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},RF=mt("createRequire"),AF=mt("readFileSync"),TF=mt("access"),CF=mt("readFile"),OF=mt("writeFile"),IF=mt("appendFile"),LF=mt("mkdir"),NF=mt("mkdtemp"),MF=mt("rename"),PF=mt("unlink"),FF=mt("rm"),DF=mt("stat"),zF=mt("copyFile"),BF=mt("readdir"),UF=mt("createReadStream"),WF=mt("createWriteStream"),GF=mt("randomBytes"),VF=mt("spawnSync"),qF=mt("createInterface")});var ht,KF,YF,XF,JF,QF,ZF,eD,tD,nD,sD,oD,rD,iD,aD,cD,lD,uD,dD,Kj,Cg=L(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},KF=ht("createRequire"),YF=ht("readFileSync"),XF=ht("access"),JF=ht("readFile"),QF=ht("writeFile"),ZF=ht("appendFile"),eD=ht("mkdir"),tD=ht("mkdtemp"),nD=ht("rename"),sD=ht("unlink"),oD=ht("rm"),rD=ht("stat"),iD=ht("copyFile"),aD=ht("readdir"),cD=ht("createReadStream"),lD=ht("createWriteStream"),uD=ht("randomBytes"),dD=ht("spawnSync"),Kj=ht("createInterface")});var gt,fD,mD,hD,gD,bD,wD,yD,vD,$D,xD,kD,ED,SD,jD,_D,RD,AD,Og,TD,Xl=L(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},fD=gt("createRequire"),mD=gt("readFileSync"),hD=gt("access"),gD=gt("readFile"),bD=gt("writeFile"),wD=gt("appendFile"),yD=gt("mkdir"),vD=gt("mkdtemp"),$D=gt("rename"),xD=gt("unlink"),kD=gt("rm"),ED=gt("stat"),SD=gt("copyFile"),jD=gt("readdir"),_D=gt("createReadStream"),RD=gt("createWriteStream"),AD=gt("randomBytes"),Og=gt("spawnSync"),TD=gt("createInterface")});var Ig=L(()=>{Xl();ze();kt();ze();Ci();Mt()});var Lg=L(()=>{});var Yj,Ng=L(()=>{kt();ze();Je();Lg();Yj=Q(".tmct","sessions")});var Pg=L(()=>{kt();ze();Vi()});var bt,JD,QD,ZD,ez,tz,nz,sz,oz,rz,iz,az,cz,lz,uz,dz,pz,fz,mz,Xj,Fg=L(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},JD=bt("createRequire"),QD=bt("readFileSync"),ZD=bt("access"),ez=bt("readFile"),tz=bt("writeFile"),nz=bt("appendFile"),sz=bt("mkdir"),oz=bt("mkdtemp"),rz=bt("rename"),iz=bt("unlink"),az=bt("rm"),cz=bt("stat"),lz=bt("copyFile"),uz=bt("readdir"),dz=bt("createReadStream"),pz=bt("createWriteStream"),fz=bt("randomBytes"),mz=bt("spawnSync"),Xj=bt("createInterface")});var Qj,No,Dg,Jj,zg,kz,Wn,Ez,ea,Sz,Bg=L(()=>{Ws();kt();Fg();ds();ze();Ri();Je();Qj={},No=Q(xe(Ut(Qj.url)),"..","..",".."),Dg=Q(No,"corpus","conceptnet","slice.jsonl"),Jj=Q(No,"src","adapters","corpus","conceptnet-map.toml"),zg=Q(No,"corpus","seon","concepts.jsonl"),kz=Q(No,"corpus","seon","definitions.jsonl"),Wn=Q(No,"corpus","tier2"),Ez=Q(Wn,"manifest.json"),ea=Q(No,"corpus","wordnet"),Sz=Q(ea,"manifest.json")});function t_(){return{seon:{kind:"corpus",active:!1,corpusPath:zg,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:Dg,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:e_},human:{kind:"corpus",active:!0,corpusPath:Q(Wn,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Q(Wn,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Q(Wn,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Q(Wn,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Q(Wn,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Q(Wn,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Q(Wn,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Q(ea,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Q(ea,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Q(Zj,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var n_,Zj,Mz,e_,Pz,Ug=L(()=>{ze();kt();ds();Ci();Bg();n_={},Zj=Q(xe(Ut(n_.url)),"..","..","corpus","namenet"),Mz=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),e_=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];Pz=Object.freeze(t_())});var Wg=L(()=>{});var Gg=L(()=>{ze();Ws();kt();Tg();Cg();Xl();Mt();Ig();Ie();Ng();Vi();Pg();qo();Ug();ta();Lo();Gi();Pl();Wg()});var Vg={};Sn(Vg,{proseLemma:()=>o_});function o_(){if(Hs!==void 0)return Hs;try{let e=Ll();if(!e)return Hs=null,Hs;let t=e.its,n=new Map;Hs=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{Hs=null}return Hs}var Hs,qg=L(()=>{Nl()});var Hg={};Sn(Hg,{digestTermFromRows:()=>a_,loadDigestStructureTable:()=>i_,readDigestStructures:()=>r_});var r_,i_,a_,Kg=L(()=>{r_=()=>null,i_=()=>null,a_=()=>null});function lu(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 ${na(e.entityType)}`;if(t==="list")return`list/enumerate ${na(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${na(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 lu(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&&cn[o]?cn[o]:`filter/traverse ${na(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&&cn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?cn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function gu(e){let t=new Map;for(let n of e)t.has(Jg(n))||t.set(Jg(n),n);return t}function Zl(e,t=Lr){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),Ks(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function eu(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function wu(e){let t=String(e||"").trim();if(/[a-z]ies$/i.test(t))return`${t.slice(0,-3)}y`;if(/[a-z]ses$/i.test(t)){let n=t.slice(0,-2);return/ss$/i.test(n)||f_.has(n.toLowerCase())?n:t.slice(0,-1)}return/(xes|zes|ches|shes)$/i.test(t)?t.slice(0,-2):/[a-z]s$/i.test(t)&&!/(?:ss|ous)$/i.test(t)?t.slice(0,-1):t}async function su(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return zs;if(t==="can")return"mgx:capableOf";try{let{proseLemma:n}=await Promise.resolve().then(()=>(qg(),Vg)),s=n(),o=s?s(t):t;return o==="have"?zs:Dn(`mgx:${o}`)}catch{return Dn(`mgx:${t}`)}}function y_(e,t){let n=String(t||"").match(w_);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function Ir(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(os(),vf)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function k_(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 kb(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 Eb(e){if(Ys[e])return Ys[e];let t=String(e||""),n=Wf(t);if(n){let a=Eb(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",kb(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:(${yu})-([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?`${k_(i[1])}${i[2]?` ${i[2]}`:""}`:e}function ru(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function S_(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of E_)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 oe(e){let t=e.provenance?` (source: ${e.provenance})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${It(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${It(e)}${t}`:e.provenance.includes("corpus:")?`${It(e)}${t}`:e.provenance.includes("reference:")?`${It(e)}${t}`:`i learned: ${It(e)}${t}`}function eb(e,t,n){let s=oe(e);if(!Vn.has(e.predicate)||!n.has(e.subject))return s;let o=Xi(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(j_);return i?s.slice(0,i.index)+r+i[0]:s+r}function tb(e,t,n,{indent:s=""}={}){let o=t.filter(j=>j.predicate===Lr).map(j=>[j.subject,j.object]),r=Ar(o),i=e.map(j=>`${s}${eb(j,r,n)}`),a=e.filter(j=>Vn.has(j.predicate)&&n.has(j.subject)),l=[...new Set(a.map(j=>j.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(j=>j.predicate==="owl:disjointWith").map(j=>[j.subject,j.object]),{split:u,clusters:d}=Ji(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let j of d)for(let v of j.objects)p.set(v,j);let m=e.filter(j=>!(Vn.has(j.predicate)&&n.has(j.subject))),h=[],g=[],b=0,y=j=>{let v=eb(j,r,n);return b<je?(b+=1,`${s}${v}`):(g.push(v),null)};for(let j of d){let v=a.filter(E=>p.get(E.object)===j).map(y).filter(Boolean);v.length&&h.push(`${s}${f}, the ${j.label}:
164
+ `)}`:c,data:{...a,grounded:l}})}finally{await i()}}var vb=L(()=>{Be();Je();Ge();Ru.ownsGraphLoad=!0});var K_,$b=L(()=>{ll();Am();dg();fg();hg();bg();yg();$g();Eg();Sg();Gg();Vg();Kg();Xg();ju();eb();nb();ob();ib();cb();ub();pb();mb();gb();yb();vb();K_=Object.freeze({tmct_context:cl,tmct_context_more:Tm,tmct_describe:ug,tmct_snippet:pg,tmct_signature:mg,tmct_impact:gg,tmct_search:wg,tmct_members:vg,tmct_subclasses:xg,tmct_related:$u,tmct_sprite:ku,tmct_architecture:Hg,tmct_exports:qg,tmct_untested:Yg,tmct_ask:Qg,tmct_tests_for:Zg,tmct_history:tb,tmct_file_history:sb,tmct_method_history:rb,tmct_class_history:ab,tmct_callers:lb,tmct_callees:db,tmct_calls:fb,tmct_cochanges:hb,tmct_export:_u,tmct_ingest:Ru})});var Tu=L(()=>{});var Sa,Au=L(()=>{Sa=()=>({relations:[],constructions:[]})});var xb,Eb=L(()=>{jt();Be();Gd();Dt();gr();ws();Hi();Vi();$b();Ge();To();Ci();Tu();Au();Vi();ll();ju();Oi(void 0);Ai(Sa);xb=Wd.map(({name:e,agentDescription:t,inputSchema:n})=>({name:e,description:t,inputSchema:n}))});var B1,U1,W1,ka=L(()=>{B1=Object.freeze(["entity","set","event","measure"]),U1=Object.freeze(["date","count","op","pivot","metric","kind","provenance"]),W1=Object.freeze({it:Object.freeze(["entity","event","measure"]),this:Object.freeze(["entity","event","measure"]),that:Object.freeze(["entity","event","measure"]),"this one":Object.freeze(["entity","event","measure"]),"that one":Object.freeze(["entity","event","measure"]),those:Object.freeze(["set"]),them:Object.freeze(["set"]),these:Object.freeze(["set"]),here:Object.freeze(["entity"])})});var pt,H1,V1,q1,K1,Y1,X1,J1,Q1,Z1,eP,tP,nP,sP,oP,rP,iP,Y_,aP,cP,Sb=L(()=>{pt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},H1=pt("createRequire"),V1=pt("readFileSync"),q1=pt("access"),K1=pt("readFile"),Y1=pt("writeFile"),X1=pt("appendFile"),J1=pt("mkdir"),Q1=pt("mkdtemp"),Z1=pt("rename"),eP=pt("unlink"),tP=pt("rm"),nP=pt("stat"),sP=pt("copyFile"),oP=pt("readdir"),rP=pt("createReadStream"),iP=pt("createWriteStream"),Y_=pt("randomBytes"),aP=pt("spawnSync"),cP=pt("createInterface")});var ja=L(()=>{Sb()});var ft,pP,fP,mP,hP,gP,bP,wP,yP,vP,$P,xP,EP,SP,kP,jP,_P,Ht,RP,TP,AP,Rs=L(()=>{ft=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},pP=ft("createRequire"),fP=ft("readFileSync"),mP=ft("access"),hP=ft("readFile"),gP=ft("writeFile"),bP=ft("appendFile"),wP=ft("mkdir"),yP=ft("mkdtemp"),vP=ft("rename"),$P=ft("unlink"),xP=ft("rm"),EP=ft("stat"),SP=ft("copyFile"),kP=ft("readdir"),jP=ft("createReadStream"),_P=ft("createWriteStream"),Ht=e=>String(e),RP=ft("randomBytes"),TP=ft("spawnSync"),AP=ft("createInterface")});var X_,kb,NP,PP,MP,Ou=L(()=>{jt();Rs();Be();X_={},kb=Q($e(Ht(X_.url)),"..","..",".."),NP=Q(kb,"data","templates","responses.jsonl"),PP=Q(kb,"data","phrasebook","software-phrases.txt"),MP=Object.freeze(new Set(["subject","count","noun","scope","comparison","metric","unit","superlative","provenance"]))});function Q_(e,t={}){let n=J_.exec(String(e||""));if(!n)return 1;let s=t?.[n[1]];return typeof s=="number"&&Number.isFinite(s)?s:1}function Z_(e,t={}){let n=Array.isArray(e?.sourceIds)?e.sourceIds:[];return n.length?Math.max(...n.map(s=>Q_(s,t))):1}function Qe(e,t={}){return(Array.isArray(e)?e:[]).map((s,o)=>({row:s,index:o,bias:Z_(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 J_,jb=L(()=>{J_=/^src:corpus:(.+)$/});var mt,zP,nr,BP,UP,WP,GP,HP,VP,qP,KP,YP,XP,JP,QP,eR,tR,ZP,eM,tM,oo=L(()=>{mt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},zP=mt("createRequire"),nr=mt("readFileSync"),BP=mt("access"),UP=mt("readFile"),WP=mt("writeFile"),GP=mt("appendFile"),HP=mt("mkdir"),VP=mt("mkdtemp"),qP=mt("rename"),KP=mt("unlink"),YP=mt("rm"),XP=mt("stat"),JP=mt("copyFile"),QP=mt("readdir"),eR=mt("createReadStream"),tR=mt("createWriteStream"),ZP=mt("randomBytes"),eM=mt("spawnSync"),tM=mt("createInterface")});function _b(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 rR(e=sR){let t=qo(nr(e,"utf8"));return Array.isArray(t.rule)?t.rule:[]}function Iu(){if(_a===null)try{_a=rR()}catch{_a=[]}return _a}var iR,nR,sR,oR,lM,_a,Lu=L(()=>{oo();Rs();Be();ca();Ou();iR={},nR=$e(Ht(iR.url)),sR=Q(nR,"..","..","data","templates","grammar-rules.toml"),oR=Object.freeze(["prose","entity","path","number","code","provenance","receipt"]),lM=Object.freeze(new Set(oR.filter(e=>e!=="prose")));_a=null});function aR(){if(Qr!==void 0)return Qr;try{let e=Rb?Rb():cR();Qr=e&&e.winkNLP&&e.model?e:null}catch{Qr=null}return Qr}function cR(){let e=process.getBuiltinModule("node:module").createRequire(lR.url);return{winkNLP:e("wink-nlp"),model:e("wink-eng-lite-web-model")}}function Nu(){if(sr!==void 0)return sr;let e=aR();if(!e)return sr=null,null;try{sr=e.winkNLP(e.model)}catch{sr=null}return sr}var lR,Rb,Qr,sr,Pu=L(()=>{lR={}});var Tb=L(()=>{Pu()});var Cb,Ab=L(()=>{Cb={comment:"tmct's starter lexicon, now covering BOTH the original software domain and the default 'human-world' persona's everyday people/places/objects/nature/time/body/mind vocabulary. Every word the ACE-OWL sub-fragment parser (src/domain/grammar/ace.mjs) is allowed to understand is DECLARED here \u2014 tmct never guesses a word's category. Nouns may declare a possessive property typing ('data' or 'object', pattern 7) or an irregular 'plural' (WordNet-sourced human nouns like 'man'/'child' need this \u2014 the morphology fold only handles regular -s/-ies/-es endings); adjectives MUST declare a type ('subclass' forms a class, 'data' asserts a boolean-ish datatype property, pattern 8); verbs may declare a preposition ('depend' + 'on' \u2192 dependsOn). The human-domain additions are flat and simple (breadth over depth \u2014 no gender/kinship taxonomy, no formal role hierarchy), matching corpus/tier2/generate.mjs's CORPUSES.human.lexicon sub-key, which --verify drift-checks against. Extend via loadLexicon(extra) with this same shape.",nouns:{module:{},class:{},function:{},method:{},attribute:{},variable:{},constant:{},test:{},suite:{},service:{},repository:{},branch:{},commit:{},tag:{},release:{},package:{},library:{},framework:{},api:{},endpoint:{},route:{},handler:{},controller:{},model:{},view:{},template:{},component:{},interface:{},type:{},category:{},kind:{},artifact:{},routine:{},part:{},helper:{},operation:{},change:{},schema:{},database:{},table:{},query:{},index:{plural:"indices"},cache:{},queue:{},worker:{},job:{},task:{},bug:{},defect:{},issue:{},ticket:{},feature:{},requirement:{},specification:{},document:{},developer:{},engineer:{},user:{},visitor:{},team:{},project:{},codebase:{},file:{},directory:{},folder:{},line:{},symbol:{},identifier:{},comment:{},docstring:{},string:{},number:{},list:{},array:{},graph:{},node:{},edge:{},triple:{},fact:{},ontology:{},lexicon:{},grammar:{},sentence:{},utterance:{},session:{},response:{},request:{},question:{},answer:{},error:{},exception:{},warning:{},log:{},metric:{},benchmark:{},pipeline:{},build:{},deployment:{},environment:{},config:{},configuration:{},setting:{},option:{},flag:{},argument:{},parameter:{},value:{},result:{},output:{},input:{},server:{},client:{},protocol:{},message:{},event:{},hook:{},plugin:{},script:{},tool:{},command:{},prompt:{},token:{},parser:{},compiler:{},linter:{},formatter:{},runtime:{},process:{},thread:{},loop:{},statement:{},expression:{},keyword:{},scope:{},callback:{},promise:{},iterator:{},generator:{},unit:{},risk:{},prototype:{},milestone:{},sprint:{},backlog:{},roadmap:{},phase:{},pattern:{},smell:{},coverage:{},mock:{},stub:{},fixture:{},assertion:{},snapshot:{},regression:{},migration:{},refactor:{},review:{},merge:{},license:{property:"data"},version:{property:"data"},name:{property:"data"},path:{property:"data"},size:{property:"data"},status:{property:"data"},language:{property:"data"},extension:{property:"data"},churn:{property:"data"},impact:{property:"data"},complexity:{property:"data"},latency:{property:"data"},duration:{property:"data"},frequency:{property:"data"},severity:{property:"data"},owner:{property:"object"},maintainer:{property:"object"},author:{property:"object"},reviewer:{property:"object"},parent:{property:"object"},dependency:{property:"object"},man:{plural:"men"},woman:{plural:"women"},person:{plural:"people"},child:{plural:"children"},boy:{},girl:{},baby:{},adult:{},friend:{},neighbor:{},stranger:{},guest:{},doctor:{},teacher:{},nurse:{},student:{},farmer:{},mother:{},father:{},brother:{},sister:{},family:{},king:{},queen:{},soldier:{},artist:{},writer:{},cook:{},group:{},crowd:{},audience:{},club:{},president:{},human:{},lawyer:{},driver:{},manager:{},officer:{},judge:{},priest:{},servant:{},butler:{},housekeeper:{},gardener:{},employee:{},boss:{},husband:{},wife:{plural:"wives"},son:{},daughter:{},grandmother:{},grandfather:{},citizen:{},customer:{},leader:{},champion:{},volunteer:{},resident:{},place:{},city:{},town:{},village:{},country:{},house:{},home:{},room:{},kitchen:{},bedroom:{},bathroom:{},school:{},hospital:{},shop:{},market:{},church:{},park:{},garden:{},street:{},road:{},bridge:{},farm:{},office:{},factory:{},museum:{},hotel:{},airport:{},castle:{},beach:{},forest:{},mountain:{},hat:{},shirt:{},coat:{},shoe:{},dress:{},clothing:{},chair:{},desk:{},lamp:{},portrait:{},bed:{},door:{},window:{},wall:{},roof:{},pen:{},paper:{},key:{},lock:{},box:{},car:{},bicycle:{},boat:{},train:{},wheel:{},knife:{plural:"knives"},spoon:{},fork:{},plate:{},cup:{},bottle:{},bag:{},money:{},coin:{},toy:{},machine:{},clock:{},phone:{},book:{},letter:{},umbrella:{},glove:{},sock:{},ring:{},watch:{},mirror:{},candle:{},ladder:{},hammer:{},basket:{},wallet:{},dog:{},cat:{},horse:{},cow:{},pig:{},sheep:{},bird:{},fish:{},mouse:{plural:"mice"},rabbit:{},bear:{},lion:{},tiger:{},elephant:{},snake:{},mole:{},groundhog:{},meerkat:{},tree:{},flower:{},grass:{},leaf:{plural:"leaves"},root:{},seed:{},fruit:{},water:{},air:{},fire:{},earth:{},stone:{},sand:{},gold:{},iron:{},rain:{},snow:{},wind:{},cloud:{},sun:{},moon:{},star:{},owl:{},wolf:{plural:"wolves"},frog:{},bee:{},ant:{},butterfly:{},spider:{},river:{},ocean:{},time:{},day:{},night:{},morning:{},evening:{},week:{},month:{},year:{},hour:{},minute:{},second:{},moment:{},season:{},spring:{},summer:{},winter:{},wedding:{},race:{},dozen:{},half:{plural:"halves"},amount:{},meeting:{},game:{},war:{},trip:{},birthday:{},holiday:{},autumn:{},century:{},body:{},head:{},hand:{},arm:{},leg:{},foot:{plural:"feet"},eye:{},ear:{},mouth:{},nose:{},hair:{},heart:{},blood:{},bone:{},skin:{},face:{},food:{},bread:{},meat:{},milk:{},egg:{},cheese:{},vegetable:{},meal:{},breakfast:{},dinner:{},drink:{},wine:{},tea:{},coffee:{},tongue:{},tooth:{plural:"teeth"},finger:{},toe:{},shoulder:{},knee:{},brain:{},lung:{},sugar:{},salt:{},word:{},story:{},news:{},idea:{},thought:{},mind:{},memory:{},dream:{},belief:{},love:{},hate:{},fear:{},joy:{},anger:{},hope:{},surprise:{},pride:{},song:{},music:{},sound:{},voice:{},picture:{},art:{},knowledge:{},opinion:{},reason:{},imagination:{},laughter:{},tear:{},smile:{},silence:{},object:{},location:{},quantity:{},organization:{},animal:{},plant:{},furniture:{},vehicle:{},insect:{},emotion:{},metal:{},liquid:{},weather:{},planet:{},jewelry:{},cutlery:{},government:{},material:{},draw:{},set:{},heavy:{},stand:{},free:{},pack:{},dead:{},pick:{},double:{},straight:{},cast:{},dry:{},bank:{},stamp:{},tender:{},fair:{},active:{},regular:{},blue:{},hack:{},band:{},brush:{},guard:{},master:{},transfer:{},firm:{},side:{},bull:{},mate:{},rank:{},board:{},brace:{},grade:{},better:{},course:{},natural:{},butt:{},camp:{},crop:{},date:{},fold:{},help:{},hunt:{},count:{},court:{},crush:{},major:{},march:{},tease:{},tough:{},flight:{},forward:{},division:{},commission:{},jam:{},rat:{},gray:{},hood:{},jerk:{},miss:{},pile:{},pool:{},rear:{},whip:{},bench:{},chain:{},cycle:{},grind:{},guide:{},stiff:{},troll:{},union:{},circle:{},carrier:{},defence:{},defense:{},radical:{},reserve:{},intimate:{},opposite:{},superior:{},grey:{},host:{},knot:{},left:{},lost:{},blind:{},crank:{},panel:{},rally:{},state:{},tramp:{},waver:{},clutch:{},living:{},runner:{},steady:{},stream:{},combine:{},company:{},convert:{},general:{},moderate:{},alternate:{},ace:{},crab:{},flop:{},fund:{},pair:{},rake:{},rock:{},sick:{},blade:{},cheat:{},sport:{},caller:{},column:{},couple:{},divine:{},pledge:{},simple:{},sponge:{},system:{},wanton:{},sleeper:{},business:{},associate:{},instrument:{},substitute:{},gun:{},sum:{},alto:{},best:{},buff:{},dear:{},mass:{},cream:{},creep:{},giant:{},labor:{},pilot:{},sneak:{},stack:{},staff:{},world:{},gutter:{},jumper:{},labour:{},lather:{},picket:{},reader:{},savage:{},captain:{},culture:{},monitor:{},neutral:{},unknown:{},utility:{},inferior:{},initiate:{},innocent:{},national:{},transpose:{},association:{},professional:{},bum:{},fan:{},law:{},deck:{},fool:{},join:{},kink:{},page:{},pink:{},stud:{},twin:{},clump:{},coach:{},dance:{},drone:{},extra:{},feast:{},fence:{},fleet:{},flock:{},ghost:{},clear:{},right:{},open:{},beat:{},back:{},block:{},see:{},keep:{},square:{},pitch:{},center:{},centre:{},top:{},post:{},field:{},spot:{},bar:{},end:{},frame:{},rough:{},address:{},quarter:{},position:{},land:{},bound:{},range:{},seat:{},dark:{},rail:{},cross:{},section:{},tip:{},plug:{},port:{},stall:{},corner:{},outside:{},dig:{},way:{},front:{},joint:{},patch:{},reach:{},thick:{},medium:{plural:"media"},dock:{},ruin:{},tack:{},floor:{},bottom:{},puddle:{},compound:{},retreat:{},mat:{},belt:{},dump:{},scene:{},space:{},border:{},common:{},cradle:{},inside:{},surface:{},lie:{},boot:{},clog:{},coil:{},nest:{},wire:{},yard:{},forge:{},limit:{},lodge:{},buffer:{},middle:{},capital:{},overhead:{},preserve:{},terminal:{},direction:{},hall:{},loft:{},plot:{},tape:{},grate:{},stoop:{},fringe:{},circuit:{},distance:{},derivation:{},bent:{},gate:{},mill:{},safe:{},sail:{},hedge:{},paint:{},parcel:{},sphere:{},bearing:{},profile:{},shelter:{},crossing:{},interior:{},reservation:{},area:{},bush:{},cork:{},dive:{},limb:{},raft:{},shed:{},zone:{},chase:{},cut:{},light:{},charge:{},check:{},work:{},stock:{},stick:{},flat:{},crack:{},press:{},settle:{},spread:{},wash:{},well:{},swing:{},fly:{},tap:{},stretch:{},shot:{},black:{},strip:{},separate:{},tie:{},rack:{},match:{},piece:{},shell:{},still:{},present:{},trim:{},spike:{},split:{},white:{},yield:{},squeeze:{},bolt:{},fret:{},choke:{},float:{},track:{},low:{},crown:{},screen:{},die:{plural:"dice"},pin:{},chip:{},mold:{},seal:{},draft:{},shade:{},shaft:{},stuff:{},switch:{},balance:{},reverse:{},subject:{},approach:{},beam:{},bill:{},card:{},link:{},sack:{},sink:{},trap:{},spare:{},credit:{},counter:{},express:{},positive:{},net:{},pay:{},ball:{},bond:{},bowl:{},horn:{},pole:{},wing:{},glass:{},grant:{},smack:{},collar:{},record:{},ruffle:{},silver:{},negative:{},cap:{},lap:{},pad:{},rag:{},rig:{},bend:{},clip:{},fine:{},flap:{},heel:{},pall:{},pump:{},gauge:{},image:{},plain:{},print:{},slick:{},spoil:{},clinch:{},gather:{},offset:{},pocket:{},relief:{},channel:{},whistle:{},irregular:{},transport:{},bat:{},ice:{},peg:{},pot:{},bust:{},grip:{},hole:{},nail:{},poke:{},slug:{},spat:{},stem:{},suit:{},yoke:{},flood:{},grand:{},gross:{},perch:{},slip:{},down:{},shoot:{},ground:{},discharge:{},solid:{},kill:{},slack:{},waste:{},rush:{},grain:{},shake:{},pit:{},mould:{},colour:{},render:{},mount:{},cutting:{},fill:{},flux:{},tail:{},plaster:{},swallow:{},concentrate:{},bay:{},gum:{},ray:{},slop:{},spur:{},extract:{},fat:{},hop:{},corn:{},rust:{},smut:{},label:{},stain:{},composition:{},gas:{},pip:{},duck:{},gall:{},lime:{},mint:{},tick:{},stalk:{},whiff:{},cement:{},rubber:{},conjugate:{},preparation:{},dun:{},dust:{},jade:{},mire:{},pulp:{},snag:{},bloom:{},caper:{},crude:{},fluid:{},frost:{},paste:{},rinse:{},steam:{},straw:{},corona:{},poison:{},refuse:{},savory:{},feather:{},ferment:{},organic:{},chestnut:{},mushroom:{},percolate:{},sublimate:{},synthetic:{},suspension:{},precipitate:{},cod:{},pet:{},rod:{},bunt:{},crow:{},hide:{},punk:{},vein:{},assay:{},goose:{plural:"geese"},olive:{},stray:{},trash:{},ginger:{},pepper:{},permit:{},polish:{},sorrel:{},blister:{},bristle:{},complex:{},filling:{},flicker:{},harvest:{},scollop:{},whiting:{},anteater:{},snowball:{},tincture:{},repellent:{},ink:{},lip:{},nag:{},rue:{},wad:{},acid:{},beak:{},bean:{},coal:{},dirt:{},fawn:{},fuel:{},lark:{},ling:{},mash:{},palm:{},pelt:{},plum:{},pony:{},pout:{},soil:{},stag:{},bream:{},brier:{},chalk:{},coral:{},fiber:{},fall:{},pass:{},lift:{},go:{},roll:{},drop:{},blow:{},return:{},strike:{},rise:{},snap:{},shift:{},twist:{},case:{},deal:{},start:{},deep:{},jump:{},step:{},stop:{},pound:{},advance:{},pop:{},flash:{},rest:{},crash:{},score:{},figure:{},leave:{},smash:{},stroke:{},first:{},sweep:{},even:{},flow:{},kick:{},heave:{},trace:{},opening:{},full:{},gain:{},jack:{},spin:{},wave:{},splash:{},bob:{},bang:{},dash:{},flick:{},hitch:{},prime:{},proof:{},passing:{},bit:{},click:{},knock:{},swell:{},trouble:{},collapse:{},movement:{},standard:{},variation:{},rap:{},boom:{},bump:{},clap:{},pace:{},peck:{},zero:{},blaze:{},speed:{},spell:{},treat:{},bounce:{},factor:{},little:{},plunge:{},scrape:{},single:{},ban:{},mix:{},one:{},mesh:{},roar:{},tilt:{},climb:{},flip:{},puff:{},bite:{},feed:{},bitter:{},chop:{},sour:{},special:{},crisp:{},tonic:{},scallop:{},mess:{},quick:{},smear:{},fillet:{},curl:{},malt:{},glaze:{},souse:{},breast:{},humour:{},draught:{},delicacy:{},dressing:{},transplant:{},hip:{},sop:{},kiss:{},mush:{},neck:{},belly:{},frank:{},jumble:{},junket:{},trifle:{},stomach:{},clot:{},shin:{},stew:{},tart:{},cheek:{},graft:{},molar:{},roast:{},spice:{},stout:{},sweat:{},groove:{},region:{},savoury:{},western:{},backbone:{},conserve:{},dominant:{},macerate:{},melancholy:{},cake:{},lens:{},loaf:{plural:"loaves"},menu:{},must:{},peel:{},pore:{},suds:{},butch:{},cling:{},curry:{},drool:{},honey:{},jerky:{},juice:{},mince:{},nasal:{},nerve:{},sauce:{},tract:{},dainty:{},entree:{},facial:{},relish:{},squash:{},brittle:{},caramel:{},cordial:{},fissure:{},oblique:{},adhesion:{},turnover:{},nonpareil:{},posterior:{},vegetation:{},ail:{},orb:{},pap:{},rum:{},brew:{},chew:{},hash:{},lard:{},rump:{},brine:{},dowdy:{},farce:{},flour:{},fudge:{},halal:{},icing:{},lunch:{},play:{},make:{},hold:{},close:{},mark:{},form:{},order:{},support:{},rule:{},sign:{},hang:{},drag:{},feel:{},find:{},shock:{},mean:{},offer:{},study:{},show:{},tone:{},flare:{},attack:{},act:{},life:{plural:"lives"},stay:{},think:{},secret:{},account:{},hurt:{},note:{},taste:{},report:{},measure:{},condition:{},cry:{},focus:{plural:"foci"},style:{},thing:{},title:{},recall:{},average:{},contract:{},dissolve:{},so:{},aim:{},bind:{},heat:{},know:{},stir:{},claim:{},power:{},demand:{},design:{},notice:{},source:{},upgrade:{},resolution:{},bid:{},skim:{},brand:{},curve:{},sight:{},smoke:{},digest:{},regard:{},passage:{},program:{},exposure:{},interest:{},character:{},projection:{},lay:{},curse:{},favor:{},remit:{},sense:{},slash:{},wedge:{},bubble:{},excuse:{},favour:{},invite:{},mantle:{},salute:{},stress:{},survey:{},temper:{},comfort:{},neglect:{},resolve:{},respect:{},torment:{},conflict:{},dispatch:{},standing:{},challenge:{},programme:{},background:{},conclusion:{},impression:{},particular:{},withdrawal:{},cite:{},echo:{},hail:{},rip:{},lot:{},great:{},relay:{},tenor:{},browse:{},bundle:{},chorus:{},cypher:{},fellow:{},litter:{},marine:{},native:{},occult:{},plague:{},rocker:{},scheme:{},series:{plural:"series"},social:{},streak:{},sucker:{},teaser:{},antique:{},battery:{},bracket:{},founder:{},gallery:{},liberal:{},starter:{},turnout:{},witness:{},diagonal:{},familiar:{},ordinary:{},prospect:{},sequence:{},aggregate:{},authority:{},community:{},dependent:{},desperate:{},patronage:{},primitive:{},principal:{},complement:{},engagement:{},foundation:{},generation:{},settlement:{},combination:{},lightweight:{},steamroller:{},subordinate:{},organisation:{},establishment:{},representative:{},con:{},fox:{},kid:{},pod:{},red:{},sex:{},spy:{},vet:{},aged:{},bore:{},diet:{},fare:{},gown:{},hawk:{},heap:{},herd:{},hive:{},lump:{},romp:{},sort:{},agent:{},alien:{},beard:{},brave:{},breed:{},brood:{},canon:{},craft:{},crazy:{},devil:{},dummy:{},equal:{},flake:{},groom:{},mound:{},organ:{},scrub:{},toast:{},troop:{},youth:{},colony:{},copper:{},cutter:{},escort:{},feeder:{},junior:{},maroon:{},matrix:{plural:"matrices"},modern:{},muscle:{},people:{},sector:{},shrink:{},tinker:{},topper:{},booster:{},gallant:{},hostile:{},marshal:{},network:{},nucleus:{plural:"nuclei"},premier:{},scourge:{},secular:{},sitting:{},snapper:{},suspect:{},swagger:{},traffic:{},variant:{},cardinal:{},derelict:{},domestic:{},favorite:{},finisher:{},graduate:{},humanist:{},infernal:{},magazine:{},manifold:{},minister:{},palatine:{},presence:{},receiver:{},relation:{},favourite:{},following:{},goldbrick:{},operative:{},sensitive:{},syndicate:{},complexion:{},mouthpiece:{},withdrawer:{},appointment:{},conjugation:{},constituent:{},heavyweight:{},incompetent:{},independent:{},replacement:{},underground:{},untouchable:{},conservative:{},administration:{},ape:{},gem:{},hob:{},sap:{},van:{},axis:{plural:"axes"},chap:{},char:{},crew:{},cult:{},duet:{},gang:{},hero:{},hire:{},lamb:{},lame:{},mute:{},nude:{},pawn:{},pill:{},sage:{},soul:{},tout:{},trio:{},ward:{},worm:{},bunch:{},crimp:{},dwarf:{},elect:{},flank:{},ideal:{},noble:{},octet:{},quack:{},saint:{},scrag:{},shark:{},shoal:{},silly:{},skunk:{},super:{},witch:{},zombi:{},agency:{},anchor:{},backup:{},batter:{},buster:{},canary:{},circus:{},dealer:{},domain:{},doomed:{},genius:{},gossip:{},herald:{},hoodoo:{},hopper:{},immune:{},jockey:{},legion:{},member:{},nature:{},orphan:{},parade:{},peanut:{},pillar:{},pirate:{},player:{},porter:{},pusher:{},putter:{},senior:{},septet:{},sestet:{},sextet:{},surety:{},tapper:{},tiller:{},zombie:{},adjunct:{},butcher:{},captive:{},cascade:{},chapter:{},charity:{},checker:{},chicane:{},chicken:{},climber:{},cognate:{},consort:{},cracker:{},dresser:{},gentile:{},invalid:{},knocker:{},lineage:{},mission:{},mixture:{},monster:{},offence:{},partner:{},pioneer:{},pitcher:{},quartet:{},quintet:{},recruit:{},referee:{},shooter:{},spoiler:{},sponsor:{},stemmer:{},steward:{},striker:{},terrace:{},alliance:{},castrate:{},designer:{},director:{},ensemble:{},faithful:{},friendly:{},mandarin:{},operator:{},romantic:{},accessory:{},annoyance:{},attendant:{},bourgeois:{},precedent:{},quadruple:{},reception:{},recession:{},religious:{},reprobate:{},satellite:{},selection:{},sensation:{},supporter:{},contingent:{},convention:{},expedition:{},incendiary:{},individual:{},masquerade:{},population:{},sweetheart:{},tubercular:{},confederate:{},cooperative:{},subdivision:{},territorial:{},transcriber:{},intelligence:{},registration:{},sophisticate:{},welterweight:{},revolutionary:{},ex:{},ass:{},cog:{},cub:{},den:{},dud:{},duo:{},ham:{},hog:{},mob:{},pro:{},deaf:{},dove:{},fate:{},five:{},folk:{},gull:{},jinx:{},mime:{},nark:{},nine:{},pest:{},prey:{},quad:{},rash:{},scab:{},sire:{},wisp:{},wood:{},zany:{},armor:{},batch:{},bogey:{},caste:{},chief:{},choir:{},clone:{},divan:{},drunk:{},elder:{},enemy:{},exile:{},faith:{},flirt:{},grunt:{},joker:{},lobby:{},louse:{plural:"lice"},pagan:{},pivot:{},racer:{},rebel:{},scout:{},siren:{},slave:{},swarm:{},timid:{},triad:{},tribe:{},armour:{},bearer:{},censor:{},choker:{},convoy:{},covert:{},damned:{},deputy:{},empire:{},goffer:{},gopher:{},huddle:{},killer:{},league:{},martyr:{},muster:{},mystic:{},outfit:{},packet:{},palace:{},passer:{},patrol:{},potter:{},quarry:{},rigger:{},ringer:{},rustic:{},scribe:{},sitter:{},slider:{},slouch:{},squire:{},squirt:{},stupid:{},summit:{},tailor:{},tenant:{},terror:{},tracer:{},turkey:{},turner:{},venter:{},voider:{},voodoo:{},walker:{},worthy:{},academy:{},agonist:{},amateur:{},ancient:{},banquet:{},cabinet:{},cashier:{},classic:{},commune:{},courser:{},crammer:{},current:{},divider:{},economy:{},edition:{},emperor:{},entrant:{},fireman:{},lookout:{},octette:{},orderly:{},painter:{},pervert:{},plotter:{},plunger:{},roaster:{},sampler:{},scanner:{},sellout:{},skimmer:{},skipper:{},society:{},soprano:{},spastic:{},spotter:{},stratum:{plural:"strata"},trimmer:{},tripper:{},trooper:{},tumbler:{},upstart:{},veteran:{},wheeler:{},academic:{},agnostic:{},aviation:{},backstop:{},baritone:{},calendar:{},casualty:{},colonial:{},divinity:{},fireball:{},homeless:{},huckster:{},marriage:{},militant:{},military:{},ministry:{},modifier:{},partisan:{},pedigree:{},possible:{},recorder:{},regiment:{},renegade:{},repeater:{},revenant:{},septette:{},sextette:{},shepherd:{},stalwart:{},stringer:{},stripper:{},whistler:{},affiliate:{},ascendant:{},bacchanal:{},canvasser:{},cockscomb:{},collector:{},comforter:{},commander:{},companion:{},conductor:{},crossover:{},eccentric:{},executive:{},fledgling:{},franchise:{},freelance:{},incumbent:{},mercenary:{},moderator:{},neighbour:{},newspaper:{},patriarch:{},patrician:{},portfolio:{},quartette:{},quintette:{},repertory:{},secretary:{},segregate:{},spearhead:{},stigmatic:{},summation:{},transient:{},trumpeter:{},voluntary:{},absolutism:{},anthropoid:{},apparition:{},assemblage:{},collective:{},contractor:{},delinquent:{},episcopate:{},exaltation:{},exposition:{},illiterate:{},judicature:{},leadership:{},lieutenant:{},minimalist:{},percussion:{},profligate:{},provincial:{},rendezvous:{},brotherhood:{},determinant:{},distributor:{},interpreter:{},stipendiary:{},analphabetic:{},antediluvian:{},civilisation:{},civilization:{},commonwealth:{},conglomerate:{},contemporary:{},cosmopolitan:{},humanitarian:{},neighborhood:{},thoroughbred:{},ultramontane:{},concatenation:{},featherweight:{},superordinate:{},classification:{},fundamentalist:{},cop:{},don:{},eon:{},gal:{},gob:{},god:{},hoe:{},kin:{},nan:{},pup:{},wag:{},wit:{},aeon:{},ally:{},bard:{},chum:{},clew:{},dean:{},fink:{},flak:{},geek:{},goof:{},hulk:{},idol:{},lady:{},loon:{},mace:{},para:{},ruck:{},seer:{},self:{plural:"selves"},adder:{},angel:{},augur:{},baron:{},blond:{},brick:{},brute:{},cabal:{},champ:{},comic:{},crier:{},decoy:{},demon:{},diner:{},diver:{},diwan:{},drove:{},envoy:{},fiend:{},flack:{},flier:{},flyer:{},freak:{},gaudy:{},harpy:{},horde:{},indie:{},jewel:{},leech:{},levee:{},liege:{},locus:{},loser:{},mimic:{},needy:{},nymph:{},oiler:{},poser:{},pupil:{},riser:{},roper:{},rummy:{},scold:{},squad:{},timer:{},tutor:{},usher:{},vicar:{},whale:{},wiper:{},affine:{},albino:{},angler:{},badass:{},baster:{},beggar:{},blonde:{},bomber:{},bowler:{},butter:{},carver:{},caster:{},chichi:{},clinic:{},closer:{},cohort:{},coiner:{},comber:{},cookie:{},cordon:{},corpus:{},cotter:{},cowboy:{},coyote:{},critic:{},dragon:{},drawer:{},drudge:{},eleven:{},ensign:{},estate:{},ethnic:{},exarch:{},finder:{},fodder:{},gaffer:{},gainer:{},galaxy:{},granny:{},hacker:{},hedger:{},heller:{},holder:{},honker:{},hooker:{},hotdog:{},inmate:{},intern:{},jungle:{},knight:{},kvetch:{},lineup:{},lovely:{},magpie:{},maiden:{},mailer:{},maniac:{},matron:{},miller:{},muller:{},nation:{},opener:{},ouster:{},packer:{},parrot:{},patron:{},peeler:{},peeper:{},polity:{},poster:{},powwow:{},punter:{},puppet:{},purdah:{},racist:{},rafter:{},ramrod:{},redact:{},regent:{},rusher:{},sailor:{},scorer:{},seeder:{},shaver:{},slaver:{},slicer:{},smoker:{},snitch:{},syntax:{},tacker:{},tagger:{},tanker:{},tartar:{},teller:{},thrush:{},trigon:{},troika:{},truant:{},tucker:{},tyrant:{},umpire:{},undoer:{},vestal:{},virgin:{},votary:{},warren:{},washer:{},wetter:{},winder:{},winner:{},wizard:{},admirer:{},amnesic:{},analyst:{},anomaly:{},aphasic:{},armorer:{},arrival:{},ascetic:{},auditor:{},baggage:{},bastion:{},biology:{},boarder:{},brahman:{},brahmin:{},breaker:{},caravan:{},clapper:{},cluster:{},coaster:{},cobbler:{},college:{},convict:{},council:{},counsel:{},coxcomb:{},crawler:{},creeper:{},crewman:{},crimper:{},darling:{},destiny:{},dragoon:{},dreamer:{},duality:{},echelon:{},ejector:{},fiddler:{},fighter:{},flasher:{},forbear:{},harrier:{},holdout:{},hostess:{},incubus:{},ingenue:{},justice:{},kachina:{},kindred:{},kingpin:{},macumba:{},manikin:{},marcher:{},married:{},newborn:{},notable:{},nursing:{},outpost:{},parvenu:{},patient:{},payroll:{},peasant:{},phalanx:{},phantom:{},planter:{},platoon:{},plodder:{},poacher:{},printer:{},prodigy:{},puncher:{},realist:{},redhead:{},revival:{},runaway:{},scholar:{},sharpie:{},skidder:{},slicker:{},slogger:{},smasher:{},snorter:{},snuffer:{},spinner:{},splicer:{},stalker:{},stamper:{},standby:{},stepper:{},striper:{},sweeper:{},thrower:{},triplet:{},utopian:{},utterer:{},voucher:{},washout:{},watcher:{},wiggler:{},wrecker:{},affluent:{},armourer:{},attender:{},bacchant:{},bachelor:{},bankrupt:{},bisexual:{},bondsman:{},cautious:{},congress:{},corporal:{},creature:{},decadent:{},defeated:{},delegate:{},diabetic:{},dictator:{},dyslexic:{},effector:{},exponent:{},flagging:{},freshman:{},fugitive:{},futurist:{},garrison:{},greyback:{},hangover:{},humanism:{},immortal:{},juvenile:{},lapidary:{},mainstay:{},mannikin:{},maverick:{},mechanic:{},minority:{},minstrel:{},mistress:{},monotype:{},mutation:{},nativist:{},neophyte:{},neurotic:{},newsroom:{},nobility:{},opponent:{},pacifier:{},pantheon:{},planting:{},probable:{},producer:{},recusant:{},referral:{},reminder:{},retainer:{},ruralism:{},scalawag:{},scrubber:{},searcher:{},sergeant:{},sociable:{},songster:{},splitter:{},squadron:{},straggle:{},strawman:{},survivor:{},taxonomy:{},treasury:{},vanguard:{},virtuoso:{},walloper:{},warhorse:{},yearling:{},alcoholic:{},anorectic:{},artificer:{},artillery:{},attracter:{},attractor:{},automaton:{},auxiliary:{},barbarian:{},bombshell:{},brokerage:{},coalition:{},concourse:{},contralto:{},counselor:{},crewwoman:{},cyberpunk:{},defaulter:{},deliverer:{},democracy:{},dependant:{},descender:{},dissident:{},dyspeptic:{},feudatory:{},firewoman:{},flyweight:{},incurable:{},institute:{},insurgent:{},intellect:{},introvert:{},mandatory:{},mendicant:{},middleman:{},navigator:{},organiser:{},organizer:{},pluralism:{},pluralist:{},pothunter:{},precursor:{},predictor:{},presenter:{},pretender:{},processor:{},proconsul:{},publisher:{},quintuple:{},registrar:{},regulator:{},scallywag:{},scavenger:{},scrambler:{},scratcher:{},serration:{},singleton:{},stargazer:{},stockpile:{},successor:{},surrogate:{},symbolism:{},temporary:{},throwback:{},trickster:{},warrantee:{},womanhood:{},antagonist:{},attendance:{},blackguard:{},bondswoman:{},chancellor:{},classifier:{},conference:{},conformist:{},counsellor:{},crossroads:{},descendant:{},descendent:{},doorkeeper:{},embodiment:{},expatriate:{},federation:{},fellowship:{},filibuster:{},forerunner:{},fratricide:{},grandstand:{},mastermind:{},minstrelsy:{},missionary:{},ordination:{},plantation:{},powerhouse:{},quadruplet:{},quintuplet:{},repatriate:{},republican:{},respondent:{},rubberneck:{},salamander:{},scholastic:{},separatism:{},sisterhood:{},subscriber:{},subsidiary:{},supplicant:{},suppresser:{},suppressor:{},timekeeper:{},translator:{},university:{},wallflower:{},abomination:{},academician:{},agriculture:{},anachronism:{},antiquarian:{},beneficiary:{},bureaucracy:{},clairvoyant:{},conditioner:{},confederacy:{},consumptive:{},deification:{},enlightened:{},incarnation:{},lilliputian:{},middlewoman:{},narcoleptic:{},nationalist:{},partnership:{},peacekeeper:{},peripatetic:{},pontificate:{},progression:{},prosecution:{},quarterback:{},recessional:{},romanticist:{},shipbuilder:{},transmitter:{},transsexual:{},underwriter:{},undesirable:{},utilitarian:{},acquaintance:{},bantamweight:{},collaborator:{},congregation:{},conservatory:{},countertenor:{},demonstrator:{},denomination:{},headquarters:{},illegitimate:{},investigator:{},metropolitan:{},middleweight:{},noncombatant:{},philharmonic:{},schoolmaster:{},sharpshooter:{},totalitarian:{},authoritarian:{},confederation:{},correspondent:{},reincarnation:{},schizophrenic:{},supernumerary:{},categorization:{},tatterdemalion:{},instrumentality:{},internationalist:{},bey:{},cox:{},cur:{},few:{},foe:{},hag:{},lad:{},mod:{},obi:{},sib:{},aide:{},amah:{},anti:{},army:{},beau:{},bevy:{},bogy:{},chit:{},clod:{},coon:{},czar:{},dada:{},dame:{},derp:{},dodo:{},dude:{},duke:{},dupe:{},gild:{},giro:{},goat:{},goon:{},grad:{},guru:{},heir:{},hobo:{},hunk:{},jilt:{},jock:{},jury:{},khan:{},maid:{},naif:{},navy:{},nerd:{},peri:{},pimp:{},putz:{},sect:{},suer:{},swot:{},tuft:{},adept:{},baker:{},basso:{},beast:{},bride:{},bunny:{},cadre:{},comer:{},cooky:{},corps:{},covey:{},deist:{},edger:{},elite:{},emcee:{},enate:{},faery:{},fatty:{},fauna:{},felon:{},filer:{},flora:{},folks:{},forum:{},genus:{plural:"genera"},ghoul:{},gipsy:{},giver:{},gnome:{},grove:{},gypsy:{},hajji:{},hakim:{},junky:{},knave:{},lefty:{},leper:{},loony:{},macho:{},madam:{},magus:{},medic:{},mezzo:{},miler:{},mooch:{},mufti:{},nabob:{},nexus:{},ninja:{},obeah:{},parer:{},pigmy:{},poilu:{},ponce:{},prior:{},proxy:{},puppy:{},pygmy:{},quint:{},raver:{},rover:{},satyr:{},scamp:{},sheik:{},shill:{},shrew:{},sibyl:{},sissy:{},slain:{},smith:{},snoop:{},sprog:{},stoic:{},sylph:{},taker:{},thane:{},toady:{},totem:{},trier:{},tryst:{},tuner:{},twirp:{},uncle:{},valet:{},vegan:{},vixen:{},waker:{},widow:{},wight:{},wirer:{},yenta:{},agnate:{},alexic:{},amazon:{},audile:{},avatar:{},avower:{},bagger:{},bagman:{},banker:{},barber:{},barker:{},bather:{},bawler:{},beater:{},beldam:{},bidder:{},boater:{},brewer:{},broker:{},brunet:{},bureau:{},caddie:{},camper:{},cantor:{},caucus:{},chaser:{},cherub:{},chosen:{},coeval:{},cooper:{},coquet:{},cottar:{},craven:{},cubist:{},daemon:{},deacon:{},digger:{},dodger:{},dowser:{},duette:{},dunker:{},egoist:{},eldest:{},eparch:{},erotic:{},eyeful:{},faller:{},fitter:{},flunky:{},forger:{},framer:{},gaggle:{},gagman:{},gamine:{},gasbag:{},gillie:{},goalie:{},gouger:{},grouch:{},gunman:{},gunner:{},hamlet:{},hanger:{},hawker:{},heaver:{},hermit:{},hitter:{},hummer:{},iceman:{},joiner:{},junkie:{},jurist:{},keeper:{},kelpie:{},kisser:{},lackey:{},lector:{},lifter:{},lister:{},lizard:{},loader:{},loaner:{},logjam:{},longer:{},lubber:{},lumper:{},lyceum:{},madcap:{},maenad:{},maimed:{},masher:{},medico:{},menial:{},midden:{},midget:{},minder:{},moiety:{},motile:{},nester:{},oblate:{},oilman:{},parish:{},paster:{},pelter:{},phylum:{},picker:{},plenum:{},police:{},pruner:{},psyche:{},puller:{},python:{},rabble:{},raider:{},raiser:{},ranger:{},ranker:{},rapper:{},reaper:{},redcap:{},reeler:{},regime:{},renter:{},rifler:{},romper:{},sachem:{},salter:{},sawyer:{},sealer:{},seeker:{},sender:{},sexist:{},shaker:{},shaper:{},sharpy:{},signer:{},silvan:{},sleuth:{},smiler:{},sorter:{},sphinx:{},stager:{},stater:{},supper:{},sylvan:{},talent:{},tanner:{},tester:{},theist:{},throng:{},tilter:{},tipper:{},toller:{},tosser:{},tourer:{},townie:{},trusty:{},varlet:{},vermin:{},vestry:{},victor:{},virago:{},voicer:{},waster:{},weasel:{},weaver:{},weeder:{},weeper:{},weirdo:{},whaler:{},winker:{},wraith:{},wretch:{},yakuza:{},yeoman:{},adapter:{},admiral:{},airhead:{},amalgam:{},animist:{},aphakic:{},applier:{},arbiter:{},armiger:{},atheist:{},attache:{},babbler:{},baffled:{},beldame:{},beloved:{},berserk:{},bondman:{},bounder:{},brigade:{},browser:{},buffoon:{},bulimic:{},burgher:{},caitiff:{},carload:{},catcher:{},cavalry:{},chachka:{},changer:{},charmer:{},chemist:{},cocotte:{},collage:{},compere:{},shadow:{},layer:{},north:{},orbit:{},trend:{},truss:{},vault:{},bunker:{},harbor:{},orient:{},origin:{},resort:{},safety:{},target:{},chamber:{},extreme:{},harbour:{},kingdom:{},mandate:{},outline:{},station:{},blockade:{},darkness:{},overlook:{},landscape:{},northeast:{},northwest:{},partition:{},southeast:{},southwest:{},structure:{},atmosphere:{},lug:{},tee:{},balk:{},burr:{},cage:{},drip:{},east:{},fort:{},hoop:{},west:{},cleat:{},fluke:{},scour:{},south:{},beacon:{},closet:{},duplex:{},radius:{plural:"radii"},vacuum:{},wattle:{},canteen:{},grounds:{},cloister:{},pinnacle:{},property:{},surround:{},terminus:{},anchorage:{},barricade:{},honeycomb:{},turnaround:{},institution:{},termination:{},cab:{},dam:{},brim:{},calk:{},dome:{},goal:{},hill:{},hull:{},knob:{},prop:{},seam:{},site:{},turf:{},apron:{},arena:{},baulk:{},cabin:{},grill:{},groin:{},haunt:{},lever:{},niche:{},privy:{},works:{},airway:{},barren:{},corral:{},dugout:{},fender:{},galley:{},hurdle:{},lounge:{},outlet:{},refuge:{},sconce:{},sprawl:{},temple:{},toilet:{},wicket:{},barrack:{},bulwark:{},buttery:{},cornice:{},grating:{},landing:{},leeward:{},maximum:{},pasture:{},salient:{},shingle:{},squinch:{},surgery:{},building:{},cylinder:{},downtown:{},fountain:{},landmark:{},munition:{},quadrant:{},rearward:{},sideline:{},windward:{},homestead:{},multiplex:{},perfumery:{},residence:{},stretcher:{},substrate:{},excavation:{},silhouette:{},convenience:{},culmination:{},declination:{},architecture:{},spa:{},aery:{},brow:{},bung:{},dike:{},flue:{},hell:{},tent:{},abbey:{},aisle:{},arbor:{},attic:{},booth:{},brink:{},disco:{},oxbow:{},oxeye:{},quoin:{},realm:{},salon:{},villa:{},whorl:{},barony:{},barrow:{},bazaar:{},billet:{},bustle:{},canton:{},casing:{},cellar:{},cooler:{},garage:{},ghetto:{},grille:{},hearth:{},locker:{},midway:{},muffle:{},oracle:{},remise:{},saloon:{},stocks:{},studio:{},tiptop:{},uptown:{},volute:{},arsenal:{},chassis:{},cockpit:{},commons:{},cubicle:{},dockage:{},fairway:{},fencing:{},gondola:{},heading:{},hotspot:{},lattice:{},lodging:{},minimum:{},moorage:{},pannier:{},rattrap:{},rootage:{},stowage:{},theater:{},theatre:{},vacuity:{},baseline:{},butchery:{},buttress:{},clearing:{},crosscut:{},domicile:{},erection:{},exterior:{},fanlight:{},fastness:{},firewall:{},foothold:{},frontier:{},lavatory:{},memorial:{},monument:{},mortuary:{},overhang:{},pedestal:{},scenario:{},solitude:{},sprocket:{},stockade:{},stoppage:{},vaulting:{},bombproof:{},cathedral:{},fundament:{},hindrance:{},panhandle:{},proximity:{},resonator:{},sanctuary:{},territory:{},watershed:{},confluence:{},department:{},encampment:{},flashpoint:{},groundwork:{},hinderance:{},quartering:{},substratum:{},underbelly:{},breadbasket:{},columbarium:{},destination:{},engineering:{},equinoctial:{},planetarium:{},penitentiary:{},circumference:{},confectionery:{},fortification:{},hub:{},hut:{},lee:{},sty:{},acme:{},apex:{},barn:{},brig:{},coop:{},digs:{},holy:{},jail:{},jook:{},juke:{},loge:{},mall:{},nook:{},pave:{},sash:{},silo:{},slum:{},tope:{},weir:{},abode:{},aerie:{},altar:{},bazar:{},detox:{},haven:{},heath:{},hutch:{},kraal:{},lager:{},manor:{},manse:{},navel:{},oasis:{plural:"oases"},opera:{},paddy:{},plaza:{},pylon:{},rodeo:{},shire:{},spile:{},sprag:{},venue:{},visor:{},apogee:{},arcade:{},ashram:{},asylum:{},atrium:{},bagnio:{},bailey:{},barrio:{},belfry:{},boards:{},casino:{},chapel:{},county:{},creche:{},cupola:{},deckle:{},fraise:{},haymow:{},hostel:{},kennel:{},lancet:{},larder:{},lockup:{},mihrab:{},parlor:{},plaque:{},prefab:{},prison:{},spigot:{},stacks:{},tampon:{},turret:{},vertex:{},zodiac:{},automat:{},balcony:{},batwing:{},benthos:{},borough:{},bubbler:{},bullpen:{},cabaret:{},caboose:{},chantry:{},convent:{},deanery:{},demesne:{},derrick:{},desktop:{},drydock:{},dukedom:{},dungeon:{},earldom:{},earplug:{},embassy:{},emirate:{},eparchy:{},equinox:{},fiefdom:{},florist:{},flyover:{},framing:{},funfair:{},grocery:{},hayrack:{},hospice:{},khanate:{},lunette:{},mansion:{},marquee:{},masonry:{},matting:{},midland:{},mooring:{},narthex:{},nirvana:{},obelisk:{},outback:{},parapet:{},parlour:{},pinhead:{},railing:{},rathole:{},redoubt:{},ribbing:{},rotunda:{},sanctum:{},sawmill:{},shipway:{},shoebox:{},stopple:{},tambour:{},transom:{},trellis:{},trestle:{},tribune:{},vantage:{},abutment:{},airspace:{},ambiance:{},ambience:{},backside:{},ballpark:{},basement:{},basilica:{},bioscope:{},bodywork:{},brattice:{},diggings:{},doghouse:{},dominion:{},entrepot:{},environs:{},extremum:{},farmland:{},fireside:{},hacienda:{},hideaway:{},imperium:{},jalousie:{},littoral:{},mantelet:{},mounting:{},nailhead:{},outdoors:{},palisade:{},pharmacy:{},porthole:{},province:{},revolver:{},seascape:{},sidewall:{},steerage:{},stopover:{},suburbia:{},sudatory:{},sweatbox:{},tailgate:{},turnpike:{},wellhead:{},backwater:{},bailiwick:{},beachhead:{},belvedere:{},caliphate:{},caparison:{},cellarage:{},chandlery:{},cloakroom:{},colonnade:{},cookhouse:{},couchette:{},crematory:{},crownwork:{},cubbyhole:{},dollhouse:{},dormitory:{},dripstone:{},fieldwork:{},fireguard:{},forefront:{},guardroom:{},hatchback:{},isoclinal:{},lazaretto:{},lineation:{},mezzanine:{},millinery:{},orphanage:{},outfitter:{},pleasance:{},princedom:{},revetment:{},roadblock:{},scrapheap:{},shrubbery:{},viewpoint:{},viscounty:{},workhouse:{},architrave:{},birthplace:{},borderline:{},bridgehead:{},brownstone:{},chokepoint:{},commissary:{},courthouse:{},escarpment:{},greenhouse:{},ironmonger:{},justiciary:{},laboratory:{},lamination:{},maisonette:{},metropolis:{},obstructor:{},panopticon:{},playground:{},prefecture:{},proscenium:{},quadrangle:{},rotisserie:{},sanatorium:{},suzerainty:{},tenderloin:{},triclinium:{},wellspring:{},wheelhouse:{},condominium:{},conventicle:{},crematorium:{},crenelation:{},demarcation:{},maisonnette:{},observatory:{},reformatory:{},superstrate:{},tobacconist:{},trusteeship:{},wainscoting:{},amphitheater:{},amphitheatre:{},chapterhouse:{},clotheshorse:{},delicatessen:{},fountainhead:{},haberdashery:{},municipality:{},packinghouse:{},patriarchate:{},retrenchment:{},substructure:{},superstratum:{},surroundings:{},wainscotting:{},juxtaposition:{},infrastructure:{},dec:{},inn:{},loo:{},pub:{},burg:{},cafe:{},deli:{},dorm:{},hank:{},iglu:{},kirk:{},lair:{},lawn:{},mart:{},nave:{},oast:{},rink:{},souk:{},tine:{},tipi:{},veld:{},ways:{},wold:{},yurt:{},apsis:{},burgh:{},condo:{},cubby:{},cuddy:{},dacha:{},duchy:{},duomo:{},eaves:{},flies:{},gable:{},glade:{},gulag:{},harem:{},hogan:{},igloo:{},lanai:{},layby:{},mecca:{},midst:{},motel:{},oriel:{},parts:{},patio:{},polls:{},qibla:{},roads:{},rooms:{},sauna:{},skein:{},socle:{},soddy:{},sodom:{},spire:{},stoep:{},stupa:{},tenon:{},tepee:{},tupek:{},tupik:{},veldt:{},weald:{},abatis:{},abbacy:{},alcove:{},apiary:{},arbour:{},aviary:{},bedsit:{},bethel:{},bodega:{},bounds:{},bowels:{},cabana:{},calkin:{},campus:{},carrel:{},casbah:{},casern:{},chalet:{},depths:{},dolmen:{},donjon:{},dormer:{},durbar:{},eatery:{},escarp:{},fipple:{},flange:{},flyway:{},friary:{},furket:{},gantry:{},garret:{},hangar:{},hareem:{},hayrig:{},imaret:{},isobar:{},isohel:{},isolex:{},kasbah:{},laager:{},locale:{},loggia:{},marina:{},masjid:{},meadow:{},medina:{},menhir:{},merlon:{},midair:{},morgue:{},mosque:{},mudhif:{},musjid:{},pagoda:{},paling:{},pantry:{},parvis:{},pelmet:{},piazza:{},pigsty:{},plinth:{},priory:{},pueblo:{},radome:{},setoff:{},skybox:{},skyway:{},stalls:{},storey:{},suburb:{},tenter:{},upside:{},volary:{},wigwam:{},wikiup:{},winery:{},abattis:{},airdock:{},airlock:{},alcazar:{},antapex:{},apadana:{},apojove:{},apolune:{},athanor:{},barroom:{},bascule:{},bedside:{},beeline:{},borstal:{},boudoir:{},brewery:{},brewpub:{},brothel:{},campong:{},cannery:{},capitol:{},carport:{},carrell:{},chancel:{},chateau:{},citadel:{},coaming:{},corncob:{},cottage:{},cowbarn:{},cowshed:{},cowtown:{},crinion:{},dinette:{},diocese:{},earshot:{},edifice:{},enclave:{},exurbia:{},eyeshot:{},fantail:{},feedlot:{},firebox:{},screw:{},share:{},sheet:{},slice:{},slide:{},spill:{},stage:{},stake:{},tread:{},paddle:{},weight:{},canvass:{},compact:{},undercut:{},representation:{},fin:{},gag:{},jet:{},tug:{},bark:{},bunk:{},drum:{},mask:{},pipe:{},reel:{},scan:{},blank:{},drill:{},plumb:{},plume:{},shank:{},sling:{},spray:{},pickup:{},saddle:{},trench:{},capsule:{},security:{},sacrifice:{},technical:{},can:{},jar:{},map:{},ply:{},rib:{},rim:{},web:{},bell:{},buck:{},claw:{},comb:{},copy:{},crib:{},dish:{},fake:{},foil:{},grab:{},kite:{},ramp:{},rent:{},slot:{},spit:{},tank:{},bosom:{},cable:{},charm:{},drain:{},grave:{},price:{},skirt:{},stool:{},strap:{},stump:{},trail:{},access:{},cannon:{},fiddle:{},formal:{},insert:{},launch:{},purple:{},reward:{},strand:{},tackle:{},display:{},floater:{},incline:{},limited:{},portion:{},torpedo:{},overcast:{},puncture:{},broadside:{},duplicate:{},submarine:{},surcharge:{},production:{},interchange:{},bus:{},due:{},gap:{},jaw:{},lag:{},nut:{},tin:{},win:{},arch:{},bail:{},cell:{},dope:{},fell:{},film:{},lace:{},lash:{},mail:{},pale:{},purl:{},rate:{},skid:{},sole:{},spar:{},tuck:{},vamp:{},vent:{},vest:{},brake:{},brass:{},chuck:{},cramp:{},crest:{},drape:{},elbow:{},habit:{},lease:{},lower:{},prize:{},roach:{},royal:{},scrap:{},slate:{},snare:{},snuff:{},total:{},trump:{},beaver:{},canvas:{},future:{},handle:{},header:{},jacket:{},motley:{},muzzle:{},quiver:{},rocket:{},roller:{},staple:{},wrench:{},compass:{},element:{},exhaust:{},frontal:{},thunder:{},transit:{},upstage:{},traverse:{},accession:{},allowance:{},guarantee:{},promenade:{},shipwreck:{},attachment:{},protection:{},perpendicular:{},aid:{},gig:{},gin:{},nap:{},oil:{},ram:{},bead:{},bulb:{},curb:{},dart:{},daub:{},dial:{},dose:{},exit:{},fuse:{},goad:{},item:{},knit:{},plan:{},rein:{},swag:{},veil:{},alarm:{},chart:{},cinch:{},clasp:{},eagle:{},entry:{},fluff:{},gouge:{},lance:{},meter:{},miter:{},pouch:{},probe:{},punch:{},purse:{},sable:{},scuff:{},shear:{},stern:{},taper:{},thumb:{},wharf:{},whisk:{},barrel:{},beetle:{},bronze:{},burden:{},congee:{},fleece:{},glossy:{},halter:{},limber:{},margin:{},mobile:{},needle:{},remote:{},shroud:{},sketch:{},splice:{},stripe:{},toggle:{},trough:{},volume:{},ballast:{},binding:{},blanket:{},costume:{},crackle:{},crystal:{},diamond:{},fitting:{},graphic:{},harness:{},premium:{},product:{},pyramid:{},sandbag:{},squelch:{},trammel:{},uniform:{},venture:{},warrant:{},wildcat:{},working:{},assembly:{},charcoal:{},discount:{},envelope:{},imperial:{},ligature:{},original:{},specific:{},treasure:{},vertical:{},deduction:{},distemper:{},inventory:{},objective:{},reversion:{},whitewash:{},supplement:{},contrivance:{},convertible:{},inspiration:{},intersection:{},counterbalance:{},bet:{},gel:{},gut:{},jag:{},jig:{},pan:{},pry:{},tab:{},tax:{},zip:{},bait:{},barb:{},bomb:{},cone:{},cuff:{},dado:{},disk:{},gear:{},gore:{},grid:{},harp:{},loom:{},main:{},pant:{},pike:{},prod:{},reef:{},ruff:{},sham:{},tare:{},tidy:{},tire:{},toll:{},award:{},basic:{},basin:{},baton:{},birch:{},braid:{},broom:{},clack:{},cloak:{},clout:{},crock:{},fagot:{},ferry:{},filet:{},forte:{},found:{},frail:{},jolly:{},motor:{},pedal:{},potty:{},radio:{},rivet:{},scarf:{},shore:{},shunt:{},sieve:{},splat:{},splay:{},stave:{},steal:{},steel:{},thong:{},tithe:{},torch:{},trunk:{},twine:{},upper:{},valve:{},weave:{},bridle:{},buckle:{},buffet:{},carpet:{},cotton:{},custom:{},devise:{},enamel:{},entail:{},furrow:{},girdle:{},hobble:{},mangle:{},mosaic:{},motive:{},pallet:{},pencil:{},pinion:{},powder:{},radial:{},rattle:{},rebate:{},rumble:{},shield:{},shimmy:{},shovel:{},sledge:{},sluice:{},tablet:{},throne:{},timber:{},tinsel:{},uplift:{},benefit:{},bombard:{},bootleg:{},console:{},default:{},forfeit:{},freight:{},gantlet:{},generic:{},grapple:{},journal:{},loading:{},molding:{},overlap:{},pigment:{},plastic:{},salvage:{},scooter:{},scuffle:{},spindle:{},steamer:{},stopper:{},upright:{},carriage:{},catapult:{},facility:{},laminate:{},medicine:{},offstage:{},overload:{},plastron:{},railroad:{},retrofit:{},strickle:{},throttle:{},whipping:{},wireless:{},automatic:{},blackjack:{},blackwash:{},foliation:{},interlock:{},roughcast:{},threshold:{},antiseptic:{},camouflage:{},incidental:{},intangible:{},preventive:{},reversible:{},watercolor:{},maintenance:{},watercolour:{},differential:{},prescription:{},preventative:{},prophylactic:{},reproduction:{},transcription:{},transportation:{},fob:{},guy:{},hem:{},jug:{},kit:{},saw:{},cane:{},cart:{},clam:{},coif:{},cosy:{},cozy:{},disc:{},felt:{},gash:{},hone:{},hose:{},keel:{},loot:{},luff:{},lure:{},mast:{},mend:{},mine:{},muff:{},nuke:{},plow:{},robe:{},ruby:{},snip:{},soap:{},spud:{},swab:{},tile:{},till:{},tram:{},vane:{},wand:{},weed:{},weld:{},welt:{},audio:{},audit:{},baste:{},bilge:{},brail:{},bugle:{},canal:{},chest:{},chock:{},conge:{},couch:{},crape:{},crepe:{},crook:{},flute:{},frill:{},frock:{},fusee:{},hoist:{},inset:{},kitty:{},leash:{},liner:{},mixer:{},noose:{},novel:{},pearl:{},piano:{},plait:{},quill:{},reset:{},roost:{},saber:{},sabre:{},scull:{},spear:{},squab:{},stilt:{},sulky:{},video:{},vomit:{},wagon:{},aerial:{},armory:{},baffle:{},banner:{},batten:{},binder:{},bodkin:{},bypass:{},canopy:{},chisel:{},clench:{},dollar:{},dredge:{},drogue:{},duster:{},engine:{},excise:{},facing:{},funnel:{},garner:{},hamper:{},joggle:{},kettle:{},lining:{},livery:{},lumber:{},marble:{},mortar:{},mousse:{},nickel:{},ocular:{},payoff:{},pestle:{},piping:{},pommel:{},profit:{},puzzle:{},ransom:{},ration:{},rental:{},ribbon:{},rotary:{},runway:{},saucer:{},seesaw:{},siphon:{},suture:{},tattoo:{},thatch:{},throat:{},tunnel:{},turtle:{},wealth:{},acrylic:{},armoury:{},balloon:{},bargain:{},beehive:{},blinker:{},bolster:{},caisson:{},casting:{},ceiling:{},chariot:{},chopper:{},clarion:{},clinker:{},clipper:{},cowhide:{},earnest:{},elastic:{},expense:{},festoon:{},fortune:{},garnish:{},gravure:{},grinder:{},killing:{},linkage:{},novelty:{},overall:{},overlay:{},pallium:{},perfume:{},pillory:{},pointer:{},ringlet:{},rosette:{},segment:{},shuttle:{},staging:{},trailer:{},trumpet:{},unction:{},barbecue:{},barbeque:{},disguise:{},electric:{},elevated:{},fraction:{},gauntlet:{},gossamer:{},heritage:{},homespun:{},ironclad:{},lifeline:{},lighting:{},mackinaw:{},moulding:{},pinpoint:{},pinwheel:{},poundage:{},sanguine:{},sapphire:{},scribble:{},triangle:{},underlay:{},upstairs:{},virginal:{},admission:{},amphibian:{},backstage:{},capillary:{},cartridge:{},cartwheel:{},cathartic:{},condenser:{},damascene:{},depiction:{},diaphragm:{},medallion:{},overdrive:{},pacemaker:{},reservoir:{},screening:{},sectional:{},solitaire:{},spotlight:{},undercoat:{},assessment:{},bottleneck:{},equatorial:{},overburden:{},pigeonhole:{},pocketbook:{},pontifical:{},refractory:{},reparation:{},roundabout:{},simulation:{},waterproof:{},accelerator:{},certificate:{},inheritance:{},installment:{},restorative:{},ventilation:{},modification:{},subscription:{},hospitalization:{},instrumentation:{},ax:{},axe:{},bib:{},bin:{},bur:{},cot:{},fee:{},fur:{},jib:{},lid:{},six:{},ten:{},tub:{},two:{},bath:{},bike:{},cash:{},coke:{},cope:{},cowl:{},cusp:{},darn:{},debt:{},dice:{},dory:{},duct:{},fore:{},four:{},gaff:{},gage:{},gong:{},helm:{},hemp:{},icon:{},iris:{},junk:{},kern:{},loan:{},maul:{},mink:{},pane:{},pier:{},quid:{},reed:{},rook:{},scum:{},semi:{},sump:{},swob:{},taxi:{},vice:{},ware:{},wool:{},yarn:{},yawl:{},annex:{},atlas:{},barge:{},bevel:{},chaff:{},chute:{},clamp:{},crane:{},crate:{},cubeb:{},dandy:{},dicky:{},dinky:{},dolly:{},dower:{},eight:{},fifty:{},flail:{},floss:{},folio:{},fuzee:{},genre:{},girth:{},gourd:{},grape:{},hinge:{},hobby:{},inlay:{},japan:{},ladle:{},latch:{},linen:{},means:{},mitre:{},motif:{},mulct:{},pique:{},quilt:{},quirk:{},quota:{},rifle:{},rotor:{},setup:{},seven:{},shred:{},skate:{},spade:{},spool:{},spout:{},strut:{},three:{},toner:{},trawl:{},truck:{},twill:{},virtu:{},alpaca:{},anklet:{},argyle:{},argyll:{},arnica:{},balsam:{},bender:{},birdie:{},bishop:{},blower:{},blowup:{},bolero:{},bonnet:{},bounty:{},budget:{},bullet:{},cachet:{},carbon:{},casket:{},castor:{},claxon:{},cobble:{},cobweb:{},collet:{},crenel:{},cutoff:{},cutout:{},damask:{},damper:{},dibble:{},dickey:{},dipper:{},domino:{},douche:{},dragee:{},equity:{},eyelet:{},fetish:{},foible:{},fresco:{},gaiter:{},gibbet:{},gusset:{},heckle:{},hooter:{},horror:{},hunter:{},intake:{},jigger:{},lacing:{},lappet:{},makeup:{},making:{},mallet:{},marker:{},patina:{},paving:{},platen:{},plough:{},poleax:{},portal:{},primer:{},rabbet:{},rattan:{},refill:{},retort:{},revere:{},screed:{},sheath:{},sinker:{},socket:{},splint:{},stereo:{},syphon:{},tamper:{},tandem:{},tarmac:{},tenure:{},ticker:{},trepan:{},twenty:{},velvet:{},veneer:{},vessel:{},vicuna:{},backing:{},bandage:{},bobsled:{},carving:{},central:{},chamfer:{},chequer:{},cistern:{},cleaner:{},cleanup:{},coinage:{},crochet:{},cruiser:{},curtain:{},dilator:{},distaff:{},emerald:{},etching:{},flannel:{},flounce:{},footing:{},gangway:{},garbage:{},garland:{},gauffer:{},gelatin:{},grizzle:{},hanging:{},haywire:{},lamella:{},laniard:{},lanyard:{},lashing:{},lockage:{},lounger:{},manakin:{},masking:{},meshing:{},mileage:{},mintage:{},mortice:{},mortise:{},movable:{},muffler:{},palette:{},pendant:{},pendent:{},pennant:{},pillbox:{},poleaxe:{},portage:{},pottery:{},priming:{},quarrel:{},readout:{},retread:{},roundel:{},rubbing:{},scupper:{},scuttle:{},serpent:{},shampoo:{},shellac:{},shutter:{},snaffle:{},snorkel:{},spangle:{},spouter:{},stabile:{},stinker:{},tankage:{},toehold:{},tracing:{},treadle:{},trefoil:{},truckle:{},trundle:{},vesture:{},webbing:{},whipsaw:{},wrapper:{},additive:{},adjuvant:{},aperture:{},aquatint:{},backdoor:{},basilisk:{},blowback:{},bludgeon:{},breakage:{},causeway:{},checkout:{},clincher:{},compress:{},corduroy:{},coupling:{},crossbar:{},currency:{},detector:{},dividend:{},dogtooth:{},downcast:{},followup:{},frontage:{},giveaway:{},goodwill:{},hardware:{},headgear:{},headshot:{},hypnotic:{},ignition:{},inhalant:{},lipstick:{},masthead:{},meniscus:{},metallic:{},modeling:{},nautilus:{},neckband:{},nightcap:{},ornament:{},outboard:{},partizan:{},pavement:{},pectoral:{},planking:{},plumbing:{},portable:{},pressing:{},radiator:{},remittal:{},residual:{},resource:{},roulette:{},scaffold:{},scapular:{},scissors:{plural:"scissors"},scrabble:{},springer:{},sunburst:{},tapestry:{},taxation:{},thrasher:{},tomahawk:{},totality:{},tympanum:{},valuable:{},vignette:{},wardrobe:{},widening:{},admixture:{},antiquity:{},aquaplane:{},bagatelle:{},bastinado:{},blindfold:{},blueprint:{},boomerang:{},carpetbag:{},crinoline:{},depressor:{},detergent:{},doodlebug:{},downstage:{},emergency:{},endowment:{},equalizer:{},exemption:{},extortion:{},extractor:{},facsimile:{},freewheel:{},gabardine:{},grotesque:{},hemstitch:{},horseshoe:{},invention:{},jackknife:{},microwave:{},millstone:{},miniature:{},modernism:{},nosepiece:{},ownership:{},packaging:{},pargeting:{},patchwork:{},pinstripe:{},polyester:{},potpourri:{},recording:{},refresher:{},semaphore:{},semblance:{},shielding:{},sideboard:{},skyrocket:{},slapstick:{},soporific:{},spectacle:{},starboard:{},telephone:{},telescope:{},treadmill:{},turntable:{},verdigris:{},videotape:{},whirligig:{},allocation:{},ambulatory:{},anesthetic:{},assistance:{},astringent:{},automation:{},cantilever:{},chinchilla:{},concertina:{},constraint:{},deductible:{},depilatory:{},disposable:{},elongation:{},escutcheon:{},featherbed:{},foreground:{},forfeiture:{},guillotine:{},hammerhead:{},hydroplane:{},innovation:{},intoxicant:{},knockabout:{},lithograph:{},monochrome:{},nonpayment:{},nutcracker:{},pargetting:{},peripheral:{},polychrome:{},redemption:{},stabilizer:{},stenograph:{},subvention:{},sustenance:{},technology:{},television:{},waterspout:{},anaesthetic:{},anamorphism:{},concealment:{},containment:{},copperplate:{},cornerstone:{},counterfeit:{},countersink:{},cryptograph:{},delineation:{},delinquency:{},encumbrance:{},fingerboard:{},fluorescent:{},incumbrance:{},perforation:{},pyrotechnic:{},retribution:{},subsistence:{},tensiometer:{},transporter:{},undercharge:{},withholding:{},dispensation:{},electrolytic:{},encrustation:{},inclinometer:{},incrustation:{},installation:{},intermixture:{},photogravure:{},straightaway:{},transparency:{},appropriation:{},embellishment:{},improvisation:{},merchandising:{},mystification:{},quadruplicate:{},semiautomatic:{},pharmaceutical:{},superannuation:{},aba:{},boa:{},dag:{},fax:{},gad:{},keg:{},nib:{},nog:{},pix:{},pyx:{},rep:{},ski:{},taw:{},urn:{},ante:{},arms:{},bale:{},berm:{},bier:{},bitt:{},bola:{},bolo:{},brad:{},cape:{},cask:{},cent:{},coax:{},coca:{},cosh:{},dime:{},dole:{},doll:{},garb:{},gilt:{},gyro:{},hasp:{},hypo:{},ikon:{},juju:{},lane:{},lint:{},luge:{},lute:{},maxi:{},maze:{},mini:{},mitt:{},mule:{},pail:{},perk:{},plat:{},pork:{},pouf:{},rung:{},scow:{},silk:{},sill:{},skep:{},sled:{},tamp:{},tapa:{},topi:{},trey:{},vape:{},wale:{},wick:{},adobe:{},aegis:{},aglet:{},album:{},alley:{},anode:{},anvil:{},arrow:{},auger:{},batik:{},bogie:{},bolus:{},bongo:{},borer:{},bribe:{},bulla:{},caddy:{},canoe:{},chime:{},coign:{},debit:{},denim:{},depot:{},diary:{},diode:{},drier:{},flask:{},flume:{},fount:{},frier:{},fryer:{},gauze:{},globe:{},golem:{},hijab:{},inlet:{},jimmy:{},jorum:{},kayak:{},khaki:{},lasso:{},latex:{},lisle:{},lorry:{},lucre:{},manta:{},mimeo:{},mizen:{},moire:{},mulch:{},newel:{},nylon:{},penny:{},piste:{},plush:{},poker:{},prism:{},pyxis:{},ranch:{},razor:{},relic:{},rouge:{},ruler:{},sabot:{},scape:{},sedan:{},seine:{},servo:{},shelf:{plural:"shelves"},slops:{},spoke:{},sprig:{},stele:{},steps:{},stoup:{},stove:{},strop:{},suede:{},swage:{},tammy:{},tanka:{},tappa:{},teddy:{},terms:{},toque:{},torus:{},towel:{},tunic:{},tweed:{},usury:{},verso:{},vizor:{},waist:{},winch:{},withe:{},xerox:{},yacht:{},abacus:{},afghan:{},aiglet:{},alidad:{},amends:{},arctic:{},artery:{},avenue:{},banger:{},bangle:{},banian:{},banyan:{},bauble:{},beaker:{},bicorn:{},blazon:{},boiler:{},bracer:{},broach:{},bumper:{},burner:{},buzzer:{},caftan:{},calash:{},camera:{},camion:{},camlet:{},capote:{},carton:{},casein:{},catgut:{},chaise:{},cheque:{},chiton:{},chukka:{},cither:{},cloaca:{},cloche:{},coffer:{},coffin:{},coigne:{},colors:{},corbel:{},corker:{},corset:{},crayon:{},crutch:{},dagger:{},daybed:{},detour:{},diaper:{},dickie:{},dipole:{},dirndl:{},discus:{},dogleg:{},dolman:{},dosage:{},duffel:{},duffle:{},eyecup:{},fabric:{},facade:{},falsie:{},fanjet:{},fascia:{},fetter:{},firkin:{},fizgig:{},floppy:{},frieze:{},garter:{},gimlet:{},goblet:{},guimpe:{},guinea:{},gunnel:{},harrow:{},helmet:{},hookup:{},hotbed:{},impost:{},instep:{},iodine:{},island:{},jersey:{},jetsam:{},jigsaw:{},juicer:{},kaftan:{},kibble:{},kirtle:{},lateen:{},laurel:{},ledger:{},linage:{},lunula:{},magnet:{},markup:{},miotic:{},mizzen:{},myotic:{},nipple:{},nozzle:{},onager:{},pajama:{},pavage:{},pellet:{},pennon:{},peplum:{},peyote:{},pincer:{},pipage:{},pomade:{},pompon:{},popper:{},pyjama:{},ragbag:{},reamer:{},remake:{},reseau:{},rudder:{},russet:{},scythe:{},settee:{},shades:{},shorts:{},siding:{},sleeve:{},sleigh:{},spinet:{},spline:{},stoker:{},stylus:{},sublet:{},subway:{},surtax:{},swathe:{},swivel:{},syrinx:{},taenia:{},talcum:{},tariff:{},teacup:{},teeter:{},tenner:{},tether:{},thwart:{},tocsin:{},trophy:{},trowel:{},turban:{},viewer:{},waggon:{},wampum:{},wherry:{},wicker:{},willow:{},wiring:{},woolen:{},yarder:{},zipper:{},acetate:{},aerosol:{},airline:{},alidade:{},ampulla:{},android:{},aneroid:{},annulet:{},anodyne:{},apanage:{},apparel:{},archive:{},armband:{},armilla:{},arrears:{},banding:{},basting:{},batting:{},bayonet:{},beading:{},bedding:{},bladder:{},blocker:{},blusher:{},bollock:{},bouquet:{},bracing:{},brocade:{},broiler:{},bullion:{},bunting:{},burthen:{},bushing:{},caleche:{},caliper:{},cathode:{},catwalk:{},cautery:{},charger:{},charnel:{},chemise:{},chevron:{},chimney:{},chlamys:{},circlet:{},colours:{},commode:{},cooling:{},cordage:{},coronet:{},corsair:{},crampon:{},cutaway:{},daybook:{},deadeye:{},decoder:{},diagram:{},doeskin:{},dogsled:{},doormat:{},dragger:{},dragnet:{},drapery:{},drawers:{},dustpan:{},escheat:{},eyehole:{},fixings:{},flatbed:{},flattop:{},flipper:{},foghorn:{},foliage:{},footage:{},foretop:{},forgery:{},frigate:{},funding:{},furring:{},fustian:{},garment:{},garotte:{},garrote:{},gouache:{},grapnel:{},griddle:{},hackney:{},hammock:{},harpoon:{},hassock:{},hatchel:{},hatchet:{},heating:{},hedging:{},hibachi:{},hobnail:{},holding:{},holster:{},hydrant:{},iceboat:{},igniter:{},impasse:{},ironing:{},jackpot:{},javelin:{},joinery:{},fibre:{},hazel:{},lemon:{},peach:{},plank:{},raven:{},snipe:{},spine:{},steer:{},stint:{},stunt:{},bleach:{},breath:{},callus:{},cherry:{},dimple:{},entire:{},ferret:{},filler:{},hybrid:{},jackal:{},marrow:{},orange:{},radish:{},spruce:{},stifle:{},winkle:{},endemic:{},vanilla:{},beefwood:{},calabash:{},concrete:{},emission:{},kingfish:{},solution:{},volatile:{},partridge:{},repellant:{},derivative:{},thickening:{},ash:{},bud:{},cob:{},hen:{},mew:{},mud:{},mum:{},paw:{},roe:{},sow:{},soy:{},wax:{},yam:{},beef:{},burl:{},calf:{plural:"calves"},chat:{},fowl:{},fuzz:{},gill:{},grub:{},hock:{},hoof:{},lobe:{},rose:{},scup:{},soup:{},swan:{},tint:{},tuna:{},tusk:{},alloy:{},briar:{},clove:{},coney:{},ebony:{},ether:{},filth:{},flesh:{},gumbo:{},homer:{},jelly:{},matte:{},mocha:{},reeve:{},wrack:{},annual:{},canine:{},carrot:{},cereal:{},cockle:{},feeler:{},fennel:{},flimsy:{},gargle:{},gravel:{},grouse:{},indigo:{},mammee:{},medlar:{},monkey:{},nebula:{},oyster:{},salmon:{plural:"salmon"},shiner:{},shrimp:{},sprout:{},stigma:{},blossom:{},blubber:{},buffalo:{},cabbage:{},calamus:{},catfish:{},caudate:{},caustic:{},chelate:{},chicory:{},ciliate:{},essence:{},griffon:{},hemlock:{},hydrate:{},incense:{},lighter:{},remount:{},sardine:{},stinger:{},vitriol:{},ambrosia:{},billfish:{},blackcap:{},crawfish:{},crayfish:{},earthnut:{},escallop:{},filament:{},flounder:{},infusion:{},ironwood:{},quandong:{},relative:{},ringtail:{},screamer:{},sycamore:{},alabaster:{},algarroba:{},broadbill:{},composite:{},fulminate:{},perennial:{},tangerine:{},bladderpod:{},granadilla:{},heartsease:{},periwinkle:{},tumbleweed:{},agglomerate:{},bittersweet:{},intermediate:{},dye:{},elk:{},fig:{},haw:{},oka:{},pea:{},pee:{},rye:{},sac:{},tar:{},yak:{},carp:{},clay:{},coma:{},cony:{},crud:{},cusk:{},dung:{},fang:{},foam:{},germ:{},glue:{},hare:{},hind:{},husk:{},kiwi:{},lake:{},mung:{},okra:{},pine:{},pith:{},puke:{},rice:{},roan:{},sloe:{},taro:{},teal:{},titi:{},twig:{},amber:{},anime:{},berry:{},boxer:{},carob:{},cedar:{},chine:{},guava:{},hound:{},husky:{},kauri:{},lemma:{},monad:{},ocher:{},ochre:{},onion:{},ounce:{},pansy:{},pecan:{},pewit:{},prawn:{},quail:{},shuck:{},sloth:{},slush:{},smelt:{},snail:{},snout:{},spawn:{},swift:{},tabby:{},thorn:{},topaz:{},umber:{},virus:{},wafer:{},wahoo:{},wheat:{},whelk:{},badger:{},bonito:{},broody:{},chrome:{},cirrus:{},cocoon:{},cowpea:{},cuckoo:{},elixir:{},grease:{},grubby:{},howler:{},jabiru:{},jargon:{},jujube:{},kernel:{},leaven:{},lentil:{},liquor:{},locust:{},manioc:{},mastic:{},mentum:{},mildew:{},mimosa:{},mullet:{},muscat:{},mutant:{},nectar:{},nettle:{},nodule:{},pawpaw:{},pecker:{},plasma:{},ruddle:{},sallow:{},shoddy:{},squill:{},starch:{},stroma:{},stucco:{},sunray:{},thorax:{},tissue:{},violet:{},walnut:{},warble:{},amyloid:{},antenna:{plural:"antennae"},apricot:{},aquatic:{},asphalt:{},avocado:{},beebalm:{},bobtail:{},builder:{},bulldog:{},caltrop:{},cayenne:{},chinook:{},coconut:{},cricket:{},cudweed:{},currant:{},cuticle:{},dasheen:{},gallfly:{},juniper:{},lacquer:{},leaflet:{},lettuce:{},macadam:{},mordant:{},mustard:{},packing:{},panther:{},papilla:{},papyrus:{},parsnip:{},pigweed:{},pollard:{},redfish:{},redwood:{},rubbish:{},saffron:{},salsify:{},shallot:{},slating:{},solvate:{},solvent:{},soybean:{},sunfish:{},truffle:{},whisker:{},abrasive:{},allspice:{},angelica:{},biennial:{},bilberry:{},bluebell:{},chickpea:{},cinnabar:{},cinnamon:{},congener:{},creosote:{},demerara:{},duckbill:{},firebird:{},fleabane:{},humanity:{},lavender:{},mahogany:{},monkfish:{},paraffin:{},peduncle:{},peroxide:{},plantain:{},rockfish:{},sandarac:{},sandwort:{},scammony:{},shamrock:{},skipjack:{},skullcap:{},snowbird:{},suckling:{},tubercle:{},alligator:{},angelfish:{},arachnoid:{},arrowroot:{},bearberry:{},blackfish:{},buckthorn:{},capitulum:{},carbonate:{},carnation:{},celluloid:{},chemistry:{},coriander:{},corrosive:{},crabapple:{},devilfish:{},emanation:{},groundnut:{},horseback:{},horsemint:{},injection:{},matchwood:{},mistletoe:{},offspring:{plural:"offspring"},pyrethrum:{},raspberry:{},razorback:{},satinwood:{},sheepskin:{},tomatillo:{},waxflower:{},whitefish:{},ammunition:{},bitterwood:{},blackberry:{},butterfish:{},chinquapin:{},coneflower:{},flagellate:{},flamboyant:{},fledgeling:{},insulation:{},peppermint:{},receptacle:{},strawberry:{},watercress:{},chittamwood:{},everlasting:{},fomentation:{},helleborine:{},honeysuckle:{},horseradish:{},huckleberry:{},salmonberry:{},shittimwood:{},strawflower:{},ultramarine:{},whitethroat:{},wintergreen:{},helmetflower:{},impregnation:{},quintessence:{},sternutatory:{},thimbleberry:{},contamination:{},extravasation:{},leatherjacket:{},pulverisation:{},pulverization:{},tortoiseshell:{},ti:{},ala:{},asp:{},eel:{},elm:{},fir:{},gar:{},neb:{},nit:{},oak:{},oat:{},sol:{},tom:{},yew:{},agar:{},akee:{},anil:{},atom:{},balm:{},bast:{},beet:{},boar:{},bole:{},bran:{},brit:{},cere:{},cero:{},chow:{},coho:{},dahl:{},dill:{},flax:{},foal:{},glop:{},gnat:{},hake:{},herb:{},hoar:{},homo:{},kaki:{},kino:{},leek:{},loin:{},mite:{},musk:{},parr:{},pear:{},poon:{},puka:{},rhea:{},saki:{},seta:{},shad:{},silt:{},slag:{},soda:{},soma:{},soot:{},soya:{},talc:{},teak:{},tufa:{},unai:{},unau:{},whey:{},woad:{},wort:{},yolk:{},zinc:{},abaca:{},alder:{},alula:{},amino:{},anise:{},apple:{},aroid:{},aster:{},balsa:{},basil:{},beech:{},betel:{},biddy:{},billy:{},biped:{},booby:{},britt:{},bruin:{},cairn:{},capon:{},caulk:{},chard:{},chess:{},chick:{},cisco:{},cohoe:{},comma:{},croup:{},cumin:{},dross:{},elver:{},epoxy:{},ergot:{},falls:{},flint:{},fossa:{},genip:{},grout:{},grume:{},henna:{},hilum:{},humus:{},hydra:{},icaco:{},ilama:{},imago:{},ivory:{},kapok:{},kenaf:{},lapin:{},larch:{},lilac:{},lotus:{},luffa:{},mahoe:{},maize:{},mamey:{},mango:{},manna:{},melon:{},moong:{},naiad:{},nanny:{},nopal:{},orris:{},osier:{},otter:{},ovary:{},ovule:{},pacer:{},panda:{},papaw:{},piggy:{},pilus:{},pinna:{},pixie:{},polyp:{},potto:{},putty:{},quira:{},robin:{},roble:{},rosin:{},scrod:{},sepia:{},sisal:{},slime:{},sorus:{},sprat:{},squid:{},stoma:{},sumac:{},swede:{},theca:{},thyme:{},trout:{plural:"trout"},tunny:{},vapor:{},velum:{},venom:{},vinyl:{},whelp:{},yeast:{},acetum:{},acinus:{},acumen:{},adduct:{},agaric:{},alkali:{},almond:{},anuran:{},archil:{},argent:{},balata:{},bamboo:{},bantam:{},barley:{},basset:{},beluga:{},bennet:{},bluing:{},bonduc:{},borage:{},capsid:{},cashew:{},cassia:{},caudex:{},celery:{},chives:{},cilium:{},citron:{},cobnut:{},cocker:{},cosmos:{},cowage:{},croton:{},cupule:{},cushaw:{},darter:{},dentin:{},dobson:{},dodder:{},donkey:{},durian:{},embryo:{},endive:{},ermine:{},falcon:{},feijoa:{},feline:{},fisher:{},fucoid:{},gadfly:{},garlic:{},glycol:{},hackle:{},haunch:{},herpes:{},hyssop:{},kaffir:{},kitten:{},lichee:{},limpet:{},linden:{},linnet:{},litchi:{},loofah:{},loquat:{},lovage:{},lupine:{},madder:{},maguey:{},manure:{},marang:{},mescal:{},mocker:{},mombin:{},mucoid:{},mudcat:{},munggo:{},murine:{},mussel:{},myrtle:{},nipper:{},nutmeg:{},obeche:{},orchil:{},orchis:{},oriole:{},padauk:{},paigle:{},papaya:{},parget:{},pasang:{},peewee:{},peewit:{},phenol:{},plaice:{},pomelo:{},poplar:{},possum:{},potato:{},pothos:{},pouter:{},puffer:{},pullet:{},pumice:{},pyrene:{},quahog:{},quartz:{},quince:{},rachis:{},raffia:{},ratter:{},relict:{},sabicu:{},saline:{},sapote:{},saurel:{},schrod:{},senega:{},septum:{},setter:{},sierra:{},simian:{},sludge:{},solder:{},spirea:{},stevia:{},sulfur:{},thrift:{},toetoe:{},tomato:{},tophus:{},triton:{},tupelo:{},turbot:{},turnip:{},vapour:{},vellum:{},wapiti:{},wasabi:{},acerola:{},actinon:{},aculeus:{},adamant:{},albumen:{},alewife:{},alfalfa:{},amboyna:{},anchovy:{},anemone:{},anionic:{},annelid:{},annulus:{},antacid:{},antlion:{},arsenic:{},aurochs:{},babbitt:{},barilla:{},beeswax:{},bimetal:{},biomass:{},bloomer:{},blotter:{},bluefin:{},blueing:{},boneset:{},boxwood:{},bracken:{},brocket:{},bromide:{},buckeye:{},bugbane:{},bugloss:{},bullock:{},bulrush:{},buzzard:{},cackler:{},cacodyl:{},caliche:{},calycle:{},cambium:{},capulin:{},caraway:{},cardoon:{},catbird:{},catechu:{},celtuce:{},ceriman:{},chalaza:{},chamois:{},chervil:{},chigger:{},citrate:{},cocoyam:{},codfish:{},comfrey:{},compost:{},cowslip:{},crappie:{},crawdad:{},crinoid:{},cyanide:{},cypress:{},dabbler:{},denizen:{},diploid:{},dogfish:{},dogwood:{},echidna:{},eelpout:{},enation:{},fallout:{},ferrite:{},fetlock:{},filaria:{},filbert:{},firebug:{},firefly:{},frijole:{},fuchsia:{},gamboge:{},ginseng:{},girasol:{},glutton:{},gobbler:{},grackle:{},grampus:{},granite:{},grizzly:{},grouper:{},grunter:{},gudgeon:{},haddock:{},halibut:{},haploid:{},haricot:{},heather:{},hepatic:{},herring:{},hickory:{},hogfish:{},honesty:{},hyaline:{},ignitor:{},inducer:{},jackass:{},jewfish:{},jonquil:{},kestrel:{},kingcup:{},kumquat:{},lactate:{},langsat:{},lanolin:{},lingcod:{},lobster:{},logwood:{},mahagua:{},majagua:{},malacca:{},mammoth:{},marabou:{},marasca:{},menthol:{},mercury:{},monarch:{},moneran:{},mongrel:{},moorhen:{},morello:{},muskrat:{},nervure:{},nitrate:{},octopus:{},oldwife:{},opossum:{},oregano:{},ostrich:{},oxheart:{},parsley:{},peacock:{},pigfish:{},pimento:{},piranha:{},plumcot:{},pollack:{},pollock:{},pompano:{},popcorn:{},poultry:{},pricket:{},puccoon:{},pulasan:{},pyrogen:{},quahaug:{},quassia:{},quetzal:{},raccoon:{},ragweed:{},ragwort:{},rattler:{},redbird:{},redpoll:{},redtail:{},reducer:{},redwing:{},remover:{},residue:{},retinal:{},rhubarb:{},rosebud:{},rostrum:{},satsuma:{},saurian:{},sequoia:{},seriema:{},skylark:{},sockeye:{},soursop:{},sparrow:{},spinach:{},spiraea:{},stentor:{},steroid:{},stubble:{},sulfate:{},sulphur:{},tangelo:{},taproot:{},tarweed:{},tarwood:{},tattler:{},taurine:{},teargas:{},timothy:{},tobacco:{},topknot:{},tortrix:{},trotter:{},varmint:{},verdure:{},viceroy:{},vinegar:{},viscose:{},vulture:{},walleye:{},waratah:{},warbler:{},waxwork:{},whooper:{},wilding:{},witloof:{},wryneck:{},abradant:{},absinthe:{},acceptor:{},actinoid:{},adhesive:{},adjutant:{},ageratum:{},agueweed:{},albacore:{},amarelle:{},amethyst:{},ammoniac:{},argonaut:{},armyworm:{},auricula:{},balancer:{},baldpate:{},barnacle:{},basswood:{},bayberry:{},bearskin:{},beetroot:{},birdlime:{},blackfly:{},blacktop:{},bluebird:{},bluefish:{},boarfish:{},bocconia:{},boxberry:{},brisling:{},broccoli:{},buckskin:{},bullhead:{},bullrush:{},canistel:{},capuchin:{},carangid:{},carbonyl:{},carboxyl:{},cardamom:{},cardamon:{},carinate:{},carnauba:{},carotene:{},cashmere:{},catalyst:{},catchfly:{},celeriac:{},cetacean:{},chimaera:{},chloride:{},cilantro:{},cinchona:{},citrange:{},cockspur:{},conodont:{},costmary:{},cowberry:{},cucumber:{},deadwood:{},detritus:{},dewberry:{},dilution:{},dolomite:{},duckling:{},ectozoan:{},eelgrass:{},effluent:{},eggplant:{},emulsion:{},estragon:{},filtrate:{},fireweed:{},flathead:{},flooring:{},forelock:{},galangal:{},garbanzo:{},grayback:{},guaiacum:{},hardtack:{},harebell:{},hawkweed:{},hazelnut:{},hedgehog:{},hepatica:{},hookworm:{},hornwort:{},horsefly:{},hyacinth:{},impurity:{},iodoform:{},jalapeno:{},jamberry:{},japonica:{},keurboom:{},kindling:{},kingwood:{},kinkajou:{},kohlrabi:{},labdanum:{},lambskin:{},locoweed:{},lovebird:{},magnolia:{},mahimahi:{},mandrake:{},margarin:{},marjoram:{},medusoid:{},mephitis:{},migrator:{},molecule:{},moonfish:{},mucilage:{},mulberry:{},nestling:{},omnivore:{},ovenbird:{},pandanus:{},pickerel:{},pilchard:{},pimiento:{},pitahaya:{},placenta:{},plumbago:{},predator:{},ptomaine:{},puffball:{},pulassan:{},purebred:{},pyrectic:{},quandang:{},quickset:{},rambotan:{},rambutan:{},redberry:{},redstart:{},reedbird:{},ricebird:{},richweed:{},ringdove:{},rockrose:{},rosefish:{},rosemary:{},rosewood:{},ruminant:{},rutabaga:{},sailfish:{},salsilla:{},saltwort:{},sandfish:{},scallion:{},seahorse:{},sealskin:{},sewerage:{},shoveler:{},siderite:{},silkworm:{},sparling:{},squealer:{},squirrel:{},stearate:{},stinkpot:{},superbug:{},surffish:{},sweetsop:{},tamarind:{},tarragon:{},teaberry:{},thresher:{},throstle:{},tilefish:{},tomentum:{},toxicant:{},turmeric:{},ungulate:{},univalve:{},urochord:{},vesicant:{},warragal:{},warrigal:{},watchdog:{},waxberry:{},weakfish:{},wolffish:{},woodbine:{},woodruff:{},wormcast:{},wriggler:{},zucchini:{},absorbent:{},adsorbate:{},adsorbent:{},albatross:{},almandine:{},andromeda:{},antiknock:{},apophysis:{},archangel:{},arsenical:{},artichoke:{},asparagus:{},aubergine:{},bacteroid:{},blackbird:{},blindworm:{},bluegrass:{},bluepoint:{},broadtail:{},brooklime:{},brookweed:{},brushwood:{},buckwheat:{},bugleweed:{},buteonine:{},butternut:{},caecilian:{},calyculus:{},candlenut:{},cantaloup:{},carambola:{},carbonado:{},carbuncle:{},cardboard:{},carnivore:{},catamount:{},celandine:{},chameleon:{},chatterer:{},chelonian:{},cherimoya:{},chickweed:{},chlamydia:{},clamshell:{},clapboard:{},coachwhip:{},cochineal:{},cocklebur:{},cocozelle:{},coltsfoot:{},commensal:{},courgette:{},crackling:{},cupflower:{},cyanamide:{},digestive:{},digitalis:{},driftfish:{},ecrevisse:{},ectoplasm:{},eiderdown:{},ephemeral:{},eutherian:{},evergreen:{},excretion:{},exudation:{},fenugreek:{},firebrand:{},firestone:{},flagellum:{},frostweed:{},funiculus:{},gladiolus:{},glasswort:{},goldeneye:{},goldfinch:{},grapevine:{},grenadier:{},hackberry:{},hamadryad:{},heartleaf:{},hellebore:{},hollyhock:{},horehound:{},horsebean:{},horsehair:{},horseweed:{},hortensia:{},hydroxide:{},jackfruit:{},jacksnipe:{},jellyfish:{},juneberry:{},lancewood:{},langouste:{},leavening:{},lemonwood:{},mammalian:{},manzanita:{},maravilla:{},marihuana:{},marijuana:{},moosewood:{},muscadine:{},muskmelon:{},nakedwood:{},nectarine:{},nighthawk:{},pasturage:{},patchouli:{},patchouly:{},pelecypod:{},pellitory:{},peregrine:{},peristome:{},persimmon:{},phosphate:{},pimpernel:{},pinchbeck:{},pineapple:{},pistachio:{},polyploid:{},probiotic:{},proboscis:{},protozoan:{},pureblood:{},quadruped:{},rauwolfia:{},recycling:{},reptilian:{},reticulum:{},rockcress:{},rootstock:{},rosinweed:{},sandpaper:{},sapodilla:{},sassafras:{},sheldrake:{},shingling:{},shoveller:{},siccative:{},sicklepod:{},snakeroot:{},snowflake:{},sourdough:{},spicebush:{},spirillum:{},stainless:{},stiffener:{},strangler:{},strawworm:{},sugarcane:{},swordfish:{},tamarindo:{},tarantula:{},topminnow:{},tulipwood:{},turquoise:{},twayblade:{},twinberry:{},wallpaper:{},whitebait:{},whiteface:{},wineberry:{},wolverine:{},workhorse:{},adulterant:{},amygdaloid:{},anopheline:{},aquamarine:{},belladonna:{},bellwether:{},bitterweed:{},blacksnake:{},blackthorn:{},bluebonnet:{},bluebottle:{},bottlenose:{},brachiopod:{},brazilwood:{},breadfruit:{},butterball:{},butterweed:{},candelilla:{},cantaloupe:{},catarrhine:{},cellulosic:{},chatterbox:{},chinaberry:{},cinquefoil:{},citronwood:{},clementine:{},condensate:{},copperhead:{},coralberry:{},cornflower:{},cottonweed:{},cottonwood:{},crossbreed:{},crustacean:{},deathwatch:{},demoiselle:{},dollarfish:{},elderberry:{},exhalation:{},feathertop:{},fetterbush:{},fiddlehead:{},flycatcher:{},fritillary:{},garambulla:{},goldenbush:{},gooseberry:{},grapefruit:{},jaboticaba:{},jackrabbit:{},ketembilla:{},kitembilla:{},lemongrass:{},littleneck:{},loganberry:{},loggerhead:{},mangosteen:{},marblewood:{},marguerite:{},massasauga:{},meerschaum:{},monoclonal:{},nasturtium:{},needlefish:{},nonstarter:{},ornamental:{},pacesetter:{},parenchyma:{},pennyroyal:{},pepperwort:{},plasmodium:{},princewood:{},propellant:{},propellent:{},pufferfish:{},pyrimidine:{},quercitron:{},restharrow:{},restrainer:{},ribbonfish:{},ribbonwood:{},rudderfish:{},sapphirine:{},scorzonera:{},sidewinder:{},silverbush:{},silverfish:{},silverweed:{},spiceberry:{},sticktight:{},sugarberry:{},superoxide:{},tarmacadam:{},turpentine:{},turtledove:{},velvetleaf:{},vertebrate:{},vesicatory:{},wandflower:{},watermelon:{},windowpane:{},witchgrass:{},yellowbird:{},yellowtail:{},yellowwood:{},adulterator:{},arthrospore:{},artiodactyl:{},bactericide:{},boysenberry:{},branchiopod:{},buffalofish:{},butcherbird:{},cauliflower:{},cherrystone:{},chittimwood:{},chokecherry:{},combustible:{},conspecific:{},digitigrade:{},dolphinfish:{},flameflower:{},gillyflower:{},groundberry:{},groundcover:{},heterocycle:{},honeyflower:{},insectivore:{},leatherleaf:{},leatherwood:{},lingonberry:{},liquidambar:{},loosestrife:{},muskellunge:{},plantigrade:{},platyrrhine:{},pomegranate:{},precipitant:{},prickleback:{},quicksilver:{},recombinant:{},refrigerant:{},shellflower:{},silversides:{},sleuthhound:{},swallowwort:{},unguiculate:{},waldmeister:{},archosaurian:{},distillation:{},heterocyclic:{},honeycreeper:{},instillation:{},invertebrate:{},nonsteroidal:{},placentation:{},sarsaparilla:{},serviceberry:{},squirrelfish:{},transudation:{},weatherboard:{},whortleberry:{},yellowhammer:{},branchiopodan:{},inflorescence:{},platyrrhinian:{},semiconductor:{},transactinide:{},vitrification:{},fructification:{},aa:{},ai:{},ani:{},auk:{},awn:{},bot:{},dak:{},daw:{},dew:{},doe:{},dug:{},eft:{},ern:{},ewe:{},gib:{},gnu:{},goo:{},ivy:{},jay:{},kea:{},kob:{},lac:{},lye:{},may:{},mei:{},moa:{},oca:{},ola:{},olm:{},pia:{},pug:{},teg:{},tup:{},acyl:{},agua:{},aloe:{},amyl:{},anoa:{},apar:{},aril:{},arui:{},atar:{},axil:{},barm:{},baya:{},bine:{},boll:{},bufo:{},buna:{},calx:{},cavy:{},chub:{},cleg:{},coco:{},colt:{},coot:{},corm:{},cows:{},craw:{},culm:{},cyme:{},dace:{},dalo:{},deer:{plural:"deer"},derv:{},dhak:{},dhal:{},dika:{},diol:{},disa:{},dita:{},dogy:{},doob:{},dopa:{},enol:{},erne:{},eyas:{},fern:{},fice:{},floc:{},fuji:{},gean:{},goby:{},guan:{},guar:{},guib:{},haem:{},halm:{},hart:{},heme:{},hogg:{},hops:{},hoya:{},ibex:{},ibis:{},inga:{},jird:{},jute:{},kali:{},kelp:{},kola:{},kudu:{},lily:{},lino:{},liza:{},loam:{},loir:{},lory:{},lynx:{},mako:{},mamo:{},mara:{},marl:{},merl:{},mica:{},milo:{},miro:{},mola:{},moss:{},munj:{},mutt:{},myna:{},nagi:{},napa:{},napu:{},neem:{},neon:{},olla:{},ombu:{},onyx:{},opah:{},opal:{},orca:{},oryx:{},paca:{},peat:{},peba:{},pika:{},pome:{},puku:{},puma:{},pupa:{},ragi:{},rimu:{},rudd:{},sago:{},salp:{},sang:{},sard:{},scut:{},sial:{},sika:{},sild:{},sima:{},skua:{},smew:{},sugi:{},tatu:{},teff:{},teju:{},tern:{},tipu:{},toad:{},tody:{},tolu:{},tuff:{},tung:{},urea:{},urus:{},vole:{},wasp:{},weka:{},blast:{},dinar:{},lapse:{},lurch:{},whirl:{},travel:{},capacity:{},encounter:{},conversion:{},separation:{},age:{},nip:{},now:{},halt:{},leap:{},mile:{},peak:{},peso:{},slam:{},term:{},wake:{},faint:{},scoop:{},surge:{},third:{},trick:{},bother:{},cackle:{},motion:{},chatter:{},reversal:{},elevation:{},experience:{},dab:{},pat:{},cube:{},howl:{},over:{},peep:{},span:{},cause:{},death:{},plump:{},plunk:{},poise:{},pulse:{},shame:{},spark:{},twang:{},wound:{},cipher:{},crunch:{},damage:{},fusion:{},period:{},racket:{},repeat:{},supply:{},wallow:{},wonder:{},dribble:{},failure:{},outrage:{},sparkle:{},backfire:{},campaign:{},delivery:{},increase:{},variance:{},explosion:{},correction:{},disturbance:{},translation:{},displacement:{},transposition:{},hum:{},mug:{},buzz:{},cord:{},dawn:{},fuss:{},hint:{},hiss:{},much:{},past:{},ping:{},rout:{},seek:{},tide:{},warp:{},birth:{},blend:{},crumb:{},delay:{},rupee:{},worst:{},climax:{},deluge:{},dirham:{},recoil:{},replay:{},rhythm:{},rising:{},descent:{},grumble:{},impulse:{},respite:{},scruple:{},triumph:{},addition:{},dogfight:{},eruption:{},occasion:{},progress:{},reprieve:{},shilling:{},stampede:{},accretion:{},induction:{},appearance:{},suggestion:{},circulation:{},irradiation:{},accommodation:{},precipitation:{},in:{},ebb:{},mil:{},zap:{},gush:{},honk:{},lull:{},plop:{},rave:{},ream:{},slap:{},then:{},zoom:{},fifth:{},final:{},gleam:{},reign:{},swash:{},throb:{},thump:{},tweet:{},wreck:{},wring:{},billow:{},breach:{},ending:{},fourth:{},gurgle:{},injury:{},nibble:{},parity:{},sunset:{},billion:{},history:{},instant:{},spatter:{},blackout:{},creation:{},decision:{},downhill:{},entrance:{},rational:{},trillion:{},hereafter:{},immersion:{},intrusion:{},millenary:{},remainder:{},saltation:{},adjustment:{},antecedent:{},dedication:{},deflection:{},impairment:{},limitation:{},outpouring:{},refinement:{},scattering:{},devastation:{},elaboration:{},fundamental:{},prohibition:{},retardation:{},interference:{},transmission:{},manifestation:{},scintillation:{},mi:{},kip:{},wee:{},yaw:{},bout:{},bray:{},doom:{},harm:{},haul:{},jolt:{},none:{},ooze:{},pity:{},sigh:{},surf:{},thaw:{},tour:{},alpha:{},carom:{},chunk:{},clink:{},colon:{},deuce:{},drama:{},glint:{},going:{},shtik:{},sixth:{},spurt:{},thrum:{},tinge:{},today:{},waltz:{},worth:{},bucket:{},egress:{},fathom:{},mutter:{},patter:{},picnic:{},quaver:{},ripple:{},rustle:{},shtick:{},sizzle:{},squawk:{},stride:{},tremor:{},whoosh:{},wobble:{},absence:{},allegro:{},andante:{},deficit:{},episode:{},heaving:{},raising:{},rebirth:{},roaring:{},rupture:{},screech:{},scrunch:{},seventh:{},success:{},sunrise:{},takeoff:{},trample:{},twinkle:{},cracking:{},deletion:{},incident:{},interval:{},isometry:{},overflow:{},rattling:{},skeleton:{},splatter:{},striking:{},twilight:{},upheaval:{},advantage:{},alignment:{},deflexion:{},diffusion:{},emergence:{},inflation:{},normality:{},remission:{},resultant:{},ruination:{},shakedown:{},vibration:{},yesterday:{},allegretto:{},conception:{},concoction:{},concretion:{},disruption:{},divergence:{},graduation:{},inflection:{},initiation:{},moderation:{},sprinkling:{},approaching:{},biquadratic:{},competition:{},compression:{},contraction:{},humiliation:{},permutation:{},constriction:{},ramification:{},accompaniment:{},embarrassment:{},mortification:{},rectification:{},coo:{},eve:{},gee:{},par:{},sea:{},sec:{},tot:{},won:{},yen:{},bash:{},beep:{},ding:{},dram:{},fete:{},gait:{},inch:{},lira:{},peal:{},pint:{},purr:{},rial:{},ting:{},toot:{},whiz:{},blare:{},bleat:{},brawl:{},cease:{},digit:{},dying:{},epoch:{},gravy:{},idyll:{},knell:{},metre:{},minim:{},ninth:{},plash:{},plonk:{},quake:{},quart:{},ravel:{},salvo:{},skirl:{},snore:{},spate:{},spirt:{},swish:{},tenth:{},unity:{},whack:{},whirr:{},years:{},ascent:{},bushel:{},curfew:{},drachm:{},eighth:{},enough:{},finale:{},fizzle:{},footer:{},gobble:{},jingle:{},marvel:{},myriad:{},octave:{},ravage:{},smudge:{},spritz:{},squeak:{},squeal:{},squish:{},swerve:{},tierce:{},usance:{},waxing:{},atrophy:{},banging:{},bending:{},blowout:{},centner:{},clangor:{},debacle:{},decimal:{},eclipse:{},glitter:{},kickoff:{},midterm:{},million:{},misfire:{},modulus:{},monsoon:{},ordinal:{},outflow:{},ringing:{},shimmer:{},sinking:{},smolder:{},torrent:{},twelfth:{},backwash:{},bouncing:{},downfall:{},dripping:{},drumbeat:{},eighties:{},eternity:{},exigency:{},footstep:{},furlough:{},gleaming:{},grinding:{},hardship:{},instance:{},invasion:{},majority:{},maturity:{},nineties:{},overtime:{},overture:{},pandemic:{},pounding:{},receding:{},recovery:{},rustling:{},scraping:{},sixtieth:{},smoulder:{},spoilage:{},spraying:{},tomorrow:{},touching:{},amplitude:{},ascension:{},athletics:{},avalanche:{},billionth:{},checkmate:{},clearance:{},collision:{},commotion:{},contagion:{},departure:{},fertility:{},formality:{},gestation:{},heartbeat:{},honeymoon:{},hundredth:{},interlude:{},irruption:{},lactation:{},millionth:{},multitude:{},onslaught:{},outgrowth:{},plurality:{},probation:{},pulsation:{},shrinkage:{},sixteenth:{},spreading:{},stalemate:{},throbbing:{},whistling:{},withering:{},affliction:{},alteration:{},betterment:{},dispersion:{},enervation:{},expiration:{},foreboding:{},incubation:{},incumbency:{},inevitable:{},irrational:{},jubilation:{},levitation:{},millennium:{plural:"millennia"},procession:{},repetition:{},revolution:{},sabbatical:{},solubility:{},subsidence:{},thousandth:{},undulation:{},visitation:{},accelerando:{},catastrophe:{},celebration:{},coincidence:{},consequence:{},continuance:{},deformation:{},dislocation:{},dissipation:{},expansivity:{},fluctuation:{},gravitation:{},oscillation:{},preliminary:{},punctuation:{},sufficiency:{},acceleration:{},augmentation:{},championship:{},commencement:{},conservation:{},deceleration:{},degeneration:{},encroachment:{},interlocking:{},reflectivity:{},consolidation:{},hundredweight:{},magnetisation:{},magnetization:{},regurgitation:{},sheepshearing:{},transmutation:{},conglomeration:{},materialisation:{},optic:{},patty:{},prune:{},saute:{},scalp:{},sinus:{},swill:{},bubbly:{},burgoo:{},choler:{},claret:{},cortex:{},crotch:{},drivel:{},frappe:{},hiatus:{},kosher:{},legume:{},macula:{},phlegm:{},pickle:{},stemma:{},thenar:{},tiptoe:{},adrenal:{},anatomy:{},confect:{},freckle:{},jugular:{},knuckle:{},mastoid:{},medulla:{},pudding:{},takeout:{},thyroid:{},tonsure:{},wassail:{},anterior:{},coloring:{},julienne:{},libation:{},rhomboid:{},sandwich:{},takeaway:{},appendage:{},chocolate:{},colouring:{},endocrine:{},hamstring:{},moonshine:{},permanent:{},recessive:{},turbinate:{},confection:{},hemisphere:{},ingredient:{},spatchcock:{},sweetening:{},convolution:{},pneumogastric:{},os:{},cos:{},cud:{},sup:{},caul:{},chaw:{},chin:{},chou:{},curd:{},cyst:{},fizz:{},jowl:{},mane:{},milt:{},perm:{},snot:{},sorb:{},sura:{},taco:{},booze:{},broth:{},caput:{},chili:{},cocoa:{},costa:{},cress:{},dough:{},eater:{},fanny:{},fondu:{},hyoid:{},loins:{},lolly:{},lumen:{},mamma:{},mummy:{},pasta:{},plasm:{},porgy:{},puree:{},quaff:{},quark:{},sinew:{},thigh:{},tripe:{},tummy:{},areola:{},banana:{},booger:{},bowleg:{},brunch:{},carpal:{},cervix:{},citrus:{},comfit:{},dactyl:{},dorsum:{},edible:{},flitch:{},fondue:{},fornix:{},gammon:{},herbal:{},lambda:{},malted:{},marcel:{},millet:{},monggo:{},noodle:{},paring:{},pastry:{},pelvis:{},simnel:{},spleen:{},tarsal:{},tensor:{},tipple:{},waffle:{},wonton:{},abdomen:{},adenoid:{},auricle:{},biscuit:{},brownie:{},clabber:{},criollo:{},croaker:{},cubitus:{},deltoid:{},dentine:{},dietary:{},eyeball:{},fistula:{},forearm:{},fritter:{},gherkin:{},haircut:{},headful:{},hyaloid:{},iceberg:{},isthmus:{},kneecap:{},lacteal:{},lasagna:{},lasagne:{},lozenge:{},marmite:{},midriff:{},oatmeal:{},ocellus:{},pageboy:{},paprika:{},pathway:{},pottage:{},prepuce:{},pumpkin:{},ramekin:{},ratafia:{},roulade:{},sausage:{},seltzer:{},serving:{},sidecar:{},slobber:{},sorghum:{},stirrup:{},sultana:{},teacake:{},timbale:{},toenail:{},topping:{},tostada:{},trachea:{},treacle:{},twister:{},vintage:{},abducent:{},abductor:{},afferent:{},alveolus:{},appendix:{plural:"appendices"},astragal:{},bicuspid:{},blowfish:{},blowhole:{},bouffant:{},capitate:{},chowchow:{},cobblers:{},cocktail:{},coquille:{},couscous:{},doughboy:{},doughnut:{},dumpling:{},efferent:{},eminence:{},exocrine:{},fascicle:{},flatfish:{},flatfoot:{},flummery:{},forehead:{},foreskin:{},hairline:{},honeydew:{},licorice:{},ligament:{},lollipop:{},macaroni:{},mackerel:{},marinade:{},membrane:{},monstera:{},mouthful:{},muscatel:{},pheasant:{},physique:{},potation:{},prostate:{},ramequin:{},receptor:{},sillabub:{},sinusoid:{},smoothie:{},specimen:{},streusel:{},stuffing:{},syllabub:{},teardrop:{},venation:{},windfall:{},abdominal:{},apparatus:{},blueberry:{},casserole:{},corpuscle:{},cranberry:{},demitasse:{},dentition:{},drinkable:{},drumstick:{},epiphysis:{},flageolet:{},fricassee:{},hamburger:{},labyrinth:{},lifeblood:{},lineament:{},liquorice:{},mastoidal:{},maxillary:{},navicular:{},pituitary:{},pompadour:{},provender:{},purulence:{},shellfish:{},spaghetti:{},spareribs:{},splayfoot:{},spoilable:{},sundowner:{},sweetener:{},trapezium:{},trapezoid:{},umbilical:{},ventricle:{},vestibule:{},zygomatic:{},applesauce:{},autoplasty:{},blackheart:{},breadstuff:{},cheesecake:{},comestible:{},gastronomy:{},hotchpotch:{},interstice:{},jawbreaker:{},kitambilla:{},maraschino:{},metacarpal:{},metatarsal:{},passageway:{},perishable:{},salmagundi:{},shortening:{},articulator:{},excrescence:{},grasshopper:{},griddlecake:{},intercostal:{},longanberry:{},nourishment:{},screwdriver:{},smorgasbord:{},spindlelegs:{},checkerberry:{},perspiration:{},spindleshanks:{},parasympathetic:{},ab:{},ade:{},ale:{},bap:{},bun:{},jak:{},lat:{},lox:{},pes:{},pie:{},poi:{},pud:{},pus:{},tum:{},vas:{},veg:{},anus:{},arak:{},axon:{},baba:{},bile:{},bleb:{},bleu:{},bock:{},bosc:{},choc:{},clit:{},cola:{},coxa:{},crus:{},cuke:{},duff:{},dura:{},edda:{},eggs:{},fist:{},flab:{},flan:{},fugu:{},genu:{},ghee:{},glia:{},grog:{},isaw:{},java:{},kava:{},marc:{},mayo:{},mead:{},miso:{},mons:{},naan:{},nape:{},nipa:{},oleo:{},orzo:{},ouzo:{},ovum:{},pecs:{},pita:{},pone:{},pons:{},porc:{},rete:{},rima:{},rind:{},roux:{},ruga:{},rusk:{},slaw:{},sops:{},suet:{},tofu:{},ugli:{},ulna:{},umbo:{},uvea:{},veal:{},veau:{},vena:{},vino:{},womb:{},ziti:{},zona:{},ackee:{},adobo:{},aioli:{},anjou:{},ankle:{},annon:{},aorta:{},arcus:{},aspic:{},atole:{},axone:{},babka:{},bacon:{},bagel:{},bialy:{},bigos:{},bitok:{},blanc:{},blini:{},bliny:{},boeuf:{},borsh:{},bowel:{},bursa:{},butty:{},cauda:{},cavum:{},cecum:{},celom:{},chips:{},chyle:{},cider:{},congo:{},copra:{},cornu:{},cuppa:{},cutis:{},cyder:{},cytol:{},decaf:{},donut:{},facia:{},femur:{},filum:{},flews:{},fovea:{},fries:{},gigot:{},gland:{},glans:{},gleet:{},glogg:{},glute:{},gonad:{},goody:{},grist:{},grits:{},gruel:{},gyrus:{},hilus:{},hoagy:{},hooch:{},hooks:{},hymen:{},hyson:{},ileum:{},ilium:{},incus:{},inion:{},jello:{},julep:{},kabob:{},kasha:{},kebab:{},knish:{},kumis:{},kvass:{},lansa:{},latke:{},latte:{},lichi:{},limpa:{},lymph:{},macon:{},manus:{},matzo:{},mucus:{},nacho:{},naris:{},nates:{},negus:{},offal:{},ootid:{},pekoe:{},penis:{},penne:{},perry:{},pesto:{},pilaf:{},pinky:{},pizza:{},plica:{},porta:{},pruno:{},psoas:{},pubis:{},quiff:{},raita:{},ramus:{},raphe:{},salmi:{},salsa:{},savoy:{},sebum:{},serum:{},sirup:{},skull:{},sperm:{},steak:{},sudor:{},sushi:{},taffy:{},tamal:{},tater:{},teeth:{},teres:{},tibia:{},titty:{},toddy:{},toffy:{},torso:{},torte:{},tress:{},uvula:{},vagus:{},viand:{},vodka:{},vomer:{},vulva:{},wrist:{},adnexa:{},afters:{},agnail:{},ananas:{},anlage:{},annexa:{},annona:{},antrum:{},armpit:{},arrack:{},axilla:{},baguet:{},beigel:{},biceps:{},bisque:{},blintz:{},bonbon:{},borsch:{},brazil:{},bregma:{},bulgur:{},burger:{},cachou:{},caecum:{},canape:{},canola:{},cardia:{},carina:{},carpus:{},casaba:{},catsup:{},caviar:{},chevre:{},chiasm:{},chilli:{},choana:{},coccyx:{},coelom:{},comedo:{},concha:{},confit:{},congou:{},corium:{},corpse:{},cupper:{},cuspid:{},cutlet:{},damson:{},danish:{},dermis:{},dewlap:{},dolmas:{},eclair:{},eggnog:{},eschar:{},eyelid:{},farina:{},fauces:{},fibula:{},finnan:{},flexor:{},fundus:{},gateau:{},geneva:{},giblet:{},glossa:{},gluten:{},goatee:{},gobbet:{},gonion:{},goober:{},graham:{},grappa:{},groats:{},gulyas:{},haggis:{},hairdo:{},hallah:{},hallux:{},hamate:{},haslet:{},hoagie:{},hominy:{},hommos:{},hootch:{},hotpot:{},huitre:{},hummus:{},inguen:{},intima:{},jambon:{},jugale:{},jumbal:{},karyon:{},kencur:{},kidney:{},kipper:{},kirsch:{},kishke:{},korlan:{},kummel:{},labium:{},lamina:{},lanseh:{},lanugo:{},larynx:{},lekvar:{},limbus:{},lingua:{},lobule:{},lochia:{},locule:{},lunule:{},matzoh:{},meatus:{},meninx:{},milium:{},mohawk:{},mouton:{},mucosa:{},muesli:{},muffin:{},murphy:{},mutton:{},nasion:{},nervus:{},neuron:{},nougat:{},oculus:{},omelet:{},onyxis:{},oocyte:{},oolong:{},operon:{},organs:{},paczki:{},paella:{},palate:{},paries:{},pastis:{},paunch:{},pectus:{},phyllo:{},pilaff:{},pinkie:{},pinole:{},pirogi:{},pleura:{},plexus:{},pollex:{},polony:{},posset:{},potage:{},poteen:{},potion:{},potpie:{},poulet:{},premix:{},pulque:{},purloo:{},quiche:{},rectum:{},rectus:{},repast:{},retina:{},rhaphe:{},ribier:{},rickey:{},rotgut:{},sacrum:{},salami:{},saliva:{},samosa:{},sapota:{},scampi:{},scampo:{},sclera:{},scruff:{},seckel:{},serosa:{},shandy:{},sherry:{},silage:{},skilly:{},smegma:{},soleus:{},sorbet:{},sputum:{},stapes:{},stodge:{},succus:{},sulcus:{},sundae:{},sutura:{},tahini:{},tamale:{},tarsus:{},tendon:{},testis:{},thymus:{},tidbit:{},tiffin:{},tisane:{},titbit:{},toffee:{},tonsil:{},tragus:{},troche:{},tubule:{},tunica:{},unguis:{},ureter:{},uterus:{},vagina:{},veggie:{},venula:{},venule:{},vermis:{},vesica:{},viscus:{},vitals:{},waters:{},whisky:{},wiener:{},yogurt:{},zaatar:{},zonula:{},zonule:{},zygoma:{},zygote:{},absinth:{},akvavit:{},aniseed:{},aquavit:{},arteria:{},ashcake:{},baklava:{},bannock:{},beignet:{},keen:{},rage:{},wish:{},aside:{},chafe:{},gloss:{},tense:{},whole:{},worry:{},effect:{},reject:{},riddle:{},snatch:{},speech:{},closure:{},collect:{},romance:{},flourish:{},classical:{},influence:{},substance:{},reflection:{},inclination:{},recognition:{},dot:{},nod:{},blur:{},itch:{},slur:{},solo:{},wink:{},abuse:{},acute:{},alert:{},angle:{},bluff:{},cheer:{},honor:{},humor:{},lyric:{},snarl:{},tally:{},accent:{},degree:{},detail:{},indent:{},matter:{},patent:{},rubric:{},thrill:{},abandon:{},bluster:{},concern:{},concord:{},formula:{plural:"formulae"},imprint:{},nominal:{},quality:{},reading:{},sputter:{},torture:{},wrinkle:{},contrast:{},estimate:{},harmonic:{},judgment:{},reaction:{},sanction:{},singular:{},straddle:{},construct:{},judgement:{},reflexion:{},rendering:{},universal:{},acceptance:{},discipline:{},irritation:{},regulation:{},relaxation:{},submission:{},application:{},replication:{},construction:{},introduction:{},presentation:{},cant:{},code:{},joke:{},pain:{},stab:{},trot:{},will:{},blame:{},brief:{},dodge:{},fancy:{},glide:{},grasp:{},guess:{},quote:{},scent:{},slant:{},snort:{},swoop:{},theme:{},trial:{},vocal:{},accord:{},affect:{},cancel:{},debate:{},desire:{},heroic:{},murmur:{},phrase:{},resume:{},scream:{},serial:{},tangle:{},closing:{},dissent:{},drawing:{},example:{},exhibit:{},fatigue:{},feeling:{},mention:{},partial:{},posture:{},protest:{},regress:{},telling:{},welcome:{},absolute:{},analysis:{plural:"analyses"},distress:{},pastoral:{},platform:{},temporal:{},agreement:{},attention:{},beginning:{},closeness:{},connexion:{},dimension:{},discourse:{},lightness:{},principle:{},surrender:{},assignment:{},coordinate:{},involution:{},abstraction:{},arrangement:{},conjunction:{},declaration:{},penetration:{},proposition:{},realisation:{},realization:{},condensation:{},consideration:{},no:{},cue:{},fun:{},rub:{},bias:{},gift:{},hoot:{},jazz:{},oral:{},snub:{},text:{},tune:{},urge:{},coast:{},craze:{},daily:{},debut:{},dowse:{},funny:{},logic:{},mercy:{},peace:{},rerun:{},samba:{},slang:{},taboo:{},verse:{},whine:{},words:{},aspect:{},babble:{},canker:{},choice:{},clamor:{},denial:{},device:{},esteem:{},format:{},lament:{},manual:{},menace:{},normal:{},pardon:{},regret:{},skinny:{},sorrow:{},tickle:{},twinge:{},vision:{},warmth:{},caution:{},charter:{},conceit:{},cunning:{},delight:{},dictate:{},discord:{},finance:{},harmony:{},keynote:{},knowing:{},leaning:{},lecture:{},mistake:{},musical:{},offense:{},palaver:{},preempt:{},purpose:{},pyrrhic:{},realism:{},sharing:{},texture:{},worship:{},writing:{},aspirate:{},biweekly:{},blessing:{},citation:{},despatch:{},dullness:{},feminine:{},flatness:{},geminate:{},manifest:{},personal:{},pleasure:{},politics:{},singsong:{},yielding:{},agitation:{},attrition:{},bimonthly:{},broadcast:{},confusion:{},deviation:{},disregard:{},education:{},faintness:{},heaviness:{},imitation:{},indenture:{},interview:{},isolation:{},isometric:{},minuscule:{},portrayal:{},predicate:{},provision:{},screaming:{},signature:{},spiritual:{},throwaway:{},tightness:{},accounting:{},aggression:{},assumption:{},attraction:{},commercial:{},compromise:{},confession:{},confidence:{},conformity:{},conveyance:{},detachment:{},difference:{},discretion:{},imperative:{},mellowness:{},modulation:{},tenderness:{},uneasiness:{},awkwardness:{},discernment:{},elimination:{},endorsement:{},examination:{},fabrication:{},familiarity:{},implication:{},indorsement:{},involvement:{},observation:{},obstruction:{},performance:{},requisition:{},sensitivity:{},testimonial:{},appreciation:{},articulation:{},condemnation:{},confirmation:{},deliberation:{},intervention:{},satisfaction:{},confrontation:{},decomposition:{},determination:{},reinforcement:{},understanding:{},characteristic:{},correspondence:{},sophistication:{},transformation:{},rationalisation:{},rationalization:{},dub:{},fog:{},bold:{},buoy:{},dare:{},daze:{},envy:{},gape:{},okay:{},plus:{},rasp:{},rime:{},role:{},tabu:{},yell:{},above:{},affix:{},agape:{},chord:{},croak:{},doubt:{},email:{},essay:{},folly:{},idiom:{},laugh:{},modal:{},panic:{},posit:{},rhyme:{},rider:{},rumba:{},scare:{},scorn:{},sneer:{},trill:{},truth:{},wince:{},adagio:{},binary:{},daring:{},defeat:{},dismay:{},docket:{},filing:{},flavor:{},giving:{},gospel:{},lesson:{},median:{},neuter:{},notion:{},parody:{},parole:{},plight:{},rebuff:{},rhumba:{},sample:{},shiver:{},solace:{},trance:{},unseen:{},vanity:{},vector:{},amnesty:{},anguish:{},arousal:{},bucolic:{},caption:{},catalog:{},contour:{},descant:{},disdain:{},dispute:{},fantasy:{},flavour:{},glimpse:{},insight:{},languor:{},licence:{},marking:{},overbid:{},prelude:{},probate:{},purport:{},pursuit:{},reality:{},receipt:{},recital:{},riposte:{},splurge:{},sticker:{},summons:{},wrangle:{},approval:{},buoyancy:{},converse:{},coolness:{},covenant:{},crotchet:{},devotion:{},dialogue:{},emphasis:{},esthetic:{},excision:{},fairness:{},fixation:{},forecast:{},hieratic:{},identity:{},illusion:{},integral:{},monotone:{},offering:{},paradigm:{},premiere:{},printing:{},referent:{},rescript:{},research:{},rhetoric:{},schedule:{},skimming:{},sleeping:{},speaking:{},splutter:{},streamer:{},tendency:{},topology:{},vexation:{},wildness:{},adjective:{},aesthetic:{},assurance:{},burlesque:{},catalogue:{},correlate:{},detection:{},discovery:{},dismissal:{},exclusion:{},exclusive:{},expansion:{},impromptu:{},inaugural:{},indicator:{},intensive:{},interdict:{},largeness:{},masculine:{},paragraph:{},partitive:{},pragmatic:{},prevision:{},quarterly:{},quotation:{},readiness:{},rendition:{},reverence:{},roundness:{},safeguard:{},suspicion:{},sweetness:{},thickness:{},trademark:{},antagonism:{},aspiration:{},bitterness:{},coarseness:{},collection:{},conjecture:{},deposition:{},estimation:{},excitement:{},gloominess:{},impossible:{},incitement:{},invocation:{},inwardness:{},literature:{},morphology:{},narrowness:{},nominative:{},observance:{},possessive:{},postmortem:{},preemption:{},preference:{},profession:{},profundity:{},recitation:{},redundancy:{},abnormality:{},acquisition:{},affirmation:{},affirmative:{},alternative:{},bombardment:{},commutation:{},concurrence:{},convergence:{},countenance:{},disposition:{},distinction:{},distraction:{},enlargement:{},expectation:{},fingerprint:{},indentation:{},instruction:{},nationalism:{},possibility:{},presumption:{},publication:{},spectacular:{},speculation:{},substantive:{},superlative:{},unconscious:{},unitisation:{},unitization:{},anticipation:{},apprehension:{},circumstance:{},continuation:{},coordination:{},countercheck:{},distribution:{},hieroglyphic:{},illustration:{},intimidation:{},misdirection:{},overestimate:{},precondition:{},renunciation:{},approximation:{},authorisation:{},authorization:{},certification:{},falsification:{},interrogative:{},nonconformity:{},reduplication:{},sensitiveness:{},sequestration:{},superposition:{},underestimate:{},capitalisation:{},capitalization:{},generalisation:{},generalization:{},perceptiveness:{},recapitulation:{},sensationalism:{},awe:{},bop:{},ego:{},hex:{},jot:{},lit:{},nub:{},vow:{},beta:{},brag:{},clue:{},cull:{},elan:{},epic:{},funk:{},fury:{},gibe:{},hymn:{},jibe:{},leer:{},lust:{},mood:{},oath:{},pang:{},plea:{},quip:{},rant:{},riff:{},visa:{},zeal:{},zest:{},alibi:{},badge:{},basis:{plural:"bases"},bravo:{},carol:{},chant:{},chaos:{},conga:{},delta:{},demur:{},dread:{},fable:{},flair:{},fugue:{},given:{},gloat:{},gloom:{},hunch:{},infix:{},irony:{},largo:{},least:{},libel:{},magic:{},moral:{},polka:{},reply:{},sally:{},spiel:{},spook:{},stymy:{},tango:{},usage:{},velar:{},vigil:{},whoop:{},affair:{},airing:{},ardour:{},ballot:{},bathos:{},beauty:{},bellow:{},bowing:{},curtsy:{},deceit:{},dental:{},dialog:{},gambit:{},gibber:{},grudge:{},halloo:{},insult:{},intent:{},italic:{},kowtow:{},labial:{},latest:{},manner:{},mumble:{},naming:{},outcry:{},pathos:{},piffle:{},plural:{},policy:{},praise:{},raving:{},rehash:{},revise:{},scalar:{},scroll:{},seeing:{},shriek:{},sonnet:{},stymie:{},tattle:{},theory:{},tingle:{},tumult:{},upbeat:{},urging:{},wangle:{},weekly:{},wheeze:{},yearly:{},acclaim:{},acidity:{},airmail:{},analogy:{},apology:{},barrage:{},barrier:{},bidding:{},bonding:{},buildup:{},cadence:{},cartoon:{},censure:{},clutter:{},concert:{},cruelty:{},despair:{},disgust:{},dodging:{},earmark:{},embargo:{},enquiry:{},erasure:{},eristic:{},fluency:{},gradual:{},gravity:{},initial:{},inquiry:{},lingual:{},loyalty:{},mastery:{},mimesis:{},monthly:{},numeral:{},omnibus:{},outlook:{},palatal:{},placard:{},polemic:{},posting:{},presage:{},preview:{},quibble:{},refrain:{},reissue:{},reorder:{},reprint:{},rewrite:{},roundup:{},singing:{},slander:{},sorting:{},tasting:{},tribute:{},turmoil:{},whisper:{},ablative:{},acridity:{},allegory:{},alveolar:{},ambition:{},ascender:{},audition:{},binomial:{},brandish:{},brooding:{},bundling:{},calculus:{},circular:{},clipping:{},coldness:{},courtesy:{},critique:{},daydream:{},defiance:{},delusion:{},demurrer:{},disfavor:{},disquiet:{},dynamism:{},easiness:{},equation:{},fondness:{},grasping:{},grouping:{},guidance:{},guttural:{},hornpipe:{},hysteria:{},idealism:{},intimacy:{},mistrust:{},monition:{},negation:{},nickname:{},nihilism:{},notation:{},ordinate:{},outburst:{},particle:{},passport:{},pedagogy:{},petition:{},phantasy:{},planning:{},playbook:{},proposal:{},revision:{},rhapsody:{},ridicule:{},sampling:{},serenade:{},slowness:{},sourness:{},subtitle:{},suspense:{},sympathy:{},tartness:{},teaching:{},theology:{},travesty:{},universe:{},acuteness:{},addiction:{},adoration:{},attending:{},autograph:{},constancy:{},crispness:{},cuneiform:{},deception:{},defensive:{},denseness:{},dialectic:{},dictation:{},digestion:{},diplomacy:{},disfavour:{},editorial:{},emulation:{},enactment:{},evocation:{},fecundity:{},footprint:{},formalism:{},formative:{},gradation:{},grievance:{},grumbling:{},guideline:{},immediacy:{},insurance:{},intention:{},intercept:{},invariant:{},itinerary:{},lassitude:{},majuscule:{},misgiving:{},monologue:{},morbidity:{},murmuring:{},narration:{},nutrition:{},ordinance:{},oversight:{},pictorial:{},pizzicato:{},prejudice:{},quadratic:{},quickness:{},quickstep:{},reckoning:{},reflexive:{},rejoicing:{},repulsion:{},retention:{},retrieval:{},revealing:{},saltiness:{},schooling:{},sentience:{},sulkiness:{},synthesis:{},testament:{},testimony:{},underline:{},undertone:{},accidental:{},accusative:{},adaptation:{},admiration:{},affixation:{},allurement:{},anatomical:{},antiphonal:{},asceticism:{},belittling:{},brightness:{},brilliance:{},chronology:{},classified:{},cleverness:{},clumsiness:{},cognizance:{},compliment:{},concession:{},conscience:{},conspiracy:{},contention:{},continuity:{},decoration:{},determiner:{},deterrence:{},digression:{},diminution:{},discontent:{},dissection:{},dissonance:{},divination:{},empiricism:{},enthusiasm:{},enticement:{},equivalent:{},execration:{},fortissimo:{},grogginess:{},hesitation:{},humbleness:{},hypostasis:{},hypothesis:{plural:"hypotheses"},impatience:{},infliction:{},insistence:{},instalment:{},intermezzo:{},jocularity:{},loneliness:{},neutrality:{},nomination:{},oppression:{},perfection:{},pestilence:{},philosophy:{},precaution:{},pretension:{},propensity:{},refutation:{},reputation:{},revelation:{},rumination:{},salutation:{},semiweekly:{},stigmatism:{},theatrical:{},triviality:{},underscore:{},unfairness:{},vernacular:{},vocabulary:{},whispering:{},acceptation:{},advancement:{},aggravation:{},appellative:{},benevolence:{},calculation:{},comparative:{},concordance:{},conjunctive:{},conjuration:{},correlation:{},correlative:{},countersign:{},denigration:{},designation:{},discourtesy:{},documentary:{},electricity:{},enchantment:{},engrossment:{},exclamation:{},explanation:{},exploration:{},foolishness:{},frustration:{},imperialism:{},infatuation:{},inscription:{},jactitation:{},obfuscation:{},outwardness:{},peculiarity:{},playfulness:{},presentment:{},propagation:{},provocation:{},rationalism:{},regionalism:{},repudiation:{},resignation:{},rotogravure:{},semimonthly:{},sensibility:{},seriousness:{},stipulation:{},strangeness:{},subcontract:{},supposition:{},syncopation:{},titillation:{},tranquility:{},unorthodoxy:{},unsoundness:{},valedictory:{},breakthrough:{},choreography:{},conciliation:{},constitution:{},consultation:{},counterpoint:{},covetousness:{},depreciation:{},faultfinding:{},heedlessness:{},helplessness:{},idealisation:{},idealization:{},impertinence:{},intoxication:{},irritability:{},mercifulness:{},notification:{},pacification:{},processional:{},promulgation:{},proportional:{},recollection:{},retroflexion:{},retroversion:{},significance:{},solicitation:{},spiritualism:{},stupefaction:{},supplication:{},transference:{},acculturation:{},attentiveness:{},communication:{},comprehensive:{},condescension:{},contradiction:{},demonstrative:{},determinative:{},documentation:{},hallucination:{},impersonation:{},individualism:{},interpolation:{},orchestration:{},preoccupation:{},prevarication:{},qualification:{},retentiveness:{},retroflection:{},structuralism:{},symbolisation:{},symbolization:{},versification:{},aggressiveness:{},categorisation:{},demoralisation:{},demoralization:{},farsightedness:{},predisposition:{},recommendation:{},reconstruction:{},sesquipedalian:{},simplification:{},traditionalism:{},conventionality:{},crystallization:{},personification:{},prognostication:{},characterization:{},predetermination:{},pi:{},xi:{},boo:{},bye:{},dit:{},fib:{},ire:{},ken:{},nay:{},pic:{},psi:{},pun:{},wai:{},woe:{},yea:{},blip:{},blog:{},deed:{},demo:{},epos:{},gist:{},grin:{},heed:{},idyl:{},iota:{},jive:{},moan:{},muse:{},norm:{},noun:{},nous:{},odor:{},pean:{},ploy:{},pomp:{},quiz:{},sass:{},sext:{},spam:{},sulk:{},surd:{},tale:{},trig:{},vlog:{},whim:{},yack:{},yoga:{},agony:{},alias:{},aroma:{},axiom:{},bebop:{},blues:{},bonus:{},canto:{},codex:{},creed:{},ditto:{},dogma:{},drawl:{},edict:{},ethic:{},facet:{},fever:{},frown:{},gamma:{},gamut:{},grief:{},groan:{},guilt:{},intro:{},kotow:{},macro:{},odour:{},omega:{},paean:{},pavan:{},peeve:{},prate:{},primo:{},prose:{},psalm:{},qualm:{},retro:{},rumor:{},savvy:{},scowl:{},shrug:{},skill:{},smirk:{},danger:{},push:{},refusal:{},tooling:{},trelvox:{}},verbs:{import:{},call:{},test:{},contain:{},extend:{},use:{},depend:{prep:"on"},rely:{prep:"on"},inherit:{prep:"from"},belong:{prep:"to"},point:{prep:"to"},implement:{},override:{},export:{},define:{},declare:{},reference:{},invoke:{},wrap:{},mock:{},cover:{},document:{},describe:{},modify:{},touch:{},fix:{},break:{},introduce:{},deprecate:{},replace:{},own:{},maintain:{},review:{},merge:{},revert:{},deploy:{},run:{},execute:{},load:{},parse:{},emit:{},validate:{},log:{},throw:{},catch:{},create:{},delete:{},update:{},expose:{},consume:{},produce:{},generate:{},configure:{},install:{},publish:{},release:{},ship:{},watch:{},trigger:{},build:{},write:{},read:{},have:{},like:{},want:{},need:{},believe:{},trust:{},love:{},hate:{},fear:{},hope:{},teach:{},learn:{},drive:{},cook:{},sing:{},visit:{},care:{},grow:{},marry:{},wear:{},eat:{},sleep:{},walk:{},buy:{},sell:{},give:{},take:{},meet:{},ride:{},speak:{},duck:{}},adjectives:{legacy:{type:"subclass"},mock:{type:"subclass"},senior:{type:"subclass"},internal:{type:"subclass"},external:{type:"subclass"},public:{type:"subclass"},private:{type:"subclass"},abstract:{type:"subclass"},static:{type:"subclass"},async:{type:"subclass"},experimental:{type:"subclass"},stable:{type:"subclass"},core:{type:"subclass"},shared:{type:"subclass"},global:{type:"subclass"},local:{type:"subclass"},generated:{type:"subclass"},standalone:{type:"subclass"},primary:{type:"subclass"},secondary:{type:"subclass"},deprecated:{type:"data"},fast:{type:"data"},slow:{type:"data"},large:{type:"data"},small:{type:"data"},flaky:{type:"data"},tested:{type:"data"},documented:{type:"data"},buggy:{type:"data"},broken:{type:"data"},green:{type:"data"},deterministic:{type:"data"},pure:{type:"data"},empty:{type:"data"},stale:{type:"data"},male:{type:"data"},female:{type:"data"},young:{type:"data"},old:{type:"data"},hot:{type:"data"},cold:{type:"data"},sweet:{type:"data"},salty:{type:"data"},sharp:{type:"data"},round:{type:"data"},tall:{type:"data"},short:{type:"data"},happy:{type:"data"},sad:{type:"data"},angry:{type:"data"},afraid:{type:"data"},strong:{type:"data"},weak:{type:"data"},rich:{type:"data"},poor:{type:"data"},hard:{type:"data"},soft:{type:"data"},wild:{type:"data"},gentle:{type:"data"},colorful:{type:"data"},legitimate:{type:"data"},ranked:{type:"data"},related:{type:"data"},sacred:{type:"data"},unaffected:{type:"data"}},properNames:["tmct","Node","npm","JavaScript","TypeScript","Python","Java","Git","GitHub","GitLab","ESLint","Linux","macOS","Windows","Polycode","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]}});function mR(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 Ob(e,t={}){for(let[n,s]of Object.entries(t.nouns||{})){let o={lemma:n,...s||{}};if(o.property&&!hR.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(!gR.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 Ts(e,t=dR){if(!e&&Mu.has(t))return Mu.get(t);let n=Cb,s={nouns:new Map,nounPlurals:new Map,verbs:new Map,adjectives:new Map,properNames:new Map,ns:t};return Ob(s,n),e?(Ob(s,e),s):(Mu.set(t,s),s)}function Zr(e,t,n={}){return bR(e,t,n)[0]??null}function bR(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 mR(s))l(e.nouns.get(c));return i}var dR,gM,bM,pR,fR,wM,hR,gR,Mu,ro=L(()=>{Ab();dR="tmct:",gM=Object.freeze({every:"universal",a:"indefinite",an:"indefinite",the:"definite",no:"negative"}),bM=Object.freeze({"at least":"owl:minCardinality","at most":"owl:maxCardinality",exactly:"owl:cardinality"}),pR=Object.freeze(new Set(["type","kind","sort","form","class","variety","species","breed","genus"])),fR=Object.freeze(new Set(["body","mass","group","collection","set","series","number","amount","piece","part","lot","pair","bunch","pile"])),wM=Object.freeze({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10});hR=new Set(["data","object"]),gR=new Set(["subclass","data"]);Mu=new Map});var xM,EM,SM,wR,kM,jM,_M,Ib=L(()=>{ws();Ie();xM=Object.freeze({class:"Class",module:"Module",function:"Function",method:"Method",attribute:"Attribute",variable:"GlobalVariable",constant:"GlobalVariable",commit:"Commit"}),EM=Object.freeze({Class:["class","classes"],Module:["module","modules"],Function:["function","functions"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"]}),SM=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`]}),wR=Object.freeze({import:"imports",imports:"imports",importing:"imports",imported:"imports",call:"calls",calls:"calls",calling:"calls",called:"calls",invoke:"calls",invokes:"calls",invoking:"calls",contain:"contains",contains:"contains",containing:"contains",containment:"contains",member:"contains",members:"contains",inherit:"inherits",inherits:"inherits",inheriting:"inherits",inheritance:"inherits",extend:"inherits",extends:"inherits",extending:"inherits",subclass:"inherits",subclasses:"inherits",subclassing:"inherits",test:"tests",tests:"tests",testing:"tests",tested:"tests",coverage:"tests",define:"defines",defines:"defines",defining:"defines",defined:"defines",definition:"defines",definitions:"defines",declaration:"defines",touch:"touches",touches:"touches",touching:"touches",touched:"touches",cochange:"cochange","co-change":"cochange","change-coupling":"cochange",coupled:"cochange",export:"reexports",exports:"reexports",exporting:"reexports",exported:"reexports",reexport:"reexports",reexports:"reexports",reexporting:"reexports","re-export":"reexports","re-exports":"reexports","re-exporting":"reexports",serve:"serves",serves:"serves",serving:"serves",served:"serves",denote:"denotes",denotes:"denotes",denoting:"denotes",denoted:"denotes"}),kM=Object.freeze({imports:["imports"],calls:["calls","callsSymbol"],contains:["contains"],inherits:["inherits"],tests:["tests"],defines:["defines"],touches:["touches","touchesSymbol"],cochange:["cochange"],reexports:["reexports"],serves:["serves"],denotes:["denotes"]}),jM=Object.freeze({imports:{verb:"imports",edgeNoun:"import"},calls:{verb:"calls",edgeNoun:"call"},contains:{verb:"contains",edgeNoun:"containment"},inherits:{verb:"inherits from",edgeNoun:"inheritance"},tests:{verb:"tests",edgeNoun:"test"},defines:{verb:"defines",edgeNoun:"definition"},touches:{verb:"touches",edgeNoun:"touch"},cochange:{verb:"changes together with",edgeNoun:"change-coupling"},reexports:{verb:"re-exports",edgeNoun:"re-export"},serves:{verb:"serves",edgeNoun:"service"},denotes:{verb:"denotes",edgeNoun:"denotation"}}),_M=Object.freeze({imports:[{side:"obj",make:e=>`which modules import ${e}`},{side:"subj",make:e=>`what does ${e} import`}],calls:[{side:"obj",make:e=>`what calls ${e}`},{side:"subj",make:e=>`what does ${e} call`}],contains:[{side:"subj",make:e=>`what does ${e} contain`},{side:"obj",make:e=>`which class contains ${e}`}],inherits:[{side:"obj",make:e=>`which classes inherit from ${e}`},{side:"subj",make:e=>`where is ${e} defined`}],tests:[{side:"obj",make:e=>`what tests ${e}`},{side:"obj",make:e=>`where is ${e} defined`}],defines:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`what does ${e} contain`}],touches:[{side:"obj",make:e=>`when did ${e} change`},{side:"subj",make:e=>`what did commit ${e} touch`}],cochange:[{side:"obj",make:e=>`where is ${e} defined`},{side:"subj",make:e=>`which modules import ${e}`}],reexports:[{side:"subj",make:e=>`what does ${e} export`},{side:"obj",make:e=>`where is ${e} defined`}],serves:[{side:"subj",make:e=>`what does ${e} serve`},{side:"obj",make:e=>`what serves ${e}`}],denotes:[{side:"subj",make:e=>`what does ${e} denote`},{side:"obj",make:e=>`what denotes ${e}`}]})});var Ra=L(()=>{Zt();ro();Ib()});var Ta,Aa=L(()=>{Ta=()=>{throw new Error("gunzipSync unavailable in a browser bundle")}});var vR,zM,Lb=L(()=>{oo();Aa();Rs();Be();Ra();vR={},zM=Q($e(Ht(vR.url)),"..","..","..")});var Nb=L(()=>{Zt();ro();Ra()});var $R,xR,QM,Fu=L(()=>{Zt();ro();To();$R=Object.freeze({fanoutLimit:5,maxDepth:1,maxTopics:12,minIntervalMs:2e3}),xR=["this","is","about","the"],QM=xR.length});var Pb=L(()=>{jt();Be()});var Du=L(()=>{Zt()});var ER,fF,Mb=L(()=>{oo();Aa();Rs();Be();Du();Zt();ER={},fF=Q($e(Ht(ER.url)),"..","..","..")});var hF,gF,bF,Fb=L(()=>{hF=Object.freeze(["task","autoFeedback","alloFeedback","turnManagement","timeManagement","discourseStructuring","ownCommunicationManagement","partnerCommunicationManagement","socialObligationsManagement","contactManagement"]),gF=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"})}),bF=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 ei(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 Ca(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 Db(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 zu(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,zu(a,t,n,s));r=i+1}return s.delete(e),n.set(e,r),r}function SR(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 kR(e,t,n,s,o,{threshold:r,rootDepth:i,icByTerm:a}){let l=Db(e,n),c=Db(t,n);if(l.has(t)||c.has(e))return{distinct:!1,reason:"subsumes",lcs:l.has(t)?t:e};if(s.size)for(let h of l){let g=s.get(h);if(g){for(let b of c)if(g.has(b))return{distinct:!0,reason:"disjoint",lcs:null}}}let u=[...l].filter(h=>c.has(h));if(!u.length)return l.size<2||c.size<2?{distinct:!1,reason:"inconclusive",lcs:null}:{distinct:!0,reason:"non-intersecting",lcs:null};let d=h=>zu(h,n,o,new Set),f=u[0],p=d(f);for(let h of u){let g=d(h);(g>p||g===p&&h<f)&&(f=h,p=g)}if(p<=i)return{distinct:!0,reason:"root-subsumer",lcs:f};if(a){let h=a.get(f);return typeof h=="number"&&h<r?{distinct:!0,reason:"low-ic",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}return 2*p/(d(e)+d(t))<r?{distinct:!0,reason:"shallow-subsumer",lcs:f}:{distinct:!1,reason:"shared-lineage",lcs:f}}function Oa(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||ei(t),c=SR(s),u=new Map,d=new Map(a.map(y=>[y,y])),f=y=>{for(;d.get(y)!==y;)d.set(y,d.get(d.get(y))),y=d.get(y);return y},p=(y,w)=>{let $=f(y),_=f(w);$!==_&&d.set($<_?_:$,$<_?$:_)},m=[];for(let y=0;y<a.length;y+=1)for(let w=y+1;w<a.length;w+=1){let $=kR(a[y],a[w],l,c,u,{threshold:o,rootDepth:r,icByTerm:i});m.push({a:a[y],b:a[w],...$}),$.distinct||p(a[y],a[w])}let h=new Map;for(let y of a){let w=f(y);h.has(w)||h.set(w,[]),h.get(w).push(y)}let g=y=>zu(y,l,u,new Set),b=[...h.values()].map(y=>{let w=[...y].sort(),$=w[0],_=g($);for(let v of w){let x=g(v);x>_&&(_=x,$=v)}return{objects:w,label:$}}).sort((y,w)=>y.label.localeCompare(w.label));return{split:b.length>1,clusters:b,pairs:m}}var Ia=L(()=>{Gt()});function Bu(e){return typeof e=="string"&&jR.test(e)}function zb(e){return!!e&&typeof e=="object"&&io(e.s)}function Uu(e){return!!e&&typeof e=="object"&&e.kind==="fact"&&Bu(e.world)&&io(e.subject)&&io(e.predicate)&&io(e.object)}function Wu(e){if(!e||typeof e!="object"||e.kind!=="rule"||!Bu(e.world)||!io(e.name)||!RR.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(io)}function Gu(e){return!!e&&typeof e=="object"&&e.kind==="meta"&&Bu(e.world)&&io(e.opening)}function Bb(e){return Uu(e)||Wu(e)||Gu(e)}function Ub(e){let t=e||[],n=t.filter(c=>c.predicate===TR).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 jR,_R,RR,io,TR,ti=L(()=>{jR=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,_R=Object.freeze(["action-signature","action-precond","action-effect","action-constraint"]),RR=new Set(_R),io=e=>typeof e=="string"&&e.trim()!=="";TR="mgx:default-contains"});var CR,OR,IR,LR,NR,PR,MR,FR,DR,TF,zR,Wb,AF,CF,Gb=L(()=>{ro();vr();CR="subClassOf",OR="typeAssertion",IR="relation",LR="someValuesFrom",NR="cardinality",PR="disjointWith",MR="possessive",FR="adjective",DR="capability",TF=Object.freeze([CR,OR,IR,LR,NR,PR,MR,FR,DR]),zR=new Set(["go","take","drop","open","unlock","close","give","look","talk","examine","dig","eat","put"]),Wb=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"]]),AF=Math.max(...[...Wb.keys()].map(e=>e.split(" ").length)),CF=[...new Set([...zR,...[...Wb.keys()].map(e=>e.split(" ")[0])])]});var ao=L(()=>{});var Hu=L(()=>{Ie();ws();ao()});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 BR,As,Ee,FF,si,tt,Nt,Vt,UR,Hb,St,WR,GR,Vb,DF,zF,BF,qb=L(()=>{BR=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"}),Ee=Object.freeze({Symbol:"seon:CodeEntity",Module:"mgx:Module",Class:"seon:ClassType",MemoryTerm:"mgx:MemoryTerm",Query:"cap:FreeText",Kind:"cap:KindFilter",Package:"cap:PackageName"}),FF=Object.freeze([Ee.MemoryTerm]),si=Object.freeze({graphLoaded:"cap:graph-loaded",resolves:"cap:resolves",anyPresent:"cap:any-present",memoryFacts:"cap:memory-facts"}),tt=(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}),Nt=()=>Object.freeze({type:As.Precondition,pred:si.graphLoaded}),Vt=(e,t)=>Object.freeze({type:As.Precondition,pred:si.resolves,param:e,as:t}),UR=e=>Object.freeze({type:As.Precondition,pred:si.anyPresent,params:Object.freeze([...e])}),Hb=()=>Object.freeze({type:As.Precondition,pred:si.memoryFacts}),St=(e,t=null)=>Object.freeze({type:As.Effect,pred:"cap:knows",topic:e,of:t?`?${t}`:null});WR=Object.freeze([kt({name:"tmct_search",label:"search",question:"lexical search across the graph",params:[tt("query",Ee.Query,{required:!1,note:"required unless a kind filter is given"}),tt("kind",Ee.Kind,{required:!1}),tt("name",Ee.Query,{required:!1}),tt("decorator",Ee.Query,{required:!1})],preconditions:[Nt(),UR(["query","kind"])],add:[St("matches","query")]}),kt({name:"tmct_describe",label:"describe",question:"a symbol's definition, kind and relations",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("description","symbol")]}),kt({name:"tmct_signature",label:"signature",question:"a symbol's signature only",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("signature","symbol")]}),kt({name:"tmct_impact",label:"impact",question:"what a change to this module or symbol reaches (impact closure)",params:[tt("module",Ee.Symbol,{note:"a Module, or any sited symbol \u2014 a fine-grained seed walks callsSymbol dependents and coarsens them to module grain"})],preconditions:[Nt(),Vt("module",Ee.Symbol)],add:[St("impact","module")]}),kt({name:"tmct_members",label:"members",question:"the methods/attributes of a class",params:[tt("class",Ee.Class,{arg:"class"})],preconditions:[Nt(),Vt("class",Ee.Class)],add:[St("members","class")]}),kt({name:"tmct_subclasses",label:"subclasses",question:"the subclasses of a class",params:[tt("class",Ee.Class,{arg:"class"})],preconditions:[Nt(),Vt("class",Ee.Class)],add:[St("subclasses","class")]}),kt({name:"tmct_exports",label:"exports",question:"a module's public exports",params:[tt("module",Ee.Module)],preconditions:[Nt(),Vt("module",Ee.Module)],add:[St("exports","module")]}),kt({name:"tmct_callers",label:"callers",question:"functions that call this symbol",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("callers","symbol")]}),kt({name:"tmct_callees",label:"callees",question:"functions this symbol calls",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("callees","symbol")]}),kt({name:"tmct_calls",label:"calls",question:"the call edges out of this symbol/module",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("calls","symbol")]}),kt({name:"tmct_tests_for",label:"tests",question:"the tests covering this symbol",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("tests","symbol")]}),kt({name:"tmct_untested",label:"untested",question:"symbols with no covering test",params:[],preconditions:[Nt()],add:[St("untested",null)]}),kt({name:"tmct_history",label:"history",question:"the commit history of this symbol",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("history","symbol")]}),kt({name:"tmct_cochanges",label:"cochanges",question:"symbols that change together with this one",params:[tt("symbol",Ee.Symbol)],preconditions:[Nt(),Vt("symbol",Ee.Symbol)],add:[St("cochanges","symbol")]}),kt({name:"tmct_architecture",label:"arch",question:"the architecture overview (optional package filter)",params:[tt("package",Ee.Package,{required:!1})],preconditions:[Nt()],add:[St("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:[tt("term",Ee.MemoryTerm,{note:"a concept term, matched against memory relation facts rather than resolved in the code graph"})],preconditions:[Hb(),Vt("term",Ee.MemoryTerm)],add:[St("related","term")]}),kt({name:"tmct_sprite",label:"sprite",question:"the sprite for a class, with the expression and size asked for",params:[tt("class",Ee.MemoryTerm,{arg:"class",note:"a world class, matched against the memory graph's own fact rows rather than resolved in the code graph"}),tt("expression",Ee.Kind,{required:!1,note:"one of sprite-expressions.mjs's palette words, carried as an mgx:feels fact"}),tt("size",Ee.Kind,{required:!1,note:"a taught mgx:hasProperty size word, resolved to a render scale \u2014 not a template tier"})],preconditions:[Hb(),Vt("class",Ee.MemoryTerm)],add:[St("sprite","class")]})]),GR=e=>Object.freeze(e.reduce((t,n)=>(t[n.name]=n,t),Object.create(null))),Vb=WR,DF=GR(Vb),zF=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"}),BF=Object.freeze({prefixes:BR,vocab:As,kinds:Ee,precond:si,get capabilities(){return Vb}})});var Kb=L(()=>{qb()});var Yb=L(()=>{us()});function VR(e=process.env){return e?.TMCT_WORLDS_PACK_DIR||Q(HR,"corpus","worlds")}function Xb(e){try{return Ta(nr(e))}catch{return null}}function Jb(e){if(Vu.has(e))return Vu.get(e);let t=null,n=Xb(Q(e,"index.json.gz"));if(n)try{let s=JSON.parse(n.toString("utf8"));s&&typeof s=="object"&&!Array.isArray(s)&&(t=s)}catch{}return Vu.set(e,t),t}function qR(e,t){let n=Jb(e);if(!n)return null;let s=n[String(t??"")];if(!zb(s))return null;let o=`${e}\0${t}`;if(qu.has(o))return qu.get(o);let r=null,i=Xb(Q(e,"shards",`${s.s}.jsonl.gz`));if(i){let a=[],l=[],c=null;for(let u of i.toString("utf8").split(`
165
+ `))if(u.trim())try{let d=JSON.parse(u);if(!Bb(d)||d.world!==t)continue;Uu(d)?a.push(d):Wu(d)?l.push(d):Gu(d)&&!c&&(c=d)}catch{}(a.length||l.length||c)&&(r={name:t,facts:Ub(a),rules:l,meta:c})}return qu.set(o,r),r}var YR,HR,Vu,qu,KR,eD,Ku=L(()=>{oo();Aa();Rs();Be();ti();YR={},HR=Q($e(Ht(YR.url)),"..","..","..");Vu=new Map,qu=new Map;KR=e=>({list:async()=>{let t=Jb(e());return t?Object.keys(t).sort():null},load:async t=>qR(e(),t)}),eD=KR(()=>VR())});var lD,Qb=L(()=>{jt();Be();as();br();us();Je();lD=Q(".tmct","memory","blocks")});var Zb=L(()=>{ao()});var tw=L(()=>{as();br();ao()});var Yu=L(()=>{as();br();ao()});var nw=L(()=>{Yu();as();Gs();ao()});var sw=L(()=>{});var ow=L(()=>{Zb();tw();Yu();nw();sw();ao()});var rw=L(()=>{Qb();Je();Hi();Lu();ow();Hu()});var nT,sT,oT,rT,iT,aT,cT,yz,vz,aw=L(()=>{ti();Gb();ro();ka();Hu();Kb();Yb();Ku();Je();rw();nT="mgx:world-epoch",sT=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:hidden-in"]),oT=new Set(["mgx:on-top-of","mgx:on-plane","mgx:under"]),rT="mgx:is-open",iT="mgx:hasMass",aT="mgx:knows-about",cT="mgx:display-name",yz=new Set([...sT,...oT,rT,iT,aT,cT,"rdf:type",nT]),vz=new RegExp("^(?:what\\s+foods?\\s+(?:do\\s+you\\s+know(?:\\s+about)?|have\\s+you\\s+(?:found|seen|heard\\s+(?:about|of))|do\\s+you\\s+know\\s+of)|what\\s+do\\s+you\\s+know\\s+about\\s+(?:any\\s+)?foods?|do\\s+you\\s+know\\s+(?:about|of)\\s+(?:any\\s+)?foods?|where\\s+is\\s+(?:the\\s+)?food)[?.!\\s]*$","i")});var La,xz,Ez,Sz,kz,or=L(()=>{La=Object.freeze({spiderFly:Object.freeze({spiderInitialMass:15,spiderMassDecrementPerTurn:.5,flyInitialMass:10,flyMassDecrementPerTurn:1,spiderVisionRadius:4,flyVisionRadius:4,eggHatchDelayTurns:3,flySpawnIntervalTurns:3,eggLayMassThreshold:25,eggHatchCount:2,minHatchlingMass:3,webDurationTurns:10}),mud:Object.freeze({moleInitialMass:8,moleMassDecrementPerTurn:.06,moleSpeed:1,moleDigReach:1,voleInitialMass:6,voleMassDecrementPerTurn:.05,voleSpeed:1,voleDigReach:1,badgerInitialMass:20,badgerMassDecrementPerTurn:.08,badgerSpeed:2,badgerDigReach:2,groundhogInitialMass:12,groundhogMassDecrementPerTurn:.06,groundhogSpeed:2,groundhogDigReach:2,meerkatInitialMass:9,meerkatMassDecrementPerTurn:.05,meerkatSpeed:1,meerkatDigReach:1}),guessNumber:Object.freeze({defaultLo:1,defaultHi:100,maxBound:1e9}),planning:Object.freeze({maxDepth:300})}),xz=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"}),Ez=Object.freeze({mole_initial_mass:"moleInitialMass",mole_mass_decrement_per_turn:"moleMassDecrementPerTurn",mole_speed:"moleSpeed",mole_dig_reach:"moleDigReach",vole_initial_mass:"voleInitialMass",vole_mass_decrement_per_turn:"voleMassDecrementPerTurn",vole_speed:"voleSpeed",vole_dig_reach:"voleDigReach",badger_initial_mass:"badgerInitialMass",badger_mass_decrement_per_turn:"badgerMassDecrementPerTurn",badger_speed:"badgerSpeed",badger_dig_reach:"badgerDigReach",groundhog_initial_mass:"groundhogInitialMass",groundhog_mass_decrement_per_turn:"groundhogMassDecrementPerTurn",groundhog_speed:"groundhogSpeed",groundhog_dig_reach:"groundhogDigReach",meerkat_initial_mass:"meerkatInitialMass",meerkat_mass_decrement_per_turn:"meerkatMassDecrementPerTurn",meerkat_speed:"meerkatSpeed",meerkat_dig_reach:"meerkatDigReach"}),Sz=Object.freeze({default_lo:"defaultLo",default_hi:"defaultHi",max_bound:"maxBound"}),kz=Object.freeze({max_depth:"maxDepth"})});var lT,cw,Rz,Xu=L(()=>{or();lT=Object.freeze({x:2,y:2}),cw=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})}),Rz=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 lw=L(()=>{});var uw=L(()=>{Xu();Gs();Je();ti();lw();Zt();or()});var r2,dw=L(()=>{Xu();uw();ti();Ku();Je();or();r2=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 ht,a2,c2,l2,u2,d2,p2,f2,m2,h2,g2,b2,w2,y2,v2,$2,x2,E2,S2,k2,pw=L(()=>{ht=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},a2=ht("createRequire"),c2=ht("readFileSync"),l2=ht("access"),u2=ht("readFile"),d2=ht("writeFile"),p2=ht("appendFile"),f2=ht("mkdir"),m2=ht("mkdtemp"),h2=ht("rename"),g2=ht("unlink"),b2=ht("rm"),w2=ht("stat"),y2=ht("copyFile"),v2=ht("readdir"),$2=ht("createReadStream"),x2=ht("createWriteStream"),E2=ht("randomBytes"),S2=ht("spawnSync"),k2=ht("createInterface")});var gt,_2,R2,T2,A2,C2,O2,I2,L2,N2,P2,M2,F2,D2,z2,B2,U2,W2,G2,hT,fw=L(()=>{gt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},_2=gt("createRequire"),R2=gt("readFileSync"),T2=gt("access"),A2=gt("readFile"),C2=gt("writeFile"),O2=gt("appendFile"),I2=gt("mkdir"),L2=gt("mkdtemp"),N2=gt("rename"),P2=gt("unlink"),M2=gt("rm"),F2=gt("stat"),D2=gt("copyFile"),z2=gt("readdir"),B2=gt("createReadStream"),U2=gt("createWriteStream"),W2=gt("randomBytes"),G2=gt("spawnSync"),hT=gt("createInterface")});var bt,V2,q2,K2,Y2,X2,J2,Q2,Z2,eB,tB,nB,sB,oB,rB,iB,aB,cB,mw,lB,Ju=L(()=>{bt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},V2=bt("createRequire"),q2=bt("readFileSync"),K2=bt("access"),Y2=bt("readFile"),X2=bt("writeFile"),J2=bt("appendFile"),Q2=bt("mkdir"),Z2=bt("mkdtemp"),eB=bt("rename"),tB=bt("unlink"),nB=bt("rm"),sB=bt("stat"),oB=bt("copyFile"),rB=bt("readdir"),iB=bt("createReadStream"),aB=bt("createWriteStream"),cB=bt("randomBytes"),mw=bt("spawnSync"),lB=bt("createInterface")});var hw=L(()=>{Ju();Be();jt();Be();da();Dt()});var gw=L(()=>{});var gT,bw=L(()=>{jt();Be();Je();gw();gT=Q(".tmct","sessions")});var yw=L(()=>{jt();Be();ja()});var wt,AB,CB,OB,IB,LB,NB,PB,MB,FB,DB,zB,BB,UB,WB,GB,HB,VB,qB,bT,vw=L(()=>{wt=e=>()=>{throw new Error(e+" unavailable in the browser ask bundle")},AB=wt("createRequire"),CB=wt("readFileSync"),OB=wt("access"),IB=wt("readFile"),LB=wt("writeFile"),NB=wt("appendFile"),PB=wt("mkdir"),MB=wt("mkdtemp"),FB=wt("rename"),DB=wt("unlink"),zB=wt("rm"),BB=wt("stat"),UB=wt("copyFile"),WB=wt("readdir"),GB=wt("createReadStream"),HB=wt("createWriteStream"),VB=wt("randomBytes"),qB=wt("spawnSync"),bT=wt("createInterface")});var yT,rr,$w,wT,xw,nU,ts,sU,Na,oU,Ew=L(()=>{oo();jt();vw();Rs();Be();ca();Je();yT={},rr=Q($e(Ht(yT.url)),"..","..",".."),$w=Q(rr,"corpus","conceptnet","slice.jsonl"),wT=Q(rr,"src","adapters","corpus","conceptnet-map.toml"),xw=Q(rr,"corpus","seon","concepts.jsonl"),nU=Q(rr,"corpus","seon","definitions.jsonl"),ts=Q(rr,"corpus","tier2"),sU=Q(ts,"manifest.json"),Na=Q(rr,"corpus","wordnet"),oU=Q(Na,"manifest.json")});function xT(){return{seon:{kind:"corpus",active:!1,corpusPath:xw,provenancePrefix:"corpus:seon"},conceptnet:{kind:"corpus",active:!1,corpusPath:$w,provenancePrefix:"corpus:conceptnet",limit:void 0,prefer:$T},human:{kind:"corpus",active:!0,corpusPath:Q(ts,"human.jsonl"),provenancePrefix:"corpus:human"},"human-medium":{kind:"corpus",active:!1,corpusPath:Q(ts,"human-medium.jsonl"),provenancePrefix:"corpus:human-medium"},"human-large":{kind:"corpus",active:!1,corpusPath:Q(ts,"human-large.jsonl"),provenancePrefix:"corpus:human-large"},"tier2-aws":{kind:"corpus",active:!1,corpusPath:Q(ts,"aws.jsonl"),provenancePrefix:"corpus:tier2-aws"},"tier2-python":{kind:"corpus",active:!1,corpusPath:Q(ts,"python.jsonl"),provenancePrefix:"corpus:tier2-python"},"tier2-java":{kind:"corpus",active:!1,corpusPath:Q(ts,"java.jsonl"),provenancePrefix:"corpus:tier2-java"},"tier2-general":{kind:"corpus",active:!1,corpusPath:Q(ts,"general.jsonl"),provenancePrefix:"corpus:tier2-general"},"wordnet-xl":{kind:"corpus",active:!1,corpusPath:Q(Na,"wordnet-xl.jsonl"),provenancePrefix:"corpus:wordnet-xl"},"wordnet-full":{kind:"corpus",active:!1,corpusPath:Q(Na,"wordnet-full.jsonl"),provenancePrefix:"corpus:wordnet-full"},namenet:{kind:"corpus",active:!1,corpusPath:Q(vT,"namenet.jsonl"),provenancePrefix:"corpus:namenet"}}}var ET,vT,hU,$T,gU,Sw=L(()=>{Be();jt();Rs();da();Ew();ET={},vT=Q($e(Ht(ET.url)),"..","..","corpus","namenet"),hU=Object.freeze(["corpus","lexicon","templates","pack","ontology"]),$T=["rdfs:subClassOf","rdf:type","mgx:usedFor","mgx:partOf","mgx:capableOf"];gU=Object.freeze(xT())});var kw=L(()=>{});var jw=L(()=>{Be();oo();jt();pw();fw();Ju();Dt();hw();Ie();bw();ja();yw();gr();Sw();Pa();or();ka();Fu();kw()});var _w={};Mn(_w,{proseLemma:()=>kT});function kT(){if(co!==void 0)return co;try{let e=Nu();if(!e)return co=null,co;let t=e.its,n=new Map;co=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{co=null}return co}var co,Rw=L(()=>{Pu()});var Tw={};Mn(Tw,{digestTermFromRows:()=>RT,loadDigestStructureTable:()=>_T,readDigestStructures:()=>jT});var jT,_T,RT,Aw=L(()=>{jT=()=>null,_T=()=>null,RT=()=>null});function ud(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 ${Ma(e.entityType)}`;if(t==="list")return`list/enumerate ${Ma(e.entityType)} matching a condition`;if(t==="superlative")return`rank/compare ${Ma(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 ud(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&&fn[o]?fn[o]:`filter/traverse ${Ma(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&&fn[s]||"check a specific subject/object relationship":(n==="reverse"||n==="forward")&&s?fn[s]||`understand a "${s}" relationship`:"understand a graph relationship"}function bd(e){let t=new Map;for(let n of e)t.has(Iw(n))||t.set(Iw(n),n);return t}function ed(e,t=ri){let n=[],s=[];for(let o of e)o.predicate===t&&(s.push([o.subject,o.object]),lo(o)&&n.push([o.subject,o.object]));return{strictEdges:n,broadEdges:s}}function td(e,t,n,s,o){return e(t,n,[],s.strictEdges,o)||e(t,n,[],s.broadEdges,o)}function LT(e,t){return!/ves$/i.test(e)||!/fe?$/i.test(t)?t:e.slice(0,-1)}async function NT(e){let t=String(e||"").toLowerCase();try{let{proseLemma:n}=await Promise.resolve().then(()=>(Rw(),_w)),s=n();return s?LT(t,s(t)):t}catch{return t}}function yd(e){let t=String(e||"").trim();if(/[a-z]ies$/i.test(t))return`${t.slice(0,-3)}y`;if(/[a-z]ses$/i.test(t)){let n=t.slice(0,-2);return/ss$/i.test(n)||PT.has(n.toLowerCase())?n:t.slice(0,-1)}return/(xes|zes|ches|shes)$/i.test(t)?t.slice(0,-2):/[a-z]s$/i.test(t)&&!/(?:ss|ous)$/i.test(t)?t.slice(0,-1):t}async function od(e){let t=String(e||"").toLowerCase();if(t==="has"||t==="have")return tr;if(t==="can")return"mgx:capableOf";try{let n=await NT(t);return n==="have"?tr:Jn(`mgx:${n}`)}catch{return Jn(`mgx:${t}`)}}function UT(e,t){let n=String(t||"").match(BT);return n&&/^mgx:[a-z]+$/.test(e)?{predicate:`${e}-${n[1].toLowerCase()}`,object:n[2].trim()}:{predicate:e,object:String(t||"").trim()}}async function oi(e,t){if(!e||!t)return null;try{let{resolveObject:n}=await Promise.resolve().then(()=>(ws(),Sm)),s=n(e,t);if(s?.match?.id&&!s.ambiguous)return{id:s.match.id,label:s.match.label}}catch{}return null}function VT(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 oy(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 ry(e){if(uo[e])return uo[e];let t=String(e||""),n=qm(t);if(n){let a=ry(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",oy(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:(${vd})-([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?`${VT(i[1])}${i[2]?` ${i[2]}`:""}`:e}function id(e){let t=/^mgx:([a-z][\w-]*)$/i.exec(String(e||""));return t?t[1].toLowerCase():null}function KT(e){let t=String(e||"").trim(),n=t.toLowerCase();for(let{marker:s,predicate:o}of qT)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 Nn(e){return e.replace(/#node:[0-9a-f]+/g,"")}function re(e){let t=e.provenance?` (source: ${Nn(e.provenance)})`:"";return e.provenance.includes("ace:chat")||e.provenance.includes("teach:chat")?`you told me: ${Pt(e)}${t}`:e.provenance.includes("corpus-weak:")?`possibly: ${Pt(e)}${t}`:e.provenance.includes("corpus:")?`${Pt(e)}${t}`:e.provenance.includes("reference:")?`${Pt(e)}${t}`:`i learned: ${Pt(e)}${t}`}function Pw(e,t,n){let s=re(e);if(!ss.has(e.predicate)||!n.has(e.subject))return s;let o=Ca(e.object,t,{cap:6});if(o.length<=1)return s;let r=` \u2192 ${o.slice(1).join(" \u2192 ")}`,i=s.match(YT);return i?s.slice(0,i.index)+r+i[0]:s+r}function Mw(e,t,n,{indent:s=""}={}){let o=t.filter(_=>_.predicate===ri).map(_=>[_.subject,_.object]),r=ei(o),i=e.map(_=>`${s}${Pw(_,r,n)}`),a=e.filter(_=>ss.has(_.predicate)&&n.has(_.subject)),l=[...new Set(a.map(_=>_.object))];if(l.length<2)return{lines:i,grouped:null};let c=t.filter(_=>_.predicate==="owl:disjointWith").map(_=>[_.subject,_.object]),{split:u,clusters:d}=Oa(l,{parents:r,disjointEdges:c});if(!u)return{lines:i,grouped:null};let f=a[0].subject,p=new Map;for(let _ of d)for(let v of _.objects)p.set(v,_);let m=e.filter(_=>!(ss.has(_.predicate)&&n.has(_.subject))),h=[],g=[],b=0,y=_=>{let v=Pw(_,r,n);return b<je?(b+=1,`${s}${v}`):(g.push(v),null)};for(let _ of d){let v=a.filter(x=>p.get(x.object)===_).map(y).filter(Boolean);v.length&&h.push(`${s}${f}, the ${_.label}:
133
166
  ${v.join(`
134
- `)}`)}if(m.length){let j=m.map(y).filter(Boolean);j.length&&h.push(`${s}also about ${f}:
135
- ${j.join(`
167
+ `)}`)}if(m.length){let _=m.map(y).filter(Boolean);_.length&&h.push(`${s}also about ${f}:
168
+ ${_.join(`
136
169
  `)}`)}let w=g.length?`
137
170
  ${s}\u2026and ${g.length} more \u2014 say 'more' to see them.`:"",$={text:h.join(`
138
- `)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:$}}async function R_(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(Kg(),Hg)))}catch{return null}let r;try{r=o(e,t,n)}catch{return null}if(!r||!r.paragraphs.length)return null;let i=[...new Set((r.sources||[]).map(u=>u.provenance).filter(Boolean))],a=i.length?`(sources: ${i.join("; ")})
171
+ `)+w,replace:!0,...g.length?{pending:{items:g,noun:"facts"}}:{}};return{lines:i,grouped:$}}async function JT(e,t,n,s){let o;try{({digestTermFromRows:o}=await Promise.resolve().then(()=>(Aw(),Tw)))}catch{return null}let r;try{r=o(e,t,n)}catch{return null}if(!r||!r.paragraphs.length)return null;let i=[...new Set((r.sources||[]).map(u=>u.provenance).filter(Boolean))],a=i.length?`(sources: ${i.join("; ")})
139
172
  `:"",l=`Say 'show the facts' for all ${s.length} stored facts.`;return{text:`${r.paragraphs.join(`
140
173
 
141
174
  `)}
142
175
 
143
- ${a}${l}`,pending:{items:s,noun:"facts"}}}function Mo(e){let t=Ol().find(n=>n.kind==="article");return t&&Vh(String(e||""),t)?"an":"a"}function Sb(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${oe(e)}; ${oe(t)}. To settle it, say "forget that ${e.subject} is ${Mo(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${oe(t)}`,replace:!0}:e?{text:`yes \u2014 ${oe(e)}`,replace:!0}:null}function A_(e,t){let n=s=>`${It(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 ${Mo(e.object)} ${e.object}".`,replace:!0}}function sa(e){let t=o=>`${It(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 iu(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Je(),us)),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 ot(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Je(),us)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function T_(e){if(!oa)try{oa=ps().nounPlurals}catch{oa=new Map}return oa.get(e)??null}function ia(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return Rr(ps(),t)?.lemma||t}catch{return t}}function C_(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return ia(e);let n=ia(wu(t[1]));return`${Mo(n)} ${n}`}function Y(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(O_,"").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=T_(i);a&&s.add(e(a))}return s}function nb(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 Rb(e,t=null){let n=aa(e),s=n.match(I_);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(N_);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function du(e){let t=String(e||"").replace(F_,"");if(t!==e){let s=t.match(ms);if(s)return s}let n=String(e||"").match(D_);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(ms):null}function fu(e){return String(e||"").replace(/^(?:can't|cannot|can not|cant)\s+/i,"can ").replace(/^(?:doesn't|does not)\s+/i,"does ").replace(/^(?:don't|do not)\s+/i,"do ").replace(/^(?:didn't|did not)\s+/i,"did ").replace(/\s+(?:not|never)\s+/i," ").replace(/\s+/g," ").trim()}function rb(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function Z_(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=>`${It(s)}${s.provenance?` (source: ${s.provenance})`:""}`).join("; ")}function ab(e,t,n,{maxHops:s=3}={}){let o=Y(X,e),r=Y(X,t),i=xi(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?Z_(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:
144
- ${[...i.negative,...i.positive].map(oe).join(`
145
- `)}`,replace:!0,miss:!0};if(i.verdict==="yes"||i.verdict==="no"){let l=i.verdict==="no"?i.negative[0]:i.positive[0],c=`${i.verdict} \u2014 ${oe(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${oe(i.overrides.fact)}`),{text:c,replace:!0}}return null}function cb(e,t,n,{maxHops:s=3}={}){let o=Y(X,e),r=Y(X,t),i=Bc(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,zc).map(f=>oe(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
176
+ ${a}${l}`,pending:{items:s,noun:"facts"}}}function ir(e){let t=Iu().find(n=>n.kind==="article");return t&&_b(String(e||""),t)?"an":"a"}function iy(e,t){return e&&t?{text:`you've told me both, and I won't pick between them \u2014 ${re(e)}; ${re(t)}. To settle it, say "forget that ${e.subject} is ${ir(e.object)} ${e.object}".`,replace:!0}:t?{text:`no \u2014 ${re(t)}`,replace:!0}:e?{text:`yes \u2014 ${re(e)}`,replace:!0}:null}function QT(e,t){let n=s=>`${Pt(s)}${s.provenance?` (source: ${Nn(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 ${ir(e.object)} ${e.object}".`,replace:!0}}function Fa(e){let t=o=>`${Pt(o)}${o.provenance?` (source: ${Nn(o.provenance)})`:""}`,n=e[0],s=e[e.length-1];return`${e.map(t).join("; ")}; so ${n.subject} is a ${s.object}`}async function ad(e){try{let{loadMemory:t}=await Promise.resolve().then(()=>(Je(),_s)),n=await t(e),s=[];for(let o of n.individuals||[]){if(o?.class!=="Fact")continue;let r=i=>(o.attributes||[]).find(a=>a.key===i)?.value||"";s.push({subject:r("subject"),predicate:r("predicate"),object:r("object"),provenance:r("provenance")})}return s}catch{return[]}}async function it(e,t=null){if(t?.rows)return t.rows;try{let{loadMemory:n,readFactRows:s}=await Promise.resolve().then(()=>(Je(),_s)),o=s(await n(e));return t&&(t.rows=o,t.reloads=(t.reloads||0)+1),o}catch{return[]}}function ZT(e){if(!Da)try{Da=Ts().nounPlurals}catch{Da=new Map}return Da.get(e)??null}function Ba(e){let t=String(e||"").trim().toLowerCase();if(!t||/\s/.test(t))return t;try{return Zr(Ts(),t)?.lemma||t}catch{return t}}function eA(e){let t=String(e||"").trim().match(/^(?:all|every|each|both|most|some)\s+([\w-]+)$/i);if(!t)return Ba(e);let n=Ba(yd(t[1]));return`${ir(n)} ${n}`}function Y(e,t){let n=e(t),s=new Set,o=new Set([n]),r=n.replace(tA,"").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=ZT(i);a&&s.add(e(a))}return s}function Fw(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 ly(e,t=null){let n=Ua(e),s=n.match(nA);if(s)return[s[0],s[2],s[1]];if(!t)return null;let o=n.match(oA);return o&&t(o[1])?[o[0],o[2],o[1]]:null}function pd(e){let t=String(e||"").replace(aA,"");if(t!==e){let s=t.match(Cs);if(s)return s}let n=String(e||"").match(cA);return n?`is ${n[1].trim()} a ${n[2].trim()}`.match(Cs):null}function md(e){return String(e||"").replace(/^(?:can't|cannot|can not|cant)\s+/i,"can ").replace(/^(?:doesn't|does not)\s+/i,"does ").replace(/^(?:don't|do not)\s+/i,"do ").replace(/^(?:didn't|did not)\s+/i,"did ").replace(/\s+(?:not|never)\s+/i," ").replace(/\s+/g," ").trim()}function zw(e){let t=String(e.text||"").replace(/^(?:yes|no) — /i,"");return t===e.text?e:{...e,text:t}}function EA(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=>`${Pt(s)}${s.provenance?` (source: ${Nn(s.provenance)})`:""}`).join("; ")}function Uw(e,t,n,{maxHops:s=3}={}){let o=Y(X,e),r=Y(X,t),i=Ji(o,r,n,{maxHops:s}),a=l=>{let c=l&&l.length?EA(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:
177
+ ${[...i.negative,...i.positive].map(re).join(`
178
+ `)}`,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 ${re(l)}${a(i.chain)}`;return i.overrides&&(c+=`. That overrides what I know about ${i.overrides.fact.subject} generally: ${re(i.overrides.fact)}`),{text:c,replace:!0}}return null}function Ww(e,t,n,{maxHops:s=3}={}){let o=Y(X,e),r=Y(X,t),i=Sl(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,El).map(f=>re(f.fact));return{text:`${l} ${a}, and of the ${i.kinds} kind${i.kinds===1?"":"s"} of ${i.klass} I know, ${u}.
146
179
  ${d.join(`
147
- `)}`,replace:!0,miss:!0}}let c=Uc(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,zc),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)`:""}:
148
- ${u.map(oe).join(`
149
- `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(oe),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function nR(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 an(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 Tb(e,t,n,s,o={},r=null,i=null){return Cb(await cR(e,t,n,s,o,r,i),n,t)}function Cb(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=lu(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Yg),!o){let r=s.match(uu),i=r?null:aa(s).match(_b)||Rb(s),a=r?r[2]:i?i[1]:null;a&&!pu.has(a.toLowerCase())&&(o=Yg)}if(!o){let r=s.match(Ib);r&&(o=lu({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function cR(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(Je(),us)))}catch{return null}let c=String(t).trim(),u=c.match(V_);if(u){let D=Y(a,u[1]),z=(await ot(e,r)).filter(U=>U.predicate==="mgx:usedFor"&&D.has(U.object));if(z.length){let C=Qe(an(z),o).map(oe),I=C.slice(0,je),O=C.slice(je),N=O.length?`
180
+ `)}`,replace:!0,miss:!0}}let c=kl(r,n,{exclude:new Set([...o,i.klass])});if(c.length){let u=c.slice(0,El),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)`:""}:
181
+ ${u.map(re).join(`
182
+ `)}`,replace:!0,miss:!0,...d.length?{pending:{items:d.map(re),noun:"facts"}}:{}}}return{text:`${l} ${a}, but nothing I remember says whether any kind of ${i.klass} can ${t}.`,replace:!0,miss:!0}}function jA(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 pn(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 dy(e,t,n,s,o={},r=null,i=null){return py(await OA(e,t,n,s,o,r,i),n,t)}function py(e,t,n){if(!e||e.goal!==void 0)return e;let s=String(n||"").trim(),o=ud(t?.parsed);if(!o&&e.generalVerbQuery&&(o=Cw),!o){let r=s.match(dd),i=r?null:Ua(s).match(cy)||ly(s),a=r?r[2]:i?i[1]:null;a&&!fd.has(a.toLowerCase())&&(o=Cw)}if(!o){let r=s.match(my);r&&(o=ud({shape:"meta",object:r[1]}))}return o?{...e,goal:o}:e}async function OA(e,t,n,s,o={},r=null,i=null){let a,l;try{({normFactTerm:a,normFactPredicate:l}=await Promise.resolve().then(()=>(Je(),_s)))}catch{return null}let c=String(t).trim(),u=c.match(mA);if(u){let D=Y(a,u[1]),z=(await it(e,r)).filter(W=>W.predicate==="mgx:usedFor"&&D.has(W.object));if(z.length){let C=Qe(pn(z),o).map(re),I=C.slice(0,je),O=C.slice(je),N=O.length?`
150
183
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
151
- `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}for(let{predicate:D,re:z}of oR){let U=c.match(z);if(!U)continue;let C=Y(a,U[1]),I=(await ot(e,r)).filter(ae=>ae.predicate===D&&C.has(ae.object));if(!I.length)continue;let N=Qe(an(I),o).map(oe),F=N.slice(0,je),W=N.slice(je),H=W.length?`
152
- \u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
153
- `)+H,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}let d=c.match(eR),f=d?null:c.match(tR),p=d?d[1]:f?.[2],m=d?d[2]:f?.[1],h=p&&m?nR(m):null;if(h){let D=`mgx:${h.replace(/\s+/g,"-")}-than`,z=await ot(e,r),U=Y(a,p),C=[...U].sort((N,F)=>N.length-F.length)[0],I=N=>U.has(N)||N.startsWith(`${C}-`)||N.startsWith(`${C} `)||z.some(F=>Vn.has(F.predicate)&&F.subject===N&&U.has(F.object)),O=an(z.filter(N=>N.predicate===D&&Ks(N))).filter(N=>N.subject!==N.object&&I(N.subject)&&I(N.object));if(O.length){let N=new Set,F=new Map;for(let K of O)N.add(K.subject),N.add(K.object),F.set(K.object,(F.get(K.object)||0)+1),F.has(K.subject)||F.set(K.subject,F.get(K.subject)||0);let W=new Map(F),H=[],ae=null;for(;W.size;){let K=[...W.keys()].filter(V=>W.get(V)===0);if(K.length!==1){ae=K.length===0?{text:`I can't order the ${C}s \u2014 the "${h} than" facts I have loop back on themselves, so no ${m} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${m} ${C} from what I know \u2014 nothing compares ${K[0]} and ${K[1]}. Teach me, e.g. "${K[0]} is ${h} than ${K[1]}".`,replace:!0,miss:!0};break}let Z=K[0];H.push(Z),W.delete(Z);for(let V of O)V.subject===Z&&W.has(V.object)&&W.set(V.object,W.get(V.object)-1)}if(ae)return ae;let ce=H.slice(0,-1).map((K,Z)=>O.find(V=>V.subject===K&&V.object===H[Z+1]));if(ce.every(Boolean)){let K=ce.map(Z=>`${It(Z)}${Z.provenance?` (source: ${Z.provenance})`:""}`).join("; ");return{text:`${H[0]} \u2014 ${K}; so ${H[0]} is the ${m} ${C}`,replace:!0}}}}let g=s?c.match(q_):null;if(g){let D=Y(a,g[1]),z=(await ot(e,r)).filter(U=>ob.test(U.predicate)&&D.has(U.subject));if(z.length){let C=Qe(an(z),o).map(oe),I=C.slice(0,je),O=C.slice(je),N=O.length?`
184
+ `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}for(let{predicate:D,re:z}of RA){let W=c.match(z);if(!W)continue;let C=Y(a,W[1]),I=(await it(e,r)).filter(ae=>ae.predicate===D&&C.has(ae.object));if(!I.length)continue;let N=Qe(pn(I),o).map(re),F=N.slice(0,je),G=N.slice(je),q=G.length?`
185
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
186
+ `)+q,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}let d=c.match(SA),f=d?null:c.match(kA),p=d?d[1]:f?.[2],m=d?d[2]:f?.[1],h=p&&m?jA(m):null;if(h){let D=`mgx:${h.replace(/\s+/g,"-")}-than`,z=await it(e,r),W=Y(a,p),C=[...W].sort((N,F)=>N.length-F.length)[0],I=N=>W.has(N)||N.startsWith(`${C}-`)||N.startsWith(`${C} `)||z.some(F=>ss.has(F.predicate)&&F.subject===N&&W.has(F.object)),O=pn(z.filter(N=>N.predicate===D&&lo(N))).filter(N=>N.subject!==N.object&&I(N.subject)&&I(N.object));if(O.length){let N=new Set,F=new Map;for(let K of O)N.add(K.subject),N.add(K.object),F.set(K.object,(F.get(K.object)||0)+1),F.has(K.subject)||F.set(K.subject,F.get(K.subject)||0);let G=new Map(F),q=[],ae=null;for(;G.size;){let K=[...G.keys()].filter(H=>G.get(H)===0);if(K.length!==1){ae=K.length===0?{text:`I can't order the ${C}s \u2014 the "${h} than" facts I have loop back on themselves, so no ${m} exists. /memory to inspect them.`,replace:!0,miss:!0}:{text:`I can't pick the ${m} ${C} from what I know \u2014 nothing compares ${K[0]} and ${K[1]}. Teach me, e.g. "${K[0]} is ${h} than ${K[1]}".`,replace:!0,miss:!0};break}let ee=K[0];q.push(ee),G.delete(ee);for(let H of O)H.subject===ee&&G.has(H.object)&&G.set(H.object,G.get(H.object)-1)}if(ae)return ae;let ce=q.slice(0,-1).map((K,ee)=>O.find(H=>H.subject===K&&H.object===q[ee+1]));if(ce.every(Boolean)){let K=ce.map(ee=>`${Pt(ee)}${ee.provenance?` (source: ${Nn(ee.provenance)})`:""}`).join("; ");return{text:`${q[0]} \u2014 ${K}; so ${q[0]} is the ${m} ${C}`,replace:!0}}}}let g=s?c.match(hA)||c.match(gA):null;if(g){let D=Y(a,g[1]),z=(await it(e,r)).filter(W=>ho(W.predicate)!==null&&D.has(W.subject));if(z.length){let C=Qe(pn(z),o).map(re),I=C.slice(0,je),O=C.slice(je),N=O.length?`
154
187
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
155
- `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}let b=c.match(H_);if(b){let D=b[1].toLowerCase(),z=Y(a,b[2].replace(/^(?:an?|the)\s+/i,"").trim()),U=(await ot(e,r)).filter(C=>ob.test(C.predicate)&&C.predicate.endsWith(`-${D}`)&&z.has(C.object));if(U.length){let I=Qe(an(U),o).map(oe),O=I.slice(0,je),N=I.slice(je),F=N.length?`
188
+ `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}let b=c.match(bA);if(b){let D=b[1].toLowerCase(),z=Y(a,b[2].replace(/^(?:an?|the)\s+/i,"").trim()),W=(await it(e,r)).filter(C=>ho(C.predicate)===D&&z.has(C.object));if(W.length){let I=Qe(pn(W),o).map(re),O=I.slice(0,je),N=I.slice(je),F=N.length?`
156
189
  \u2026and ${N.length} more \u2014 say 'more' to see them.`:"";return{text:O.join(`
157
- `)+F,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}}}let y=c.match(K_);if(y){let D=y[3].toLowerCase(),z=Y(a,y[2]),U=new Set([...Y(a,y[1])].map(I=>l(`mgx:${D}-${I.replace(/\s+/g,"-")}`))),C=(await ot(e,r)).filter(I=>U.has(l(I.predicate))&&z.has(a(I.subject)));if(C.length){let O=Qe(an(C),o).map(oe),N=O.slice(0,je),F=O.slice(je),W=F.length?`
190
+ `)+F,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}}}let y=c.match(wA);if(y){let D=y[3].toLowerCase(),z=Y(a,y[2]),W=new Set([...Y(a,y[1])].map(I=>l(`mgx:${D}-${I.replace(/\s+/g,"-")}`))),C=(await it(e,r)).filter(I=>W.has(l(I.predicate))&&z.has(a(I.subject)));if(C.length){let O=Qe(pn(C),o).map(re),N=O.slice(0,je),F=O.slice(je),G=F.length?`
158
191
  \u2026and ${F.length} more \u2014 say 'more' to see them.`:"";return{text:N.join(`
159
- `)+W,replace:!0,...F.length?{pending:{items:F,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,$=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!$&&!lb.test(c)){let D=c.match(Ib)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);D&&(w=ws(D[1]))}if(!w&&n?.ambiguous&&Array.isArray(n.candidateParses)){let D=n.candidateParses.find(z=>z?.shape==="meta"&&z.object);D&&(w=ws(String(D.object)))}if(w){let D=S_(w),{predicate:z}=D,U=D.subject.replace(/^(?:the|an?)\s+/i,"").trim()||D.subject,C=!1;if(z&&Gn.test(U)){if(!i){let V=String(Ys[z]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${U.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${V?` ${V}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}U=i,C=!0}let I=Y(a,U),O=(await ot(e,r)).filter(V=>I.has(V.subject)&&!Zg.has(V.predicate)),N=z?O.filter(V=>l(V.predicate)===z):O;if(!z&&N.length&&!N.some(au)&&(N=[]),!N.length){if(z&&(O.length||C))return{text:`I don't have any "${Ys[z]}" facts about ${U}.`,replace:s,...O.length?{}:{miss:!0}};if(!z){let V=Qe((await ot(e,r)).filter(ne=>I.has(ne.object)),o);if(V.length&&!V.some(au)&&(V=[]),V.length){let ne=V.map(oe),te=ne.slice(0,je),$e=ne.slice(je),Te=$e.length?`
160
- \u2026and ${$e.length} more \u2014 say 'more' to see them.`:"";return{text:te.join(`
161
- `)+Te,replace:s,...$e.length?{pending:{items:$e,noun:"facts"}}:{}}}}return null}N=Qe(N,o);let F=await ot(e,r),{lines:W,grouped:H}=tb(N,F,I),ae=!z&&W.length>__?await R_(U,N,F,W):null;if(ae)return{...ae,replace:s};if(H)return{...H,replace:s};let ce=W.slice(0,je),K=W.slice(je),Z=K.length?`
192
+ `)+G,replace:!0,...F.length?{pending:{items:F,noun:"facts"}}:{}}}}let w=n?.parsed?.shape==="meta"?n.parsed.object:null,$=n?.parsed&&n.parsed.node!=="miss";if(!w&&s&&!$&&!Gw.test(c)){let D=c.match(my)||c.match(/^what\s+(?:does|do)\s+(.+?)\s+means?[?.!\s]*$/i);D&&(w=Ps(D[1]))}if(!w&&n?.ambiguous&&Array.isArray(n.candidateParses)){let D=n.candidateParses.find(z=>z?.shape==="meta"&&z.object);D&&(w=Ps(String(D.object)))}if(w){let D=KT(w),{predicate:z}=D,W=D.subject.replace(/^(?:the|an?)\s+/i,"").trim()||D.subject,C=!1;if(z&&ns.test(W)){if(!i){let H=String(uo[z]||"").replace(/^(?:is|are)\s+/,"");return{text:`not sure what "${W.toLowerCase()}" refers to yet \u2014 name the subject directly, e.g. "what is a <name>${H?` ${H}`:""}".`,replace:s,miss:!0,selfContainedMiss:!0}}W=i,C=!0}let I=Y(a,W),O=(await it(e,r)).filter(H=>I.has(H.subject)&&!Nw.has(H.predicate)),N=z?O.filter(H=>l(H.predicate)===z):O;if(!z&&N.length&&!N.some(cd)&&(N=[]),!N.length){if(z&&(O.length||C))return{text:`I don't have any "${uo[z]}" facts about ${W}.`,replace:s,...O.length?{}:{miss:!0}};if(!z){let H=Qe((await it(e,r)).filter(se=>I.has(se.object)),o);if(H.length&&!H.some(cd)&&(H=[]),H.length){let se=H.map(re),te=se.slice(0,je),xe=se.slice(je),Ae=xe.length?`
193
+ \u2026and ${xe.length} more \u2014 say 'more' to see them.`:"";return{text:te.join(`
194
+ `)+Ae,replace:s,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}return null}N=Qe(N,o);let F=await it(e,r),{lines:G,grouped:q}=Mw(N,F,I),ae=!z&&G.length>XT?await JT(W,N,F,G):null;if(ae)return{...ae,replace:s};if(q)return{...q,replace:s};let ce=G.slice(0,je),K=G.slice(je),ee=K.length?`
162
195
  \u2026and ${K.length} more \u2014 say 'more' to see them.`:"";return{text:ce.join(`
163
- `)+Z,replace:s,...K.length?{pending:{items:K,noun:"facts"}}:{}}}if(!s)return null;let j=c.match(d_);if(j){let z=`mgx:${j[2].toLowerCase().replace(/\s+/g,"-")}-than`,U=await iu(e),C=ce=>{let K=ce.replace(/^(?:an?|the)\s+/i,"").trim();return i&&Gn.test(K)?i:K},I=C(j[1]),O=C(j[3]),N=Y(a,I),F=Y(a,O),W=U.find(ce=>ce.predicate===z&&N.has(ce.subject)&&F.has(ce.object));if(W){let ce=U.find(Z=>Z.predicate===z&&N.has(Z.object)&&F.has(Z.subject)),K=ce?` \u2014 though you also told me the opposite: ${oe(ce)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${oe(W)}${K}`,replace:!0}}let H=U.filter(ce=>ce.predicate===z&&(N.has(ce.subject)||N.has(ce.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${H.length?` I do know: ${H.slice(0,3).map(oe).join("; ")}.`:""} If it's true, teach me: "${I} is ${j[2].toLowerCase()} than ${O}".`,replace:!0,miss:!0}}for(let{predicate:D,phrase:z,re:U}of iR){let C=c.match(U);if(!C)continue;let I=await iu(e),O=Y(a,C[1]),N=Y(a,C[2]),F=I.find(H=>H.predicate===D&&O.has(H.subject)&&N.has(H.object));if(F)return{text:`yes \u2014 ${oe(F)}`,replace:!0};let W=I.filter(H=>H.predicate===D&&O.has(H.subject));if(W.length){let H=W.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${C[1]} ${z} ${C[2]}. I do know: ${H}.`,replace:!0,miss:!0}}if(!n?.parsed&&I.some(H=>O.has(H.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${C[1]} ${z} ${C[2]}.`,replace:!0,miss:!0};break}let v=c.match(ms)||du(c);if(v){let D=Y(a,v[1]),z=Y(a,v[2]),U=await ot(e,r),C=F=>D.has(F.subject)&&z.has(F.object),{DISJOINT_PREDICATE:I}=await Promise.resolve().then(()=>(Bt(),on)),O=F=>D.has(F.subject)||D.has(F.object)||z.has(F.subject)||z.has(F.object);return U.some(F=>F.predicate===I&&Ks(F)&&O(F))?null:Sb(U.find(F=>Vn.has(F.predicate)&&C(F)),U.find(F=>F.predicate===vi&&C(F)))}let E=fu(c),k=E.match(B_);if(k){let D=await ot(e,r),z=k[1],U=ab(k[2],k[3],D);if(U&&E!==ib(c)&&(U=rb(U)),U&&z)return{text:`I can't speak for ${z.trim()} ${k[2]} \u2014 what I remember is generic, not universal. ${U.text}.`,replace:!0};if(U)return U;let C=Y(a,k[2]),I=D.filter(O=>O.predicate==="mgx:capableOf"&&C.has(O.subject));if(I.length){let O=I.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${k[2]} can ${k[3]}. I do know: ${O}. If it's true, teach me: "a ${I[0].subject} can ${k[3]}".`,replace:!0,miss:!0}}return cb(k[2],k[3],D)}let _=c.match(U_);if(_){let D=Y(a,_[1]),z=Y(a,_[2]),U=new Set(["mgx:hasA","tmct:has"]),C=await iu(e),I=W=>C.find(H=>U.has(H.predicate)&&W.has(H.subject)&&z.has(H.object)),O=I(D);if(O)return{text:`yes \u2014 ${oe(O)}`,replace:!0};let N=[{terms:D,chain:[]}],F=new Set;for(let W=0;W<4;W+=1){let H=[];for(let{terms:ae,chain:ce}of N){let K=C.filter(Z=>Vn.has(Z.predicate)&&ae.has(Z.subject)&&!F.has(Z.object));for(let Z of K){if(F.has(Z.object))continue;F.add(Z.object);let V=[...ce,Z],ne=I(Y(a,Z.object));if(ne)return{text:`yes \u2014 ${[...V.map(oe),oe(ne)].join("; ")}`,replace:!0};H.push({terms:Y(a,Z.object),chain:V})}}if(!H.length)break;N=H}return null}let R=fu(c),x=R.match(Y_);if(x){let D=await ot(e,r),z=!!x[1],U=Y(a,x[2]),C=Y(a,x[3]),I=ab(x[2],x[3],D);if(I&&R!==ib(c)&&(I=rb(I)),I&&z)return{text:`I can't speak for ${x[1].trim()} ${x[2]} \u2014 what I remember is generic, not universal. ${I.text}.`,replace:!0};if(I)return I;if(s){let O=D.filter(F=>F.predicate==="mgx:capableOf"&&U.has(F.subject));if(O.length){let F=O.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${x[2]} can ${x[3]}. I do know: ${F}. If it's true, teach me: "a ${O[0].subject} can ${x[3]}".`,replace:!0,miss:!0}}let N=cb(x[2],x[3],D);if(N)return N;if(!/\s/.test(x[2].trim())&&!D.some(F=>U.has(F.subject)||U.has(F.object))){let F=wu(ia(x[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${x[2]}" yet. Teach me "a ${F} can ${x[3]}" (or "a ${F} cannot ${x[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let T=c.match(W_);if(T){let D=Y(a,T[1]),z=(await ot(e,r)).filter(F=>(F.predicate==="mgx:capableOf"||F.predicate===xo)&&D.has(F.subject));if(!z.length)return null;let C=Qe(an(z),o).map(oe),I=C.slice(0,je),O=C.slice(je),N=O.length?`
196
+ `)+ee,replace:s,...K.length?{pending:{items:K,noun:"facts"}}:{}}}if(!s)return null;let _=c.match(OT);if(_){let z=`mgx:${_[2].toLowerCase().replace(/\s+/g,"-")}-than`,W=await ad(e),C=ce=>{let K=ce.replace(/^(?:an?|the)\s+/i,"").trim();return i&&ns.test(K)?i:K},I=C(_[1]),O=C(_[3]),N=Y(a,I),F=Y(a,O),G=W.find(ce=>ce.predicate===z&&N.has(ce.subject)&&F.has(ce.object));if(G){let ce=W.find(ee=>ee.predicate===z&&N.has(ee.object)&&F.has(ee.subject)),K=ce?` \u2014 though you also told me the opposite: ${re(ce)}. Both are stored; I won't silently pick one.`:"";return{text:`yes \u2014 ${re(G)}${K}`,replace:!0}}let q=W.filter(ce=>ce.predicate===z&&(N.has(ce.subject)||N.has(ce.object)));return{text:`I can't confirm that \u2014 nothing I remember compares them that way.${q.length?` I do know: ${q.slice(0,3).map(re).join("; ")}.`:""} If it's true, teach me: "${I} is ${_[2].toLowerCase()} than ${O}".`,replace:!0,miss:!0}}for(let{predicate:D,phrase:z,re:W}of AA){let C=c.match(W);if(!C)continue;let I=await ad(e),O=Y(a,C[1]),N=Y(a,C[2]),F=I.find(q=>q.predicate===D&&O.has(q.subject)&&N.has(q.object));if(F)return{text:`yes \u2014 ${re(F)}`,replace:!0};let G=I.filter(q=>q.predicate===D&&O.has(q.subject));if(G.length){let q=G.slice(0,3).map(re).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${C[1]} ${z} ${C[2]}. I do know: ${q}.`,replace:!0,miss:!0}}if(!n?.parsed&&I.some(q=>O.has(q.subject)))return{text:`I can't confirm that \u2014 nothing I remember says ${C[1]} ${z} ${C[2]}.`,replace:!0,miss:!0};break}let v=c.match(Cs)||pd(c);if(v){let D=Y(a,v[1]),z=Y(a,v[2]),W=await it(e,r),C=F=>D.has(F.subject)&&z.has(F.object),{DISJOINT_PREDICATE:I}=await Promise.resolve().then(()=>(Gt(),cn)),O=F=>D.has(F.subject)||D.has(F.object)||z.has(F.subject)||z.has(F.object);return W.some(F=>F.predicate===I&&lo(F)&&O(F))?null:iy(W.find(F=>ss.has(F.predicate)&&C(F)),W.find(F=>F.predicate===Yi&&C(F)))}let x=md(c),E=x.match(uA);if(E){let D=await it(e,r),z=E[1],W=Uw(E[2],E[3],D);if(W&&x!==Bw(c)&&(W=zw(W)),W&&z)return{text:`I can't speak for ${z.trim()} ${E[2]} \u2014 what I remember is generic, not universal. ${W.text}.`,replace:!0};if(W)return W;let C=Y(a,E[2]),I=D.filter(O=>O.predicate==="mgx:capableOf"&&C.has(O.subject));if(I.length){let O=I.slice(0,3).map(re).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${E[2]} can ${E[3]}. I do know: ${O}. If it's true, teach me: "a ${I[0].subject} can ${E[3]}".`,replace:!0,miss:!0}}return Ww(E[2],E[3],D)}let S=c.match(dA);if(S){let D=Y(a,S[1]),z=Y(a,S[2]),W=new Set(["mgx:hasA","tmct:has"]),C=await ad(e),I=G=>C.find(q=>W.has(q.predicate)&&G.has(q.subject)&&z.has(q.object)),O=I(D);if(O)return{text:`yes \u2014 ${re(O)}`,replace:!0};let N=[{terms:D,chain:[]}],F=new Set;for(let G=0;G<4;G+=1){let q=[];for(let{terms:ae,chain:ce}of N){let K=C.filter(ee=>ss.has(ee.predicate)&&ae.has(ee.subject)&&!F.has(ee.object));for(let ee of K){if(F.has(ee.object))continue;F.add(ee.object);let H=[...ce,ee],se=I(Y(a,ee.object));if(se)return{text:`yes \u2014 ${[...H.map(re),re(se)].join("; ")}`,replace:!0};q.push({terms:Y(a,ee.object),chain:H})}}if(!q.length)break;N=q}return null}let R=md(c),k=R.match(yA);if(k){let D=await it(e,r),z=!!k[1],W=Y(a,k[2]),C=Y(a,k[3]),I=Uw(k[2],k[3],D);if(I&&R!==Bw(c)&&(I=zw(I)),I&&z)return{text:`I can't speak for ${k[1].trim()} ${k[2]} \u2014 what I remember is generic, not universal. ${I.text}.`,replace:!0};if(I)return I;if(s){let O=D.filter(F=>F.predicate==="mgx:capableOf"&&W.has(F.subject));if(O.length){let F=O.slice(0,3).map(re).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${k[2]} can ${k[3]}. I do know: ${F}. If it's true, teach me: "a ${O[0].subject} can ${k[3]}".`,replace:!0,miss:!0}}let N=Ww(k[2],k[3],D);if(N)return N;if(!/\s/.test(k[2].trim())&&!D.some(F=>W.has(F.subject)||W.has(F.object))){let F=yd(Ba(k[2]));return{text:`I can't confirm that \u2014 I don't know anything about "${k[2]}" yet. Teach me "a ${F} can ${k[3]}" (or "a ${F} cannot ${k[3]}") and I'll remember it.`,replace:!0,miss:!0}}}}let A=c.match(pA);if(A){let D=Y(a,A[1]),z=(await it(e,r)).filter(F=>(F.predicate==="mgx:capableOf"||F.predicate===zo)&&D.has(F.subject));if(!z.length)return null;let C=Qe(pn(z),o).map(re),I=C.slice(0,je),O=C.slice(je),N=O.length?`
164
197
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
165
- `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}let M=c.match(Q_);if(M){let D=Y(a,M[1]),z=Y(a,M[2]),U=await ot(e,r),C=an(U.filter(I=>I.predicate==="mgx:capableOf"&&z.has(I.object))).filter(I=>xi(new Set([I.subject]),z,U).verdict==="yes");if(C.length){let{findIsaChain:I,SUBCLASS_PREDICATE:O,TYPE_PREDICATE:N}=await Promise.resolve().then(()=>(Bt(),on)),F=U.filter(re=>re.predicate===O),W=U.filter(re=>re.predicate===N),H=F.map(re=>[re.subject,re.object]),ae=W.map(re=>[re.subject,re.object]),ce=re=>(re.predicate===O?F:W).find(fe=>fe.subject===re.subject&&fe.object===re.object),K=new Map,Z=C.filter(re=>D.has(re.subject)?!0:(K.has(re.subject)||K.set(re.subject,I(re.subject,D,ae,H,{maxHops:3})),!!K.get(re.subject))),ne=Qe(Z.length?Z:C,o).map(re=>{let fe=Z.length?K.get(re.subject):null;if(!fe||fe.length<2)return oe(re);let be=fe.map(ce);if(!be.every(Boolean))return oe(re);let Ce=be.map(ue=>`${It(ue)}${ue.provenance?` (source: ${ue.provenance})`:""}`).join("; ");return`${oe(re)} \u2014 via: ${Ce}`}),te=ne.slice(0,je),$e=ne.slice(je),Te=$e.length?`
166
- \u2026and ${$e.length} more \u2014 say 'more' to see them.`:"";return{text:(Z.length?"":`nothing I remember ties these to "${M[1]}", but:
198
+ `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}let P=c.match(xA);if(P){let D=Y(a,P[1]),z=Y(a,P[2]),W=await it(e,r),C=pn(W.filter(I=>I.predicate==="mgx:capableOf"&&z.has(I.object))).filter(I=>Ji(new Set([I.subject]),z,W).verdict==="yes");if(C.length){let{findIsaChain:I,SUBCLASS_PREDICATE:O,TYPE_PREDICATE:N}=await Promise.resolve().then(()=>(Gt(),cn)),F=W.filter(ie=>ie.predicate===O),G=W.filter(ie=>ie.predicate===N),q=F.map(ie=>[ie.subject,ie.object]),ae=G.map(ie=>[ie.subject,ie.object]),ce=ie=>(ie.predicate===O?F:G).find(fe=>fe.subject===ie.subject&&fe.object===ie.object),K=new Map,ee=C.filter(ie=>D.has(ie.subject)?!0:(K.has(ie.subject)||K.set(ie.subject,I(ie.subject,D,ae,q,{maxHops:3})),!!K.get(ie.subject))),se=Qe(ee.length?ee:C,o).map(ie=>{let fe=ee.length?K.get(ie.subject):null;if(!fe||fe.length<2)return re(ie);let be=fe.map(ce);if(!be.every(Boolean))return re(ie);let Ce=be.map(ue=>`${Pt(ue)}${ue.provenance?` (source: ${Nn(ue.provenance)})`:""}`).join("; ");return`${re(ie)} \u2014 via: ${Ce}`}),te=se.slice(0,je),xe=se.slice(je),Ae=xe.length?`
199
+ \u2026and ${xe.length} more \u2014 say 'more' to see them.`:"";return{text:(ee.length?"":`nothing I remember ties these to "${P[1]}", but:
167
200
  `)+te.join(`
168
- `)+Te,replace:!0,...$e.length?{pending:{items:$e,noun:"facts"}}:{}}}}let A=c.match(J_);if(A&&A[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,A[1]),z=(await ot(e,r)).filter(U=>U.predicate==="mgxneg:capableOf"&&D.has(U.object));if(z.length){let C=Qe(an(z),o).map(oe),I=C.slice(0,je),O=C.slice(je),N=O.length?`
201
+ `)+Ae,replace:!0,...xe.length?{pending:{items:xe,noun:"facts"}}:{}}}}let T=c.match($A);if(T&&T[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,T[1]),z=(await it(e,r)).filter(W=>W.predicate==="mgxneg:capableOf"&&D.has(W.object));if(z.length){let C=Qe(pn(z),o).map(re),I=C.slice(0,je),O=C.slice(je),N=O.length?`
169
202
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
170
- `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${A[1].trim()}.`,replace:!0,miss:!0}}let P=c.match(X_);if(P&&P[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,P[1]),z=Uc(D,await ot(e,r));if(z.length){let C=Qe(an(z),o).map(oe),I=C.slice(0,je),O=C.slice(je),N=O.length?`
203
+ `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}return{text:`nothing I remember says anything cannot ${T[1].trim()}.`,replace:!0,miss:!0}}let M=c.match(vA);if(M&&M[1].trim().split(/\s+/).at(-1)?.toLowerCase()!=="do"){let D=Y(a,M[1]),z=kl(D,await it(e,r));if(z.length){let C=Qe(pn(z),o).map(re),I=C.slice(0,je),O=C.slice(je),N=O.length?`
171
204
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
172
- `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}let G=c.match(G_);if(G&&!aR.has(G[1].trim().split(/\s+/)[0]?.toLowerCase())){let D=Y(a,G[1]),z=(await ot(e,r)).filter(F=>F.predicate==="mgx:hasA"&&D.has(F.object));if(!z.length)return null;let C=Qe(an(z),o).map(oe),I=C.slice(0,je),O=C.slice(je),N=O.length?`
205
+ `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}}let B=c.match(fA);if(B&&!CA.has(B[1].trim().split(/\s+/)[0]?.toLowerCase())){let D=Y(a,B[1]),z=(await it(e,r)).filter(F=>F.predicate==="mgx:hasA"&&D.has(F.object));if(!z.length)return null;let C=Qe(pn(z),o).map(re),I=C.slice(0,je),O=C.slice(je),N=O.length?`
173
206
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
174
- `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}let J=c.match(lb),ee=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:J?.[1];if(ee){let D=Y(a,ee),z=(await ot(e,r)).filter(F=>Vn.has(F.predicate)&&D.has(F.object));if(!z.length)return null;let C=Qe(an(z),o).map(oe),I=C.slice(0,je),O=C.slice(je),N=O.length?`
207
+ `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}let Z=c.match(Gw),J=n?.parsed?.shape==="reverse"&&n.parsed.kind==="inherits"?n.parsed.object:Z?.[1];if(J){let D=Y(a,J),z=(await it(e,r)).filter(F=>ss.has(F.predicate)&&D.has(F.object));if(!z.length)return null;let C=Qe(pn(z),o).map(re),I=C.slice(0,je),O=C.slice(je),N=O.length?`
175
208
  \u2026and ${O.length} more \u2014 say 'more' to see them.`:"";return{text:I.join(`
176
- `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}let ie=c.match(z_);if(ie){let D=Y(a,ie[1]),z=await ot(e,r),U=q=>!String(q.provenance||"").includes("corpus:")&&!String(q.provenance||"").includes("web:"),C=z.filter(q=>Vn.has(q.predicate)&&U(q)),I=new Set,O=D;for(let q=0;q<8&&O.size;q+=1){let se=new Set;for(let De of C)O.has(De.object)&&!I.has(De.subject)&&se.add(De.subject);if(!se.size)break;for(let De of se)I.add(De);let Ze=new Set;for(let De of se)for(let Ve of Y(a,De))Ze.add(Ve);O=Ze}let N=z.filter(q=>D.has(q.subject)||D.has(q.object)||I.has(q.subject));if(!N.length){let q=a(ie[1]).split(/\s+/).filter(se=>se.length>=4&&!jb.has(se));if(q.length){let se=De=>new Set(String(De||"").split(/\s+/)),Ze=De=>{let Ve=se(De);return q.some(Jt=>Ve.has(Jt))};N=z.filter(De=>Ze(De.subject)||Ze(De.object))}}N=N.filter(q=>!Zg.has(q.predicate));let F=N.length>0&&!N.some(au);if(!N.length)return null;let{findConsistencyViolations:W,TYPE_PREDICATE:H,SUBCLASS_PREDICATE:ae,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Bt(),on)),K=q=>!q.provenance?.includes("corpus:")&&!q.provenance?.includes("web:"),Z=z.filter(q=>q.predicate===H&&K(q)).map(q=>[q.subject,q.object]),V=z.filter(q=>q.predicate===ae&&K(q)).map(q=>[q.subject,q.object]),ne=z.filter(q=>q.predicate===ce&&K(q)).map(q=>[q.subject,q.object]);if(ne.length){let se=W(Z,V,ne,{focus:D,budget:5}).find(Ze=>D.has(Ze.subject));if(se)return{text:`I can't answer that \u2014 what I've been told about ${se.subject} is inconsistent: it's taught to be both ${se.classA} and ${se.classB}, but ${se.viaA} and ${se.viaB} are disjoint (${se.viaA} owl:disjointWith ${se.viaB}). I'd need one of those retracted before I can answer honestly.`,replace:!0}}let te=N.find(q=>D.has(q.subject)||D.has(q.object)),$e=te?D.has(te.subject)?te.subject:te.object:ie[1].trim(),Te=N.some(q=>I.has(q.subject)&&!D.has(q.subject)&&!D.has(q.object));N=Qe(N,o);let pe=`${N.length} remembered fact${N.length===1?"":"s"} about ${$e}${Te?" (including its known subtypes)":""}:`,{lines:re,grouped:fe}=tb(N,z,D,{indent:" "});if(fe)return{...fe,text:`${pe}
177
- ${fe.text}`,...F?{weakOnly:!0}:{}};let be=re.slice(0,je),Ce=re.slice(je),ue=Ce.length?`
209
+ `)+N,replace:!0,...O.length?{pending:{items:O,noun:"facts"}}:{}}}let ne=c.match(lA);if(ne){let D=Y(a,ne[1]),z=await it(e,r),W=V=>!String(V.provenance||"").includes("corpus:")&&!String(V.provenance||"").includes("web:"),C=z.filter(V=>ss.has(V.predicate)&&W(V)),I=new Set,O=D;for(let V=0;V<8&&O.size;V+=1){let oe=new Set;for(let De of C)O.has(De.object)&&!I.has(De.subject)&&oe.add(De.subject);if(!oe.size)break;for(let De of oe)I.add(De);let Ze=new Set;for(let De of oe)for(let He of Y(a,De))Ze.add(He);O=Ze}let N=z.filter(V=>D.has(V.subject)||D.has(V.object)||I.has(V.subject));if(!N.length){let V=a(ne[1]).split(/\s+/).filter(oe=>oe.length>=4&&!ay.has(oe));if(V.length){let oe=De=>new Set(String(De||"").split(/\s+/)),Ze=De=>{let He=oe(De);return V.some(nn=>He.has(nn))};N=z.filter(De=>Ze(De.subject)||Ze(De.object))}}N=N.filter(V=>!Nw.has(V.predicate));let F=N.length>0&&!N.some(cd);if(!N.length)return null;let{findConsistencyViolations:G,TYPE_PREDICATE:q,SUBCLASS_PREDICATE:ae,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Gt(),cn)),K=V=>!V.provenance?.includes("corpus:")&&!V.provenance?.includes("web:"),ee=z.filter(V=>V.predicate===q&&K(V)).map(V=>[V.subject,V.object]),H=z.filter(V=>V.predicate===ae&&K(V)).map(V=>[V.subject,V.object]),se=z.filter(V=>V.predicate===ce&&K(V)).map(V=>[V.subject,V.object]);if(se.length){let oe=G(ee,H,se,{focus:D,budget:5}).find(Ze=>D.has(Ze.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 te=N.find(V=>D.has(V.subject)||D.has(V.object)),xe=te?D.has(te.subject)?te.subject:te.object:ne[1].trim(),Ae=N.some(V=>I.has(V.subject)&&!D.has(V.subject)&&!D.has(V.object));N=Qe(N,o);let pe=`${N.length} remembered fact${N.length===1?"":"s"} about ${xe}${Ae?" (including its known subtypes)":""}:`,{lines:ie,grouped:fe}=Mw(N,z,D,{indent:" "});if(fe)return{...fe,text:`${pe}
210
+ ${fe.text}`,...F?{weakOnly:!0}:{}};let be=ie.slice(0,je),Ce=ie.slice(je),ue=Ce.length?`
178
211
  \u2026and ${Ce.length} more \u2014 say 'more' to see them.`:"";return{text:`${pe}
179
212
  ${be.join(`
180
- `)}${ue}`,replace:!0,...Ce.length?{pending:{items:Ce.map(q=>q.trim()),noun:"facts"}}:{},...F?{weakOnly:!0}:{}}}return null}async function yR(e,t){let n=await Ir(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&Xg[s]?Xg[s][0]:null}function ra(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<$R;r+=1){let i=null;for(let a of e.relations||[])if(vR.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 Ob(e,t,n,s,o=null,r=null,i={},a=null){return Cb(await xR(e,t,n,s,o,r,i,a),n,t)}async function xR(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Je(),us)))}catch{return null}let c=String(t).trim();if(o){let C=c.match(ms);if(C){let I=await Ir(o,C[1]);if(I){let O=Y(l,en(C[2])),N=ra(o,I.id).find(W=>[...Y(l,W.label)].some(H=>O.has(H)));if(N)return{text:`yes \u2014 the code graph says ${I.label} inherits ${N.label}.`,replace:!0};let F=await Ir(o,en(C[2]));if(F&&ra(o,F.id).some(W=>W.id===I.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${F.label} inherits ${I.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=c.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await ot(e,a);if(!d.length){if(!ms.test(u)&&!uu.test(u)){let I=u.match(db);if(I){let O=I[1].trim(),N=Gn.test(O)?r||null:O;if(N&&!/^there\b/i.test(N)&&!n?.parsed&&!fb.test(O)&&!pb.test(O)&&!Qg.test(I[2].trim()))return mb(N,I[2].trim().toLowerCase())}}let C=u.match(ms)||du(c);if(!(C&&!/^there\b/i.test(C[1].trim())||sb.test(c)))return null}let f=d.filter(C=>Vn.has(C.predicate)),p=(C,I)=>I.trust-C.trust,m=C=>{let I=C.map(oe),O=I.slice(0,je),N=I.slice(je),F=N.length?`
213
+ `)}${ue}`,replace:!0,...Ce.length?{pending:{items:Ce.map(V=>V.trim()),noun:"facts"}}:{},...F?{weakOnly:!0}:{}}}return null}async function WA(e,t){let n=await oi(e,t);if(!n)return null;let s=(e?.byId?.get?.(n.id)||(e?.individuals||[]).find(o=>o?.id===n.id))?.class;return s&&Ow[s]?Ow[s][0]:null}function za(e,t){let n=[];if(!e||!t)return n;let s=new Set([t]),o=t;for(let r=0;r<HA;r+=1){let i=null;for(let a of e.relations||[])if(GA.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 fy(e,t,n,s,o=null,r=null,i={},a=null){return py(await VA(e,t,n,s,o,r,i,a),n,t)}async function VA(e,t,n,s,o=null,r=null,i={},a=null){if(!s)return null;let l;try{({normFactTerm:l}=await Promise.resolve().then(()=>(Je(),_s)))}catch{return null}let c=String(t).trim();if(o){let C=c.match(Cs);if(C){let I=await oi(o,C[1]);if(I){let O=Y(l,on(C[2])),N=za(o,I.id).find(G=>[...Y(l,G.label)].some(q=>O.has(q)));if(N)return{text:`yes \u2014 the code graph says ${I.label} inherits ${N.label}.`,replace:!0};let F=await oi(o,on(C[2]));if(F&&za(o,F.id).some(G=>G.id===I.id))return{text:`I can't confirm that \u2014 the code graph's stored direction runs the other way: ${F.label} inherits ${I.label}. An inheritance doesn't reverse.`,replace:!0,miss:!0}}}}let u=c.replace(/^(?:actually|really|honestly|yeah\s+nah)\s*,?\s+/i,""),d=await it(e,a);if(!d.length){if(!Cs.test(u)&&!dd.test(u)){let I=u.match(Vw);if(I){let O=I[1].trim(),N=ns.test(O)?r||null:O;if(N&&!/^there\b/i.test(N)&&!n?.parsed&&!Kw.test(O)&&!qw.test(O)&&!Lw.test(I[2].trim()))return Yw(N,I[2].trim().toLowerCase())}}let C=u.match(Cs)||pd(c);if(!(C&&!/^there\b/i.test(C[1].trim())||Dw.test(c)))return null}let f=d.filter(C=>ss.has(C.predicate)),p=(C,I)=>I.trust-C.trust,m=C=>{let I=C.map(re),O=I.slice(0,je),N=I.slice(je),F=N.length?`
181
214
  \u2026and ${N.length} more \u2014 say 'more' to see them.`:"";return{text:O.join(`
182
- `)+F,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}};if(wR.test(c)){let C=Qe(f.length?f:d,i);return C.length?m(C):null}let h=u.match(uu);if(h){let C=h[1].trim(),I=Gn.test(C)?r||null:C,O=h[2].trim().toLowerCase(),N=h[3].trim();if(I&&!pu.has(O)){let F=Zl(d),{findIsaChain:W}=await Promise.resolve().then(()=>(Bt(),on)),H=Te=>{let pe=String(Te||"").trim().toLowerCase(),re=[];for(let fe of d){let be=ru(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ce=eu(W,be,new Set([pe]),F,{maxHops:2});if(!Ce)continue;let ue=Ce.map(q=>d.find(se=>se.predicate===Lr&&se.subject===q.subject&&se.object===q.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:ae,findRuleByName:ce,resolveRelationChase:K}=await Promise.resolve().then(()=>(Je(),us)),{findActionPath:Z}=await Promise.resolve().then(()=>(_s(),Gr)),V=await ae(e),te=await K(V,O,I,N,{relationFactsFor:H,renderFactLine:oe,factPhrase:It,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Ql,findActionPath:Z});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:H(O).length>0||!!ce(V,O)?{text:`I know the '${O}' relation, but I can't confirm ${I} is the ${O} of ${N} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${O}' yet.`,replace:!0}}}let g=aa(u).match(_b)||Rb(u,C=>{let I=Y(l,C);return d.some(O=>I.has(O.subject)||I.has(O.object))});if(g){let C=g[1].trim().toLowerCase(),I=g[2].trim(),O=Gn.test(I)?r||null:I;if(O&&!pu.has(C)){let N=Zl(d),{findIsaChain:F}=await Promise.resolve().then(()=>(Bt(),on)),W=Te=>{let pe=String(Te||"").trim().toLowerCase(),re=[];for(let fe of d){let be=ru(fe.predicate);if(!be)continue;if(be===pe){re.push({fact:fe,aliasFacts:[]});continue}let Ce=eu(F,be,new Set([pe]),N,{maxHops:2});if(!Ce)continue;let ue=Ce.map(q=>d.find(se=>se.predicate===Lr&&se.subject===q.subject&&se.object===q.object));ue.every(Boolean)&&re.push({fact:fe,aliasFacts:ue})}return re},{loadMemory:H,findRuleByName:ae,resolveRelationChaseReverse:ce}=await Promise.resolve().then(()=>(Je(),us)),K=await H(e),{findReachableSet:Z}=await Promise.resolve().then(()=>(_s(),Gr)),ne=await ce(K,C,O,{relationFactsFor:W,renderFactLine:oe,factPhrase:It,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Ql,findReachableSet:Z});return ne.length?{text:ne.map(pe=>`${pe.subject} \u2014 ${pe.citation.join("; ")}`).join(`
183
- `),replace:!0}:W(C).length>0||!!ae(K,C)?{text:/^what\b/i.test(aa(u))?`I don't know what the ${C} of ${O} is from what you've told me.`:`I don't know anyone who is the ${C} of ${O} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}{let C=u.match(kR);if(C){let I=Y(l,C[1]),O=Qe(d.filter(N=>I.has(N.subject)||I.has(N.object)),i);if(O.length){let N=O.map(oe),F=N.slice(0,je),W=N.slice(je),H=W.length?`
184
- \u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
185
- `)+H,replace:!0,...W.length?{pending:{items:W,noun:"facts"}}:{}}}}}let b=u.match(M_);if(b){let C=wu(b[1].trim().toLowerCase()),I=b[2].trim(),O=Gn.test(I)?r||null:I;if(O){let{loadMemory:N,findRuleByName:F,RULE_KIND_PROP:W,RULE_KIND_RECURSIVE:H}=await Promise.resolve().then(()=>(Je(),us)),ae=await N(e),ce=F(ae,C),K=ce?.attributes?.find(Z=>Z.prop===W)?.value;if(ce&&K===H){let Z=ce.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,V=ce.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,ne=l(O);if(Z&&V&&ne){let te=Zl(d),{findIsaChain:$e}=await Promise.resolve().then(()=>(Bt(),on)),Te=Ce=>{let ue=String(Ce||"").trim().toLowerCase(),q=[];for(let se of d){let Ze=ru(se.predicate);if(!Ze)continue;if(Ze===ue){q.push({fact:se,aliasFacts:[]});continue}let De=eu($e,Ze,new Set([ue]),te,{maxHops:2});if(!De)continue;let Ve=De.map(Jt=>d.find(Qt=>Qt.predicate===Lr&&Qt.subject===Jt.subject&&Qt.object===Jt.object));Ve.every(Boolean)&&q.push({fact:se,aliasFacts:Ve})}return q},{findReachableSet:pe}=await Promise.resolve().then(()=>(_s(),Gr)),be=pe({entity:ne,hop:0},Ce=>{let ue=Ce.hop===0?Z:V;return Te(ue).filter(q=>q.fact.subject===Ce.entity).map(q=>({action:q,nextState:{entity:q.fact.object,hop:Ce.hop+1}}))},{maxDepth:20,stateKey:Ce=>Ce.entity});if(be.length)return{text:be.map(({node:ue,path:q})=>{let se=new Set,Ze=[];for(let De of q.actions){Ze.push(oe(De.fact));for(let Ve of De.aliasFacts){let Jt=Ve.id||`${Ve.subject}|${Ve.predicate}|${Ve.object}`;se.has(Jt)||(se.add(Jt),Ze.push(`${It(Ve)}${Ve.provenance?` (source: ${Ve.provenance})`:""}`))}}return`${ue.entity} \u2014 ${Ze.join("; ")}`}).join(`
186
- `),replace:!0}}}return null}}let y=c.match(sb),w=c.match(ms)||du(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(ms);if(w){let C=Y(l,en(w[2])),I=r&&Gn.test(w[1].trim())?r:w[1],O=new Set(Y(l,I));if([...O].some(B=>C.has(B))){let B=en(w[2]).trim();return{text:`yes \u2014 ${Mo(B)} ${B} is ${Mo(B)} ${B}, trivially: every kind is a kind of itself.`,replace:!0}}let N=await yR(o,I);if(N)for(let B of Y(l,N))O.add(B);let{findIsaChain:F,deriveDisjointViolations:W,SUBCLASS_PREDICATE:H,TYPE_PREDICATE:ae,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Bt(),on)),K=Ks,Z=f.filter(B=>B.predicate===H&&K(B)),V=f.filter(B=>B.predicate===ae&&K(B)),ne=Z.map(B=>[B.subject,B.object]),te=V.map(B=>[B.subject,B.object]),$e=f.filter(B=>B.predicate===H),Te=f.filter(B=>B.predicate===ae),pe=Te.map(B=>[B.subject,B.object]),re=$e.map(B=>[B.subject,B.object]),fe=d.filter(B=>B.predicate===ce&&K(B)),be=fe.map(B=>[B.subject,B.object]),Ce=fe.length?W(pe.concat(re),re,be,{budget:20,focus:new Set([...O,...C])}):[],ue=B=>{let we=Ce.find(Ne=>Ne.subject===B&&C.has(Ne.object));if(!we)return null;let ye=f.filter(Ne=>C.has(Ne.object)&&(Ne.subject===we.viaClass||Ne.subject===we.subject)).sort(p)[0],_e=fe.find(Ne=>Ne.subject===we.viaClass&&Ne.object===we.object||Ne.subject===we.object&&Ne.object===we.viaClass);return!ye||!_e?null:A_(ye,_e)},q=f.filter(B=>O.has(B.subject)&&C.has(B.object)).sort(p)[0],se=d.filter(B=>B.predicate===vi&&O.has(B.subject)&&C.has(B.object)).sort(p)[0],Ze=fe.find(B=>O.has(B.subject)&&C.has(B.object)||O.has(B.object)&&C.has(B.subject));if(q&&!se){let B=ue(q.subject);if(B)return B}let De=Sb(q,se||Ze);if(De)return De;if(fe.length){let B=_e=>{let Ne=new Set(_e),Rt=new Set(_e);for(let Oe=0;Oe<8&&Rt.size;Oe+=1){let ve=new Set;for(let[rt,gs]of re)Rt.has(rt)&&!Ne.has(gs)&&ve.add(gs);if(!ve.size)break;for(let rt of ve)Ne.add(rt);Rt=ve}return Ne},we=B(C),ye=Ce.find(_e=>O.has(_e.subject)&&we.has(_e.object)&&!B([_e.viaClass]).has(_e.object)&&!B([_e.object]).has(_e.viaClass));if(ye){let _e=f.filter(ve=>O.has(ve.subject)&&ve.object===ye.viaClass).sort(p)[0],Ne=fe.find(ve=>ve.subject===ye.viaClass&&ve.object===ye.object||ve.subject===ye.object&&ve.object===ye.viaClass),Rt=!C.has(ye.object),Oe=Rt?f.filter(ve=>C.has(ve.subject)&&ve.object===ye.object).sort(p)[0]:null;if(_e&&Ne&&(!Rt||Oe)){let ve=en(w[2]).trim();return{text:`no \u2014 ${[_e,...Oe?[Oe]:[]].map(oe).join("; ")}; and ${It(Ne)}${Ne.provenance?` (source: ${Ne.provenance})`:""} \u2014 so ${I} can never be ${Mo(ve)} ${ve}.`,replace:!0}}}}let Ve=await Ir(o,I);if(Ve){let B=new Map;for(let ye of ra(o,Ve.id))for(let _e of Y(l,ye.label))!O.has(_e)&&!B.has(_e)&&B.set(_e,ye.label);let we=f.filter(ye=>B.has(ye.subject)&&C.has(ye.object)).sort(p)[0];if(we)return{text:`yes \u2014 the code graph says ${Ve.label} inherits ${B.get(we.subject)}, and ${oe(we)}`,replace:!0}}let Jt=B=>(B.predicate===H?Z:V).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of O){let we=F(B,C,te,ne,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(Jt);if(_e.every(Boolean))return{text:`yes \u2014 ${sa(_e)}`,replace:!0}}let Qt=B=>(B.predicate===H?$e:Te).find(we=>we.subject===B.subject&&we.object===B.object);for(let B of O){let we=F(B,C,pe,re,{maxHops:2});if(!we)continue;let ye=ue(B);if(ye)return ye;let _e=we.map(Qt);if(_e.every(Boolean)&&_e.some(K))return{text:`yes \u2014 ${sa(_e)}`,replace:!0}}let Gt=I.match(/^(.*\S)\s+not$/i),Lt=Gt&&[Gt[0],r&&Gn.test(Gt[1].trim())?r:Gt[1]];if(Lt){let B=Y(l,Lt[1]),we=C,ye=f.filter(Oe=>B.has(Oe.subject)&&we.has(Oe.object)).sort(p)[0];if(ye)return{text:`no \u2014 ${oe(ye)}`,replace:!0};let _e=fe.find(Oe=>B.has(Oe.subject)&&we.has(Oe.object)||B.has(Oe.object)&&we.has(Oe.subject));if(_e)return{text:`yes \u2014 ${oe(_e)}`,replace:!0};let Ne=Lt[1].trim(),Rt=en(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Rt}. If no ${Ne} is a ${Rt}, teach me: "no ${Ne} is a ${Rt}".`,replace:!0,miss:!0}}if(fe.length){let B=W(te.concat(ne),ne,be,{budget:10});for(let we of O){let ye=B.find(Oe=>Oe.subject===we&&C.has(Oe.object));if(!ye)continue;let _e=V.concat(Z).find(Oe=>Oe.subject===ye.subject&&Oe.object===ye.viaType),Ne=fe.find(Oe=>Oe.subject===ye.viaClass&&Oe.object===ye.object||Oe.subject===ye.object&&Oe.object===ye.viaClass),Rt=[_e,Ne].filter(Boolean).map(oe);return{text:`no \u2014 ${Rt.length?Rt.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:Nr,ON_PROPERTY_PREDICATE:S,SOME_VALUES_FROM_PREDICATE:le,deriveSomeValuesFromSubsumption:Ae,ENTAILED_SCM_SVF_PROVENANCE:En,SCM_SVF_RULE_CONFIDENCE:Qs,entailedTrustFrom:xu}=await Promise.resolve().then(()=>(Bt(),on)),ku=d.filter(B=>B.predicate===S&&K(B)),Eu=d.filter(B=>B.predicate===le&&K(B));if(ku.length&&Eu.length){let B=new Map(Eu.map(ve=>[ve.subject,ve.object])),we=ku.map(ve=>({restriction:ve.subject,property:ve.object,target:B.get(ve.subject)})).filter(ve=>ve.target),ye=new Set([H,ae,ce,S,le,"owl:intersectionOf"]),_e=d.filter(ve=>K(ve)&&!ye.has(ve.predicate)),Ne=_e.map(ve=>[ve.subject,ve.predicate,ve.object]),Rt=Nr(Ne,te,ne,we,{budget:10});for(let ve of O){let rt=Rt.find(ln=>ln.subject===ve&&C.has(ln.object));if(!rt)continue;let gs=_e.find(ln=>ln.subject===rt.subject&&ln.predicate===rt.viaProperty&&ln.object===rt.viaValue),bs=V.find(ln=>ln.subject===rt.viaValue&&ln.object===rt.viaType),Fo=[gs,bs].filter(Boolean).map(oe);return{text:`yes \u2014 ${Fo.length?Fo.join("; "):`${rt.subject} ${rt.viaProperty} ${rt.viaValue}, and ${rt.viaValue} is a ${rt.viaType}.`}`,replace:!0}}let Oe=we.length>1?Ae(we,ne,{budget:10}):[];if(Oe.length){let ve=ne.concat(Oe.map(Ee=>[Ee.subject,Ee.object])),rt=new Map(we.map(Ee=>[Ee.restriction,Ee])),gs=new Map;for(let Ee of d)gs.set(`${Ee.subject}\0${Ee.predicate}\0${Ee.object}`,Ee.trust);let bs=(Ee,hn,Nt)=>gs.get(`${Ee}\0${hn}\0${Nt}`),Fo=new Map;for(let Ee of Oe){let hn=rt.get(Ee.subject),Nt=rt.get(Ee.object),Vt=[hn&&bs(Ee.subject,S,hn.property),bs(Ee.subject,le,Ee.viaY1),Nt&&bs(Ee.object,S,Nt.property),bs(Ee.object,le,Ee.viaY2),bs(Ee.viaY1,H,Ee.viaY2)].filter(Zb=>typeof Zb=="number"),Pr=xu(Vt,Qs);Pr!==null&&Fo.set(`${Ee.subject}\0${Ee.object}`,Pr)}let ln=Ee=>{if(Ee.predicate!==H)return V.find(Vt=>Vt.subject===Ee.subject&&Vt.object===Ee.object);let hn=Z.find(Vt=>Vt.subject===Ee.subject&&Vt.object===Ee.object);if(hn)return hn;let Nt=Oe.find(Vt=>Vt.subject===Ee.subject&&Vt.object===Ee.object);return Nt?{subject:Nt.subject,predicate:H,object:Nt.object,provenance:En,trust:Fo.get(`${Nt.subject}\0${Nt.object}`)}:void 0};for(let Ee of O){let hn=F(Ee,C,te,ve,{maxHops:3});if(!hn)continue;let Nt=hn.map(ln);if(Nt.every(Boolean)){let Vt=xu(Nt.map(Pr=>Pr.trust),1);return{text:`yes \u2014 ${sa(Nt)}`,replace:!0,...Vt!==null?{trust:Vt}:{}}}}}}let Jb=Y(l,I),Su=f.filter(B=>Jb.has(B.subject)).sort(p),hs=I.trim(),Mr=en(w[2]).trim(),Qb=[...O].some(B=>F(B,C,te,ne,{maxHops:P_}));if(Su.length){let B=Su.slice(0,3).map(oe).join("; "),we=Qb?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${hs}", then ask me again.`:`If it's true, teach me: "${hs} is a kind of ${Mr}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${hs} is a ${Mr}. I do know: ${B}. ${we}`,replace:!0,miss:!0}}let ju=f.filter(B=>O.has(B.object)&&C.has(B.subject)).sort(p)[0];return ju?{text:`I can't confirm that \u2014 what I know runs the other way: ${oe(ju)}. A kind doesn't reverse. If it's true, teach me: "every ${hs} is a ${Mr}".`,replace:!0,miss:!0}:!Ve&&!N&&!c_(hs)&&!d.some(B=>O.has(B.subject)||O.has(B.object))?{text:`I can't confirm that \u2014 I don't know "${hs}" at all yet. If it's true, teach me: "${hs} is a kind of ${Mr}".`,replace:!0,miss:!0}:null}let $=c.match(dR);if($){let[,C,I,O]=$,{SUBCLASS_PREDICATE:N,ON_PROPERTY_PREDICATE:F,buildCardinalityRestrictions:W,proveCardinalityAtLeast:H,CARDINALITY_RULE_CONFIDENCE:ae,entailedTrustFrom:ce}=await Promise.resolve().then(()=>(Bt(),on)),K=Ks,Z=f.filter(te=>te.predicate===N&&K(te)).map(te=>[te.subject,te.object]),V=d.filter(te=>(te.predicate===F||ub.has(te.predicate))&&K(te)),ne=W(V);if(ne.length){let te=Y(l,C.trim()),$e=Y(l,O.trim()),Te=Number(I),pe=nb(te,$e,(re,fe)=>H(Z,ne,re,fe,Te,{}));if(pe){let re=d.find(se=>se.predicate===N&&se.subject===pe.viaClass&&se.object===pe.viaRestriction),fe=re?.provenance?` (source: ${re.provenance})`:"",be=pe.kind==="exactly"?"exactly":"at least",Ce=(se,Ze)=>`${se}${Ze===1?"":"s"}`,ue=[re?.trust,...V.filter(se=>se.subject===pe.viaRestriction).map(se=>se.trust),...pe.viaClass!==pe.subject?[f.find(se=>se.predicate===N&&se.subject===pe.subject&&se.object===pe.viaClass)?.trust]:[]].filter(se=>typeof se=="number"),q=ce(ue,ae);return{text:`yes \u2014 every ${pe.viaClass} has ${be} ${pe.n} ${Ce(pe.object,pe.n)}${fe}, so at least ${Te} follows.`,replace:!0,...q!==null?{trust:q}:{}}}}}let j=c.match(pR);if(j){let[,C,I]=j,{SUBCLASS_PREDICATE:O,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:F,proveMaxCardinalityZeroDenial:W,CAX_MAXC0_RULE_CONFIDENCE:H,entailedTrustFrom:ae}=await Promise.resolve().then(()=>(Bt(),on)),ce=Ks,K=f.filter(ne=>ne.predicate===O&&ce(ne)).map(ne=>[ne.subject,ne.object]),Z=d.filter(ne=>(ne.predicate===N||ub.has(ne.predicate))&&ce(ne)),V=F(Z);if(V.length){let ne=Y(l,C.trim()),te=Y(l,I.trim()),$e=nb(ne,te,(Te,pe)=>W(K,V,Te,pe,{}));if($e){let Te=d.find(be=>be.predicate===O&&be.subject===$e.viaClass&&be.object===$e.viaRestriction),pe=Te?.provenance?` (source: ${Te.provenance})`:"",re=[Te?.trust,...Z.filter(be=>be.subject===$e.viaRestriction).map(be=>be.trust),...$e.viaClass!==$e.subject?[f.find(be=>be.predicate===O&&be.subject===$e.subject&&be.object===$e.viaClass)?.trust]:[]].filter(be=>typeof be=="number"),fe=ae(re,H);return{text:`no \u2014 every ${$e.viaClass} has at most 0 ${$e.object}${pe}.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let v=c.match(fR);if(v){let C=Y(l,v[1]),I=d.filter(O=>O.predicate===Jl&&C.has(O.subject)).sort(p);return I.length?m(I):null}let E=u.match(mR);if(E){let[,C,I]=E,O=Y(l,C.trim()),N=Y(l,I.replace(/^an?\s+/i,"").trim()),F=d.filter(W=>W.predicate===Jl&&N.has(W.subject)&&O.has(W.object)).sort(p)[0];return F?{text:`yes \u2014 ${oe(F)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} owns/maintains ${I.trim()}.`,replace:!0}}let k=u.match(hR);if(k){let[,C,I]=k,O=Y(l,C.replace(/^an?\s+/i,"").trim()),N=Y(l,I.trim()),F=d.filter(W=>W.predicate===Jl&&O.has(W.subject)&&N.has(W.object)).sort(p)[0];return F?{text:`yes \u2014 ${oe(F)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} is owned by ${I.trim()}.`,replace:!0}}let _=u.match(gR);if(_){let[,C,I]=_,O=Y(l,C.trim()),N=Y(l,`${I.trim()} method`),F=d.filter(W=>W.predicate===zs&&O.has(W.subject)&&N.has(W.object)).sort(p)[0];return F?{text:`yes \u2014 ${oe(F)}`,replace:!0}:null}let R=u.match(bR);if(R){let C=Y(l,R[1].trim()),I=d.filter(O=>O.predicate===zs&&C.has(O.subject)&&/ method$/.test(O.object)).sort(p);return I.length?m(I):null}let x=u.match(db);if(x){let C=x[1].trim(),I=fb.test(C)||pb.test(C)?null:Gn.test(C)?r||null:C,O=x[2].trim().toLowerCase();if(I){let N=Y(l,I),F=new Map,W=null;if(o){let V=await Ir(o,I);if(W=V,V)for(let ne of ra(o,V.id))for(let te of Y(l,ne.label))!N.has(te)&&!F.has(te)&&F.set(te,ne.label),N.add(te)}let H=V=>V.predicate===Ql&&l(V.object)===O||V.predicate===`tmct:${O}`&&V.object==="true",ae=l(I).split(/\s+/).filter(V=>V.length>=4&&!jb.has(V)),ce=V=>ae.some(ne=>new Set(String(V.subject||"").split(/\s+/)).has(ne)),K=V=>N.has(V.subject)||ae.length&&ce(V),Z=d.filter(V=>K(V)&&H(V)).sort(p)[0];if(Z){let V=F.get(Z.subject);return{text:V?`yes \u2014 the code graph says ${W.label} inherits ${V}, and ${oe(Z)}`:`yes \u2014 ${oe(Z)}`,replace:!0}}{let{findIsaChain:V,SUBCLASS_PREDICATE:ne,TYPE_PREDICATE:te}=await Promise.resolve().then(()=>(Bt(),on)),$e=Ks,Te=d.filter(ue=>ue.predicate===ne&&$e(ue)),pe=d.filter(ue=>ue.predicate===te&&$e(ue)),re=Te.map(ue=>[ue.subject,ue.object]),fe=pe.map(ue=>[ue.subject,ue.object]),be=ue=>(ue.predicate===ne?Te:pe).find(q=>q.subject===ue.subject&&q.object===ue.object),Ce=Y(l,O);for(let ue of N){let q=V(ue,Ce,fe,re,{maxHops:2});if(!q)continue;let se=q.map(be);if(se.every(Boolean))return{text:`yes \u2014 ${sa(se)}`,replace:!0}}}if(d.some(K)&&!n?.parsed)return{text:`I don't have a fact saying ${C_(I)} is ${O}.`,replace:!0};if(!n?.parsed&&!Qg.test(O))return mb(I,O)}}let T=fu(c).match(g_);if(T&&!nu.test(c)){let[,C,I,O]=T,N=I.toLowerCase();if(!tu.test(N)&&!ou.test(N)){let F=C.trim(),W=y_(await su(N),O),H=W.object.replace(/^an?\s+/i,"").trim();if(F&&H){let ae=W.predicate,ce=Y(l,F),K=Y(l,H),Z=[ae,Eo(ae)],V=d.filter(te=>Z.includes(te.predicate)&&ce.has(te.subject)&&K.has(te.object)).sort(p)[0];if(V)return{text:`${Gf(V.predicate)?"no":"yes"} \u2014 ${oe(V)}`,replace:!0,generalVerbQuery:!0};let ne=d.filter(te=>Z.includes(te.predicate)&&ce.has(te.subject));if(ne.length){let te=ne.slice(0,3).map(oe).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${It({subject:F,predicate:ae,object:H})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let M=c.match(b_);if(M&&!nu.test(c)){let[,C,I]=M,[O,N]=I.toLowerCase().split(/\s+/);if(!tu.test(O)&&!ou.test(O)){let F=C.trim();if(F){let W=await su(O);N&&/^mgx:[a-z]+$/.test(W)&&(W=`${W}-${N}`);let H=Y(l,F),ae=[W,Eo(W)],ce=Qe(d.filter(K=>ae.includes(K.predicate)&&H.has(K.subject)),i);if(ce.length)return{...m(ce),generalVerbQuery:!0}}}}let A=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(A&&!nu.test(c)){let[,C,I,O]=A,N=C.toLowerCase();if(!tu.test(N)&&!ou.test(N)&&!h_.test(N)){let F=await su(N);/^mgx:[a-z]+$/.test(F)&&(F=`${F}-${I.toLowerCase()}`);let W=Y(l,O.replace(/^(?:an?|the)\s+/i,"").trim()),H=Qe(d.filter(ae=>ae.predicate===F&&W.has(ae.object)),i);if(H.length)return{...m(H),generalVerbQuery:!0}}}let P=c.match(lR);if(P){let C=Y(l,P[1]),I=Qe(d.filter(ae=>C.has(ae.subject)||C.has(ae.object)),i);if(!I.length)return null;let O=C.has(I[0].subject)?I[0].subject:I[0].object,N=I.map(ae=>` ${oe(ae)}`),F=N.slice(0,je),W=N.slice(je),H=W.length?`
187
- \u2026and ${W.length} more \u2014 say 'more' to see them.`:"";return{text:`${I.length} remembered fact${I.length===1?"":"s"} about ${O}:
215
+ `)+F,replace:!0,...N.length?{pending:{items:N,noun:"facts"}}:{}}};if(UA.test(c)){let C=Qe(f.length?f:d,i);return C.length?m(C):null}let h=u.match(dd);if(h){let C=h[1].trim(),I=ns.test(C)?r||null:C,O=h[2].trim().toLowerCase(),N=h[3].trim();if(I&&!fd.has(O)){let F=ed(d),{findIsaChain:G}=await Promise.resolve().then(()=>(Gt(),cn)),q=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),ie=[];for(let fe of d){let be=id(fe.predicate);if(!be)continue;if(be===pe){ie.push({fact:fe,aliasFacts:[]});continue}let Ce=td(G,be,new Set([pe]),F,{maxHops:2});if(!Ce)continue;let ue=Ce.map(V=>d.find(oe=>oe.predicate===ri&&oe.subject===V.subject&&oe.object===V.object));ue.every(Boolean)&&ie.push({fact:fe,aliasFacts:ue})}return ie},{loadMemory:ae,findRuleByName:ce,resolveRelationChase:K}=await Promise.resolve().then(()=>(Je(),_s)),{findActionPath:ee}=await Promise.resolve().then(()=>(Gs(),wi)),H=await ae(e),te=await K(H,O,I,N,{relationFactsFor:q,renderFactLine:re,factPhrase:Pt,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Zu,findActionPath:ee});return te?{text:`yes \u2014 ${te.citation.join("; ")}`,replace:!0}:q(O).length>0||!!ce(H,O)?{text:`I know the '${O}' relation, but I can't confirm ${I} is the ${O} of ${N} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${O}' yet.`,replace:!0}}}let g=Ua(u).match(cy)||ly(u,C=>{let I=Y(l,C);return d.some(O=>I.has(O.subject)||I.has(O.object))});if(g){let C=g[1].trim().toLowerCase(),I=g[2].trim(),O=ns.test(I)?r||null:I;if(O&&!fd.has(C)){let N=ed(d),{findIsaChain:F}=await Promise.resolve().then(()=>(Gt(),cn)),G=Ae=>{let pe=String(Ae||"").trim().toLowerCase(),ie=[];for(let fe of d){let be=id(fe.predicate);if(!be)continue;if(be===pe){ie.push({fact:fe,aliasFacts:[]});continue}let Ce=td(F,be,new Set([pe]),N,{maxHops:2});if(!Ce)continue;let ue=Ce.map(V=>d.find(oe=>oe.predicate===ri&&oe.subject===V.subject&&oe.object===V.object));ue.every(Boolean)&&ie.push({fact:fe,aliasFacts:ue})}return ie},{loadMemory:q,findRuleByName:ae,resolveRelationChaseReverse:ce}=await Promise.resolve().then(()=>(Je(),_s)),K=await q(e),{findReachableSet:ee}=await Promise.resolve().then(()=>(Gs(),wi)),se=await ce(K,C,O,{relationFactsFor:G,renderFactLine:re,factPhrase:Pt,factTermVariants:Y,byTrust:p,rows:d,HAS_PROPERTY_PREDICATE:Zu,findReachableSet:ee});return se.length?{text:se.map(pe=>`${pe.subject} \u2014 ${pe.citation.join("; ")}`).join(`
216
+ `),replace:!0}:G(C).length>0||!!ae(K,C)?{text:/^what\b/i.test(Ua(u))?`I don't know what the ${C} of ${O} is from what you've told me.`:`I don't know anyone who is the ${C} of ${O} from what you've told me.`,replace:!0}:{text:`I don't know a relation or rule called '${C}' yet.`,replace:!0}}}{let C=u.match(qA);if(C){let I=Y(l,C[1]),O=Qe(d.filter(N=>I.has(N.subject)||I.has(N.object)),i);if(O.length){let N=O.map(re),F=N.slice(0,je),G=N.slice(je),q=G.length?`
217
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:F.join(`
218
+ `)+q,replace:!0,...G.length?{pending:{items:G,noun:"facts"}}:{}}}}}let b=u.match(rA);if(b){let C=yd(b[1].trim().toLowerCase()),I=b[2].trim(),O=ns.test(I)?r||null:I;if(O){let{loadMemory:N,findRuleByName:F,RULE_KIND_PROP:G,RULE_KIND_RECURSIVE:q}=await Promise.resolve().then(()=>(Je(),_s)),ae=await N(e),ce=F(ae,C),K=ce?.attributes?.find(ee=>ee.prop===G)?.value;if(ce&&K===q){let ee=ce.attributes.find(te=>te.prop==="mgx:ruleBaseCase")?.value,H=ce.attributes.find(te=>te.prop==="mgx:ruleRecStep")?.value,se=l(O);if(ee&&H&&se){let te=ed(d),{findIsaChain:xe}=await Promise.resolve().then(()=>(Gt(),cn)),Ae=Ce=>{let ue=String(Ce||"").trim().toLowerCase(),V=[];for(let oe of d){let Ze=id(oe.predicate);if(!Ze)continue;if(Ze===ue){V.push({fact:oe,aliasFacts:[]});continue}let De=td(xe,Ze,new Set([ue]),te,{maxHops:2});if(!De)continue;let He=De.map(nn=>d.find(sn=>sn.predicate===ri&&sn.subject===nn.subject&&sn.object===nn.object));He.every(Boolean)&&V.push({fact:oe,aliasFacts:He})}return V},{findReachableSet:pe}=await Promise.resolve().then(()=>(Gs(),wi)),be=pe({entity:se,hop:0},Ce=>{let ue=Ce.hop===0?ee:H;return Ae(ue).filter(V=>V.fact.subject===Ce.entity).map(V=>({action:V,nextState:{entity:V.fact.object,hop:Ce.hop+1}}))},{maxDepth:20,stateKey:Ce=>Ce.entity});if(be.length)return{text:be.map(({node:ue,path:V})=>{let oe=new Set,Ze=[];for(let De of V.actions){Ze.push(re(De.fact));for(let He of De.aliasFacts){let nn=He.id||`${He.subject}|${He.predicate}|${He.object}`;oe.has(nn)||(oe.add(nn),Ze.push(`${Pt(He)}${He.provenance?` (source: ${Nn(He.provenance)})`:""}`))}}return`${ue.entity} \u2014 ${Ze.join("; ")}`}).join(`
219
+ `),replace:!0}}}return null}}let y=c.match(Dw),w=c.match(Cs)||pd(c)||y&&`is ${y[1].trim()} a ${y[2].trim()}`.match(Cs);if(w){let C=Y(l,on(w[2])),I=r&&ns.test(w[1].trim())?r:w[1],O=new Set(Y(l,I));if([...O].some(U=>C.has(U))){let U=on(w[2]).trim();return{text:`yes \u2014 ${ir(U)} ${U} is ${ir(U)} ${U}, trivially: every kind is a kind of itself.`,replace:!0}}let N=await WA(o,I);if(N)for(let U of Y(l,N))O.add(U);let{findIsaChain:F,deriveDisjointViolations:G,SUBCLASS_PREDICATE:q,TYPE_PREDICATE:ae,DISJOINT_PREDICATE:ce}=await Promise.resolve().then(()=>(Gt(),cn)),K=lo,ee=f.filter(U=>U.predicate===q&&K(U)),H=f.filter(U=>U.predicate===ae&&K(U)),se=ee.map(U=>[U.subject,U.object]),te=H.map(U=>[U.subject,U.object]),xe=f.filter(U=>U.predicate===q),Ae=f.filter(U=>U.predicate===ae),pe=Ae.map(U=>[U.subject,U.object]),ie=xe.map(U=>[U.subject,U.object]),fe=d.filter(U=>U.predicate===ce&&K(U)),be=fe.map(U=>[U.subject,U.object]),Ce=fe.length?G(pe.concat(ie),ie,be,{budget:20,focus:new Set([...O,...C])}):[],ue=U=>{let we=Ce.find(Ne=>Ne.subject===U&&C.has(Ne.object));if(!we)return null;let ye=f.filter(Ne=>C.has(Ne.object)&&(Ne.subject===we.viaClass||Ne.subject===we.subject)).sort(p)[0],_e=fe.find(Ne=>Ne.subject===we.viaClass&&Ne.object===we.object||Ne.subject===we.object&&Ne.object===we.viaClass);return!ye||!_e?null:QT(ye,_e)},V=f.filter(U=>O.has(U.subject)&&C.has(U.object)).sort(p)[0],oe=d.filter(U=>U.predicate===Yi&&O.has(U.subject)&&C.has(U.object)).sort(p)[0],Ze=fe.find(U=>O.has(U.subject)&&C.has(U.object)||O.has(U.object)&&C.has(U.subject));if(V&&!oe){let U=ue(V.subject);if(U)return U}let De=iy(V,oe||Ze);if(De)return De;if(fe.length){let U=_e=>{let Ne=new Set(_e),Ct=new Set(_e);for(let Oe=0;Oe<8&&Ct.size;Oe+=1){let ve=new Set;for(let[at,Is]of ie)Ct.has(at)&&!Ne.has(Is)&&ve.add(Is);if(!ve.size)break;for(let at of ve)Ne.add(at);Ct=ve}return Ne},we=U(C),ye=Ce.find(_e=>O.has(_e.subject)&&we.has(_e.object)&&!U([_e.viaClass]).has(_e.object)&&!U([_e.object]).has(_e.viaClass));if(ye){let _e=f.filter(ve=>O.has(ve.subject)&&ve.object===ye.viaClass).sort(p)[0],Ne=fe.find(ve=>ve.subject===ye.viaClass&&ve.object===ye.object||ve.subject===ye.object&&ve.object===ye.viaClass),Ct=!C.has(ye.object),Oe=Ct?f.filter(ve=>C.has(ve.subject)&&ve.object===ye.object).sort(p)[0]:null;if(_e&&Ne&&(!Ct||Oe)){let ve=on(w[2]).trim();return{text:`no \u2014 ${[_e,...Oe?[Oe]:[]].map(re).join("; ")}; and ${Pt(Ne)}${Ne.provenance?` (source: ${Nn(Ne.provenance)})`:""} \u2014 so ${I} can never be ${ir(ve)} ${ve}.`,replace:!0}}}}let He=await oi(o,I);if(He){let U=new Map;for(let ye of za(o,He.id))for(let _e of Y(l,ye.label))!O.has(_e)&&!U.has(_e)&&U.set(_e,ye.label);let we=f.filter(ye=>U.has(ye.subject)&&C.has(ye.object)).sort(p)[0];if(we)return{text:`yes \u2014 the code graph says ${He.label} inherits ${U.get(we.subject)}, and ${re(we)}`,replace:!0}}let nn=U=>(U.predicate===q?ee:H).find(we=>we.subject===U.subject&&we.object===U.object);for(let U of O){let we=F(U,C,te,se,{maxHops:2});if(!we)continue;let ye=ue(U);if(ye)return ye;let _e=we.map(nn);if(_e.every(Boolean))return{text:`yes \u2014 ${Fa(_e)}`,replace:!0}}let sn=U=>(U.predicate===q?xe:Ae).find(we=>we.subject===U.subject&&we.object===U.object);for(let U of O){let we=F(U,C,pe,ie,{maxHops:2});if(!we)continue;let ye=ue(U);if(ye)return ye;let _e=we.map(sn);if(_e.every(Boolean)&&_e.some(K))return{text:`yes \u2014 ${Fa(_e)}`,replace:!0}}let qt=I.match(/^(.*\S)\s+not$/i),Mt=qt&&[qt[0],r&&ns.test(qt[1].trim())?r:qt[1]];if(Mt){let U=Y(l,Mt[1]),we=C,ye=f.filter(Oe=>U.has(Oe.subject)&&we.has(Oe.object)).sort(p)[0];if(ye)return{text:`no \u2014 ${re(ye)}`,replace:!0};let _e=fe.find(Oe=>U.has(Oe.subject)&&we.has(Oe.object)||U.has(Oe.object)&&we.has(Oe.subject));if(_e)return{text:`yes \u2014 ${re(_e)}`,replace:!0};let Ne=Mt[1].trim(),Ct=on(w[2]).trim();return{text:`I can't confirm that either way \u2014 nothing I remember links ${Ne} and ${Ct}. If no ${Ne} is a ${Ct}, teach me: "no ${Ne} is a ${Ct}".`,replace:!0,miss:!0}}if(fe.length){let U=G(te.concat(se),se,be,{budget:10});for(let we of O){let ye=U.find(Oe=>Oe.subject===we&&C.has(Oe.object));if(!ye)continue;let _e=H.concat(ee).find(Oe=>Oe.subject===ye.subject&&Oe.object===ye.viaType),Ne=fe.find(Oe=>Oe.subject===ye.viaClass&&Oe.object===ye.object||Oe.subject===ye.object&&Oe.object===ye.viaClass),Ct=[_e,Ne].filter(Boolean).map(re);return{text:`no \u2014 ${Ct.length?Ct.join("; "):`${ye.viaClass} and ${ye.object} are disjoint.`}`,replace:!0}}}let{deriveSomeValuesFromApplication:ii,ON_PROPERTY_PREDICATE:j,SOME_VALUES_FROM_PREDICATE:le,deriveSomeValuesFromSubsumption:Te,ENTAILED_SCM_SVF_PROVENANCE:Pn,SCM_SVF_RULE_CONFIDENCE:mo,entailedTrustFrom:Ed}=await Promise.resolve().then(()=>(Gt(),cn)),Sd=d.filter(U=>U.predicate===j&&K(U)),kd=d.filter(U=>U.predicate===le&&K(U));if(Sd.length&&kd.length){let U=new Map(kd.map(ve=>[ve.subject,ve.object])),we=Sd.map(ve=>({restriction:ve.subject,property:ve.object,target:U.get(ve.subject)})).filter(ve=>ve.target),ye=new Set([q,ae,ce,j,le,"owl:intersectionOf"]),_e=d.filter(ve=>K(ve)&&!ye.has(ve.predicate)),Ne=_e.map(ve=>[ve.subject,ve.predicate,ve.object]),Ct=ii(Ne,te,se,we,{budget:10});for(let ve of O){let at=Ct.find(mn=>mn.subject===ve&&C.has(mn.object));if(!at)continue;let Is=_e.find(mn=>mn.subject===at.subject&&mn.predicate===at.viaProperty&&mn.object===at.viaValue),Ls=H.find(mn=>mn.subject===at.viaValue&&mn.object===at.viaType),cr=[Is,Ls].filter(Boolean).map(re);return{text:`yes \u2014 ${cr.length?cr.join("; "):`${at.subject} ${at.viaProperty} ${at.viaValue}, and ${at.viaValue} is a ${at.viaType}.`}`,replace:!0}}let Oe=we.length>1?Te(we,se,{budget:10}):[];if(Oe.length){let ve=se.concat(Oe.map(Se=>[Se.subject,Se.object])),at=new Map(we.map(Se=>[Se.restriction,Se])),Is=new Map;for(let Se of d)Is.set(`${Se.subject}\0${Se.predicate}\0${Se.object}`,Se.trust);let Ls=(Se,$n,Ft)=>Is.get(`${Se}\0${$n}\0${Ft}`),cr=new Map;for(let Se of Oe){let $n=at.get(Se.subject),Ft=at.get(Se.object),Kt=[$n&&Ls(Se.subject,j,$n.property),Ls(Se.subject,le,Se.viaY1),Ft&&Ls(Se.object,j,Ft.property),Ls(Se.object,le,Se.viaY2),Ls(Se.viaY1,q,Se.viaY2)].filter(Ly=>typeof Ly=="number"),ci=Ed(Kt,mo);ci!==null&&cr.set(`${Se.subject}\0${Se.object}`,ci)}let mn=Se=>{if(Se.predicate!==q)return H.find(Kt=>Kt.subject===Se.subject&&Kt.object===Se.object);let $n=ee.find(Kt=>Kt.subject===Se.subject&&Kt.object===Se.object);if($n)return $n;let Ft=Oe.find(Kt=>Kt.subject===Se.subject&&Kt.object===Se.object);return Ft?{subject:Ft.subject,predicate:q,object:Ft.object,provenance:Pn,trust:cr.get(`${Ft.subject}\0${Ft.object}`)}:void 0};for(let Se of O){let $n=F(Se,C,te,ve,{maxHops:3});if(!$n)continue;let Ft=$n.map(mn);if(Ft.every(Boolean)){let Kt=Ed(Ft.map(ci=>ci.trust),1);return{text:`yes \u2014 ${Fa(Ft)}`,replace:!0,...Kt!==null?{trust:Kt}:{}}}}}}let Oy=Y(l,I),jd=f.filter(U=>Oy.has(U.subject)).sort(p),Os=I.trim(),ai=on(w[2]).trim(),Iy=[...O].some(U=>F(U,C,te,se,{maxHops:iA}));if(jd.length){let U=jd.slice(0,3).map(re).join("; "),we=Iy?`The facts to settle it are here, but the chain is longer than I follow while answering. Run "/syllogise ${Os}", then ask me again.`:`If it's true, teach me: "${Os} is a kind of ${ai}".`;return{text:`I can't confirm that \u2014 nothing I remember says ${Os} is a ${ai}. I do know: ${U}. ${we}`,replace:!0,miss:!0}}let _d=f.filter(U=>O.has(U.object)&&C.has(U.subject)).sort(p)[0];return _d?{text:`I can't confirm that \u2014 what I know runs the other way: ${re(_d)}. A kind doesn't reverse. If it's true, teach me: "every ${Os} is a ${ai}".`,replace:!0,miss:!0}:!He&&!N&&!TT(Os)&&!d.some(U=>O.has(U.subject)||O.has(U.object))?{text:`I can't confirm that \u2014 I don't know "${Os}" at all yet. If it's true, teach me: "${Os} is a kind of ${ai}".`,replace:!0,miss:!0}:null}let $=c.match(NA);if($){let[,C,I,O]=$,{SUBCLASS_PREDICATE:N,ON_PROPERTY_PREDICATE:F,buildCardinalityRestrictions:G,proveCardinalityAtLeast:q,CARDINALITY_RULE_CONFIDENCE:ae,entailedTrustFrom:ce}=await Promise.resolve().then(()=>(Gt(),cn)),K=lo,ee=f.filter(te=>te.predicate===N&&K(te)).map(te=>[te.subject,te.object]),H=d.filter(te=>(te.predicate===F||Hw.has(te.predicate))&&K(te)),se=G(H);if(se.length){let te=Y(l,C.trim()),xe=Y(l,O.trim()),Ae=Number(I),pe=Fw(te,xe,(ie,fe)=>q(ee,se,ie,fe,Ae,{}));if(pe){let ie=d.find(oe=>oe.predicate===N&&oe.subject===pe.viaClass&&oe.object===pe.viaRestriction),fe=ie?.provenance?` (source: ${Nn(ie.provenance)})`:"",be=pe.kind==="exactly"?"exactly":"at least",Ce=(oe,Ze)=>`${oe}${Ze===1?"":"s"}`,ue=[ie?.trust,...H.filter(oe=>oe.subject===pe.viaRestriction).map(oe=>oe.trust),...pe.viaClass!==pe.subject?[f.find(oe=>oe.predicate===N&&oe.subject===pe.subject&&oe.object===pe.viaClass)?.trust]:[]].filter(oe=>typeof oe=="number"),V=ce(ue,ae);return{text:`yes \u2014 every ${pe.viaClass} has ${be} ${pe.n} ${Ce(pe.object,pe.n)}${fe}, so at least ${Ae} follows.`,replace:!0,...V!==null?{trust:V}:{}}}}}let _=c.match(PA);if(_){let[,C,I]=_,{SUBCLASS_PREDICATE:O,ON_PROPERTY_PREDICATE:N,buildCardinalityRestrictions:F,proveMaxCardinalityZeroDenial:G,CAX_MAXC0_RULE_CONFIDENCE:q,entailedTrustFrom:ae}=await Promise.resolve().then(()=>(Gt(),cn)),ce=lo,K=f.filter(se=>se.predicate===O&&ce(se)).map(se=>[se.subject,se.object]),ee=d.filter(se=>(se.predicate===N||Hw.has(se.predicate))&&ce(se)),H=F(ee);if(H.length){let se=Y(l,C.trim()),te=Y(l,I.trim()),xe=Fw(se,te,(Ae,pe)=>G(K,H,Ae,pe,{}));if(xe){let Ae=d.find(be=>be.predicate===O&&be.subject===xe.viaClass&&be.object===xe.viaRestriction),pe=Ae?.provenance?` (source: ${Nn(Ae.provenance)})`:"",ie=[Ae?.trust,...ee.filter(be=>be.subject===xe.viaRestriction).map(be=>be.trust),...xe.viaClass!==xe.subject?[f.find(be=>be.predicate===O&&be.subject===xe.subject&&be.object===xe.viaClass)?.trust]:[]].filter(be=>typeof be=="number"),fe=ae(ie,q);return{text:`no \u2014 every ${xe.viaClass} has at most 0 ${xe.object}${pe}.`,replace:!0,...fe!==null?{trust:fe}:{}}}}}let v=c.match(MA);if(v){let C=Y(l,v[1]),I=d.filter(O=>O.predicate===Qu&&C.has(O.subject)).sort(p);return I.length?m(I):null}let x=u.match(FA);if(x){let[,C,I]=x,O=Y(l,C.trim()),N=Y(l,I.replace(/^an?\s+/i,"").trim()),F=d.filter(G=>G.predicate===Qu&&N.has(G.subject)&&O.has(G.object)).sort(p)[0];return F?{text:`yes \u2014 ${re(F)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} owns/maintains ${I.trim()}.`,replace:!0}}let E=u.match(DA);if(E){let[,C,I]=E,O=Y(l,C.replace(/^an?\s+/i,"").trim()),N=Y(l,I.trim()),F=d.filter(G=>G.predicate===Qu&&O.has(G.subject)&&N.has(G.object)).sort(p)[0];return F?{text:`yes \u2014 ${re(F)}`,replace:!0}:{text:`no \u2014 no remembered fact says ${C.trim().toLowerCase()} is owned by ${I.trim()}.`,replace:!0}}let S=u.match(zA);if(S){let[,C,I]=S,O=Y(l,C.trim()),N=Y(l,`${I.trim()} method`),F=d.filter(G=>G.predicate===tr&&O.has(G.subject)&&N.has(G.object)).sort(p)[0];return F?{text:`yes \u2014 ${re(F)}`,replace:!0}:null}let R=u.match(BA);if(R){let C=Y(l,R[1].trim()),I=d.filter(O=>O.predicate===tr&&C.has(O.subject)&&/ method$/.test(O.object)).sort(p);return I.length?m(I):null}let k=u.match(Vw);if(k){let C=k[1].trim(),I=Kw.test(C)||qw.test(C)?null:ns.test(C)?r||null:C,O=k[2].trim().toLowerCase();if(I){let N=Y(l,I),F=new Map,G=null;if(o){let H=await oi(o,I);if(G=H,H)for(let se of za(o,H.id))for(let te of Y(l,se.label))!N.has(te)&&!F.has(te)&&F.set(te,se.label),N.add(te)}let q=H=>H.predicate===Zu&&l(H.object)===O||H.predicate===`tmct:${O}`&&H.object==="true",ae=l(I).split(/\s+/).filter(H=>H.length>=4&&!ay.has(H)),ce=H=>ae.some(se=>new Set(String(H.subject||"").split(/\s+/)).has(se)),K=H=>N.has(H.subject)||ae.length&&ce(H),ee=d.filter(H=>K(H)&&q(H)).sort(p)[0];if(ee){let H=F.get(ee.subject);return{text:H?`yes \u2014 the code graph says ${G.label} inherits ${H}, and ${re(ee)}`:`yes \u2014 ${re(ee)}`,replace:!0}}{let{findIsaChain:H,SUBCLASS_PREDICATE:se,TYPE_PREDICATE:te}=await Promise.resolve().then(()=>(Gt(),cn)),xe=lo,Ae=d.filter(ue=>ue.predicate===se&&xe(ue)),pe=d.filter(ue=>ue.predicate===te&&xe(ue)),ie=Ae.map(ue=>[ue.subject,ue.object]),fe=pe.map(ue=>[ue.subject,ue.object]),be=ue=>(ue.predicate===se?Ae:pe).find(V=>V.subject===ue.subject&&V.object===ue.object),Ce=Y(l,O);for(let ue of N){let V=H(ue,Ce,fe,ie,{maxHops:2});if(!V)continue;let oe=V.map(be);if(oe.every(Boolean))return{text:`yes \u2014 ${Fa(oe)}`,replace:!0}}}if(d.some(K)&&!n?.parsed)return{text:`I don't have a fact saying ${eA(I)} is ${O}.`,replace:!0};if(!n?.parsed&&!Lw.test(O))return Yw(I,O)}}let A=md(c).match(DT);if(A&&!sd.test(c)){let[,C,I,O]=A,N=I.toLowerCase();if(!nd.test(N)&&!rd.test(N)){let F=C.trim(),G=UT(await od(N),O),q=G.object.replace(/^an?\s+/i,"").trim();if(F&&q){let ae=G.predicate,ce=Y(l,F),K=Y(l,q),ee=[ae,Uo(ae)],H=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject)&&K.has(te.object)).sort(p)[0];if(H)return{text:`${Km(H.predicate)?"no":"yes"} \u2014 ${re(H)}`,replace:!0,generalVerbQuery:!0};let se=d.filter(te=>ee.includes(te.predicate)&&ce.has(te.subject));if(se.length){let te=se.slice(0,3).map(re).join("; ");return{text:`I can't confirm that \u2014 nothing I remember says ${Pt({subject:F,predicate:ae,object:q})}. I do know: ${te}.`,replace:!0,miss:!0}}return null}}}let P=c.match(zT);if(P&&!sd.test(c)){let[,C,I]=P,[O,N]=I.toLowerCase().split(/\s+/);if(!nd.test(O)&&!rd.test(O)){let F=C.trim();if(F){let G=await od(O);N&&/^mgx:[a-z]+$/.test(G)&&(G=`${G}-${N}`);let q=Y(l,F),ae=[G,Uo(G)],ce=Qe(d.filter(K=>ae.includes(K.predicate)&&q.has(K.subject)),i);if(ce.length)return{...m(ce),generalVerbQuery:!0}}}}let T=c.match(/^(?:what|who)\s+([a-z]+)\s+(on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside)\s+(.+?)[?.!\s]*$/i);if(T&&!sd.test(c)){let[,C,I,O]=T,N=C.toLowerCase();if(!nd.test(N)&&!rd.test(N)&&!FT.test(N)){let F=await od(N);/^mgx:[a-z]+$/.test(F)&&(F=`${F}-${I.toLowerCase()}`);let G=Y(l,O.replace(/^(?:an?|the)\s+/i,"").trim()),q=Qe(d.filter(ae=>ae.predicate===F&&G.has(ae.object)),i);if(q.length)return{...m(q),generalVerbQuery:!0}}}let M=c.match(IA);if(M){let C=Y(l,M[1]),I=Qe(d.filter(ae=>C.has(ae.subject)||C.has(ae.object)),i);if(!I.length)return null;let O=C.has(I[0].subject)?I[0].subject:I[0].object,N=I.map(ae=>` ${re(ae)}`),F=N.slice(0,je),G=N.slice(je),q=G.length?`
220
+ \u2026and ${G.length} more \u2014 say 'more' to see them.`:"";return{text:`${I.length} remembered fact${I.length===1?"":"s"} about ${O}:
188
221
  ${F.join(`
189
- `)}${H}`,replace:!0,...W.length?{pending:{items:W.map(ae=>ae.trim()),noun:"facts"}}:{}}}let G=n?.parsed?.shape==="meta"?n.parsed.object:null,J=!1,ee=c.match(uR);if(ee)G=ee[1],J=!0;else if(!G&&!n?.parsed){let C=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);C&&(G=C[1])}if(!G)return null;let ie=Y(l,G),D=Qe(f.filter(C=>ie.has(C.subject)),i),z=Qe(f.filter(C=>ie.has(C.object)),i),U=J?D.length?D:z:z.length?z:D;return U.length?m(U):null}function au(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var hu,c_,cn,na,Yg,hb,GB,Xg,l_,VB,qB,gb,bb,wb,u_,Jg,HB,KB,YB,XB,JB,bu,QB,d_,Ke,Jl,Ql,Lr,p_,Ks,ZB,eU,tU,nU,sU,oU,rU,iU,aU,cU,lU,uU,dU,pU,fU,Qg,f_,ca,m_,mU,hU,yu,yb,gU,bU,wU,tu,nu,h_,yU,g_,b_,ou,w_,v_,vU,vb,$b,$_,$U,xU,kU,EU,Po,SU,jU,_U,xb,RU,AU,x_,TU,CU,OU,Ys,Zg,vu,It,E_,j_,__,oa,O_,jb,IU,uu,_b,I_,L_,aa,N_,M_,ms,Vn,P_,F_,D_,pu,sb,z_,je,B_,U_,W_,G_,V_,q_,ob,H_,K_,Y_,X_,J_,Q_,ib,Ab,eR,tR,sR,oR,rR,iR,lb,aR,lR,uR,dR,pR,ub,fR,mR,hR,gR,bR,db,Gn,pb,fb,mb,wR,vR,$R,LU,Ib,kR,NU,cu,mu,ER,MU,PU,Lb,FU,DU,zU,BU,UU,la,WU,GU,VU,qU,SR,HU,KU,ta=L(()=>{ze();Bh();Mt();Ie();os();Gi();Vi();qo();Cl();Gh();Je();Wc();Il();Hh();An();Jn();po();si();Rl();Al();Qo();Gs();Ha();Hi();Qh();Zh();Pl();eg();Fl();tg();ng();Qi();yl();Sg();Ag();Lo();Gg();oi(void 0);ni(Wi);hu=new Set(["it","this","that","here"]),c_=e=>hu.has(String(e||"").trim().toLowerCase()),cn={imports:"understand a dependency/import relationship",uses:"understand a dependency/usage relationship (imports and/or calls)",calls:"understand a call relationship",callsSymbol:"understand a call relationship",defines:"locate what a module/class defines",contains:"understand class membership (methods/attributes)",tests:"assess test coverage",inherits:"understand a class hierarchy/inheritance relationship",touches:"understand commit/change history",touchesSymbol:"understand commit/change history",cochange:"understand change-coupling between modules",reexports:"understand a module's public exports/API surface",serves:"understand which component provides or backs another",denotes:"understand which vocabulary term names a code entity"},na=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Yg="look up a taught fact about a subject/verb/object";hb={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}},GB=new Set(["stats","memory","focus",...Object.keys(hb)]),Xg={Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},l_=new Set(["have","has","holds","hold"]),VB=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(Hn)].filter(e=>!l_.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),qB=new Set([...zh.map(e=>e.name),...Object.values(hb).map(e=>e.tool)]),gb=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"]),bb=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"]),wb=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"]),u_=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Jg=e=>e.replace(/(.)\1+/g,"$1");HB=gu(gb),KB=gu(bb),YB=gu(wb),XB=new RegExp(`^(?:${[...u_].map(Xe).join("|")})\\s+(.+)$`,"i"),JB=[...gb,...bb,...wb,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],bu="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",QB=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${bu})\\s+than\\s+(.+)$`,"i"),d_=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${bu})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ke="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Jl="mgx:ownedBy",Ql="mgx:hasProperty",Lr="rdfs:subClassOf",p_=new Set(["operator","teach","entailed"]),Ks=e=>!!e.sourceTypes?.some(t=>p_.has(t));ZB=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),eU=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),tU=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Ke})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),nU=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${bu})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),sU=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Ke})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),oU=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\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"),rU=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ke})\\s+([\\w-]+)[.!?]*$`,"i"),iU=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Ke})\\s+([\\w-]+)[.!?]*$`,"i"),aU=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ke})\\s+([\\w-]+)[.!?]*$`,"i"),cU=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),lU=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ke})\\s+([\\w-]+)[?.!]*$`,"i"),uU=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ke})\\s+([\\w-]+)[?.!]*$`,"i"),dU=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ke})\\s+([\\w-]+)$`,"i"),pU=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ke})\\s+(.+?)[?.!\\s]*$`,"i"),fU=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ke}))?[?.!\\s]*$`,"i"),Qg=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,f_=new Set(["bus","gas","plus","minus","surplus","lens","bias","atlas","canvas","virus","bonus","campus","census","chorus","circus","focus","status","iris","genius","sinus","walrus","cactus","fungus","radius","nucleus","alias","crocus","abacus","syllabus","octopus","platypus"]);ca="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",m_="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",mU=new RegExp(`^(.+?)\\s+(${m_})\\s+(.+)$`,"i"),hU=new RegExp(`^([\\w'-]+)\\s+${ca}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),yu="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",yb="with|to|from|by|of|in|on|for|as|about|into",gU=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${ca}(${yu})\\s+(${yb})\\s+(.+)$`,"i"),bU=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${yu})\\s+(${yb})\\s+(.+)$`,"i"),wU=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ke})\\s+(.+?)[.!?]*$`,"i"),tu=/^(?:is|are|am|owns|maintains)$/i,nu=/\b(?:is|are|am|owns|maintains)\b/i,h_=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"),yU=new RegExp(`^(?:${xs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");g_=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${ca}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),b_=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${ca}([a-z]+(?:\\s+(?:${Ke}))?)[?.!\\s]*$`,"i"),ou=/^(?:be|own|maintain)$/i,w_=new RegExp(`^(${Ke})\\s+(.+)$`,"i");v_=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],vU=new RegExp(`^(?:${v_.join("|")})\\b\\s*,?\\s+`,"i"),vb=Object.freeze(["you","i","it","they","he","she","we"]),$b=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),$_=Object.freeze([...$b,...vb]),$U=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${$_.join("|")})\\s+\\S+`,"i"),xU=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${vb.join("|")})\\s+(?:is|are|am|was|were)|(${$b.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),kU=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ke})\\s+([\\w-]+)$`,"i"),EU=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ke})\\s+([\\w-]+)$`,"i"),Po="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",SU=new RegExp(`^what\\s+does\\s+(.+?)${Po}\\s+do${Po}\\??$`,"i"),jU=new RegExp(`^what\\s+(.+?)${Po}\\s+does${Po}\\??$`,"i"),_U=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${Po}\\s+do${Po}\\??$`,"i"),xb="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",RU=new RegExp(`^who\\s+(?:is|was)\\s+${xb}$`,"i"),AU=new RegExp(`^what\\s+(?:did|has)\\s+${xb}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),x_="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",TU=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${x_}\\b`,"i"),CU=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");OU=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Zt,...un,"owns","maintains"].filter(e=>e.length>=3)),Ys={"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"},Zg=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"]),vu=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);It=e=>`${e.subject} ${Eb(e.predicate)} ${e.object}`;E_=Object.entries(Ys).filter(([e])=>!vu.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);j_=/ \(source: [^)]*\)$/;__=8;oa=null;O_=/^(?:every|each|all|any)\s+/i;jb=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"]),IU=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("|"))),uu=/^(?: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,_b=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,I_=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,L_=/^(who|what)'?s\s+/i,aa=e=>String(e).replace(L_,(t,n)=>`${n} is `),N_=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;M_=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,ms=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,Vn=new Set(["rdfs:subClassOf","rdf:type"]),P_=6,F_=/^why\s+(?=(?:is|are)\b)/i,D_=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;pu=new Set(["kind","sort","type","subclass","superclass"]),sb=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,z_=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,je=32,B_=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,U_=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,W_=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,G_=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,V_=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,q_=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,ob=/^mgx:[a-z]+-(?:on|in|at|inside|under|below|above|near|beside|behind|by)$/,H_=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ke})\\s+(.+?)\\s*[?.!]*$`,"i"),K_=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,Y_=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,X_=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,J_=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,Q_=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;ib=e=>String(e||"").replace(/\s+/g," ").trim();Ab="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",eR=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${Ab})[?.!\\s]*$`,"i"),tR=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${Ab})\\s+([\\w'-]+)[?.!\\s]*$`,"i");sR=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),oR=Object.entries(Ys).filter(([e])=>!sR.has(e)&&!vu.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Xe(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),rR=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),iR=Object.entries(Ys).filter(([e])=>!rR.has(e)&&!vu.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=Xe(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=[kb(s),...o].map(Xe).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),lb=/^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,aR=new Set(["changed","change","changes","updated","modified","happened","occurred"]);lR=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,uR=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,dR=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,pR=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,ub=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),fR=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,mR=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,hR=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,gR=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,bR=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,db=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,Gn=/^(?:it|this|that)$/i,pb=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,fb=/^(?:you|i|they|he|she|we)\b/i,mb=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${ia(e)} is ${t}".`,replace:!0}),wR=/^(?: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;vR=/inherit|supertype|subclass|extend|specializ/i,$R=8;LU=new RegExp(`\\b(?:${[...hu].join("|")})\\b`,"i"),Ib=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,kR=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i;NU=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Ue).join("|")})$`,"i"),cu="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",mu="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",ER=`(?:\\s+${mu})?`,MU=[new RegExp(`^${cu}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${ER}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${cu}architecture\\s+(?:${mu}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${cu}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${mu}(?:\\s+here)?\\??$`,"i")],PU={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:cn.contains,subclasses:cn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:cn.calls,callees:cn.calls,tests:cn.tests,untested:cn.tests,history:cn.touches,exports:cn.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"},Lb="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",FU=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+${Lb}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),DU=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${Lb}\\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"),zU=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"),BU=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"),UU=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"),la="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",WU=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${la}\\s*\\??$`,"i"),GU=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${la}\\s*\\??$`,"i"),VU=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${la}\\s*\\??$`,"i"),qU=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${la}\\s*[.!]*$`,"i"),SR=Object.freeze([...hu].filter(e=>e!=="here").concat("they")),HU=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${SR.join("|")})\\b(\\s+\\S.*)?$`,"i"),KU=Q(".tmct","memory","corpus-seed.json")});ta();Je();Ss();Qi();var ua={uninformativeClassMaxShare:.35,uninformativeClassMinSubjects:12,entailedDepthPenalty:.2,minoritySensePenalty:.5,minScore:.05,groupSplitThreshold:4,openerConceptCount:2,maxObjectsPerBodySentence:4,maxBodySentences:4,closerRootCount:2,budget:{chatReply:5,researchPanel:10,cliDigest:12,ledgerTerm:8}};var Pb=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),Xs=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),da=e=>Pb[e]||"other",_R=e=>Math.max(0,Math.min(1,e));function Nb(e){let t=(e.sourceTypes||[]).map(n=>Ko[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Ko.entailed}function RR(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function Mb(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function Fb(e,t,n={},s={}){let o={...ua,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(v=>v&&v.object&&v.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let v of i){if(da(v.predicate)==="isa"){let E=Mb(v.object,n);if(l&&E>o.uninformativeClassMaxShare){a.push({row:v,family:"isa",reason:"uninformative-class",share:E});continue}}c.push(v)}let u=c.filter(v=>da(v.predicate)==="isa").map(v=>v.object),d=Ji(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let v of d.clusters){let E=0;for(let k of v.objects){p.set(k,v.label);let _=c.find(R=>R.object===k&&da(R.predicate)==="isa");E+=_?Nb(_):0}f.set(v.label,E)}let m=null,h=-1;for(let[v,E]of[...f].sort((k,_)=>k[0].localeCompare(_[0])))E>h&&(h=E,m=v);let g=[];for(let v of c){let E=da(v.predicate),k=Nb(v),_={provenance:k};if(RR(v)&&(k-=o.entailedDepthPenalty,_.entailed=!0),E==="isa"){let x=.6+.4*(1-Mb(v.object,n));k*=x,_.informativeness=x;let T=p.get(v.object);m&&T&&T!==m&&(k-=o.minoritySensePenalty,_.minoritySense=T)}k=_R(k),g.push({row:v,family:E,score:k,reasons:_})}let b=[];for(let v of g)v.score<o.minScore?a.push({row:v.row,family:v.family,reason:"below-floor",score:v.score}):b.push(v);let y=new Map;for(let v of b)y.has(v.family)||y.set(v.family,[]),y.get(v.family).push(v);for(let v of y.values())v.sort((E,k)=>k.score-E.score||E.row.object.localeCompare(k.row.object));let w=Xs.filter(v=>y.has(v)).concat([...y.keys()].filter(v=>!Xs.includes(v)).sort()),$=[],j=!1;for(;$.length<r&&!j;){j=!0;for(let v of w){let E=y.get(v);if(E&&E.length&&($.push(E.shift()),j=!1,$.length>=r))break}}for(let v of w)for(let E of y.get(v)||[])a.push({row:E.row,family:E.family,reason:"over-budget",score:E.score});return $.sort((v,E)=>{let k=Xs.indexOf(v.family),_=Xs.indexOf(E.family);return k-_||E.score-v.score||v.row.object.localeCompare(E.row.object)}),{term:e,selected:$,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}ai();Yt();var AR=new Set(["isa","location","partOf","capableOf","usedFor"]),TR=new Set(["single","several","chained","group","closer"]),Db=(e,t)=>`${e}:${t}`;function $u(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!AR.has(n.family)||typeof n.form!="string"||!TR.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=Db(n.family,n.form);t.has(s)||t.set(s,{family:n.family,form:n.form,templates:[]});let o=t.get(s);o.templates.includes(n.template)||o.templates.push(n.template)}return t}var Js=e=>`${fo(e)} ${e}`;function CR(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=Js(t[0]),s=t.slice(1);return s.length?`${n}, and so ${tr(s.map(Js))}`:n}function OR(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(l=>String(l||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:mo(o),A_TERM:Js(o),A_TERM_CAP:mo(Js(o)),TERMS:ii(o),TERMS_CAP:mo(ii(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?Js(a):"",OBJECT:i,A_OBJECT:i?Js(i):"",OBJECTS_A:tr(r.map(Js)),OBJECTS_PLURAL:tr(r.map(ii)),OBJECTS_RAW:tr(r),CHAIN:CR(n&&n.length?n:r.slice(0,1))}}function IR(e,t){return String(e).replace(/\{([A-Z_]+)\}/g,(n,s)=>s in t?t[s]:"").replace(/\s+/g," ").replace(/\s+([.,;])/g,"$1").trim()}function qn(e,t,n,s={}){let o=(n||[]).filter(Boolean);if(!o.length)return null;let r=s.term??o[0].subject??"",i=s.form||(o.length>1?"several":"single"),a=e instanceof Map?e.get(Db(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=wi(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=IR(l[u],OR(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}ai();var LR=Xs.filter(e=>e!=="isa"&&e!=="other");function NR(e){let t=new Map;for(let n of e||[])t.has(n.family)||t.set(n.family,[]),t.get(n.family).push(n.row);return t}function zb(e,t){let n=Math.max(1,Math.trunc(t)||1),s=[];for(let o=0;o<(e||[]).length;o+=n)s.push(e.slice(o,o+n));return s}function MR(e,t){let n=l=>(t?.[l.object]||[])[1]||null,s=new Map;for(let l of e||[]){let c=n(l);c&&s.set(c,(s.get(c)||0)+1)}let o=new Map,r=[],i=[];for(let l of e||[]){let c=n(l);c&&s.get(c)>=2?(o.has(c)||(o.set(c,[]),r.push(c)),o.get(c).push(l)):i.push(l)}let a=r.map(l=>({parent:l,rows:o.get(l)}));return i.length&&a.push({parent:null,rows:i}),a}function PR(e,t,n){let s=new Map,o=new Map;for(let l of t||[]){let c=e?.[l.object];if(!Array.isArray(c)||c.length<2)continue;let u=c[c.length-1];!u||u===l.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(l))}let r=[...s.keys()].sort((l,c)=>s.get(c)-s.get(l)||l.localeCompare(c)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let l of r)for(let c of o.get(l)||[])a.has(c.id)||(a.add(c.id),i.push(c));return{roots:r,rows:i}}function FR(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let f=t[e[0].object],p=f&&f.length>1?"chained":"single",m=qn(s,"isa",e,{term:n,form:p,chain:f});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=qn(s,"isa",e,{term:n,form:"several"});return f&&r.push({...f,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),l=qn(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});l&&r.push({...l,role:"names-term",paragraph:"definition"});let c=[];for(let f of MR(a,t))for(let p of zb(f.rows,o.maxObjectsPerBodySentence))c.push({parent:f.parent,rows:p});if(c.length>o.maxBodySentences){let f=c.slice(0,o.maxBodySentences),p=f[f.length-1];for(let m of c.slice(o.maxBodySentences))p.rows=p.rows.concat(m.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?qn(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):qn(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=PR(t,e,o.closerRootCount);if(u.length){let f=qn(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});f&&r.push({...f,role:"closes-isa",paragraph:"definition"})}return r}function DR(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=mo(`${fo(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function zR(e,t){let n=[],s=null,o=null;for(let r of e)(!s||r.paragraph!==o||s.length>=t)&&(s=[],o=r.paragraph,n.push(s)),s.push(r);return n.map(r=>({sentences:r,text:r.map(i=>i.text).join(" ")}))}function Bb(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...ua,...n.config||{}},a=NR(e?.selected||[]),l=[];for(let u of FR(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of LR){let d=a.get(u);if(!(!d||!d.length))for(let f of zb(d,i.maxObjectsPerBodySentence)){let p=qn(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}DR(l,s);let c=new Map;for(let u of l)for(let d of u.rows)c.has(d.id)||c.set(d.id,d);return{term:s,sentences:l,paragraphs:zR(l,o),provenanceRows:[...c.values()]}}var BR=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function UR(e){let t=new Set,n=[];for(let s of e||[]){let o=s.provenance||(s.sourceTypes||[]).join(",");!o||t.has(o)||(t.add(o),n.push({provenance:s.provenance||"",sourceTypes:s.sourceTypes||[]}))}return n}var WR=Object.freeze({facts:"show the facts",chains:"show the chains"});function GR(e,t){let n=[...(e?.selected||[]).map(o=>o.row),...(e?.cut||[]).map(o=>o.row)].filter(Boolean),s=Object.entries(t||{}).filter(([,o])=>Array.isArray(o)&&o.length>1).map(([o,r])=>({object:o,chain:r}));return{escapes:WR,facts:n.map(BR),factCount:n.length,chains:s}}function Ub(e,t,n={}){let s=t?.term||e?.term||"";return{kind:"term-article",term:s,headline:s,paragraphs:(t?.paragraphs||[]).map(o=>o.text).filter(Boolean),body:t?.paragraphs||[],sources:UR(t?.provenanceRows||[]),detail:GR(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function Wb(e,t,n={},s=new Map,o={}){let r=Fb(e,t,n,o),i=Bb(r,s,o);return Ub(r,i,o)}Qi();var Gb=new Set(["rdfs:subClassOf","rdf:type"]);function Vb(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(Gb.has(i.predicate)?(n.add(i.subject),t.has(i.object)||t.set(i.object,new Set),t.get(i.object).add(i.subject),s.push([i.subject,i.object])):i.predicate==="owl:disjointWith"&&o.push([i.subject,i.object]));let r={};for(let[i,a]of t)r[i]=a.size;return{classSubjectCounts:r,totalSubjects:n.size,subClassEdges:s,disjointEdges:o}}function qb(e,t,n=6){let s=Ar(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Xi(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function Hb(e){let t=[],n=new Set;for(let s of e||[])!s||!Gb.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Je();ta();function VR(e,t,n,s,o={}){let r=$u(s||[]);if(!r||r.size===0)return null;let i=t||[],a=Vb(n||i),l=qb(a.subClassEdges,Hb(i));return Wb(e,i,a,r,{...o,chains:l})}function Kb(e,t,n,s={}){let o=Ct(e||{individuals:[],objectProperties:[]}),r=Y(X,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=VR(t,i,o,n,s);return qR(a)}function qR(e){if(!e||!Array.isArray(e.paragraphs)||!e.paragraphs.length)return null;let t=e.detail&&Array.isArray(e.detail.facts)?e.detail.facts:[];return{term:e.term||"",paragraphs:e.paragraphs.slice(),sources:[...new Set((e.sources||[]).map(n=>n.provenance).filter(Boolean))],facts:t,factCount:e.detail&&Number.isInteger(e.detail.factCount)?e.detail.factCount:t.length}}var HR="no session is open on this page yet \u2014 await tmct.open() first",Yb=Symbol.for("tmct.surface.fallback");function Xb({open:e,ask:t=null,plan:n=null,turn:s=null,page:o={},fallback:r=!1,target:i=globalThis}={}){if(typeof e!="function")throw new Error("publishTmctSurface: `open` must be this page's session factory");let a=i.tmct;if(r&&a&&!a[Yb])return a;let l=null,c=()=>{if(!l)throw new Error(HR);return l},u={async open(...d){return l=await e(...d),l},get session(){return l},async turn(d,f){let p=c();return s?s(d,f,p):typeof p.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:p.turn(d,f)},async ask(d,f){return t?t(d,f,c()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,f){return n?n(d,f,c()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[Yb]=r,i.tmct=u,u}function KR({payload:e=null}={}){let t=Ni();return e&&(t.payload=e),{memoryDir:t}}async function YR(e,t,n){let s=null;try{s=await Tb(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await Ob(n.memoryDir,e,null,!0,null)}catch{s=null}return s&&s.text?{answer:s.text,data:s,miss:!1}:{answer:null,data:null,miss:!0}}Xb({open:KR,ask:YR,page:{normFactTerm:X,digestTermFromPayloadBrowser:Kb},fallback:!0});})();
222
+ `)}${q}`,replace:!0,...G.length?{pending:{items:G.map(ae=>ae.trim()),noun:"facts"}}:{}}}let B=n?.parsed?.shape==="meta"?n.parsed.object:null,Z=!1,J=c.match(LA);if(J)B=J[1],Z=!0;else if(!B&&!n?.parsed){let C=c.match(/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i);C&&(B=C[1])}if(!B)return null;let ne=Y(l,B),D=Qe(f.filter(C=>ne.has(C.subject)),i),z=Qe(f.filter(C=>ne.has(C.object)),i),W=Z?D.length?D:z:z.length?z:D;return W.length?m(W):null}function cd(e){let t=e.sourceTypes||[];return t.length===0||t.some(n=>n!=="corpusWeak")}var gd,TT,fn,Ma,Cw,Xw,kG,Ow,AT,jG,_G,Jw,Qw,Zw,CT,Iw,RG,TG,AG,CG,OG,wd,IG,OT,Ke,Qu,Zu,ri,IT,lo,LG,NG,PG,MG,FG,DG,zG,BG,UG,WG,GG,HG,VG,qG,KG,Lw,PT,Wa,MT,YG,XG,vd,ey,JG,QG,ZG,nd,sd,FT,eH,DT,zT,rd,BT,WT,tH,ty,ny,GT,nH,sH,oH,rH,ar,iH,aH,cH,sy,lH,uH,HT,dH,pH,fH,uo,Nw,$d,Pt,qT,YT,XT,Da,tA,ay,mH,dd,cy,nA,sA,Ua,oA,rA,Cs,ss,iA,aA,cA,fd,Dw,lA,je,uA,dA,pA,fA,mA,hA,gA,bA,wA,yA,vA,$A,xA,Bw,uy,SA,kA,_A,RA,TA,AA,Gw,CA,IA,LA,NA,PA,Hw,MA,FA,DA,zA,BA,Vw,ns,qw,Kw,Yw,UA,GA,HA,hH,my,qA,gH,ld,hd,KA,bH,wH,hy,yH,vH,$H,xH,EH,Ga,SH,kH,jH,_H,YA,RH,TH,Pa=L(()=>{Be();Eb();Dt();Ie();ws();ka();ja();gr();Ou();jb();Je();Qi();Lu();Tb();zn();ps();To();Ci();Tu();Au();vr();ro();Rc();Ra();Lb();Nb();Fu();Pb();Du();Mb();Fb();Ia();vu();aw();dw();or();jw();Oi(void 0);Ai(Sa);gd=new Set(["it","this","that","here"]),TT=e=>gd.has(String(e||"").trim().toLowerCase()),fn={imports:"understand a dependency/import relationship",uses:"understand a dependency/usage relationship (imports and/or calls)",calls:"understand a call relationship",callsSymbol:"understand a call relationship",defines:"locate what a module/class defines",contains:"understand class membership (methods/attributes)",tests:"assess test coverage",inherits:"understand a class hierarchy/inheritance relationship",touches:"understand commit/change history",touchesSymbol:"understand commit/change history",cochange:"understand change-coupling between modules",reexports:"understand a module's public exports/API surface",serves:"understand which component provides or backs another",denotes:"understand which vocabulary term names a code entity"},Ma=e=>e?`${String(e).toLowerCase()}(s)`:"entities",Cw="look up a taught fact about a subject/verb/object";Xw={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}},kG=new Set(["stats","memory","focus",...Object.keys(Xw)]),Ow={Class:["class","classes"],Function:["function","functions"],Module:["module","modules"],Package:["package","packages"],Method:["method","methods"],Attribute:["attribute","attributes"],GlobalVariable:["variable","variables"],Commit:["commit","commits"],Session:["session","sessions"]},AT=new Set(["have","has","holds","hold"]),jG=new RegExp(`\\b(?:${[...Object.keys(de),...Object.keys(rs)].filter(e=>!AT.has(e)).sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")})\\b`,"i"),_G=new Set([...xb.map(e=>e.name),...Object.values(Xw).map(e=>e.tool)]),Jw=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"]),Qw=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"]),Zw=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"]),CT=new Set(["ok","okay","cool","aight","fair enough","got it","gotcha","noted","sounds good","sure","cool cool","right","haha ok fair enough"]),Iw=e=>e.replace(/(.)\1+/g,"$1");RG=bd(Jw),TG=bd(Qw),AG=bd(Zw),CG=new RegExp(`^(?:${[...CT].map(Xe).join("|")})\\s+(.+)$`,"i"),OG=[...Jw,...Qw,...Zw,"what can you do","what do you do","help","how do you work","who are you","what are you","what is your name"],wd="(?:[a-z]+er|better|worse|(?:more|less)\\s+[a-z]+)",IG=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are)\\s+(${wd})\\s+than\\s+(.+)$`,"i"),OT=new RegExp(`^(?:is|are)\\s+(.+?)\\s+(${wd})\\s+than\\s+(.+?)[?.!\\s]*$`,"i"),Ke="on|in|at|onto|upon|under|over|beside|near|behind|above|below|inside|outside",Qu="mgx:ownedBy",Zu="mgx:hasProperty",ri="rdfs:subClassOf",IT=new Set(["operator","teach","entailed"]),lo=e=>!!e.sourceTypes?.some(t=>IT.has(t));LG=new RegExp(`^you\\s+(?:can|may)\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),NG=new RegExp(`^an?\\s+([a-z][\\w-]*)\\s+(?:can|may)\\s+be\\s+([a-z]+)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)[.!?]*$`,"i"),PG=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*nothing\\s+may\\s+([a-z]+)\\s+(${Ke})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),MG=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)\\s*,?\\s*the\\s+([a-z][\\w-]*)\\s+must\\s+be\\s+(${wd})\\s+than\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),FG=new RegExp(`^([a-z]+ing)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)\\s+makes\\s+(?:it|the\\s+([a-z][\\w-]*))\\s+([a-z]+)\\s+(${Ke})\\s+the\\s+([a-z][\\w-]*)[.!?]*$`,"i"),DG=new RegExp(`^to\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\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");zG=new RegExp(`^the\\s+goal\\s+is\\s+that\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ke})\\s+([\\w-]+)[.!?]*$`,"i"),BG=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+to\\s+([a-z]+)\\s+(${Ke})\\s+([\\w-]+)[.!?]*$`,"i"),UG=new RegExp(`^(?:the\\s+goal\\s+is\\s+for|i\\s+want)\\s+(?:(every|each|all)\\s+)?([\\w-]+)\\s+(${Ke})\\s+([\\w-]+)[.!?]*$`,"i"),WG=new RegExp(`^(?:can|could)\\s+you\\s+([a-z]+)\\s+an?\\s+([a-z][\\w-]*)\\s+(${Ke})\\s+an?\\s+([a-z][\\w-]*)[?.!]*$`,"i"),GG=new RegExp(`^(?:get|put|place|stack)\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ke})\\s+([\\w-]+)[?.!]*$`,"i"),HG=new RegExp(`^the\\s+goal\\s+is\\s+(?:(every|each|all|both)\\s+)?(?:the\\s+)?([\\w-]+?)\\s+(${Ke})\\s+([\\w-]+)[?.!]*$`,"i"),VG=new RegExp(`^(?:(every|each|all)\\s+)?([\\w-]+)\\s+([a-z]+s)\\s+(${Ke})\\s+([\\w-]+)$`,"i"),qG=new RegExp(`^(?:what|who)\\s+([a-z']+)\\s+(${Ke})\\s+(.+?)[?.!\\s]*$`,"i"),KG=new RegExp(`^what\\s+(?:does|do|is)\\s+([\\w-]+)\\s+([a-z]+)(?:\\s+(${Ke}))?[?.!\\s]*$`,"i"),Lw=/^(?:anywhere|everywhere|nowhere|somewhere)$/i,PT=new Set(["bus","gas","plus","minus","surplus","lens","bias","atlas","canvas","virus","bonus","campus","census","chorus","circus","focus","status","iris","genius","sinus","walrus","cactus","fungus","radius","nucleus","alias","crocus","abacus","syllabus","octopus","platypus"]);Wa="(?:(?:usually|often|sometimes|rarely|always|typically|generally|occasionally|frequently|normally|regularly|commonly|mostly|currently|still|also|really|actually|closely|strongly|directly)\\s+)?",MT="(?:cannot|can't|can not|does not|doesn't|do not|don't|never)",YG=new RegExp(`^(.+?)\\s+(${MT})\\s+(.+)$`,"i"),XG=new RegExp(`^([\\w'-]+)\\s+${Wa}([a-z]+)\\s+(.+?)[.!?]*$`,"i"),vd="connected|related|associated|linked|based|derived|composed|made|used|known|located|found|involved|concerned",ey="with|to|from|by|of|in|on|for|as|about|into",JG=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(?:is|are|was|were)\\s+${Wa}(${vd})\\s+(${ey})\\s+(.+)$`,"i"),QG=new RegExp(`^(?:the\\s+|an?\\s+)?([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+(is|are|was|were)\\s+(?:an?\\s+)?([\\w'-]+)\\s+(${vd})\\s+(${ey})\\s+(.+)$`,"i"),ZG=new RegExp(`^(?:the\\s+|an?\\s+)([\\w'-]+(?:\\s+[\\w'-]+)?)\\s+([a-z]+)\\s+(${Ke})\\s+(.+?)[.!?]*$`,"i"),nd=/^(?:is|are|am|owns|maintains)$/i,sd=/\b(?:is|are|am|owns|maintains)\b/i,FT=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"),eH=new RegExp(`^(?:${zs.filter(e=>!/\s/.test(e)).join("|")})$`,"i");DT=new RegExp(`^(?:does|did)\\s+([\\w'-]+)\\s+${Wa}([a-z]+)\\s+(.+?)[?.!\\s]*$`,"i"),zT=new RegExp(`^what\\s+(?:does|did)\\s+([\\w'-]+)\\s+${Wa}([a-z]+(?:\\s+(?:${Ke}))?)[?.!\\s]*$`,"i"),rd=/^(?:be|own|maintain)$/i,BT=new RegExp(`^(${Ke})\\s+(.+)$`,"i");WT=["first","second","third","then","next","finally","later","meanwhile","afterward","afterwards"],tH=new RegExp(`^(?:${WT.join("|")})\\b\\s*,?\\s+`,"i"),ty=Object.freeze(["you","i","it","they","he","she","we"]),ny=Object.freeze(["you're","i'm","it's","they're","he's","she's","we're"]),GT=Object.freeze([...ny,...ty]),nH=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(${GT.join("|")})\\s+\\S+`,"i"),sH=new RegExp(`^(?:every\\s+|each\\s+|all\\s+|some\\s+|a few\\s+|a\\s+|an\\s+)?(?:(${ty.join("|")})\\s+(?:is|are|am|was|were)|(${ny.join("|")}))\\s+(?:an?\\s+)?[\\w'-]+[.!?]*$`,"i"),oH=new RegExp(`^([\\w-]+)\\s+([a-z]+)s\\s+(${Ke})\\s+([\\w-]+)$`,"i"),rH=new RegExp(`^forget\\s+(?:that\\s+)?([\\w-]+)\\s+([a-z]+)s\\s+(${Ke})\\s+([\\w-]+)$`,"i"),ar="(?:\\s+(?:exactly|really|actually|truly|anyway|internally|properly))?",iH=new RegExp(`^what\\s+does\\s+(.+?)${ar}\\s+do${ar}\\??$`,"i"),aH=new RegExp(`^what\\s+(.+?)${ar}\\s+does${ar}\\??$`,"i"),cH=new RegExp(`^what(?:'s|s|\\s+is)\\s+(.+?)${ar}\\s+do${ar}\\??$`,"i"),sy="([A-Za-z][\\w'.-]*(?:\\s+[A-Za-z][\\w'.-]*){0,3})",lH=new RegExp(`^who\\s+(?:is|was)\\s+${sy}$`,"i"),uH=new RegExp(`^what\\s+(?:did|has)\\s+${sy}\\s+(?:touch(?:ed)?|chang(?:e|ed)|work(?:ed)?\\s+on|commit(?:ted)?)$`,"i"),HT="(?:good|bad|clean|messy|ugly|nice|great|terrible|awful|solid|elegant|readable|maintainable|well[- ]written|well[- ]structured|spaghetti|ok|okay|decent|healthy)",dH=new RegExp(`^is\\s+(?:this|the)\\s+code(?:base)?\\s+(?:any\\s+)?${HT}\\b`,"i"),pH=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");fH=new Set([...Object.keys(de).flatMap(e=>e.split(/[\s-]+/)),...Xt,...hn,"owns","maintains"].filter(e=>e.length>=3)),uo={"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"},Nw=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"]),$d=new Set(["mgx:currently-in","mgx:located-in","mgx:fixed-in","mgx:stands-locked-in","mgx:works-in"]);Pt=e=>`${e.subject} ${ry(e.predicate)} ${e.object}`;qT=Object.entries(uo).filter(([e])=>!$d.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);YT=/ \(source: [^)]*\)$/;XT=8;Da=null;tA=/^(?:every|each|all|any)\s+/i;ay=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"]),mH=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("|"))),dd=/^(?: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,cy=/^(?:who|what)\s+(?:is|are)\s+(?:the|an?)\s+([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,nA=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]+(?:\s+[A-Z][\w-]*)?)'s\s+([a-z][\w-]*)[?.!\s]*$/i,sA=/^(who|what)'?s\s+/i,Ua=e=>String(e).replace(sA,(t,n)=>`${n} is `),oA=/^(?:who|what)\s+(?:is|are|was|were)\s+([\w-]{2,}?)s\s+([a-z][\w-]*)[?.!\s]*$/i;rA=/^list\s+(?:the\s+|all\s+)?([a-z][\w-]*)\s+of\s+([\w'-]+(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,Cs=/^(?:is|are)\s+(?:an?\s+)?(.+?)\s+(?:a\s+kind\s+of|a\s+type\s+of|an?)\s+(.+?)[?.!\s]*$/i,ss=new Set(["rdfs:subClassOf","rdf:type"]),iA=6,aA=/^why\s+(?=(?:is|are)\b)/i,cA=/^explain\s+how\s+you\s+know\s+(?:that\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i;fd=new Set(["kind","sort","type","subclass","superclass"]),Dw=/^(?:so\s+)?(.+?)\s+(?:is|are)\s+(?:an?\s+)?(.+?)\s*,?\s*(?:now\s+)?(?:right|correct|yeah)\??$/i,lA=/^(?:what\s+do\s+you\s+know\s+about|what(?:'s|s|\s+is)\s+in\s+your\s+memory\s+about|what\s+do\s+you\s+remember\s+about)\s+(.+?)[?.!\s]*$/i,je=32,uA=/^(?:can|could)\s+(all\s+|every\s+)?(?:an?\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z]+)[?.!\s]*$/i,dA=/^(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+have\s+(?:an?\s+|the\s+)?(.+?)[?.!\s]*$/i,pA=/^what\s+can\s+(?:an?\s+)?(.+?)\s+do[?.!\s]*$/i,fA=/^what\s+has\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,mA=/^what\s+(?:(?:can\s+be|is)\s+used\s+for|is\s+for)\s+(.+?)[?.!\s]*$/i,hA=/^where(?:'s|\s+is|\s+are)\s+(.+?)(?:\s+now)?\s*[?.!]*$/i,gA=/^where\s+(?:does|do|did)\s+(.+?)\s+[a-z][a-z'-]*(?:\s+now)?\s*[?.!]*$/i,bA=new RegExp(`^what(?:'s|\\s+is|\\s+are)\\s+(${Ke})\\s+(.+?)\\s*[?.!]*$`,"i"),wA=/^what\s+([a-z][\w-]*)\s+(?:does|do)\s+(?:an?\s+|the\s+)?(.+?)\s+([a-z][a-z-]*)\s*[?.!]*$/i,yA=/^(?:do|does)\s+(all\s+|every\s+)?(?:an?\s+|the\s+)?([\w'-]+(?:\s+[\w'-]+)*?)\s+([a-z-]+)[?.!\s]*$/i,vA=/^what\s+can\s+(?!be\s)(.+?)[?.!\s]*$/i,$A=/^what\s+(?:cannot|can't|cant|can\s+not)\s+(.+?)[?.!\s]*$/i,xA=/^(?:which|what)\s+([\w'-]+(?:\s+[\w'-]+)*?)\s+can\s+(.+?)[?.!\s]*$/i;Bw=e=>String(e||"").replace(/\s+/g," ").trim();uy="(?:most|least)\\s+[a-z][\\w-]*|[a-z][\\w-]*est|best|worst",SA=new RegExp(`^which\\s+([\\w'-]+)\\s+(?:is|are)\\s+(?:the\\s+)?(${uy})[?.!\\s]*$`,"i"),kA=new RegExp(`^what(?:'s|s|\\s+is)\\s+the\\s+(${uy})\\s+([\\w'-]+)[?.!\\s]*$`,"i");_A=new Set(["rdfs:subClassOf","rdf:type","mgx:hasA","mgx:capableOf","mgx:usedFor","mgx:ownedBy","owl:disjointWith","mgx:hasProperty","mgx:receivesAction"]),RA=Object.entries(uo).filter(([e])=>!_A.has(e)&&!$d.has(e)).map(([e,t])=>({predicate:e,re:new RegExp(`^what\\s+${Xe(t)}\\s+(.+?)[?.!\\s]*$`,"i")})).sort((e,t)=>t.re.source.length-e.re.source.length),TA=new Set(["rdfs:subClassOf","rdf:type","owl:disjointWith","mgx:hasProperty","mgx:hasA","mgx:capableOf","mgx:ownedBy"]),AA=Object.entries(uo).filter(([e])=>!TA.has(e)&&!$d.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=Xe(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=[oy(s),...o].map(Xe).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),Gw=/^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,CA=new Set(["changed","change","changes","updated","modified","happened","occurred"]);IA=/^what\s+(?:did|have)\s+(?:i|we|you)\s+(?:told|tell|said|say)\s+(?:you|me|us)?\s*about\s+(.+?)[?.!\s]*$/i,LA=/^what\s+kind\s+of\s+(?:thing|class|type|category|entity)?\s*(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,NA=/^does\s+every\s+(.+?)\s+have\s+at\s+least\s+(\d+)\s+(.+?)[?.!\s]*$/i,PA=/^does\s+an?\s+(.+?)\s+have\s+an?\s+(.+?)[?.!\s]*$/i,Hw=new Set(["owl:cardinality","owl:minCardinality","owl:maxCardinality","owl:onClass"]),MA=/^who\s+(?:owns|maintains)\s+(.+?)[?.!\s]*$/i,FA=/^(?:does|did)\s+([\w'-]+)\s+(?:owns?|maintains?)\s+(.+?)[?.!\s]*$/i,DA=/^(?:is|are|was|were)\s+(.+?)\s+owned\s+by\s+([A-Za-z][\w'-]*(?:\s+[A-Z][\w'-]*)?)[?.!\s]*$/i,zA=/^(?:does|did)\s+([\w'-]+)\s+(?:has|have)\s+an?\s+([a-z][\w-]*)\s+method[?.!\s]*$/i,BA=/^what\s+methods\s+does\s+([\w'-]+)\s+have[?.!\s]*$/i,Vw=/^(?:is|are|was|were)\s+(.+?)\s+([A-Za-z][\w-]*)[?.!\s]*$/i,ns=/^(?:it|this|that)$/i,qw=/^(?:it|this|that)(?:\s+one)?\s+(?:before|after)\b/i,Kw=/^(?:you|i|they|he|she|we)\b/i,Yw=(e,t)=>({text:`I don't know anything about "${e}" yet \u2014 teach me directly, e.g. "remember that ${Ba(e)} is ${t}".`,replace:!0}),UA=/^(?: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;GA=/inherit|supertype|subclass|extend|specializ/i,HA=8;hH=new RegExp(`\\b(?:${[...gd].join("|")})\\b`,"i"),my=/^what\s+(?:is|are)\s+(?:an?\s+)?(.+?)[?.!\s]*$/i,qA=/^who\s+(?:is|are|was|were)\s+(?:an?\s+|the\s+)?([\w'-]+)[?.!\s]*$/i;gH=new RegExp(`^(?:(?:the|a|an)\\s+)?(.+?)\\s+(${Object.keys(Ue).join("|")})$`,"i"),ld="(?:(?:can|could|would)\\s+you\\s+(?:please\\s+)?)?(?:(?:show|give)\\s+(?:me|us)\\s+|describe\\s+|explain\\s+|what(?:'s|s|\\s+is)\\s+)?",hd="(?:of|for)\\s+(?:this|the)\\s+(?:app|codebase|repo|repository|project|code)",KA=`(?:\\s+${hd})?`,bH=[new RegExp(`^${ld}the\\s+architecture(?:\\s+(?:overview|map|diagram))?${KA}(?:\\s+here)?\\??$`,"i"),new RegExp(`^${ld}architecture\\s+(?:${hd}|overview|map|diagram)\\??$`,"i"),new RegExp(`^${ld}(?:(?:an?|the)\\s+)?(?:overview|map|diagram)\\s+${hd}(?:\\s+here)?\\??$`,"i")],wH={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:fn.contains,subclasses:fn.inherits,impact:"understand what a change to this module would reach (impact closure)",callers:fn.calls,callees:fn.calls,tests:fn.tests,untested:fn.tests,history:fn.touches,exports:fn.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"},hy="(?:changed?|modif(?:y|ied)|edits?|edited|touch(?:es|ed)?|updates?|updated|alters?|altered|deletes?|deleted|removes?|removed|drops?|dropped)",yH=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+${hy}\\s+(?:the\\s+)?(.+?)[?.!\\s]*$`,"i"),vH=new RegExp(`^if\\s+(?:i|we|you|one|someone)\\s+${hy}\\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"),$H=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"),xH=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"),EH=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"),Ga="as\\s+(?:its|the|an?)?\\s*(?:base\\s+class|parent\\s+class|base|parent)",SH=new RegExp(`^(.+?)\\s+uses?\\s+(?:which\\s+[\\w'-]+|what)\\s+${Ga}\\s*\\??$`,"i"),kH=new RegExp(`^what\\s+(?:does|do|did)\\s+(.+?)\\s+uses?\\s+${Ga}\\s*\\??$`,"i"),jH=new RegExp(`^(?:does|do|did)\\s+(.+?)\\s+uses?\\s+(.+?)\\s+${Ga}\\s*\\??$`,"i"),_H=new RegExp(`^(.+?)\\s+uses?\\s+(.+?)\\s+${Ga}\\s*[.!]*$`,"i"),YA=Object.freeze([...gd].filter(e=>e!=="here").concat("they")),RH=new RegExp(`^((?:is|are|can|could|does|do)\\s+|what\\s+(?:is|are)\\s+)(${YA.join("|")})\\b(\\s+\\S.*)?$`,"i"),TH=Q(".tmct","memory","corpus-seed.json")});Pa();Je();us();Ia();var Ha={uninformativeClassMaxShare:.35,uninformativeClassMinSubjects:12,entailedDepthPenalty:.2,minoritySensePenalty:.5,minScore:.05,groupSplitThreshold:4,openerConceptCount:2,maxObjectsPerBodySentence:4,maxBodySentences:4,closerRootCount:2,budget:{chatReply:5,researchPanel:10,cliDigest:12,ledgerTerm:8}};var wy=Object.freeze({"rdfs:subClassOf":"isa","rdf:type":"isa","mgx:atLocation":"location","mgx:locatedNear":"location","mgx:partOf":"partOf","mgx:capableOf":"capableOf","mgx:usedFor":"usedFor"}),po=Object.freeze(["isa","location","partOf","capableOf","usedFor","other"]),Va=e=>wy[e]||"other",JA=e=>Math.max(0,Math.min(1,e));function gy(e){let t=(e.sourceTypes||[]).map(n=>Us[n]??0);return t.length?Math.max(...t):typeof e.trust=="number"&&e.trust>0?e.trust:Us.entailed}function QA(e){return Array.isArray(e.environments)&&e.environments.length?!0:(e.sourceTypes||[]).includes("entailed")}function by(e,t){let n=Number(t?.totalSubjects)||0;return n<=0?0:(Number(t?.classSubjectCounts?.[e])||0)/n}function yy(e,t,n={},s={}){let o={...Ha,...s.config||{}},r=Number.isInteger(s.budget)?s.budget:o.budget.chatReply,i=(t||[]).filter(v=>v&&v.object&&v.object!==e),a=[],l=(Number(n?.totalSubjects)||0)>=o.uninformativeClassMinSubjects,c=[];for(let v of i){if(Va(v.predicate)==="isa"){let x=by(v.object,n);if(l&&x>o.uninformativeClassMaxShare){a.push({row:v,family:"isa",reason:"uninformative-class",share:x});continue}}c.push(v)}let u=c.filter(v=>Va(v.predicate)==="isa").map(v=>v.object),d=Oa(u,{subClassEdges:n.subClassEdges||[],disjointEdges:n.disjointEdges||[]}),f=new Map,p=new Map;for(let v of d.clusters){let x=0;for(let E of v.objects){p.set(E,v.label);let S=c.find(R=>R.object===E&&Va(R.predicate)==="isa");x+=S?gy(S):0}f.set(v.label,x)}let m=null,h=-1;for(let[v,x]of[...f].sort((E,S)=>E[0].localeCompare(S[0])))x>h&&(h=x,m=v);let g=[];for(let v of c){let x=Va(v.predicate),E=gy(v),S={provenance:E};if(QA(v)&&(E-=o.entailedDepthPenalty,S.entailed=!0),x==="isa"){let k=.6+.4*(1-by(v.object,n));E*=k,S.informativeness=k;let A=p.get(v.object);m&&A&&A!==m&&(E-=o.minoritySensePenalty,S.minoritySense=A)}E=JA(E),g.push({row:v,family:x,score:E,reasons:S})}let b=[];for(let v of g)v.score<o.minScore?a.push({row:v.row,family:v.family,reason:"below-floor",score:v.score}):b.push(v);let y=new Map;for(let v of b)y.has(v.family)||y.set(v.family,[]),y.get(v.family).push(v);for(let v of y.values())v.sort((x,E)=>E.score-x.score||x.row.object.localeCompare(E.row.object));let w=po.filter(v=>y.has(v)).concat([...y.keys()].filter(v=>!po.includes(v)).sort()),$=[],_=!1;for(;$.length<r&&!_;){_=!0;for(let v of w){let x=y.get(v);if(x&&x.length&&($.push(x.shift()),_=!1,$.length>=r))break}}for(let v of w)for(let x of y.get(v)||[])a.push({row:x.row,family:x.family,reason:"over-budget",score:x.score});return $.sort((v,x)=>{let E=po.indexOf(v.family),S=po.indexOf(x.family);return E-S||x.score-v.score||v.row.object.localeCompare(x.row.object)}),{term:e,selected:$,cut:a,senses:{split:d.split,clusters:d.clusters,dominantLabel:m}}}Ni();Zt();var ZA=new Set(["isa","location","partOf","capableOf","usedFor"]),eC=new Set(["single","several","chained","group","closer"]),vy=(e,t)=>`${e}:${t}`;function xd(e){let t=new Map;for(let n of e||[]){if(!n||typeof n.family!="string"||!ZA.has(n.family)||typeof n.form!="string"||!eC.has(n.form)||typeof n.template!="string"||!n.template.trim())continue;let s=vy(n.family,n.form);t.has(s)||t.set(s,{family:n.family,form:n.form,templates:[]});let o=t.get(s);o.templates.includes(n.template)||o.templates.push(n.template)}return t}var fo=e=>`${Ao(e)} ${e}`;function tC(e){let t=(e||[]).map(o=>String(o||"").trim()).filter(Boolean);if(!t.length)return"";let n=fo(t[0]),s=t.slice(1);return s.length?`${n}, and so ${Er(s.map(fo))}`:n}function nC(e,t,n,s){let o=String(e||"").trim(),r=(t||[]).map(l=>String(l||"").trim()).filter(Boolean),i=r[0]||"",a=String(s||"").trim();return{TERM:o,TERM_CAP:Co(o),A_TERM:fo(o),A_TERM_CAP:Co(fo(o)),TERMS:Li(o),TERMS_CAP:Co(Li(o)),PRONOUN:"it",PRONOUN_CAP:"It",PARENT:a,A_PARENT:a?fo(a):"",OBJECT:i,A_OBJECT:i?fo(i):"",OBJECTS_A:Er(r.map(fo)),OBJECTS_PLURAL:Er(r.map(Li)),OBJECTS_RAW:Er(r),CHAIN:tC(n&&n.length?n:r.slice(0,1))}}function sC(e,t){return String(e).replace(/\{([A-Z_]+)\}/g,(n,s)=>s in t?t[s]:"").replace(/\s+/g," ").replace(/\s+([.,;])/g,"$1").trim()}function os(e,t,n,s={}){let o=(n||[]).filter(Boolean);if(!o.length)return null;let r=s.term??o[0].subject??"",i=s.form||(o.length>1?"several":"single"),a=e instanceof Map?e.get(vy(t,i)):null,l=a?a.templates:null;if(!l||!l.length)return null;let c=s.variantSeed??"",u=qi(`${r}|${t}|${i}|${c}`)%l.length,d=s.objectsOverride||o.map(p=>p.object),f=sC(l[u],nC(r,d,s.chain,s.parent));return f?{text:f,rows:o,family:t,form:i}:null}Ni();var oC=po.filter(e=>e!=="isa"&&e!=="other");function rC(e){let t=new Map;for(let n of e||[])t.has(n.family)||t.set(n.family,[]),t.get(n.family).push(n.row);return t}function $y(e,t){let n=Math.max(1,Math.trunc(t)||1),s=[];for(let o=0;o<(e||[]).length;o+=n)s.push(e.slice(o,o+n));return s}function iC(e,t){let n=l=>(t?.[l.object]||[])[1]||null,s=new Map;for(let l of e||[]){let c=n(l);c&&s.set(c,(s.get(c)||0)+1)}let o=new Map,r=[],i=[];for(let l of e||[]){let c=n(l);c&&s.get(c)>=2?(o.has(c)||(o.set(c,[]),r.push(c)),o.get(c).push(l)):i.push(l)}let a=r.map(l=>({parent:l,rows:o.get(l)}));return i.length&&a.push({parent:null,rows:i}),a}function aC(e,t,n){let s=new Map,o=new Map;for(let l of t||[]){let c=e?.[l.object];if(!Array.isArray(c)||c.length<2)continue;let u=c[c.length-1];!u||u===l.object||(s.set(u,(s.get(u)||0)+1),o.has(u)||o.set(u,[]),o.get(u).push(l))}let r=[...s.keys()].sort((l,c)=>s.get(c)-s.get(l)||l.localeCompare(c)).slice(0,Math.max(0,n)),i=[],a=new Set;for(let l of r)for(let c of o.get(l)||[])a.has(c.id)||(a.add(c.id),i.push(c));return{roots:r,rows:i}}function cC(e,t,n,s,o){let r=[];if(!e.length)return r;if(e.length===1){let f=t[e[0].object],p=f&&f.length>1?"chained":"single",m=os(s,"isa",e,{term:n,form:p,chain:f});return m&&r.push({...m,role:"names-term",paragraph:"definition"}),r}if(e.length<=o.groupSplitThreshold){let f=os(s,"isa",e,{term:n,form:"several"});return f&&r.push({...f,role:"names-term",paragraph:"definition"}),r}let i=e.slice(0,o.openerConceptCount),a=e.slice(o.openerConceptCount),l=os(s,"isa",i,{term:n,form:i.length>1?"several":"single",variantSeed:n});l&&r.push({...l,role:"names-term",paragraph:"definition"});let c=[];for(let f of iC(a,t))for(let p of $y(f.rows,o.maxObjectsPerBodySentence))c.push({parent:f.parent,rows:p});if(c.length>o.maxBodySentences){let f=c.slice(0,o.maxBodySentences),p=f[f.length-1];for(let m of c.slice(o.maxBodySentences))p.rows=p.rows.concat(m.rows);p.parent=null,c=f}for(let f of c){let p=f.parent?os(s,"isa",f.rows,{term:n,form:"group",parent:f.parent,variantSeed:f.parent}):os(s,"isa",f.rows,{term:n,form:"several",variantSeed:n});p&&r.push({...p,role:"describes-isa",paragraph:"definition"})}let{roots:u,rows:d}=aC(t,e,o.closerRootCount);if(u.length){let f=os(s,"isa",d.length?d:e,{term:n,form:"closer",objectsOverride:u,variantSeed:n});f&&r.push({...f,role:"closes-isa",paragraph:"definition"})}return r}function lC(e,t){if(!e.length)return;let n=e[0];if(/\bnames-term\b/.test(n.role))return;let s=Co(`${Ao(t)} ${t}`);n.text=n.text.replace(/^It\b/,s),n.role="names-term"}function uC(e,t){let n=[],s=null,o=null;for(let r of e)(!s||r.paragraph!==o||s.length>=t)&&(s=[],o=r.paragraph,n.push(s)),s.push(r);return n.map(r=>({sentences:r,text:r.map(i=>i.text).join(" ")}))}function xy(e,t,n={}){let s=e?.term||"",o=Number.isInteger(n.maxSentencesPerParagraph)?n.maxSentencesPerParagraph:3,r=n.chains||{},i={...Ha,...n.config||{}},a=rC(e?.selected||[]),l=[];for(let u of cC(a.get("isa")||[],r,s,t,i))l.push(u);for(let u of oC){let d=a.get(u);if(!(!d||!d.length))for(let f of $y(d,i.maxObjectsPerBodySentence)){let p=os(t,u,f,{term:s});p&&l.push({...p,role:"describes",paragraph:"description"})}}lC(l,s);let c=new Map;for(let u of l)for(let d of u.rows)c.has(d.id)||c.set(d.id,d);return{term:s,sentences:l,paragraphs:uC(l,o),provenanceRows:[...c.values()]}}var dC=e=>({subject:e.subject,predicate:e.predicate,object:e.object,sourceTypes:e.sourceTypes||[],provenance:e.provenance||""});function pC(e){let t=new Set,n=[];for(let s of e||[]){let o=s.provenance||(s.sourceTypes||[]).join(",");!o||t.has(o)||(t.add(o),n.push({provenance:s.provenance||"",sourceTypes:s.sourceTypes||[]}))}return n}var fC=Object.freeze({facts:"show the facts",chains:"show the chains"});function mC(e,t){let n=[...(e?.selected||[]).map(o=>o.row),...(e?.cut||[]).map(o=>o.row)].filter(Boolean),s=Object.entries(t||{}).filter(([,o])=>Array.isArray(o)&&o.length>1).map(([o,r])=>({object:o,chain:r}));return{escapes:fC,facts:n.map(dC),factCount:n.length,chains:s}}function Ey(e,t,n={}){let s=t?.term||e?.term||"";return{kind:"term-article",term:s,headline:s,paragraphs:(t?.paragraphs||[]).map(o=>o.text).filter(Boolean),body:t?.paragraphs||[],sources:pC(t?.provenanceRows||[]),detail:mC(e,n.chains),provenanceRows:t?.provenanceRows||[]}}function Sy(e,t,n={},s=new Map,o={}){let r=yy(e,t,n,o),i=xy(r,s,o);return Ey(r,i,o)}Ia();var ky=new Set(["rdfs:subClassOf","rdf:type"]);function jy(e){let t=new Map,n=new Set,s=[],o=[];for(let i of e||[])!i||!i.predicate||(ky.has(i.predicate)?(n.add(i.subject),t.has(i.object)||t.set(i.object,new Set),t.get(i.object).add(i.subject),s.push([i.subject,i.object])):i.predicate==="owl:disjointWith"&&o.push([i.subject,i.object]));let r={};for(let[i,a]of t)r[i]=a.size;return{classSubjectCounts:r,totalSubjects:n.size,subClassEdges:s,disjointEdges:o}}function _y(e,t,n=6){let s=ei(e||[]),o={};for(let r of t||[]){if(r in o)continue;let i=Ca(r,s,{cap:n});i.length>1&&(o[r]=i)}return o}function Ry(e){let t=[],n=new Set;for(let s of e||[])!s||!ky.has(s.predicate)||n.has(s.object)||(n.add(s.object),t.push(s.object));return t}Je();Pa();function hC(e,t,n,s,o={}){let r=xd(s||[]);if(!r||r.size===0)return null;let i=t||[],a=jy(n||i),l=_y(a.subClassEdges,Ry(i));return Sy(e,i,a,r,{...o,chains:l})}function Ty(e,t,n,s={}){let o=Lt(e||{individuals:[],objectProperties:[]}),r=Y(X,t),i=o.filter(l=>r.has(l.subject));if(!i.length)return null;let a=hC(t,i,o,n,s);return gC(a)}function gC(e){if(!e||!Array.isArray(e.paragraphs)||!e.paragraphs.length)return null;let t=e.detail&&Array.isArray(e.detail.facts)?e.detail.facts:[];return{term:e.term||"",paragraphs:e.paragraphs.slice(),sources:[...new Set((e.sources||[]).map(n=>n.provenance).filter(Boolean))],facts:t,factCount:e.detail&&Number.isInteger(e.detail.factCount)?e.detail.factCount:t.length}}var bC="no session is open on this page yet \u2014 await tmct.open() first",Ay=Symbol.for("tmct.surface.fallback");function Cy({open:e,ask:t=null,plan:n=null,turn:s=null,page:o={},fallback:r=!1,target:i=globalThis}={}){if(typeof e!="function")throw new Error("publishTmctSurface: `open` must be this page's session factory");let a=i.tmct;if(r&&a&&!a[Ay])return a;let l=null,c=()=>{if(!l)throw new Error(bC);return l},u={async open(...d){return l=await e(...d),l},get session(){return l},async turn(d,f){let p=c();return s?s(d,f,p):typeof p.turn!="function"?{answer:"this page runs no conversational turn \u2014 see tmct.session for what it does run",end:!1,record:null,plan:null,research:null}:p.turn(d,f)},async ask(d,f){return t?t(d,f,c()):{answer:"this page has no separate ask route \u2014 it answers questions through tmct.turn()",data:void 0,miss:!0}},async plan(d,f){return n?n(d,f,c()):{refused:!0,why:"this page's bundle carries no capability planner",driver:null,calls:[],composed:null,observed:null}},page:o,fallback:r};return u[Ay]=r,i.tmct=u,u}function wC({payload:e=null}={}){let t=ha();return e&&(t.payload=e),{memoryDir:t}}async function yC(e,t,n){let s=null;try{s=await dy(n.memoryDir,e,null,!0,{})}catch{s=null}if(!(s&&s.text))try{s=await fy(n.memoryDir,e,null,!0,null)}catch{s=null}return s&&s.text?{answer:s.text,data:s,miss:!1}:{answer:null,data:null,miss:!0}}Cy({open:wC,ask:yC,page:{normFactTerm:X,digestTermFromPayloadBrowser:Ty},fallback:!0});})();