@abco20/btxml-checker 0.1.1 → 0.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.
package/dist/index.js CHANGED
@@ -1,11 +1,12 @@
1
- var b={Error:"error",Warning:"warning",Info:"info"};function P(e,t,n,r,i="",o,s){return{code:e,severity:t,message:n,uri:i,...r?{range:r}:{},...o?{details:o}:{},...s?{data:s}:{}}}function ue(e,t,n){return{line:e,character:t,offset:n}}function v(e,t){return{start:e,end:t}}function sn(e){let{document:t,diagnostics:n,options:r,partial:i}=e,o=n.some(a=>a.severity===b.Error),s="generic-xml";if(o)s="invalid-xml";else if(t.root){let a=t.root,d=a.children.some(p=>p.kind==="element"&&p.name==="BehaviorTree"),u=a.children.some(p=>p.kind==="element"&&p.name==="TreeNodesModel"),l=a.attributes.some(p=>p.name==="BTCPP_format"&&p.value==="4"),m=a.name==="TreeNodesModel"||a.name==="root"&&!d&&u;r.kind==="model-xml"||m?s="model-document":(a.name==="BehaviorTree"||a.name==="root"&&(l||d)||r.kind==="bt-xml")&&(s="bt-document")}return t.kind=s,t.isBtXml=s==="bt-document"||s==="model-document",!o&&!i?{ok:!0,document:t,diagnostics:n,partial:!1}:{ok:!1,document:t,diagnostics:n,partial:i}}function Si(e){if(e.name==="input_port"||e.name==="output_port")return!1;let t=e.children||[],n=t.some(i=>i.kind==="text"&&i.text.trim()!==""),r=t.some(i=>i.kind==="element");return n&&r}function mt(e,t){if(e.kind==="element"){Si(e)&&t(e);for(let n of e.children||[])mt(n,t)}}function C(e,t){let n=0,r=0;for(let i=0;i<Math.min(t,e.length);i++)e[i]===`
2
- `?(n++,r=0):r++;return ue(n,r,t)}function ft(e,t,n,r){for(let i=0;i<e.length;i++){if(e[i]!=="&")continue;let o=e.slice(i+1),s=i;if(o.startsWith("amp;")){i+=4;continue}if(o.startsWith("lt;")){i+=3;continue}if(o.startsWith("gt;")){i+=3;continue}if(o.startsWith("quot;")){i+=5;continue}if(o.startsWith("apos;")){i+=5;continue}if(o.startsWith("#")){let m=1;if(o[m]==="x"||o[m]==="X"){m++;let N="";for(;m<o.length&&/[0-9a-fA-F]/.test(o[m]);)N+=o[m],m++;if(m<o.length&&o[m]===";"){m++;let B=e.slice(s,s+1+m),Ve=C(n,t+s),Oe=C(n,t+s+B.length);if(N){let de=Number.parseInt(N,16);if(de>0&&de<=1114111&&(de<55296||de>57343)){i+=m-1;continue}r("XML014_INVALID_NUMERIC_ENTITY",b.Error,`invalid numeric XML entity \`${B}\``,Ve,Oe,{primaryLabel:"this numeric entity is outside the valid Unicode range",help:"replace it with a valid Unicode code point or normal text"}),i+=m-1;continue}r("XML001_INVALID_SYNTAX",b.Error,`malformed numeric XML entity \`${B}\``,Ve,Oe,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=m-1;continue}let I=e.slice(s,s+1+m),W=C(n,t+s),A=C(n,t+s+I.length);r("XML001_INVALID_SYNTAX",b.Error,`malformed numeric XML entity \`${I}\``,W,A,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=m-1;continue}let p="";for(;m<o.length&&/[0-9]/.test(o[m]);)p+=o[m],m++;if(m<o.length&&o[m]===";"){m++;let N=e.slice(s,s+1+m),I=C(n,t+s),W=C(n,t+s+N.length);if(p){let A=Number.parseInt(p,10);if(A>0&&A<=1114111&&(A<55296||A>57343)){i+=m-1;continue}r("XML014_INVALID_NUMERIC_ENTITY",b.Error,`invalid numeric XML entity \`${N}\``,I,W,{primaryLabel:"this numeric entity is outside the valid Unicode range",help:"replace it with a valid Unicode code point or normal text"}),i+=m-1;continue}r("XML001_INVALID_SYNTAX",b.Error,`malformed numeric XML entity \`${N}\``,I,W,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=m-1;continue}let g=e.slice(s,s+1+m),x=C(n,t+s),T=C(n,t+s+g.length);r("XML001_INVALID_SYNTAX",b.Error,`malformed numeric XML entity \`${g}\``,x,T,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=m-1;continue}let a=o.match(/^[a-zA-Z][a-zA-Z0-9]*;/);if(a){let m=`&${a[0]}`,p=C(n,t+s),g=C(n,t+s+m.length);r("XML013_UNKNOWN_ENTITY",b.Error,`unknown XML entity \`${m}\``,p,g,{primaryLabel:"this entity is not one of XML's predefined entities",help:"use one of `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&apos;`, or a valid numeric entity"}),i+=m.length-1;continue}let d=o.match(/^[a-zA-Z][a-zA-Z0-9]*/);if(d){let m=`&${d[0]}`,p=C(n,t+s),g=C(n,t+s+m.length);r("XML001_INVALID_SYNTAX",b.Error,"bare ampersand in XML content",p,g,{primaryLabel:"escape `&` as `&amp;`",help:"replace `&` with `&amp;` unless this is a valid XML entity"}),i+=m.length-1;continue}let u=C(n,t+s),l=C(n,t+s+1);r("XML001_INVALID_SYNTAX",b.Error,"bare ampersand in XML content",u,l,{primaryLabel:"escape `&` as `&amp;`",help:"replace `&` with `&amp;` unless this is a valid XML entity"})}}function Se(e){return e.replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/&#x([0-9a-fA-F]+);/g,(t,n)=>{let r=Number.parseInt(n,16);return r<=0||r>1114111||r>=55296&&r<=57343?t:String.fromCodePoint(r)}).replace(/&#([0-9]+);/g,(t,n)=>{let r=Number.parseInt(n,10);return r<=0||r>1114111||r>=55296&&r<=57343?t:String.fromCodePoint(r)})}function an(e){let t="",n=[0];for(let r=0;r<e.length;){let i=bi(e,r);if(!i){t+=e[r]??"",r+=1,n.push(r);continue}t+=i.value,r=i.end,n.push(r)}return{value:t,offsets:n}}function bi(e,t){let n=e.slice(t);if(n.startsWith("&quot;")||n.startsWith("&apos;")||n.startsWith("&lt;")||n.startsWith("&gt;")||n.startsWith("&amp;")){let s=n.startsWith("&quot;")?"&quot;":n.startsWith("&apos;")?"&apos;":n.startsWith("&lt;")?"&lt;":n.startsWith("&gt;")?"&gt;":"&amp;";return{value:Se(s),end:t+s.length}}let i=/^&#x([0-9a-fA-F]+);/.exec(n);if(i){let s=i[0];return{value:Se(s),end:t+s.length}}let o=/^&#([0-9]+);/.exec(n);if(o){let s=o[0];return{value:Se(s),end:t+s.length}}}function dn(e){return ue(e.line,e.character,e.offset)}function hi(e){return!!e&&/[A-Za-z_:]/.test(e||"")}function Ti(e){return!!e&&/[A-Za-z0-9_.:\-]/.test(e||"")}function vi(e){return e===" "||e===" "||e===`
3
- `||e==="\r"}function Ri(e){let t=e.codePointAt(0);return t!==void 0&&t<32&&e!==" "&&e!==`
4
- `&&e!=="\r"}function ee(e,t={}){let n=[],r=t.mode==="tolerant",i={uri:t.uri||"",path:t.path,kind:"generic-xml",isBtXml:!1,xmlDeclaration:void 0,root:void 0,nodes:[],diagnostics:n,originalText:e},o=0,s=0,a=0,d=[],u=!1;function l(){return ue(s,a,o)}function m(){return o>=e.length}function p(f=0){return e[o+f]}function g(f=1){for(let k=0;k<f;k+=1)e[o++]===`
5
- `?(s+=1,a=0):a+=1}function x(){for(;!m()&&vi(p());)g()}let T=(f,k,D,E,h,w)=>{n.push(P(f,k,D,v(E,h),i.uri,w))};function N(f,k,D,E,h,w){n.push(P(f,k,D,E&&h?v(E,h):void 0,i.uri,w))}function I(){if(!hi(p()))return"";let f=o;for(g();!m()&&Ti(p());)g();return e.slice(f,o)}function W(){let f=p();if(f!=='"'&&f!=="'")return{value:"",ok:!1};let k=l();g();let D=l(),E=o;for(;!m()&&p()!==f&&p()!=="<";)g();let h=l();if(m()||p()!==f)return{value:e.slice(E,o),ok:!1,valueRange:v(k,h),valueContentRange:v(D,h)};let w=e.slice(E,o);g(),ft(w,D.offset,e,T);let $=an(w);return{value:$.value,valueOffsets:$.offsets,ok:!0,valueRange:v(k,l()),valueContentRange:v(D,h)}}function A(){let f=[],k=new Set;for(;;){x();let D=p();if(!D||D===">"||D==="/"&&p(1)===">")break;let E=l(),h=I(),w=l();if(!h)break;x();let $=l();if(p()!=="="){if(T("XML001_INVALID_SYNTAX",b.Error,"invalid attribute syntax",E,w,{primaryLabel:`expected \`=\` after attribute \`${h}\``,help:`write the attribute as \`${h}="..."\``}),u=!0,r)continue;break}g();let yi=l();x();let pt=l(),Q=W(),le=l();if(!Q.ok&&(T("XML005_INVALID_ATTRIBUTE_VALUE",b.Error,"invalid attribute value",pt,le,{primaryLabel:"expected a quoted attribute value",help:`write the value with quotes, for example \`${h}="value"\``}),u=!0,!r)||(k.has(h)?T("XML004_DUPLICATE_ATTRIBUTE",b.Error,`duplicate attribute \`${h}\``,E,le,{primaryLabel:`attribute \`${h}\` is already defined on this element`,help:`remove one of the duplicate \`${h}\` attributes`}):k.add(h),f.push({name:h,value:Q.value,...Q.valueOffsets?{valueOffsets:Q.valueOffsets}:{},range:v(E,le),fullRange:v(E,le),nameRange:v(E,w),equalsRange:v($,yi),valueRange:Q.valueRange||v(pt,le),valueContentRange:Q.valueContentRange||v(pt,le)}),!Q.ok&&r))break}return f}function B(f){d.length>0?d[d.length-1].children.push(f):(i.nodes.push(f),!i.root&&f.kind==="element"&&(i.root=f))}function Ve(){let f=l(),k=o;for(;!m()&&p()!=="<";)g();let D=e.slice(k,o);if(D.length===0)return;for(let h of D)if(Ri(h)){T("XML007_INVALID_CHARACTER",b.Error,"invalid XML character",f,l(),{primaryLabel:"this control character is not allowed in XML",help:"remove the character or replace it with valid text"});break}ft(D,k,e,T);let E={kind:"text",text:Se(D),range:v(f,l()),fullRange:v(f,l())};B(E)}function Oe(){let f=l();g(4);let k=l(),D=o;for(;!m()&&!(p()==="-"&&p(1)==="-"&&p(2)===">");)g();let E=e.slice(D,o);if(m()){if(T("XML001_INVALID_SYNTAX",b.Error,"unterminated XML comment",f,l(),{primaryLabel:"comment started here but no closing `-->` was found",help:"close the comment with `-->`"}),u=!0,!r)return;let $={kind:"comment",text:E,range:v(f,l()),fullRange:v(f,l()),contentRange:v(k,l())};B($);return}(E.includes("--")||E.endsWith("-"))&&T("XML001_INVALID_SYNTAX",b.Error,"invalid XML comment",k,l(),{primaryLabel:"XML comments cannot contain `--`",help:"remove `--` from the comment body or split it into separate comments"});let h=l();g(3);let w={kind:"comment",text:E,range:v(f,l()),fullRange:v(f,l()),contentRange:v(k,h)};B(w)}function de(){let f=l();g(5),x();let k=A();x(),p()==="?"&&p(1)===">"?g(2):T("XML001_INVALID_SYNTAX",b.Error,"invalid XML declaration",f,l(),{primaryLabel:"expected `?>` to close the XML declaration",help:'close the declaration as `<?xml version="1.0" encoding="UTF-8"?>`'});let D={range:v(f,l()),attributes:k};for(let E of k)E.name==="version"&&(D.version=E.value),E.name==="encoding"&&(D.encoding=E.value),E.name==="standalone"&&(D.standalone=E.value);i.xmlDeclaration=D}function gi(){let f=l();g(2),x();let k=l(),D=I(),E=l();if(x(),p()!==">")for(T("XML001_INVALID_SYNTAX",b.Error,"invalid closing tag syntax",f,l(),{primaryLabel:"expected `>` to close the tag",help:"close the tag with `>`"}),u=!0;!m()&&p()!==">";)g();p()===">"&&g();let h=d.pop();if(!h||h.name!==D){let w=h?h.name:D||"",$=D||"";T("XML006_MISSING_CLOSING_TAG",b.Error,`mismatched closing tag \`</${$}>\``,f,l(),{primaryLabel:`opened as \`<${w}>\` but closed as \`</${$}>\``,help:`change the closing tag to \`</${w}>\` or fix the nesting`});return}h.closeTagRange=v(f,l()),h.endTagRange=v(f,l()),h.nameRange||(h.nameRange=v(k,E)),h.range=v(h.range.start,l()),h.fullRange=v(h.range.start,l())}for(;!m();)if(p()==="<")if(p(1)==="?")if(e.slice(o,o+5).toLowerCase()==="<?xml"&&e.charAt(o+5)===" ")de();else{let f=l();for(;!m()&&!(p()==="?"&&p(1)===">");)g();m()||g(2),T("XML012_UNSUPPORTED_PROCESSING_INSTRUCTION",b.Error,"processing instruction is not supported",f,l(),{primaryLabel:"only the XML declaration is supported",help:"remove this processing instruction"})}else if(p(1)==="!"&&p(2)==="-"&&p(3)==="-")Oe();else if(p(1)==="!"&&p(2)==="["&&e.slice(o+3,o+9)==="CDATA["){let f=l();for(g(8);!m()&&!(p()==="]"&&p(1)==="]"&&p(2)===">");)g();m()||g(3),T("XML010_UNSUPPORTED_CDATA",b.Error,"CDATA is not supported",f,l(),{primaryLabel:"CDATA sections are not supported by btxml",help:"replace the CDATA section with normal escaped XML text",notes:["escape `<` as `&lt;`, `>` as `&gt;`, and `&` as `&amp;`"]})}else if(p(1)==="!"&&e.slice(o+2,o+9)==="DOCTYPE"){let f=l();for(g(8);!m()&&p()!==">";)g();m()||g(1),T("XML011_UNSUPPORTED_DOCTYPE",b.Error,"DOCTYPE is not supported",f,l(),{primaryLabel:"DOCTYPE declarations are not supported by btxml",help:"remove the DOCTYPE declaration"})}else if(p(1)==="/")gi();else{let f=l();g();let k=l(),D=I(),E=l();if(!D){if(T("XML001_INVALID_SYNTAX",b.Error,"invalid XML tag",f,l(),{primaryLabel:"expected an XML element name after `<`",help:"start the tag with a valid XML name such as `<root>` or `<BehaviorTree>`"}),u=!0,r){g();continue}break}let h={kind:"element",name:D,attributes:[],children:[],range:v(f,f),fullRange:v(f,f),openTagRange:v(f,f),startTagRange:v(f,f),nameRange:v(k,E),selfClosing:!1};if(h.attributes=A(),x(),p()==="/"&&p(1)===">"){g(2),h.selfClosing=!0,h.openTagRange=v(f,l()),h.startTagRange=h.openTagRange,h.range=v(f,l()),h.fullRange=v(f,l()),B(h);continue}if(p()!==">"){if(T("XML001_INVALID_SYNTAX",b.Error,"invalid XML tag",f,l(),{primaryLabel:"expected `>` or `/>` to close the start tag",help:"close the start tag with `>` or make it self-closing with `/>`"}),u=!0,r){h.openTagRange=v(f,l()),h.startTagRange=h.openTagRange,h.range=v(f,l()),h.fullRange=v(f,l()),B(h);continue}break}g(),h.openTagRange=v(f,l()),h.startTagRange=h.openTagRange,h.range=v(f,l()),h.fullRange=v(f,l()),B(h),d.push(h)}else Ve();if(d.length>0){let f=d[d.length-1];if(T("XML006_MISSING_CLOSING_TAG",b.Error,`missing closing tag for \`<${f.name}>\``,f.openTagRange.start,f.openTagRange.end,{primaryLabel:"this tag is not closed",help:`add \`</${f.name}>\` before the end of the file`}),u=!0,r)for(;d.length>0;){let k=d.pop();if(!k)break;k.range=v(k.range.start,l()),k.fullRange=v(k.range.start,l())}}let on=i.nodes.filter(f=>f.kind==="element");on.length===0?N("XML002_MISSING_ROOT",b.Error,"missing root element",void 0,void 0,{help:'add a single root element, usually `<root BTCPP_format="4">...</root>`'}):on.length>1&&N("XML003_MULTIPLE_ROOTS",b.Error,"multiple root elements",void 0,void 0,{primaryLabel:"this document has more than one top-level element",help:'wrap the document content in one `<root BTCPP_format="4">...</root>` element'});let qe=i.root;if(qe)for(let f of i.nodes)f!==qe&&f.kind==="text"&&f.text.trim().length>0&&T("XML016_TEXT_OUTSIDE_ROOT",b.Error,"text outside root element",f.range.start,f.range.end,{primaryLabel:"non-whitespace text appears outside the root element",help:"move this text inside `<root>` or remove it"});if(!i.xmlDeclaration)N("XML008_MISSING_DECLARATION",b.Warning,"missing XML declaration",void 0,void 0,{help:'add `<?xml version="1.0" encoding="UTF-8"?>` at the top of the file',notes:["this is a warning because BehaviorTree.CPP can still parse many files without a declaration"]});else if(i.xmlDeclaration.encoding&&i.xmlDeclaration.encoding.toUpperCase()!=="UTF-8"){let f=i.xmlDeclaration.encoding;T("XML009_INVALID_ENCODING",b.Warning,"XML encoding should be UTF-8",i.xmlDeclaration.range.start,i.xmlDeclaration.range.end,{primaryLabel:`declared encoding is \`${f}\``,help:'change the XML declaration to `encoding="UTF-8"`'})}return qe&&mt(qe,f=>{T("XML015_UNSUPPORTED_MIXED_CONTENT",b.Warning,"mixed XML content is not supported",dn(f.range.start),dn(f.range.end),{primaryLabel:"this element contains both text and child elements",help:"move the text into an attribute or split it into separate elements",notes:["text inside `<input_port>` and `<output_port>` remains allowed"]})}),sn({document:i,diagnostics:n,partial:u,options:t})}var be={indentWidth:2,xmlDeclaration:"always",blankLineBetweenBehaviorTrees:!0,lineEnding:"lf"};function ln(e){if(!e)return be;let t=typeof e.indentWidth=="number"?e.indentWidth:be.indentWidth,n=e.xmlDeclaration==="always"||e.xmlDeclaration==="never"||e.xmlDeclaration==="preserve"?e.xmlDeclaration:be.xmlDeclaration,r=typeof e.blankLineBetweenBehaviorTrees=="boolean"?e.blankLineBetweenBehaviorTrees:be.blankLineBetweenBehaviorTrees,i=e.lineEnding==="lf"||e.lineEnding==="crlf"||e.lineEnding==="auto"?e.lineEnding:be.lineEnding;return{indentWidth:t,xmlDeclaration:n,blankLineBetweenBehaviorTrees:r,lineEnding:i}}function Fe(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Xe(e){return Fe(e).replace(/"/g,"&quot;")}function xi(e){return e.filter(t=>!(t.kind==="text"&&t.text.trim()===""))}function ki(e,t,n){return`${" ".repeat(e*n)}${t}`}function ce(e,t,n,r){let i=" ".repeat(t*r),o=e.attributes||[];if(o.length===0)return[`${i}<${e.name}${n}`];if(o.length===1)return[`${i}<${e.name} ${o[0].name}="${Xe(o[0].value)}"${n}`];let s=[`${i}<${e.name} ${o[0].name}="${Xe(o[0].value)}"`],a=" ".repeat(i.length+1+e.name.length+1);for(let d=1;d<o.length;d+=1){let u=o[d],l=d===o.length-1?n:"";s.push(`${a}${u.name}="${Xe(u.value)}"${l}`)}return s}function je(e,t,n,r){let i=" ".repeat(t*n);if(e.kind==="comment")return[`${i}<!--${e.text}-->`];if(e.kind==="text"){let l=e.text.trim();return l?[ki(t,Fe(l),n)]:[]}let o=xi(e.children||[]),s=e.kind==="element"&&(e.name==="input_port"||e.name==="output_port"),a=(e.children||[]).filter(l=>l.kind==="text").map(l=>l.text).join("").trim(),d=o.some(l=>l.kind==="element"||l.kind==="comment");if(a&&d&&!s&&r.push({code:"XML015_UNSUPPORTED_MIXED_CONTENT",severity:"error",message:"Mixed XML content is not supported by btxml-checker formatter",uri:""}),a&&!d){if((e.attributes||[]).length<=1){let l=(e.attributes||[]).length===0?"":` ${e.attributes[0].name}="${Xe(e.attributes[0].value)}"`;return[`${i}<${e.name}${l}>${Fe(a)}</${e.name}>`]}return ce(e,t,`>${Fe(a)}</${e.name}>`,n)}if(o.length===0){if(e.selfClosing)return ce(e,t,"/>".slice(0),n);let l=ce(e,t,">",n);return l.push(`${i}</${e.name}>`),l}let u=ce(e,t,">",n);for(let l of e.children||[])l.kind==="text"&&l.text.trim()===""||u.push(...je(l,t+1,n,r));return u.push(`${i}</${e.name}>`),u}function Di(e){return e.filter(t=>!(t.kind==="text"&&t.text.trim()===""))}function un(e,t,n,r){let i=[],o=Di(e);for(let s=0;s<o.length;s+=1){let a=o[s],d=o[s-1],u=o[s+1],l=n&&a.kind==="element"&&a.name==="BehaviorTree"&&d&&d.kind==="element"&&d.name==="BehaviorTree",m=a.kind==="element"&&a.name==="TreeNodesModel"&&d!==void 0&&d.kind!=="comment",p=a.kind==="comment"&&u&&u.kind==="element"&&u.name==="TreeNodesModel"&&d!==void 0;(l||m||p)&&i.length>0&&i[i.length-1]!==""&&i.push(""),a.kind==="element"?(i.push(...je(a,1,t,r)),a.name==="TreeNodesModel"&&i.push("")):i.push(...je(a,1,t,r))}return i}function he(e,t={}){let n=ee(e);if(!n.ok||!n.document||!n.document.root)return{ok:!1,skipped:!1,diagnostics:n.diagnostics};if(n.diagnostics.find(T=>["XML010_UNSUPPORTED_CDATA","XML011_UNSUPPORTED_DOCTYPE","XML012_UNSUPPORTED_PROCESSING_INSTRUCTION","XML013_UNKNOWN_ENTITY","XML014_INVALID_NUMERIC_ENTITY","XML001_INVALID_SYNTAX"].includes(T.code)))return{ok:!1,skipped:!1,diagnostics:n.diagnostics};if(n.document.kind==="generic-xml"&&!t.force)return{ok:!0,skipped:!0,diagnostics:[]};let i=n.document.root,o=ln(t),s=o.indentWidth,a=[],d=n.document.xmlDeclaration!==void 0;if((o.xmlDeclaration==="always"||o.xmlDeclaration==="preserve"&&d)&&a.push('<?xml version="1.0" encoding="UTF-8"?>'),a.push(...ce(i,0,">",s)),a.push(...un(i.children||[],s,o.blankLineBetweenBehaviorTrees,n.diagnostics)),a.push(`</${i.name}>`),n.diagnostics.some(T=>T.code==="XML015_UNSUPPORTED_MIXED_CONTENT"))return{ok:!1,skipped:!1,diagnostics:n.diagnostics};let u=`
1
+ var S={Error:"error",Warning:"warning",Info:"info"};function P(e,t,n,r,i="",o,a){return{code:e,severity:t,message:n,uri:i,...r?{range:r}:{},...o?{details:o}:{},...a?{data:a}:{}}}function ge(e,t,n){return{line:e,character:t,offset:n}}function v(e,t){return{start:e,end:t}}function fn(e){let{document:t,diagnostics:n,options:r,partial:i}=e,o=n.some(s=>s.severity===S.Error),a="generic-xml";if(o)a="invalid-xml";else if(t.root){let s=t.root,d=s.children.some(m=>m.kind==="element"&&m.name==="BehaviorTree"),u=s.children.some(m=>m.kind==="element"&&m.name==="TreeNodesModel"),l=s.attributes.some(m=>m.name==="BTCPP_format"&&m.value==="4"),p=s.name==="TreeNodesModel"||s.name==="root"&&!d&&u;r.kind==="model-xml"||p?a="model-document":(s.name==="BehaviorTree"||s.name==="root"&&(l||d)||r.kind==="bt-xml")&&(a="bt-document")}return t.kind=a,t.isBtXml=a==="bt-document"||a==="model-document",!o&&!i?{ok:!0,document:t,diagnostics:n,partial:!1}:{ok:!1,document:t,diagnostics:n,partial:i}}function Ci(e){if(e.name==="input_port"||e.name==="output_port")return!1;let t=e.children||[],n=t.some(i=>i.kind==="text"&&i.text.trim()!==""),r=t.some(i=>i.kind==="element");return n&&r}function St(e,t){if(e.kind==="element"){Ci(e)&&t(e);for(let n of e.children||[])St(n,t)}}function I(e,t){let n=0,r=0;for(let i=0;i<Math.min(t,e.length);i++)e[i]===`
2
+ `?(n++,r=0):r++;return ge(n,r,t)}function ht(e,t,n,r){for(let i=0;i<e.length;i++){if(e[i]!=="&")continue;let o=e.slice(i+1),a=i;if(o.startsWith("amp;")){i+=4;continue}if(o.startsWith("lt;")){i+=3;continue}if(o.startsWith("gt;")){i+=3;continue}if(o.startsWith("quot;")){i+=5;continue}if(o.startsWith("apos;")){i+=5;continue}if(o.startsWith("#")){let p=1;if(o[p]==="x"||o[p]==="X"){p++;let E="";for(;p<o.length&&/[0-9a-fA-F]/.test(o[p]);)E+=o[p],p++;if(p<o.length&&o[p]===";"){p++;let w=e.slice(a,a+1+p),G=I(n,t+a),ze=I(n,t+a+w.length);if(E){let me=Number.parseInt(E,16);if(me>0&&me<=1114111&&(me<55296||me>57343)){i+=p-1;continue}r("XML014_INVALID_NUMERIC_ENTITY",S.Error,`invalid numeric XML entity \`${w}\``,G,ze,{primaryLabel:"this numeric entity is outside the valid Unicode range",help:"replace it with a valid Unicode code point or normal text"}),i+=p-1;continue}r("XML001_INVALID_SYNTAX",S.Error,`malformed numeric XML entity \`${w}\``,G,ze,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=p-1;continue}let z=e.slice(a,a+1+p),M=I(n,t+a),F=I(n,t+a+z.length);r("XML001_INVALID_SYNTAX",S.Error,`malformed numeric XML entity \`${z}\``,M,F,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=p-1;continue}let m="";for(;p<o.length&&/[0-9]/.test(o[p]);)m+=o[p],p++;if(p<o.length&&o[p]===";"){p++;let E=e.slice(a,a+1+p),z=I(n,t+a),M=I(n,t+a+E.length);if(m){let F=Number.parseInt(m,10);if(F>0&&F<=1114111&&(F<55296||F>57343)){i+=p-1;continue}r("XML014_INVALID_NUMERIC_ENTITY",S.Error,`invalid numeric XML entity \`${E}\``,z,M,{primaryLabel:"this numeric entity is outside the valid Unicode range",help:"replace it with a valid Unicode code point or normal text"}),i+=p-1;continue}r("XML001_INVALID_SYNTAX",S.Error,`malformed numeric XML entity \`${E}\``,z,M,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=p-1;continue}let g=e.slice(a,a+1+p),k=I(n,t+a),h=I(n,t+a+g.length);r("XML001_INVALID_SYNTAX",S.Error,`malformed numeric XML entity \`${g}\``,k,h,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=p-1;continue}let s=o.match(/^[a-zA-Z][a-zA-Z0-9]*;/);if(s){let p=`&${s[0]}`,m=I(n,t+a),g=I(n,t+a+p.length);r("XML013_UNKNOWN_ENTITY",S.Error,`unknown XML entity \`${p}\``,m,g,{primaryLabel:"this entity is not one of XML's predefined entities",help:"use one of `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&apos;`, or a valid numeric entity"}),i+=p.length-1;continue}let d=o.match(/^[a-zA-Z][a-zA-Z0-9]*/);if(d){let p=`&${d[0]}`,m=I(n,t+a),g=I(n,t+a+p.length);r("XML001_INVALID_SYNTAX",S.Error,"bare ampersand in XML content",m,g,{primaryLabel:"escape `&` as `&amp;`",help:"replace `&` with `&amp;` unless this is a valid XML entity"}),i+=p.length-1;continue}let u=I(n,t+a),l=I(n,t+a+1);r("XML001_INVALID_SYNTAX",S.Error,"bare ampersand in XML content",u,l,{primaryLabel:"escape `&` as `&amp;`",help:"replace `&` with `&amp;` unless this is a valid XML entity"})}}function Re(e){return e.replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/&#x([0-9a-fA-F]+);/g,(t,n)=>{let r=Number.parseInt(n,16);return r<=0||r>1114111||r>=55296&&r<=57343?t:String.fromCodePoint(r)}).replace(/&#([0-9]+);/g,(t,n)=>{let r=Number.parseInt(n,10);return r<=0||r>1114111||r>=55296&&r<=57343?t:String.fromCodePoint(r)})}function gn(e){let t="",n=[0];for(let r=0;r<e.length;){let i=Mi(e,r);if(!i){t+=e[r]??"",r+=1,n.push(r);continue}t+=i.value,r=i.end,n.push(r)}return{value:t,offsets:n}}function Mi(e,t){let n=e.slice(t);if(n.startsWith("&quot;")||n.startsWith("&apos;")||n.startsWith("&lt;")||n.startsWith("&gt;")||n.startsWith("&amp;")){let a=n.startsWith("&quot;")?"&quot;":n.startsWith("&apos;")?"&apos;":n.startsWith("&lt;")?"&lt;":n.startsWith("&gt;")?"&gt;":"&amp;";return{value:Re(a),end:t+a.length}}let i=/^&#x([0-9a-fA-F]+);/.exec(n);if(i){let a=i[0];return{value:Re(a),end:t+a.length}}let o=/^&#([0-9]+);/.exec(n);if(o){let a=o[0];return{value:Re(a),end:t+a.length}}}function yn(e){return ge(e.line,e.character,e.offset)}function _i(e){return!!e&&/[A-Za-z_:]/.test(e||"")}function wi(e){return!!e&&/[A-Za-z0-9_.:\-]/.test(e||"")}function Pi(e){return e===" "||e===" "||e===`
3
+ `||e==="\r"}function Ai(e){let t=e.codePointAt(0);return t!==void 0&&t<32&&e!==" "&&e!==`
4
+ `&&e!=="\r"}function ie(e,t={}){let n=[],r=t.mode==="tolerant",i={uri:t.uri||"",path:t.path,kind:"generic-xml",isBtXml:!1,xmlDeclaration:void 0,root:void 0,nodes:[],diagnostics:n,originalText:e},o=0,a=0,s=0,d=[],u=!1;function l(){return ge(a,s,o)}function p(){return o>=e.length}function m(f=0){return e[o+f]}function g(f=1){for(let x=0;x<f;x+=1)e[o++]===`
5
+ `?(a+=1,s=0):s+=1}function k(){for(;!p()&&Pi(m());)g()}let h=(f,x,D,N,T,_)=>{n.push(P(f,x,D,v(N,T),i.uri,_))};function E(f,x,D,N,T,_){n.push(P(f,x,D,N&&T?v(N,T):void 0,i.uri,_))}function z(){if(!_i(m()))return"";let f=o;for(g();!p()&&wi(m());)g();return e.slice(f,o)}function M(){let f=m();if(f!=='"'&&f!=="'")return{value:"",ok:!1};let x=l();g();let D=l(),N=o;for(;!p()&&m()!==f&&m()!=="<";)g();let T=l();if(p()||m()!==f)return{value:e.slice(N,o),ok:!1,valueRange:v(x,T),valueContentRange:v(D,T)};let _=e.slice(N,o);g(),ht(_,D.offset,e,h);let H=gn(_);return{value:H.value,valueOffsets:H.offsets,ok:!0,valueRange:v(x,l()),valueContentRange:v(D,T)}}function F(){let f=[],x=new Set;for(;;){k();let D=m();if(!D||D===">"||D==="/"&&m(1)===">")break;let N=l(),T=z(),_=l();if(!T)break;k();let H=l();if(m()!=="="){if(h("XML001_INVALID_SYNTAX",S.Error,"invalid attribute syntax",N,_,{primaryLabel:`expected \`=\` after attribute \`${T}\``,help:`write the attribute as \`${T}="..."\``}),u=!0,r)continue;break}g();let Ii=l();k();let bt=l(),re=M(),fe=l();if(!re.ok&&(h("XML005_INVALID_ATTRIBUTE_VALUE",S.Error,"invalid attribute value",bt,fe,{primaryLabel:"expected a quoted attribute value",help:`write the value with quotes, for example \`${T}="value"\``}),u=!0,!r)||(x.has(T)?h("XML004_DUPLICATE_ATTRIBUTE",S.Error,`duplicate attribute \`${T}\``,N,fe,{primaryLabel:`attribute \`${T}\` is already defined on this element`,help:`remove one of the duplicate \`${T}\` attributes`}):x.add(T),f.push({name:T,value:re.value,...re.valueOffsets?{valueOffsets:re.valueOffsets}:{},range:v(N,fe),fullRange:v(N,fe),nameRange:v(N,_),equalsRange:v(H,Ii),valueRange:re.valueRange||v(bt,fe),valueContentRange:re.valueContentRange||v(bt,fe)}),!re.ok&&r))break}return f}function w(f){d.length>0?d[d.length-1].children.push(f):(i.nodes.push(f),!i.root&&f.kind==="element"&&(i.root=f))}function G(){let f=l(),x=o;for(;!p()&&m()!=="<";)g();let D=e.slice(x,o);if(D.length===0)return;for(let T of D)if(Ai(T)){h("XML007_INVALID_CHARACTER",S.Error,"invalid XML character",f,l(),{primaryLabel:"this control character is not allowed in XML",help:"remove the character or replace it with valid text"});break}ht(D,x,e,h);let N={kind:"text",text:Re(D),range:v(f,l()),fullRange:v(f,l())};w(N)}function ze(){let f=l();g(4);let x=l(),D=o;for(;!p()&&!(m()==="-"&&m(1)==="-"&&m(2)===">");)g();let N=e.slice(D,o);if(p()){if(h("XML001_INVALID_SYNTAX",S.Error,"unterminated XML comment",f,l(),{primaryLabel:"comment started here but no closing `-->` was found",help:"close the comment with `-->`"}),u=!0,!r)return;let H={kind:"comment",text:N,range:v(f,l()),fullRange:v(f,l()),contentRange:v(x,l())};w(H);return}(N.includes("--")||N.endsWith("-"))&&h("XML001_INVALID_SYNTAX",S.Error,"invalid XML comment",x,l(),{primaryLabel:"XML comments cannot contain `--`",help:"remove `--` from the comment body or split it into separate comments"});let T=l();g(3);let _={kind:"comment",text:N,range:v(f,l()),fullRange:v(f,l()),contentRange:v(x,T)};w(_)}function me(){let f=l();g(5),k();let x=F();k(),m()==="?"&&m(1)===">"?g(2):h("XML001_INVALID_SYNTAX",S.Error,"invalid XML declaration",f,l(),{primaryLabel:"expected `?>` to close the XML declaration",help:'close the declaration as `<?xml version="1.0" encoding="UTF-8"?>`'});let D={range:v(f,l()),attributes:x};for(let N of x)N.name==="version"&&(D.version=N.value),N.name==="encoding"&&(D.encoding=N.value),N.name==="standalone"&&(D.standalone=N.value);i.xmlDeclaration=D}function Ei(){let f=l();g(2),k();let x=l(),D=z(),N=l();if(k(),m()!==">")for(h("XML001_INVALID_SYNTAX",S.Error,"invalid closing tag syntax",f,l(),{primaryLabel:"expected `>` to close the tag",help:"close the tag with `>`"}),u=!0;!p()&&m()!==">";)g();m()===">"&&g();let T=d.pop();if(!T||T.name!==D){let _=T?T.name:D||"",H=D||"";h("XML006_MISSING_CLOSING_TAG",S.Error,`mismatched closing tag \`</${H}>\``,f,l(),{primaryLabel:`opened as \`<${_}>\` but closed as \`</${H}>\``,help:`change the closing tag to \`</${_}>\` or fix the nesting`});return}T.closeTagRange=v(f,l()),T.endTagRange=v(f,l()),T.nameRange||(T.nameRange=v(x,N)),T.range=v(T.range.start,l()),T.fullRange=v(T.range.start,l())}for(;!p();)if(m()==="<")if(m(1)==="?")if(e.slice(o,o+5).toLowerCase()==="<?xml"&&e.charAt(o+5)===" ")me();else{let f=l();for(;!p()&&!(m()==="?"&&m(1)===">");)g();p()||g(2),h("XML012_UNSUPPORTED_PROCESSING_INSTRUCTION",S.Error,"processing instruction is not supported",f,l(),{primaryLabel:"only the XML declaration is supported",help:"remove this processing instruction"})}else if(m(1)==="!"&&m(2)==="-"&&m(3)==="-")ze();else if(m(1)==="!"&&m(2)==="["&&e.slice(o+3,o+9)==="CDATA["){let f=l();for(g(8);!p()&&!(m()==="]"&&m(1)==="]"&&m(2)===">");)g();p()||g(3),h("XML010_UNSUPPORTED_CDATA",S.Error,"CDATA is not supported",f,l(),{primaryLabel:"CDATA sections are not supported by btxml",help:"replace the CDATA section with normal escaped XML text",notes:["escape `<` as `&lt;`, `>` as `&gt;`, and `&` as `&amp;`"]})}else if(m(1)==="!"&&e.slice(o+2,o+9)==="DOCTYPE"){let f=l();for(g(8);!p()&&m()!==">";)g();p()||g(1),h("XML011_UNSUPPORTED_DOCTYPE",S.Error,"DOCTYPE is not supported",f,l(),{primaryLabel:"DOCTYPE declarations are not supported by btxml",help:"remove the DOCTYPE declaration"})}else if(m(1)==="/")Ei();else{let f=l();g();let x=l(),D=z(),N=l();if(!D){if(h("XML001_INVALID_SYNTAX",S.Error,"invalid XML tag",f,l(),{primaryLabel:"expected an XML element name after `<`",help:"start the tag with a valid XML name such as `<root>` or `<BehaviorTree>`"}),u=!0,r){g();continue}break}let T={kind:"element",name:D,attributes:[],children:[],range:v(f,f),fullRange:v(f,f),openTagRange:v(f,f),startTagRange:v(f,f),nameRange:v(x,N),selfClosing:!1};if(T.attributes=F(),k(),m()==="/"&&m(1)===">"){g(2),T.selfClosing=!0,T.openTagRange=v(f,l()),T.startTagRange=T.openTagRange,T.range=v(f,l()),T.fullRange=v(f,l()),w(T);continue}if(m()!==">"){if(h("XML001_INVALID_SYNTAX",S.Error,"invalid XML tag",f,l(),{primaryLabel:"expected `>` or `/>` to close the start tag",help:"close the start tag with `>` or make it self-closing with `/>`"}),u=!0,r){T.openTagRange=v(f,l()),T.startTagRange=T.openTagRange,T.range=v(f,l()),T.fullRange=v(f,l()),w(T);continue}break}g(),T.openTagRange=v(f,l()),T.startTagRange=T.openTagRange,T.range=v(f,l()),T.fullRange=v(f,l()),w(T),d.push(T)}else G();if(d.length>0){let f=d[d.length-1];if(h("XML006_MISSING_CLOSING_TAG",S.Error,`missing closing tag for \`<${f.name}>\``,f.openTagRange.start,f.openTagRange.end,{primaryLabel:"this tag is not closed",help:`add \`</${f.name}>\` before the end of the file`}),u=!0,r)for(;d.length>0;){let x=d.pop();if(!x)break;x.range=v(x.range.start,l()),x.fullRange=v(x.range.start,l())}}let mn=i.nodes.filter(f=>f.kind==="element");mn.length===0?E("XML002_MISSING_ROOT",S.Error,"missing root element",void 0,void 0,{help:'add a single root element, usually `<root BTCPP_format="4">...</root>`'}):mn.length>1&&E("XML003_MULTIPLE_ROOTS",S.Error,"multiple root elements",void 0,void 0,{primaryLabel:"this document has more than one top-level element",help:'wrap the document content in one `<root BTCPP_format="4">...</root>` element'});let Y=i.root,Bi=Y?.name==="BehaviorTree"||Y?.name==="TreeNodesModel"||Y?.name==="root"&&(Y.attributes.some(f=>f.name==="BTCPP_format"&&f.value==="4")||Y.children.some(f=>f.kind==="element"&&(f.name==="BehaviorTree"||f.name==="TreeNodesModel")));if(Y)for(let f of i.nodes)f!==Y&&f.kind==="text"&&f.text.trim().length>0&&h("XML016_TEXT_OUTSIDE_ROOT",S.Error,"text outside root element",f.range.start,f.range.end,{primaryLabel:"non-whitespace text appears outside the root element",help:"move this text inside `<root>` or remove it"});if(!i.xmlDeclaration&&!Bi)E("XML008_MISSING_DECLARATION",S.Warning,"missing XML declaration",void 0,void 0,{help:'add `<?xml version="1.0" encoding="UTF-8"?>` at the top of the file',notes:["this is a warning because BehaviorTree.CPP can still parse many files without a declaration"]});else if(i.xmlDeclaration?.encoding&&i.xmlDeclaration.encoding.toUpperCase()!=="UTF-8"){let f=i.xmlDeclaration.encoding;h("XML009_INVALID_ENCODING",S.Warning,"XML encoding should be UTF-8",i.xmlDeclaration.range.start,i.xmlDeclaration.range.end,{primaryLabel:`declared encoding is \`${f}\``,help:'change the XML declaration to `encoding="UTF-8"`'})}return Y&&St(Y,f=>{h("XML015_UNSUPPORTED_MIXED_CONTENT",S.Warning,"mixed XML content is not supported",yn(f.range.start),yn(f.range.end),{primaryLabel:"this element contains both text and child elements",help:"move the text into an attribute or split it into separate elements",notes:["text inside `<input_port>` and `<output_port>` remains allowed"]})}),fn({document:i,diagnostics:n,partial:u,options:t})}var ke={indentWidth:2,xmlDeclaration:"always",blankLineBetweenBehaviorTrees:!0,lineEnding:"lf"};function bn(e){if(!e)return ke;let t=typeof e.indentWidth=="number"?e.indentWidth:ke.indentWidth,n=e.xmlDeclaration==="always"||e.xmlDeclaration==="never"||e.xmlDeclaration==="preserve"?e.xmlDeclaration:ke.xmlDeclaration,r=typeof e.blankLineBetweenBehaviorTrees=="boolean"?e.blankLineBetweenBehaviorTrees:ke.blankLineBetweenBehaviorTrees,i=e.lineEnding==="lf"||e.lineEnding==="crlf"||e.lineEnding==="auto"?e.lineEnding:ke.lineEnding;return{indentWidth:t,xmlDeclaration:n,blankLineBetweenBehaviorTrees:r,lineEnding:i}}function Ge(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Ke(e){return Ge(e).replace(/"/g,"&quot;")}function Li(e){return e.filter(t=>!(t.kind==="text"&&t.text.trim()===""))}function Ui(e,t,n){return`${" ".repeat(e*n)}${t}`}function ye(e,t,n,r){let i=" ".repeat(t*r),o=e.attributes||[];if(o.length===0)return[`${i}<${e.name}${n}`];if(o.length===1)return[`${i}<${e.name} ${o[0].name}="${Ke(o[0].value)}"${n}`];let a=[`${i}<${e.name} ${o[0].name}="${Ke(o[0].value)}"`],s=" ".repeat(i.length+1+e.name.length+1);for(let d=1;d<o.length;d+=1){let u=o[d],l=d===o.length-1?n:"";a.push(`${s}${u.name}="${Ke(u.value)}"${l}`)}return a}function We(e,t,n,r){let i=" ".repeat(t*n);if(e.kind==="comment")return[`${i}<!--${e.text}-->`];if(e.kind==="text"){let l=e.text.trim();return l?[Ui(t,Ge(l),n)]:[]}let o=Li(e.children||[]),a=e.kind==="element"&&(e.name==="input_port"||e.name==="output_port"),s=(e.children||[]).filter(l=>l.kind==="text").map(l=>l.text).join("").trim(),d=o.some(l=>l.kind==="element"||l.kind==="comment");if(s&&d&&!a&&r.push({code:"XML015_UNSUPPORTED_MIXED_CONTENT",severity:"error",message:"Mixed XML content is not supported by btxml-checker formatter",uri:""}),s&&!d){if((e.attributes||[]).length<=1){let l=(e.attributes||[]).length===0?"":` ${e.attributes[0].name}="${Ke(e.attributes[0].value)}"`;return[`${i}<${e.name}${l}>${Ge(s)}</${e.name}>`]}return ye(e,t,`>${Ge(s)}</${e.name}>`,n)}if(o.length===0){if(e.selfClosing)return ye(e,t,"/>".slice(0),n);let l=ye(e,t,">",n);return l.push(`${i}</${e.name}>`),l}let u=ye(e,t,">",n);for(let l of e.children||[])l.kind==="text"&&l.text.trim()===""||u.push(...We(l,t+1,n,r));return u.push(`${i}</${e.name}>`),u}function Oi(e){return e.filter(t=>!(t.kind==="text"&&t.text.trim()===""))}function Sn(e,t,n,r){let i=[],o=Oi(e);for(let a=0;a<o.length;a+=1){let s=o[a],d=o[a-1],u=o[a+1],l=n&&s.kind==="element"&&s.name==="BehaviorTree"&&d&&d.kind==="element"&&d.name==="BehaviorTree",p=s.kind==="element"&&s.name==="TreeNodesModel"&&d!==void 0&&d.kind!=="comment",m=s.kind==="comment"&&u&&u.kind==="element"&&u.name==="TreeNodesModel"&&d!==void 0;(l||p||m)&&i.length>0&&i[i.length-1]!==""&&i.push(""),s.kind==="element"?(i.push(...We(s,1,t,r)),s.name==="TreeNodesModel"&&i.push("")):i.push(...We(s,1,t,r))}return i}function xe(e,t={}){let n=ie(e);if(!n.ok||!n.document||!n.document.root)return{ok:!1,skipped:!1,diagnostics:n.diagnostics};if(n.diagnostics.find(h=>["XML010_UNSUPPORTED_CDATA","XML011_UNSUPPORTED_DOCTYPE","XML012_UNSUPPORTED_PROCESSING_INSTRUCTION","XML013_UNKNOWN_ENTITY","XML014_INVALID_NUMERIC_ENTITY","XML001_INVALID_SYNTAX"].includes(h.code)))return{ok:!1,skipped:!1,diagnostics:n.diagnostics};if(n.document.kind==="generic-xml"&&!t.force)return{ok:!0,skipped:!0,diagnostics:[]};let i=n.document.root,o=bn(t),a=o.indentWidth,s=[],d=n.document.xmlDeclaration!==void 0;if((o.xmlDeclaration==="always"||o.xmlDeclaration==="preserve"&&d)&&s.push('<?xml version="1.0" encoding="UTF-8"?>'),s.push(...ye(i,0,">",a)),s.push(...Sn(i.children||[],a,o.blankLineBetweenBehaviorTrees,n.diagnostics)),s.push(`</${i.name}>`),n.diagnostics.some(h=>h.code==="XML015_UNSUPPORTED_MIXED_CONTENT"))return{ok:!1,skipped:!1,diagnostics:n.diagnostics};let u=`
6
6
  `;(o.lineEnding==="crlf"||o.lineEnding==="auto"&&e.includes(`\r
7
7
  `))&&(u=`\r
8
- `);let l=a.join(u),m=u.replace(/\\/g,"\\\\").replace(/\r/g,"\\r").replace(/\n/g,"\\n"),p=new RegExp(`(?:${m})+$`,"u"),x=`${l.replace(p,"")}${u}`;return{ok:!0,text:x,changed:x!==e,skipped:!1,diagnostics:n.diagnostics.filter(T=>T.severity!==b.Error)}}function gt(e,t){let n=e.valueOffsets;return!n||n.length===0?t:t<=0?0:t>=n.length?n[n.length-1]??0:n[t]??0}function yt(e,t,n){let r=t.valueContentRange??t.valueRange,i=gt(t,n.start),o=gt(t,n.end),s=C(e.originalText,r.start.offset+i),a=C(e.originalText,r.start.offset+o);return v(s,a)}import{z as $e}from"zod";var y={InvalidScriptSyntax:"BT401_INVALID_SCRIPT_SYNTAX",EmptyScript:"BT402_EMPTY_SCRIPT",InvalidScriptToken:"BT403_INVALID_SCRIPT_TOKEN",UnknownScriptVariable:"BT404_UNKNOWN_SCRIPT_VARIABLE",AssignmentToUnknownVariable:"BT405_ASSIGNMENT_TO_UNKNOWN_VARIABLE",InvalidCompoundAssignment:"BT406_INVALID_COMPOUND_ASSIGNMENT",InvalidScriptOperandType:"BT407_INVALID_SCRIPT_OPERAND_TYPE",ScriptResultNotBoolCompatible:"BT408_SCRIPT_RESULT_NOT_BOOL_COMPATIBLE",ScriptVariableTypeMismatch:"BT410_SCRIPT_VARIABLE_TYPE_MISMATCH",InvalidRootElement:"BT001_INVALID_ROOT_ELEMENT",MissingBTCPPFormat:"BT002_MISSING_BTCPP_FORMAT",MissingBehaviorTreeID:"BT003_MISSING_BEHAVIOR_TREE_ID",DuplicateBehaviorTreeID:"BT004_DUPLICATE_BEHAVIOR_TREE_ID",UnknownSubTree:"BT005_UNKNOWN_SUBTREE",DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID",MissingPortName:"BT007_MISSING_PORT_NAME",DuplicatePortName:"BT008_DUPLICATE_PORT_NAME",UnknownTopLevelElement:"BT009_UNKNOWN_TOP_LEVEL_ELEMENT",UnknownMainTree:"BT010_UNKNOWN_MAIN_TREE",AmbiguousSubTree:"BT011_AMBIGUOUS_SUBTREE",ConflictingNodeModel:"BT012_CONFLICTING_NODE_MODEL",DuplicateBehaviorTreeIdInWorkspace:"BT013_DUPLICATE_BEHAVIOR_TREE_ID_IN_WORKSPACE",MissingIncludePath:"BT301_MISSING_INCLUDE_PATH",IncludeNotFound:"BT302_INCLUDE_NOT_FOUND",IncludeCycle:"BT303_INCLUDE_CYCLE",UnresolvedIncludePathVariable:"BT304_UNRESOLVED_INCLUDE_PATH_VARIABLE",IncludeOutsideWorkspace:"BT306_INCLUDE_OUTSIDE_WORKSPACE",ExternalIncludeUsed:"BT307_EXTERNAL_INCLUDE_USED",IncludeDepthExceeded:"BT309_INCLUDE_DEPTH_EXCEEDED",TooManyResolvedFiles:"BT310_TOO_MANY_RESOLVED_FILES",EntrypointNotFound:"BT311_ENTRYPOINT_NOT_FOUND",RosPackageResolverMissing:"BT312_ROS_PACKAGE_RESOLVER_MISSING",RosPackageNotFound:"BT313_ROS_PACKAGE_NOT_FOUND",UnknownNode:"BT105_UNKNOWN_NODE",MissingRequiredPort:"BT101_MISSING_REQUIRED_PORT",UnknownPort:"BT102_UNKNOWN_PORT",InvalidPortValueType:"BT103_INVALID_PORT_VALUE_TYPE",ChildCapableNodeSelfClosing:"BT108_CHILD_CAPABLE_NODE_SELF_CLOSING",LeafNodeOpenClose:"BT109_LEAF_NODE_OPEN_CLOSE",InvalidChildCount:"BT110_INVALID_CHILD_COUNT",BlackboardTypeMismatch:"BT111_BLACKBOARD_TYPE_MISMATCH",CustomLiteralRequiresValidator:"BT112_CUSTOM_LITERAL_REQUIRES_VALIDATOR",InvalidPortDefaultValue:"BT114_INVALID_PORT_DEFAULT_VALUE",OutputPortRequiresRemap:"BT115_OUTPUT_PORT_REQUIRES_REMAP",InvalidPortName:"BT116_INVALID_PORT_NAME",AugmentTargetNotFound:"BT117_AUGMENT_TARGET_NOT_FOUND",AugmentPortNotFound:"BT118_AUGMENT_PORT_NOT_FOUND",InvalidTypeRefinement:"BT119_INVALID_TYPE_REFINEMENT",ExternalModelFileNotFound:"BT321_EXTERNAL_MODEL_FILE_NOT_FOUND",AugmentationFileNotFound:"BT324_AUGMENTATION_FILE_NOT_FOUND",MissingTreeNodesModel:"BT322_MISSING_TREENODESMODEL",ExternalModelXmlParseError:"BT323_EXTERNAL_MODEL_XML_PARSE_ERROR",NodeDefinitionFileNotFound:"BT331_NODE_DEFINITION_FILE_NOT_FOUND",InvalidNodeDefinitionJson:"BT332_INVALID_NODE_DEFINITION_JSON",InvalidNodeDefinitionSchema:"BT333_INVALID_NODE_DEFINITION_SCHEMA",DuplicateNodeDefinitionId:"BT334_DUPLICATE_NODE_DEFINITION_ID",InvalidAugmentationJson:"BT335_INVALID_AUGMENTATION_JSON",InvalidAugmentationSchema:"BT336_INVALID_AUGMENTATION_SCHEMA",ConflictingPortDefault:"BT107_CONFLICTING_PORT_DEFAULT",UnusedSuppression:"BT351_UNUSED_SUPPRESSION",MissingSuppressionReason:"BT353_MISSING_SUPPRESSION_REASON"},za=Object.values(y).sort();var Ei=$e.object({subTreePorts:$e.enum(["loose","strict"]).optional()}).strict(),Ni=$e.object({allowStringEntryCompatibility:$e.boolean().optional()}).strict(),cn={"script/valid-syntax":{code:y.InvalidScriptSyntax,defaultSeverity:"error",description:"Script-bearing attributes must parse as valid BT.CPP scripts."},"script/no-unknown-variable":{code:y.UnknownScriptVariable,defaultSeverity:"warn",description:"Script-bearing attributes should not reference unknown variables."},"script/valid-assignment":{code:y.AssignmentToUnknownVariable,codes:[y.AssignmentToUnknownVariable,y.InvalidCompoundAssignment,y.ScriptVariableTypeMismatch],defaultSeverity:"error",description:"Script assignments must target known variables and use compatible types."},"script/valid-expression-type":{code:y.InvalidScriptOperandType,defaultSeverity:"error",description:"Script expressions must use operators with compatible operand types."},"script/valid-result-type":{code:y.ScriptResultNotBoolCompatible,defaultSeverity:"error",description:"Condition-style script attributes must have a bool-compatible inferred result."},"xml/valid-root":{code:y.InvalidRootElement,defaultSeverity:"error",description:"Root element must be <root>."},"xml/require-btcpp-format":{code:y.MissingBTCPPFormat,defaultSeverity:"warn",description:'Root element must declare BTCPP_format="4".'},"tree/require-id":{code:y.MissingBehaviorTreeID,defaultSeverity:"error",description:"BehaviorTree elements require an ID attribute."},"tree/no-duplicate-id-in-file":{code:y.DuplicateBehaviorTreeID,defaultSeverity:"error",description:"BehaviorTree IDs must be unique within a file."},"tree/no-duplicate-id":{code:y.DuplicateBehaviorTreeIdInWorkspace,defaultSeverity:"error",description:"BehaviorTree IDs must be unique across the workspace."},"tree/no-unknown-subtree":{code:y.UnknownSubTree,defaultSeverity:"error",description:"A SubTree must resolve to a BehaviorTree or a configured model."},"tree/no-unknown-main-tree":{code:y.UnknownMainTree,defaultSeverity:"error",description:"main_tree_to_execute must reference a known BehaviorTree."},"tree/no-ambiguous-subtree":{code:y.AmbiguousSubTree,defaultSeverity:"error",description:"SubTree references must resolve to a single definition."},"tree/no-duplicate-node-model-id":{code:y.DuplicateNodeModelId,defaultSeverity:"error",description:"TreeNodesModel elements must have unique IDs within the same model block."},"xml/no-unknown-top-level-element":{code:y.UnknownTopLevelElement,defaultSeverity:"warn",description:"Top-level elements must be BehaviorTree, TreeNodesModel, or configured include elements."},"include/require-path":{code:y.MissingIncludePath,defaultSeverity:"error",description:"include elements require a path attribute."},"include/no-missing-file":{code:y.IncludeNotFound,defaultSeverity:"error",description:"Referenced include file does not exist."},"include/no-cycle":{code:y.IncludeCycle,defaultSeverity:"error",description:"Include graph cycles are not allowed."},"include/no-outside-root":{code:y.IncludeOutsideWorkspace,defaultSeverity:"error",description:"Includes must stay within the workspace root."},"include/no-unresolved-variable":{code:y.UnresolvedIncludePathVariable,defaultSeverity:"error",description:"Include path variables must resolve before lookup."},"include/no-depth-exceeded":{code:y.IncludeDepthExceeded,defaultSeverity:"error",description:"Include resolution must stay within the configured maximum depth."},"include/no-too-many-files":{code:y.TooManyResolvedFiles,defaultSeverity:"error",description:"Include resolution must stay within the configured file limit."},"include/require-ros-package-resolver":{code:y.RosPackageResolverMissing,defaultSeverity:"error",description:"When include uses ros_pkg, a host resolvePackageUri capability must be provided."},"include/no-missing-ros-package":{code:y.RosPackageNotFound,defaultSeverity:"error",description:"ros_pkg include must resolve to an existing ROS package root URI."},"include/report-external-used":{code:y.ExternalIncludeUsed,defaultSeverity:"info",description:"Reports when an allowed include resolves outside the workspace root."},"model/no-unknown-node":{code:y.UnknownNode,defaultSeverity:"warn",description:"Node usages must resolve to a known model."},"model/require-port":{code:y.MissingRequiredPort,defaultSeverity:"error",description:"Required ports must be supplied."},"model/require-port-name":{code:y.MissingPortName,defaultSeverity:"error",description:"Port elements require a name attribute."},"model/no-duplicate-port-name":{code:y.DuplicatePortName,defaultSeverity:"error",description:"Ports with the same name are not allowed."},"model/valid-port-name":{code:y.InvalidPortName,defaultSeverity:"error",description:"Port names must be valid XML attribute names for BT nodes."},"model/no-unknown-port":{code:y.UnknownPort,defaultSeverity:"warn",optionsSchema:Ei,options:[{name:"subTreePorts",type:'"loose" | "strict"',default:"loose",description:"Controls whether SubTree remap attributes are checked strictly."}],description:"Reports ports that are not declared by the resolved node model."},"model/valid-port-value":{code:y.InvalidPortValueType,defaultSeverity:"error",description:"Port values must match the declared type."},"model/no-blackboard-type-mismatch":{code:y.BlackboardTypeMismatch,defaultSeverity:"error",optionsSchema:Ni,options:[{name:"allowStringEntryCompatibility",type:"boolean",default:"true",description:"Treat std::string blackboard entries as runtime-compatible with other port types, matching BT.CPP's existing-entry special case."}],description:"Blackboard entries must not mix incompatible resolved port types."},"model/valid-port-default-value":{code:y.InvalidPortDefaultValue,defaultSeverity:"error",description:"TreeNodesModel port defaults must match the declared type."},"model/require-output-port-remap":{code:y.OutputPortRequiresRemap,defaultSeverity:"warn",description:"Resolved output ports must write to a blackboard remap."},"model/no-childless-control-shape-mismatch":{code:y.ChildCapableNodeSelfClosing,defaultSeverity:"warn",description:"Control and decorator nodes should normally use open/close tags."},"model/no-leaf-block-shape":{code:y.LeafNodeOpenClose,defaultSeverity:"warn",description:"Leaf nodes should normally be self-closing unless they contain child nodes."},"model/valid-child-count":{code:y.InvalidChildCount,defaultSeverity:"warn",description:"Child count must match the expected count for the node kind (Action/Condition: 0, Decorator: 1, Control: >=1, special builtins: fixed range)."},"model/no-conflicting-definition":{code:y.ConflictingNodeModel,defaultSeverity:"error",description:"Node model definitions must agree on kind and port shape."},"suppression/no-unused":{code:y.UnusedSuppression,defaultSeverity:"warn",description:"Suppressions should match at least one diagnostic."},"suppression/require-reason":{code:y.MissingSuppressionReason,defaultSeverity:"off",description:"Suppressions should include a reason when required."}};var ze=["off","info","warn","error"];var pn={linter:{rules:{"xml/require-btcpp-format":"error","xml/no-unknown-top-level-element":"error","model/no-unknown-node":"error","model/no-unknown-port":["error",{subTreePorts:"strict"}],"script/no-unknown-variable":"error","model/no-childless-control-shape-mismatch":"error","model/no-leaf-block-shape":"error","model/valid-child-count":"error","suppression/no-unused":"error","suppression/require-reason":"warn"}}},Ci={files:{include:["**/*.xml"],ignore:["build/**","install/**","log/**","node_modules/**",".git/**"],useGitignore:!0,followSymlinks:!1,maxSize:5*1024*1024},resolver:{entrypoints:[],includes:{elements:[{name:"include",attribute:"path",base:"file"}],variables:{},allowOutsideRoot:!1,maxDepth:32,maxFiles:1e3},behaviorTreeIds:"workspace-unique"},models:{builtins:["btcpp-v4"],files:[],augmentations:[],definitions:[],inline:{}},linter:{enabled:!0,rules:{},baseline:void 0,suppressions:{inline:"allow"}},formatter:{indentWidth:2,xmlDeclaration:"always",blankLineBetweenBehaviorTrees:!0,lineEnding:"lf"},overrides:[]};function St(){return structuredClone(Ci)}function Te(e,t){return{files:t.files?{...e.files,...t.files}:e.files,resolver:t.resolver?{...e.resolver,...t.resolver,includes:{...e.resolver.includes,...t.resolver.includes||{},variables:{...e.resolver.includes.variables,...t.resolver.includes?.variables||{}}}}:e.resolver,models:t.models?{...e.models,...t.models}:e.models,linter:t.linter?{...e.linter,...t.linter,rules:t.linter.rules?{...e.linter.rules,...t.linter.rules}:e.linter.rules,suppressions:t.linter.suppressions?{...e.linter.suppressions,...t.linter.suppressions}:e.linter.suppressions}:e.linter,formatter:t.formatter?{...e.formatter,...t.formatter}:e.formatter,overrides:t.overrides?[...e.overrides,...t.overrides]:e.overrides}}var Ii={DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID"};function Bi(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function X(e,t){return e.attributes.find(n=>n.name===t)}function Mi(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function _i(e){if(e)return{uri:e.uri,range:e.range,value:e.value}}function wi(e,t="inline-tree-nodes-model"){return e.kind==="model-document"?"external-tree-nodes-model":t}function mn(e,t,n){for(let r of e.attributes||[]){let i=[...String(r.value).matchAll(/\{([^}]+)\}/g)];for(let o of i){let s=o.index??0,a=r.valueRange.start,d={...a,character:a.character+o[0].length,offset:a.offset+s+o[0].length};t.push({name:o[1],attributeName:r.name,element:e,uri:n,range:{start:{...a,character:a.character+s,offset:a.offset+s},end:d}})}}for(let r of e.children||[])r.kind==="element"&&mn(r,t,n)}function Pi(e,t,n,r){let i=[];for(let o of e.children||[]){if(o.kind!=="element"||!Mi(o.name))continue;let s=X(o,"ID");if(!s)continue;let a=[];for(let d of o.children||[]){if(d.kind!=="element"||d.name!=="input_port"&&d.name!=="output_port"&&d.name!=="inout_port")continue;let u=X(d,"name"),l=X(d,"type"),m=X(d,"default")||X(d,"default_value"),p=X(d,"enum"),g=(d.children||[]).filter(N=>N.kind==="text").map(N=>N.text).join("").trim()||void 0,x=d.name==="input_port"?"input":d.name==="output_port"?"output":"inout",T=(x==="input"||x==="inout")&&m===void 0;a.push({source:n,direction:x,name:u?u.value:"",type:l?.value||void 0,defaultValue:m?.value||void 0,description:g,required:T,element:d,uri:t,range:d.range,nameRange:u?.range,enum:p?.value?p.value.split(";"):void 0})}i.push({id:s.value,kind:o.name,source:n,sourceMeta:{sourceKind:n,file:t,range:o.range},editable:r,ports:a,element:o,uri:t,range:o.range,elementRange:o.range,idRange:s.range})}return i}function Ai(e,t){let n=[];for(let r of e.children||[]){if(r.kind!=="element"||r.name!=="BehaviorTree")continue;let i=X(r,"ID");i&&n.push({id:i.value,kind:"BehaviorTree",uri:t,element:r,range:r.range,elementRange:r.range,idRange:i.range})}return n}function Li(e,t){let n=[],r=(i,o)=>{let s=i.name==="BehaviorTree"?X(i,"ID")?.value??o:o;if(i.name==="SubTree"){let a=X(i,"ID");a&&n.push({id:a.value,uri:t,element:i,range:i.range,elementRange:i.range,idRange:a.range,parentBehaviorTreeId:s,attributes:i.attributes})}for(let a of i.children||[])a.kind==="element"&&r(a,s)};for(let i of e.children||[])i.kind==="element"&&r(i);return n}function Ui(e){return{id:e.id,kind:e.kind,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange}}function fn(e){return{source:e.source,direction:e.direction,name:e.name,type:e.type,defaultValue:e.defaultValue,description:e.description,required:e.required,uri:e.uri,range:e.range,nameRange:e.nameRange,enum:e.enum?[...e.enum]:void 0}}function Vi(e){return{id:e.id,kind:e.kind,editable:e.editable,ports:e.ports.map(fn),source:e.source,sourceMeta:e.sourceMeta?{sourceKind:e.sourceMeta.sourceKind,file:e.sourceMeta.file,range:e.sourceMeta.range}:void 0,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange}}function Oi(e){return{id:e.id,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange,parentBehaviorTreeId:e.parentBehaviorTreeId}}function qi(e){return{name:e.name,attributeName:e.attributeName,uri:e.uri,range:e.range}}function Fi(e){return{uri:e.uri,path:e.path,isBtXml:e.isBtXml,kind:e.kind,behaviorTrees:e.behaviorTrees.map(Ui),subtreeReferences:e.subtreeReferences.map(Oi),blackboardReferences:e.blackboardReferences.map(qi),treeNodesModel:e.treeNodesModel.map(Vi),genericSubTreePorts:e.genericSubTreePorts.map(fn),rootMainTreeToExecute:_i(e.rootMainTreeToExecute)}}function Xi(e){return e.node.kind==="SubTree"&&e.node.id==="SubTree"?(e.genericSubTreePorts.push(...e.node.ports),!0):(e.treeNodesModel.push(e.node),!1)}function ji(e){return P(Ii.DuplicateNodeModelId,b.Error,`duplicate node model ID \`${e.id}\``,e.idRange||e.range,e.uri,{primaryLabel:"this node model ID is already defined in the same model source",help:"merge the duplicate definitions or rename one of them"})}function $i(e,t){let n=[],r=t?.uri||e.uri,i=e.root,o=e.isBtXml,s=Bi(e),a=wi(e),d=((t?.path??e.path)||r==="")&&e.kind==="model-document"?!0:e.kind!=="model-document",u=i&&e.kind!=="model-document"?Ai(i,r):[],l=[],m=[],p=i?i.name==="TreeNodesModel"?[i]:i.children.filter(I=>I.kind==="element"&&I.name==="TreeNodesModel"):[];for(let I of p){let W=Pi(I,r,a,d),A=new Map;for(let B of W)Xi({node:B,treeNodesModel:l,genericSubTreePorts:m})||(A.has(B.id)?n.push(ji(B)):A.set(B.id,B))}let g=i?Li(i,r):[],x=i?(()=>{let I=[];return mn(i,I,r),I})():[],T=i?X(i,"main_tree_to_execute"):void 0;return{extracted:{publicModel:Fi({uri:r,path:t?.path??e.path,isBtXml:o,kind:s,behaviorTrees:u,subtreeReferences:g,blackboardReferences:x,treeNodesModel:l,genericSubTreePorts:m,rootMainTreeToExecute:T?{uri:r,range:T.range,value:T.value}:void 0}),extractedBehaviorTrees:u,extractedTreeNodesModel:l,extractedSubTreeReferences:g,extractedBlackboardReferences:x},diagnostics:n}}function gn(e,t){let{extracted:n,diagnostics:r}=$i(e,t);return{model:n.publicModel,diagnostics:r}}function bt(e,t){return gn(e,t)}var yn=new Set(["ID","name","_name","_autoremap","_failureIf","_successIf","_skipIf","_while","_onSuccess","_onFailure","_onHalted","_post"]),zi=new Set([...yn,"_autoremap","_description","__shared_blackboard"]),Ki=new Map([[".","port names must not contain `.`"],["<","port names must not contain `<`"],[">","port names must not contain `>`"],["&","port names must not contain `&`"],['"','port names must not contain `"`'],["'","port names must not contain `'`"],["/","port names must not contain `/`"],["\\","port names must not contain `\\`"],[":","port names must not contain `:`"],["*","port names must not contain `*`"],["?","port names must not contain `?`"],["|","port names must not contain `|`"]]);function ht(e){return yn.has(e)}function Sn(e){return zi.has(e)}function Tt(e){if(e.length===0)return"port names must not be empty";if(/^[0-9]/.test(e))return"port names must not start with a digit";if(Sn(e))return`\`${e}\` is a reserved attribute name`;for(let t of e){let n=t.charCodeAt(0);if(n<=31||n===127)return"port names must not contain ASCII control characters";if(t===" "||t===" "||t===`
9
- `||t==="\r")return"port names must not contain whitespace";let r=Ki.get(t);if(r)return r}}function bn(e,t){let n=t.direction??"input";return{source:"config",name:e,direction:n,type:t.type,defaultValue:t.default,description:t.description,required:t.required??((n==="input"||n==="inout")&&t.default===void 0),enum:t.enum}}function vt(e,t){return{id:e,kind:t.kind,source:"config",sourceMeta:{sourceKind:"config"},editable:!0,ports:Object.entries(t.ports??{}).map(([n,r])=>bn(n,r))}}var Gi=[{name:"std::string",kind:"primitive",aliases:["string"]},{name:"bool",kind:"primitive",aliases:[]},{name:"int8_t",kind:"primitive",aliases:["std::int8_t"]},{name:"int16_t",kind:"primitive",aliases:["std::int16_t"]},{name:"int32",kind:"primitive",aliases:["int","int32_t","std::int32_t"]},{name:"int64_t",kind:"primitive",aliases:["long","int64","std::int64_t"]},{name:"short",kind:"primitive",aliases:[]},{name:"uint8_t",kind:"primitive",aliases:["std::uint8_t"]},{name:"uint16_t",kind:"primitive",aliases:["std::uint16_t"]},{name:"uint32",kind:"primitive",aliases:["uint","unsigned","unsigned int","uint32_t","std::uint32_t"]},{name:"uint64_t",kind:"primitive",aliases:["uint64","std::uint64_t","size_t","std::size_t"]},{name:"float",kind:"primitive",aliases:[]},{name:"double",kind:"primitive",aliases:[]},{name:"BT::NodeStatus",kind:"primitive",aliases:["NodeStatus"]},{name:"BT::Any",kind:"any",aliases:["BT::AnyTypeAllowed","BT::AnyType","Any"]}],ve=new Map,hn=new Map;for(let e of Gi){let t={name:e.name,kind:e.kind,canonical:e.name,aliases:e.aliases,compatibleWith:[],source:"builtin"};hn.set(e.name,t),ve.set(e.name,e.name);for(let n of e.aliases)ve.set(n,e.name)}function Wi(e,t,n){return{name:e,kind:n.kind,canonical:t,aliases:new Set([e,t,...n.aliases??[]]),compatibleWith:new Set(n.compatibleWith??[]),validate:n.validate,source:"augmentation"}}function Rt(e){return ve.get(e)??e}function Yi(e){return{name:e.name,kind:e.kind,canonical:e.canonical,aliases:[...e.aliases].filter(t=>t!==e.canonical),compatibleWith:[...e.compatibleWith],validate:e.validate,source:e.source}}function Re(e){return ve.get(e)}function pe(e=[]){let t=new Map,n=new Map(ve);for(let r of hn.values())t.set(r.canonical,{name:r.name,kind:r.kind,canonical:r.canonical,aliases:new Set([r.name,r.canonical,...r.aliases]),compatibleWith:new Set(r.compatibleWith),validate:r.validate,source:r.source});for(let r of e)for(let[i,o]of Object.entries(r.types??{})){let s=Rt(o.canonical??i),d=t.get(s)??Wi(i,s,o);d.name=i,d.kind=o.kind,d.canonical=s,d.source="augmentation",d.validate=o.validate??d.validate,d.aliases.add(i),d.aliases.add(s);for(let u of o.aliases??[])d.aliases.add(u);for(let u of o.compatibleWith??[])d.compatibleWith.add(u);t.set(s,d),n.set(i,s),n.set(s,s);for(let u of o.aliases??[])n.set(u,s)}for(let r of t.values())r.compatibleWith=new Set([...r.compatibleWith].map(i=>n.get(i)??Rt(i))),r.compatibleWith.delete(r.canonical);return{entriesByCanonical:new Map([...t.entries()].map(([r,i])=>[r,Yi(i)])),namesToCanonical:n}}function U(e,t){if(!t)return;let n=e.namesToCanonical.get(t)??Rt(t),r=e.entriesByCanonical.get(n);return r||{name:t,kind:"opaque",canonical:n,aliases:[],compatibleWith:[],source:"custom"}}function Ke(e,t){return U(e,t)?.canonical}function xe(e,t,n){let r=U(e,t),i=U(e,n);return!r||!i?!1:r.kind==="any"||i.kind==="any"||r.canonical===i.canonical?!0:r.compatibleWith.includes(i.canonical)||i.compatibleWith.includes(r.canonical)}function Tn(e,t){if(e.length<3)return!1;let n=0,r=e.length-1;for(;n<=r&&e[n]===" ";)n+=1;for(;n<=r&&e[r]===" ";)r-=1;let o=r-n+1>=3&&e[n]==="{"&&e[r]==="}";return o&&t&&(t.current=e.slice(n+1,r)),o}function vn(e){let t={};return Tn(e,t)?t.current:void 0}function z(e,t){return t==="{=}"||t==="="?e:vn(t)}var Rn=[{id:"AlwaysFailure",kind:"Action",ports:[]},{id:"AlwaysSuccess",kind:"Action",ports:[]},{id:"AsyncFallback",kind:"Control",ports:[]},{id:"AsyncSequence",kind:"Control",ports:[]},{id:"Delay",kind:"Decorator",ports:[{name:"delay_msec",direction:"input",type:"unsigned int",description:"Tick the child after a few milliseconds",required:!0}]},{id:"Fallback",kind:"Control",ports:[]},{id:"ForceFailure",kind:"Decorator",ports:[]},{id:"ForceSuccess",kind:"Decorator",ports:[]},{id:"IfThenElse",kind:"Control",ports:[]},{id:"Inverter",kind:"Decorator",ports:[]},{id:"KeepRunningUntilFailure",kind:"Decorator",ports:[]},{id:"LoopBool",kind:"Decorator",ports:[{name:"value",direction:"output",type:"bool",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<bool, std::allocator<bool> > >",required:!0}]},{id:"LoopDouble",kind:"Decorator",ports:[{name:"value",direction:"output",type:"double",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<double, std::allocator<double> > >",required:!0}]},{id:"LoopInt",kind:"Decorator",ports:[{name:"value",direction:"output",type:"int",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<int, std::allocator<int> > >",required:!0}]},{id:"LoopString",kind:"Decorator",ports:[{name:"value",direction:"output",type:"std::string",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >",required:!0}]},{id:"Parallel",kind:"Control",ports:[{name:"failure_count",direction:"input",type:"int",defaultValue:"1",description:"number of children that need to fail to trigger a FAILURE",required:!1},{name:"success_count",direction:"input",type:"int",defaultValue:"-1",description:"number of children that need to succeed to trigger a SUCCESS",required:!1}]},{id:"ParallelAll",kind:"Control",ports:[{name:"max_failures",direction:"input",type:"int",defaultValue:"1",description:"If the number of children returning FAILURE exceeds this value, ParallelAll returns FAILURE",required:!1}]},{id:"Precondition",kind:"Decorator",ports:[{name:"else",direction:"input",type:"BT::NodeStatus",defaultValue:"FAILURE",description:"Return status if condition is false",required:!1},{name:"if",direction:"input",type:"std::string",required:!0}]},{id:"ReactiveFallback",kind:"Control",ports:[]},{id:"ReactiveSequence",kind:"Control",ports:[]},{id:"Repeat",kind:"Decorator",ports:[{name:"num_cycles",direction:"input",type:"int",description:"Repeat a successful child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RetryUntilSuccessful",kind:"Decorator",ports:[{name:"num_attempts",direction:"input",type:"int",description:"Execute again a failing child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RunOnce",kind:"Decorator",ports:[{name:"then_skip",direction:"input",type:"bool",defaultValue:"true",description:"If true, skip after the first execution, otherwise return the same NodeStatus returned once bu the child.",required:!1}]},{id:"Script",kind:"Action",ports:[{name:"code",direction:"input",type:"std::string",description:"Piece of code that can be parsed",required:!0}]},{id:"ScriptCondition",kind:"Condition",ports:[{name:"code",direction:"input",type:"BT::AnyTypeAllowed",description:"Piece of code that can be parsed. Must return false or true",required:!0}]},{id:"Sequence",kind:"Control",ports:[]},{id:"SequenceWithMemory",kind:"Control",ports:[]},{id:"SetBlackboard",kind:"Action",ports:[{name:"output_key",direction:"inout",type:"BT::AnyTypeAllowed",description:"Name of the blackboard entry where the value should be written",required:!0},{name:"value",direction:"input",type:"BT::AnyTypeAllowed",description:"Value to be written int othe output_key",required:!0}]},{id:"SkipUnlessUpdated",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"Sleep",kind:"Action",ports:[{name:"msec",direction:"input",type:"unsigned int",required:!0}]},{id:"Switch2",kind:"Control",ports:[{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch3",kind:"Control",ports:[{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch4",kind:"Control",ports:[{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch5",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch6",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_6",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Timeout",kind:"Decorator",ports:[{name:"msec",direction:"input",type:"unsigned int",description:"After a certain amount of time, halt() the child if it is still running.",required:!0}]},{id:"UnsetBlackboard",kind:"Action",ports:[{name:"key",direction:"input",type:"std::string",description:"Key of the entry to remove",required:!0}]},{id:"WaitValueUpdate",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WasEntryUpdated",kind:"Action",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WhileDoElse",kind:"Control",ports:[]}],xn={id:"SubTree",kind:"SubTree",ports:[{name:"_autoremap",direction:"input",type:"bool",defaultValue:"false",description:"If true, all the ports with the same name will be remapped",required:!1}]};var kn=[{id:"AlwaysFailure",kind:"Action",ports:[]},{id:"AlwaysSuccess",kind:"Action",ports:[]},{id:"AsyncFallback",kind:"Control",ports:[]},{id:"AsyncSequence",kind:"Control",ports:[]},{id:"Delay",kind:"Decorator",ports:[{name:"delay_msec",direction:"input",type:"unsigned int",description:"Tick the child after a few milliseconds",required:!0}]},{id:"Fallback",kind:"Control",ports:[]},{id:"ForceFailure",kind:"Decorator",ports:[]},{id:"ForceSuccess",kind:"Decorator",ports:[]},{id:"IfThenElse",kind:"Control",ports:[]},{id:"Inverter",kind:"Decorator",ports:[]},{id:"KeepRunningUntilFailure",kind:"Decorator",ports:[]},{id:"LoopBool",kind:"Decorator",ports:[{name:"value",direction:"output",type:"bool",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<bool, std::allocator<bool> > >",required:!0}]},{id:"LoopDouble",kind:"Decorator",ports:[{name:"value",direction:"output",type:"double",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<double, std::allocator<double> > >",required:!0}]},{id:"LoopInt",kind:"Decorator",ports:[{name:"value",direction:"output",type:"int",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<int, std::allocator<int> > >",required:!0}]},{id:"LoopString",kind:"Decorator",ports:[{name:"value",direction:"output",type:"std::string",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >",required:!0}]},{id:"Parallel",kind:"Control",ports:[{name:"failure_count",direction:"input",type:"int",defaultValue:"1",description:"number of children that need to fail to trigger a FAILURE",required:!1},{name:"success_count",direction:"input",type:"int",defaultValue:"-1",description:"number of children that need to succeed to trigger a SUCCESS",required:!1}]},{id:"ParallelAll",kind:"Control",ports:[{name:"max_failures",direction:"input",type:"int",defaultValue:"1",description:"If the number of children returning FAILURE exceeds this value, ParallelAll returns FAILURE",required:!1}]},{id:"Precondition",kind:"Decorator",ports:[{name:"else",direction:"input",type:"BT::NodeStatus",defaultValue:"FAILURE",description:"Return status if condition is false",required:!1},{name:"if",direction:"input",type:"std::string",required:!0}]},{id:"ReactiveFallback",kind:"Control",ports:[]},{id:"ReactiveSequence",kind:"Control",ports:[]},{id:"Repeat",kind:"Decorator",ports:[{name:"num_cycles",direction:"input",type:"int",description:"Repeat a successful child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RetryUntilSuccessful",kind:"Decorator",ports:[{name:"num_attempts",direction:"input",type:"int",description:"Execute again a failing child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RunOnce",kind:"Decorator",ports:[{name:"then_skip",direction:"input",type:"bool",defaultValue:"true",description:"If true, skip after the first execution, otherwise return the same NodeStatus returned once by the child.",required:!1}]},{id:"Script",kind:"Action",ports:[{name:"code",direction:"input",type:"std::string",description:"Piece of code that can be parsed",required:!0}]},{id:"ScriptCondition",kind:"Condition",ports:[{name:"code",direction:"input",type:"BT::AnyTypeAllowed",description:"Piece of code that can be parsed. Must return false or true",required:!0}]},{id:"Sequence",kind:"Control",ports:[]},{id:"SequenceWithMemory",kind:"Control",ports:[]},{id:"SetBlackboard",kind:"Action",ports:[{name:"output_key",direction:"inout",type:"BT::AnyTypeAllowed",description:"Name of the blackboard entry where the value should be written",required:!0},{name:"value",direction:"input",type:"BT::AnyTypeAllowed",description:"Value to be written into the output_key",required:!0}]},{id:"SkipUnlessUpdated",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"Sleep",kind:"Action",ports:[{name:"msec",direction:"input",type:"unsigned int",required:!0}]},{id:"Switch2",kind:"Control",ports:[{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch3",kind:"Control",ports:[{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch4",kind:"Control",ports:[{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch5",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch6",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_6",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Timeout",kind:"Decorator",ports:[{name:"msec",direction:"input",type:"unsigned int",description:"After a certain amount of time, halt() the child if it is still running.",required:!0}]},{id:"UnsetBlackboard",kind:"Action",ports:[{name:"key",direction:"input",type:"std::string",description:"Key of the entry to remove",required:!0}]},{id:"WaitValueUpdate",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WasEntryUpdated",kind:"Action",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WhileDoElse",kind:"Control",ports:[]}],Dn={id:"SubTree",kind:"SubTree",ports:[{name:"_autoremap",direction:"input",type:"bool",defaultValue:"false",description:"If true, all the ports with the same name will be remapped",required:!1}]};var En=[{id:"AlwaysFailure",kind:"Action",ports:[]},{id:"AlwaysSuccess",kind:"Action",ports:[]},{id:"AsyncFallback",kind:"Control",ports:[]},{id:"AsyncSequence",kind:"Control",ports:[]},{id:"Delay",kind:"Decorator",ports:[{name:"delay_msec",direction:"input",type:"unsigned int",description:"Tick the child after a few milliseconds",required:!0}]},{id:"Fallback",kind:"Control",ports:[]},{id:"ForceFailure",kind:"Decorator",ports:[]},{id:"ForceSuccess",kind:"Decorator",ports:[]},{id:"IfThenElse",kind:"Control",ports:[]},{id:"Inverter",kind:"Decorator",ports:[]},{id:"KeepRunningUntilFailure",kind:"Decorator",ports:[]},{id:"LoopBool",kind:"Decorator",ports:[{name:"value",direction:"output",type:"bool",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"LoopDouble",kind:"Decorator",ports:[{name:"value",direction:"output",type:"double",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"LoopInt",kind:"Decorator",ports:[{name:"value",direction:"output",type:"int",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"LoopString",kind:"Decorator",ports:[{name:"value",direction:"output",type:"std::string",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"Parallel",kind:"Control",ports:[{name:"failure_count",direction:"input",type:"int",defaultValue:"1",description:"number of children that need to fail to trigger a FAILURE",required:!1},{name:"success_count",direction:"input",type:"int",defaultValue:"-1",description:"number of children that need to succeed to trigger a SUCCESS",required:!1}]},{id:"ParallelAll",kind:"Control",ports:[{name:"max_failures",direction:"input",type:"int",defaultValue:"1",description:"If the number of children returning FAILURE exceeds this value, ParallelAll returns FAILURE",required:!1}]},{id:"Precondition",kind:"Decorator",ports:[{name:"else",direction:"input",type:"BT::NodeStatus",defaultValue:"FAILURE",description:"Return status if condition is false",required:!1},{name:"if",direction:"input",type:"std::string",required:!0}]},{id:"ReactiveFallback",kind:"Control",ports:[]},{id:"ReactiveSequence",kind:"Control",ports:[]},{id:"Repeat",kind:"Decorator",ports:[{name:"num_cycles",direction:"input",type:"int",description:"Repeat a successful child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RetryUntilSuccessful",kind:"Decorator",ports:[{name:"num_attempts",direction:"input",type:"int",description:"Execute again a failing child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RunOnce",kind:"Decorator",ports:[{name:"then_skip",direction:"input",type:"bool",defaultValue:"true",description:"If true, skip after the first execution, otherwise return the same NodeStatus returned once by the child.",required:!1}]},{id:"Script",kind:"Action",ports:[{name:"code",direction:"input",type:"std::string",description:"Piece of code that can be parsed",required:!0}]},{id:"ScriptCondition",kind:"Condition",ports:[{name:"code",direction:"input",type:"BT::AnyTypeAllowed",description:"Piece of code that can be parsed. Must return false or true",required:!0}]},{id:"Sequence",kind:"Control",ports:[]},{id:"SequenceWithMemory",kind:"Control",ports:[]},{id:"SetBlackboard",kind:"Action",ports:[{name:"output_key",direction:"inout",type:"BT::AnyTypeAllowed",description:"Name of the blackboard entry where the value should be written",required:!0},{name:"value",direction:"input",type:"BT::AnyTypeAllowed",description:"Value to be written into the output_key",required:!0}]},{id:"SkipUnlessUpdated",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"Sleep",kind:"Action",ports:[{name:"msec",direction:"input",type:"unsigned int",required:!0}]},{id:"Switch2",kind:"Control",ports:[{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch3",kind:"Control",ports:[{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch4",kind:"Control",ports:[{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch5",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch6",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_6",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Timeout",kind:"Decorator",ports:[{name:"msec",direction:"input",type:"unsigned int",description:"After a certain amount of time, halt() the child if it is still running.",required:!0}]},{id:"TryCatch",kind:"Control",ports:[{name:"catch_on_halt",direction:"input",type:"bool",defaultValue:"false",description:"If true, execute the catch child when the node is halted during the try-block",required:!1}]},{id:"UnsetBlackboard",kind:"Action",ports:[{name:"key",direction:"input",type:"std::string",description:"Key of the entry to remove",required:!0}]},{id:"WaitValueUpdate",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WasEntryUpdated",kind:"Action",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WhileDoElse",kind:"Control",ports:[]}],Nn={id:"SubTree",kind:"SubTree",ports:[{name:"_autoremap",direction:"input",type:"bool",defaultValue:"false",description:"If true, all the ports with the same name will be remapped",required:!1}]};var Cn=["4.6.2","4.8.2","4.9.0"],xt="4.9.0",ke={"4.6.2":{models:Rn,genericSubTreeModel:xn},"4.8.2":{models:kn,genericSubTreeModel:Dn},"4.9.0":{models:En,genericSubTreeModel:Nn}};var In=Cn.map(e=>`btcpp-v${e}`),De=["btcpp-v4",...In],Bn=`btcpp-v${xt}`;function Mn(e){return{source:"builtin",direction:e.direction,name:e.name,type:e.type,defaultValue:e.defaultValue,description:e.description,required:e.required,enum:e.enum}}function Hi(e){return e.map(t=>({id:t.id,kind:t.kind,ports:t.ports.map(Mn)}))}function _n(e){if(e)return{id:e.id,kind:e.kind,ports:e.ports.map(Mn)}}function Zi(){let e={};for(let[t,n]of Object.entries(ke))e[`btcpp-v${t}`]=Hi(n.models);return e}function Ji(){let e={};for(let[t,n]of Object.entries(ke))e[`btcpp-v${t}`]=_n(n.genericSubTreeModel);return e}var Qi=Zi(),eo=Ji();function to(e){let t=e.replace(/^btcpp-v/,"");return Object.hasOwn(ke,t)}function wn(e){return e==="btcpp-v4"?Bn:e}function no(e){return e==="btcpp-v4"?xt:e.replace(/^btcpp-v/,"")}function Pn(e){if(e&&e!=="btcpp-v4"&&!to(e))throw new Error(`unsupported builtin model set: ${e}`)}function kt(e="btcpp-v4"){Pn(e);let t=wn(e);return Qi[t].map(r=>An(r))}function Dt(e="btcpp-v4"){Pn(e);let t=eo[wn(e)]??_n(ke[no(e)].genericSubTreeModel);return t?(t.ports??[]).map(n=>({...n,enum:n.enum?[...n.enum]:void 0})):[]}function An(e){return{id:e.id,kind:e.kind,source:"builtin",sourceMeta:{sourceKind:"builtin"},editable:!1,ports:(e.ports??[]).map(t=>({...t,enum:t.enum?[...t.enum]:void 0}))}}function Ee(e){return{id:e.id,kind:e.kind,ports:[...e.ports].sort((t,n)=>{let r=t.name.localeCompare(n.name);if(r!==0)return r;let i=t.direction.localeCompare(n.direction);if(i!==0)return i;let o=(t.type??"").localeCompare(n.type??"");if(o!==0)return o;let s=(t.defaultValue??"").localeCompare(n.defaultValue??"");return s!==0?s:(t.description??"").localeCompare(n.description??"")}).map(t=>({name:t.name,direction:t.direction,type:t.type,required:t.required,defaultValue:t.defaultValue,enum:t.enum?[...t.enum].sort():void 0,description:t.description}))}}function Ge(e,t){let n=Ee(e),r=Ee(t);return JSON.stringify(n)===JSON.stringify(r)}function Et(e,t){if(Ge(e,t))return"none";let n=Ee(e),r=Ee(t);if(n.kind!==r.kind)return"kind";if(n.ports.length!==r.ports.length)return"ports";let i=new Map(r.ports.map(a=>[a.name,a])),o=!1,s=!1;for(let a of n.ports){let d=i.get(a.name);if(!d){s=!0;continue}(a.direction!==d.direction||a.type!==d.type||a.required!==d.required)&&(s=!0);let u=a.enum?JSON.stringify(a.enum):"",l=d.enum?JSON.stringify(d.enum):"";u!==l&&(s=!0),a.description!==d.description&&(s=!0),a.defaultValue!==d.defaultValue&&(o=!0)}return s?"ports":o?"port-default":"mixed"}import{z as M}from"zod";var Ln=M.object({direction:M.enum(["input","output","inout"]).optional(),type:M.string().optional(),required:M.boolean().optional(),default:M.string().optional(),description:M.string().optional(),enum:M.array(M.string()).optional()}).strict(),We=M.object({kind:M.enum(["Action","Condition","Control","Decorator","SubTree"]),ports:M.record(M.string(),Ln).optional(),description:M.string().optional()}).strict(),ro=M.object({nodes:M.record(M.string(),We)}).strict();import{z as S}from"zod";var Un=S.enum(["off","info","warn","error"]),Vn=S.union([Un,S.tuple([Un,S.record(S.string(),S.unknown())])]),io=S.object({include:S.array(S.string()).optional(),ignore:S.array(S.string()).optional(),useGitignore:S.boolean().optional(),followSymlinks:S.boolean().optional(),maxSize:S.number().int().positive().optional()}).strict(),oo=S.string(),so=S.object({name:S.string(),attribute:S.string(),base:S.enum(["file","project-root"]).optional()}).strict(),ao=S.object({elements:S.array(so).optional(),variables:S.record(S.string(),S.string()).optional(),allowOutsideRoot:S.boolean().optional(),maxDepth:S.number().int().min(1).optional(),maxFiles:S.number().int().min(1).optional()}).strict(),lo=S.object({entrypoints:S.array(oo).optional(),includes:ao.optional(),behaviorTreeIds:S.enum(["workspace-unique","file-local-first","allow-ambiguous"]).optional()}).strict(),uo=S.object({builtins:S.array(S.enum(De)).optional(),files:S.array(S.string()).optional(),augmentations:S.array(S.string()).optional(),definitions:S.array(S.string()).optional(),inline:S.record(S.string(),We).optional()}).strict(),On=S.object({inline:S.enum(["allow","deny"]).optional()}).strict(),co=S.object({enabled:S.boolean().optional(),rules:S.record(S.string(),Vn).optional(),baseline:S.string().optional(),suppressions:On.optional()}).strict(),po=S.object({rules:S.record(S.string(),Vn).optional(),suppressions:On.optional()}).strict(),qn=S.object({indentWidth:S.number().int().min(1).max(8).optional(),xmlDeclaration:S.enum(["always","never","preserve"]).optional(),blankLineBetweenBehaviorTrees:S.boolean().optional(),lineEnding:S.enum(["lf","crlf","auto"]).optional()}).strict(),mo=S.object({files:S.array(S.string()),linter:po.optional(),formatter:qn.optional()}).strict(),Fn=S.object({$schema:S.string().optional(),strict:S.boolean().optional(),files:io.optional(),resolver:lo.optional(),models:uo.optional(),linter:co.optional(),formatter:qn.optional(),overrides:S.array(mo).optional()}).strict();function $n(e){return e.flatMap(fo)}function fo(e){if(String(e.code)==="unrecognized_keys")return(Array.isArray(e.keys)?e.keys??[]:[]).map(i=>{let o=Xn([...e.path,String(i)]);return{code:"CFG002_UNKNOWN_CONFIG_FIELD",severity:"error",path:o,message:`unknown config field \`${o}\``}});let n=Xn(e.path);return zn(e)?[{code:"CFG003_INVALID_CONFIG_VALUE",severity:"error",path:n,message:n?`invalid config value at \`${n}\``:"invalid config value"}]:[{code:"CFG001_INVALID_CONFIG",severity:"error",path:n,message:n?`invalid config at \`${n}\``:"invalid config"}]}function Xn(e){return e.map(String).join(".")||void 0}function zn(e){let t=String(e.code);if(t==="invalid_value"||t==="invalid_enum_value"||t==="invalid_literal")return!0;if(t!=="invalid_union")return!1;let n=e.errors;if(Array.isArray(n))return n.flat().some(jn);let r=e.unionErrors;return Array.isArray(r)?r.flatMap(i=>i.issues??[]).some(jn):!1}function jn(e){return typeof e=="object"&&e!==null&&zn(e)}function Ne(e){let t=Fn.safeParse(e);return t.success?{ok:!0,value:t.data,diagnostics:[]}:{ok:!1,diagnostics:$n(t.error.issues)}}function go(e){if(!e)return;let t={};return e.indentWidth!==void 0&&(t.indentWidth=e.indentWidth),e.xmlDeclaration!==void 0&&(t.xmlDeclaration=e.xmlDeclaration),e.blankLineBetweenBehaviorTrees!==void 0&&(t.blankLineBetweenBehaviorTrees=e.blankLineBetweenBehaviorTrees),e.lineEnding!==void 0&&(t.lineEnding=e.lineEnding),t}function yo(e){if(!e)return;let t={};return e.rules!==void 0&&(t.rules=e.rules),e.suppressions!==void 0&&(t.suppressions={},e.suppressions.inline!==void 0&&(t.suppressions.inline=e.suppressions.inline)),t}function So(e){return e.map(t=>P(t.code,t.severity==="error"?b.Error:b.Warning,t.message,void 0,"",t.help?{help:t.help}:void 0))}function bo(e){let t=[],n=St(),{$schema:r,strict:i,overrides:o,...s}=e;i&&(n=Te(n,pn)),n=Te(n,s),n.overrides=(o??[]).map(d=>({files:d.files,linter:yo(d.linter),formatter:go(d.formatter)}));let a=!t.some(d=>d.severity===b.Error);return{config:n,diagnostics:t,ok:a}}function Nt(e){let t=Ne(e);return t.ok?bo(t.value):{ok:!1,config:St(),diagnostics:So(t.diagnostics)}}var ho="https://unpkg.com/@abco20/btxml-checker/schemas/btxml.config.schema.json";function Ct(){return{$schema:ho}}function To(e){let t="",n=0;for(;n<e.length;)e.slice(n,n+3)==="/**"&&(n+3===e.length||e[n+3]==="/")?n+3===e.length?(t+="(?:/.*)?",n+=3):(t+="(?:/.*)?/",n+=4):n===0&&e.slice(n,n+3)==="**/"?(t+="(?:.*/)?",n+=3):e.slice(n,n+2)==="**"?(t+=".*",n+=2):e[n]==="*"?(t+="[^/]*",n+=1):e[n]==="?"?(t+="[^/]",n+=1):(t+=e[n].replace(/[.+^${}()|[\]\\]/g,"\\$&"),n+=1);return new RegExp(`^${t}$`)}function vo(e,t){let n=e.replace(/\\/g,"/"),r=t.startsWith("!"),i=r?t.slice(1):t,s=To(i).test(n);return r?!s:s}function Kn(e,t){return e.overrides.filter(n=>n.files.some(r=>vo(t,r)))}function Ye(e){return e.replaceAll("\\","/")}function Ro(e){try{return decodeURIComponent(e)}catch{return e}}function Gn(e){if(!e.startsWith("file://"))return e;let t;try{t=new URL(e)}catch{return e}let n=Ro(t.pathname);return/^\/[A-Za-z]:/.test(n)?Ye(n.slice(1)):t.host?Ye(`//${t.host}${n}`):Ye(n)}function He(e,t){let n=Ye(t),r=Kn(e,n),i=e;for(let o of r)i=Te(i,{linter:o.linter,formatter:o.formatter});return{files:i.files,resolver:i.resolver,models:i.models,linter:i.linter,formatter:i.formatter}}function It(e,t){return He(e,Gn(t))}function me(e){let t=e.linter.rules["model/no-unknown-port"];return Array.isArray(t)&&t.length>=2&&t[1].subTreePorts==="strict"?{unknownSubTreePorts:"reject"}:{unknownSubTreePorts:"allow"}}function Ze(e){if(typeof e=="string")return ze.includes(e)?{severity:e}:null;if(Array.isArray(e)&&e.length>=1&&e.length<=2){let[t,n]=e;if(typeof t=="string"&&ze.includes(t)&&(n===void 0||typeof n=="object"&&n!==null&&!Array.isArray(n))){let r={severity:t};return n!==void 0&&(r.options=n),r}}return null}function Wn(e,t){if(t)return Ke(e,t)}function Yn(e){return e.source==="inline-tree-nodes-model"||e.source==="external-tree-nodes-model",e.source}function Hn(e){let t=e.port?.uri??e.model?.uri??"",n=e.port?.nameRange??e.port?.range??e.model?.idRange??e.model?.range;return P(e.code,b.Error,e.message,n,t,{primaryLabel:e.message,help:e.help,notes:e.notes},e.data)}function xo(e,t,n,r,i){let o=n.effectiveType??n.type,s=n.originalType??n.type,a={...n,originalType:s,effectiveType:o,typeSource:n.typeSource??Yn(n),validate:r.validate??n.validate,required:r.required??n.required,enum:r.enum?[...r.enum]:n.enum,description:r.description??n.description},d=r.typeRefinement;if(!d)return{...a,type:a.effectiveType};let u=Wn(e,d.from),l=Wn(e,o);return u&&u!==l?(i.push(Hn({code:"BT119_INVALID_TYPE_REFINEMENT",message:`invalid type refinement for port \`${n.name}\` on node \`${t.id}\``,help:`make \`typeRefinement.from\` match the base port type \`${o??"unknown"}\`, or remove it for an unconditional refinement`,model:t,port:n,data:{kind:"invalid-type-refinement",nodeId:t.id,portName:n.name,expectedFrom:o,actualFrom:d.from,to:d.to},notes:o||d.from?[`base type: ${o??"(unspecified)"}`,`requested from: ${d.from??"(unspecified)"}`]:void 0})),{...a,type:a.effectiveType}):{...a,type:d.to,effectiveType:d.to,typeSource:"model-augmentation",typeRefinement:d}}function ko(e,t,n,r){let i=new Map(t.ports.map(o=>[o.name,o]));for(let[o,s]of Object.entries(n.ports??{})){let a=i.get(o);if(!a){r.push(Hn({code:"BT118_AUGMENT_PORT_NOT_FOUND",message:`augmentation port \`${o}\` not found on node \`${t.id}\``,help:`change the augmentation to an existing port on \`${t.id}\` or remove the override`,model:t,data:{kind:"augment-port-not-found",nodeId:t.id,portName:o}}));continue}i.set(o,xo(e,t,a,s,r))}return{...t,ports:t.ports.map(o=>i.get(o.name)??o)}}function Do(e){let t=e.effectiveType??e.type,n=e.originalType??e.type;return{...e,type:t,effectiveType:t,originalType:n,typeSource:e.typeSource??Yn(e)}}function Zn(e,t,n){let r=[],i=new Map([...e.entries()].map(([o,s])=>[o,{...s,ports:s.ports.map(Do)}]));for(let o of n)for(let[s,a]of Object.entries(o.augment??{})){let d=i.get(s);if(!d){r.push(P("BT117_AUGMENT_TARGET_NOT_FOUND",b.Error,`augmentation target node \`${s}\` not found`,void 0,o.uri??"",{primaryLabel:`augmentation target \`${s}\` does not match any node model`,help:"change the augmentation target to an existing node model or remove it",notes:o.path?[`augmentation file: ${o.path}`]:void 0},{kind:"augment-target-not-found",nodeId:s,filePath:o.path}));continue}i.set(s,ko(t,d,a,r))}return{modelsById:i,diagnostics:r}}function er(e){return Ce("builtin",0,!1,e)}function tr(e){return Ce("xml-tree-nodes-model",10,!0,e)}function nr(e){return Ce("external-tree-nodes-model",15,e.some(t=>t.editable!==!1),e)}function rr(e){return Ce("node-definition-file",20,!0,e)}function ir(e){return Ce("config-inline",30,!0,e)}function Ce(e,t,n,r){return{kind:e,precedence:t,editable:n,models:r.map(i=>or(i,e,n&&i.editable!==!1))}}function Eo(e){return e==="config-inline"?"config":e==="xml-tree-nodes-model"?"inline-tree-nodes-model":e}function or(e,t,n){let r=Eo(t);return{...e,source:r,sourceMeta:e.sourceMeta??{sourceKind:r,file:e.uri,range:e.range},editable:n,ports:e.ports.map(i=>({...i,source:r}))}}function fe(e,t){return{uri:e.uri,sourceKind:e.source||"inline-tree-nodes-model",nodeId:e.id,kind:e.kind,range:e.range,idRange:e.idRange,sourceIndex:t}}function Jn(e){return{name:e.name,direction:e.direction,type:e.type,required:e.required,defaultValue:e.defaultValue,enum:e.enum?[...e.enum].sort():void 0,description:e.description}}function No(e,t){let n=[];e.kind!==t.kind&&n.push({kind:"node-kind",left:e.kind,right:t.kind});let r=new Map(e.ports.map(o=>[o.name,o])),i=new Map(t.ports.map(o=>[o.name,o]));for(let[o,s]of r)i.has(o)||n.push({kind:"port-removed",portName:o,sourceIndex:0,port:Jn(s)});for(let[o,s]of i)r.has(o)||n.push({kind:"port-added",portName:o,sourceIndex:1,port:Jn(s)});for(let[o,s]of r){let a=i.get(o);if(!a)continue;s.direction!==a.direction&&n.push({kind:"port-direction",portName:o,left:s.direction,right:a.direction}),s.type!==a.type&&n.push({kind:"port-type",portName:o,left:s.type,right:a.type}),s.required!==a.required&&n.push({kind:"port-required",portName:o,left:s.required,right:a.required}),s.defaultValue!==a.defaultValue&&n.push({kind:"port-default",portName:o,left:s.defaultValue,right:a.defaultValue});let d=s.enum?JSON.stringify([...s.enum].sort()):"",u=a.enum?JSON.stringify([...a.enum].sort()):"";d!==u&&n.push({kind:"port-enum",portName:o,left:s.enum?[...s.enum].sort():void 0,right:a.enum?[...a.enum].sort():void 0}),s.description!==a.description&&n.push({kind:"port-description",portName:o,left:s.description,right:a.description})}return n}function Qn(e,t){let n=new Map;for(let r of e){let i=n.get(r.id);if(!i){n.set(r.id,r);continue}if(Ge(i,r))continue;let o=Et(i,r),s=No(i,r),a;if(o==="port-default"){let d=new Map(i.ports.map(p=>[p.name,p])),u=r.ports.find(p=>{let g=d.get(p.name);return g&&g.defaultValue!==p.defaultValue}),l=u?.name??"unknown",m=[fe(i,0),fe(r,1)];a={kind:"port-default-conflict",nodeId:r.id,portName:l,sources:[{source:fe(i,0),value:d.get(l)?.defaultValue},{source:fe(r,1),value:u?.defaultValue}]},t.push({id:r.id,definitions:[i,r],sources:m,code:"BT107_CONFLICTING_PORT_DEFAULT",message:`conflicting default for port \`${l}\` on node \`${r.id}\``,uri:r.uri,range:r.idRange||r.range,details:{primaryLabel:"the same port has different default values across model definitions",help:`use the same default value in every \`${r.id}\` definition or remove the duplicate model`},data:a,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}else{let d=[fe(i,0),fe(r,1)];a={kind:"node-model-conflict",nodeId:r.id,sources:d,differences:s},t.push({id:r.id,definitions:[i,r],sources:d,code:"BT012_CONFLICTING_NODE_MODEL",message:`conflicting node model \`${r.id}\``,uri:r.uri,range:r.idRange||r.range,details:{primaryLabel:"another model with this ID defines a different kind or port shape",help:`make all \`${r.id}\` model definitions agree, or keep only one definition at the same precedence level`},data:a,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}}return n}function Co(e,t){if(!e)return{...t,ports:[...t.ports]};let n=new Map(e.ports.map(r=>[r.name,r]));for(let r of t.ports)n.set(r.name,r);return{...e,...t,sourceMeta:t.sourceMeta||e.sourceMeta,ports:[...n.values()]}}function sr(e){let t=[],n=new Map,r=new Map,i=[...e].sort((a,d)=>a.precedence-d.precedence),o=new Map,s=new Map;for(let a of i){let d=o.get(a.precedence)??[],u=a.models.map(l=>or(l,a.kind,a.editable&&l.editable!==!1));d.push(...u),o.set(a.precedence,d);for(let l of u)s.set(l.id,a.precedence)}for(let[a,d]of[...o.entries()].sort((u,l)=>u[0]-l[0])){let u=d.filter(g=>s.get(g.id)===a),l=d.filter(g=>s.get(g.id)!==a),m=Qn(l,[]);for(let[g,x]of Qn(u,t))m.set(g,x);let p=new Set(d.map(g=>g.id));for(let g of p)s.get(g)===a&&n.set(g,d.filter(x=>x.id===g));for(let[g,x]of m)r.set(g,Co(r.get(g),x))}return{nodeModelsById:n,mergedNodeModelsById:r,conflicts:t}}function Io(e){return De.includes(e)}function Bo(){return{documents:new Map,behaviorTreesById:new Map,nodeModelsById:new Map,mergedNodeModelsById:new Map,modelLayers:[],builtins:new Map,genericSubTreePorts:[],modelConflicts:[],typeRegistry:pe(),augmentations:[]}}function Mo(e,t,n){let r=e.get(t)||[];r.push(n),e.set(t,r)}function _o(e,t,n){for(let r of new Set(n))if(Io(r)){for(let i of kt(r))e.builtins.set(i.id,i),t.push(i);e.genericSubTreePorts.push(...Dt(r))}}function wo(e,t,n,r,i){for(let o of i){let s=bt(o,{uri:o.uri,path:o.path}),a=s.model;t.push(...s.diagnostics),e.documents.set(o.uri,a);for(let d of a.behaviorTrees)Mo(e.behaviorTreesById,d.id,d);o.kind==="model-document"?r.push(...a.treeNodesModel):n.push(...a.treeNodesModel),e.genericSubTreePorts.push(...a.genericSubTreePorts)}}function Po(e){return JSON.stringify({name:e.name,direction:e.direction,type:e.type,required:e.required,defaultValue:e.defaultValue,enum:e.enum?[...e.enum].sort((t,n)=>t.localeCompare(n)):void 0,description:e.description})}function Ao(e){let t=new Set,n=[];for(let r of e.genericSubTreePorts){let i=Po(r);t.has(i)||(t.add(i),n.push(r))}e.genericSubTreePorts=n}function Lo(e,t,n,r,i){e.modelLayers.push(er(t),tr(n),nr(r)),i.models?.length&&e.modelLayers.push(rr([...i.models])),e.modelLayers.push(...i.additionalModelLayers??[])}function Ie(e,t){return Uo(e,t)}function Uo(e,t){let n=Bo(),r=[],i=[],o=[],s=[];_o(n,i,t.config.models.builtins),n.augmentations=t.augmentations??[],n.typeRegistry=pe(t.augmentations??[]),wo(n,r,o,s,e),Ao(n),Lo(n,i,o,s,t);let a=t.config.models.inline;if(a){let l=[];for(let[m,p]of Object.entries(a))l.push(vt(m,p));n.modelLayers.push(ir(l))}let d=sr(n.modelLayers),u=Zn(d.mergedNodeModelsById,n.typeRegistry,t.augmentations??[]);return n.nodeModelsById=d.nodeModelsById,n.mergedNodeModelsById=u.modelsById,n.modelConflicts=d.conflicts,r.push(...u.diagnostics),{ok:r.every(l=>l.severity!==b.Error),index:n,diagnostics:r}}var ar={unknownSubTreePorts:"allow"};function dr(e){return{...ar,...e}}var Vo=["Action","Condition","Control","Decorator"],Oo=new Set(Vo);var qo=new Set(["input_port","output_port","inout_port"]);function Mt(e){return Oo.has(e)}function Je(e,t){return e.attributes.find(n=>n.name===t)?.value}function Bt(e,t){if(e===t)return!0;for(let n of e.children)if(n.kind==="element"&&Bt(n,t))return!0;return!1}function lr(e,t){if(!e)return!1;if(e.name==="TreeNodesModel")return Bt(e,t);for(let n of e.children)if(!(n.kind!=="element"||n.name!=="TreeNodesModel")&&Bt(n,t))return!0;return!1}function Qe(e){return qo.has(e.name)}function ur(e){return e.name==="root"?"root":e.name==="BehaviorTree"?"behavior-tree":e.name==="TreeNodesModel"?"tree-nodes-model":e.name==="include"?"include":e.name==="SubTree"?"subtree":Mt(e.name)?"generic-node":Qe(e)?"unknown-xml":"concrete-node"}function _t(e){if(e.name==="SubTree")return Je(e,"ID")||"SubTree";if(Mt(e.name))return Je(e,"ID");if(!(e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"||e.name==="include"||Qe(e)))return e.name}function V(e){return e.typeRegistry}function K(e,t){return U(V(e),t)}function ge(e,t,n){return xe(V(e),t,n)}function Be(e,t){return e.documents.get(t)}function te(e,t){return e.behaviorTreesById.get(t)??[]}function wt(e,t){return e.behaviorTreesById.has(t)}function Pt(e){return[...e.behaviorTreesById.keys()]}function At(e,t){return e.documents.has(t)}function Y(e,t){let n=e;return n.mergedNodeModelsById.get(t)??n.builtins.get(t)}function Lt(e,t){return e.modelLayers.flatMap(n=>n.models.filter(r=>r.id===t))}function Ut(e){return[...e.genericSubTreePorts]}function Vt(e){return[...e.augmentations]}function Me(e){return e.modelConflicts}function _e(e,t){let{id:n,fileLocalUri:r,config:i}=t,o=te(e,n);if(o.length>0){if((i?.resolver?.behaviorTreeIds==="file-local-first"||i?.resolver?.behaviorTreeIds==="allow-ambiguous")&&r){let u=o.filter(l=>l.uri===r);u.length>0&&(o=u)}let a=Y(e,n),d=a?.kind==="SubTree"?[a]:[];return o.length===1?{status:"resolved",kind:"behavior-tree",treeId:o[0].id,behaviorTree:o[0]}:{status:"ambiguous",candidates:[...o.map(u=>u.id),...d.map(u=>u.id)],behaviorTrees:o,definitions:d}}let s=Y(e,n);return s?.kind==="SubTree"?{status:"resolved",kind:"node-model",modelId:s.id,model:s}:{status:"unresolved",id:n}}function Ot(e,t){if(!t)return{status:"unresolved",nodeType:t};let n=Y(e,t);if(n){let i=Me(e).find(o=>o.id===t&&o.code==="BT012_CONFLICTING_NODE_MODEL");return i?{status:"ambiguous",nodeType:t,candidates:i.definitions}:{status:"resolved",model:n}}let r=Lt(e,t);return r.length===1?{status:"resolved",model:r[0]}:r.length>1?{status:"ambiguous",nodeType:t,candidates:r}:{status:"unresolved",nodeType:t}}function qt(e){let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);return[...t.values()]}function Ft(e){let t=Ut(e.index);if(e.tagForm==="subtree"){let n=e.model.status==="resolved"?e.model.model.ports:e.subtreeModelPorts??[];return qt([...n,...t])}return e.model.status==="resolved"?[...e.model.model.ports]:[]}function Xt(e){let{attribute:t}=e,n=e.ports.find(r=>r.name===t.name);return n?{status:"resolved",attribute:t,name:t.name,value:t.value,port:n}:ht(t.name)?{status:"reserved-attribute",attribute:t,name:t.name,value:t.value}:e.allowsArbitraryAttributes?{status:"allowed-arbitrary",attribute:t,name:t.name,value:t.value}:e.unknownModelPortStatus==="undeclared"?{status:"undeclared",attribute:t,name:t.name,value:t.value}:e.model.status==="unresolved"||e.model.status==="ambiguous"?{status:"unknown-node-model",attribute:t,name:t.name,value:t.value}:{status:"undeclared",attribute:t,name:t.name,value:t.value}}function H(e,t){let n=dr(t.policy),r=t.element,i=ur(r),o=lr(t.documentRoot,r);if((t.isModelDefinition||o&&(i==="generic-node"||i==="subtree"))&&(i="model-definition"),o&&Qe(r)&&(i="unknown-xml"),i==="root"||i==="behavior-tree"||i==="tree-nodes-model"||i==="include"||i==="model-definition"||i==="unknown-xml")return{element:r,tagName:r.name,tagForm:i,model:{status:"not-a-node"},ports:[],allowsArbitraryAttributes:!1,portUsages:[]};let s=_t(r);if(i!=="subtree"){let g=Ot(e,s),x=Ft({index:e,tagForm:i,model:g}),T=r.attributes.map(N=>Xt({attribute:N,ports:x,allowsArbitraryAttributes:!1,model:g}));return{element:r,tagName:r.name,tagForm:i,nodeType:s,model:g,ports:x,allowsArbitraryAttributes:!1,portUsages:T}}let a=Je(r,"ID"),d=a?_e(e,{id:a,fileLocalUri:t.uri,config:t.config}):{status:"unresolved",id:void 0},u={status:"unresolved",nodeType:a},l=!1;if(d.status==="resolved"&&d.kind==="node-model")u={status:"resolved",model:d.model};else if(d.status==="resolved"&&d.kind==="behavior-tree"){let g=Ot(e,d.treeId);g.status==="resolved"&&g.model.kind==="SubTree"?u=g:l=n.unknownSubTreePorts==="allow"}else d.status==="ambiguous"&&d.definitions.length>0?u=d.definitions.length===1?{status:"resolved",model:d.definitions[0]}:{status:"ambiguous",nodeType:a??"SubTree",candidates:d.definitions}:l=n.unknownSubTreePorts==="allow";let m=Ft({index:e,tagForm:i,model:u,subtreeModelPorts:d.status==="ambiguous"?qt(d.definitions.flatMap(g=>g.ports)):void 0}),p=r.attributes.map(g=>Xt({attribute:g,ports:m,allowsArbitraryAttributes:l,model:u,unknownModelPortStatus:!l&&u.status!=="resolved"?"undeclared":void 0}));return{element:r,tagName:r.name,tagForm:i,nodeType:s,model:u,subtree:{id:a,target:d},ports:m,allowsArbitraryAttributes:l,portUsages:p}}function et(e,t){return H(e,t).portUsages.find(r=>r.name===t.attributeName)}function jo(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function $o(e){let t=e.root;return t?t.name==="BehaviorTree"?[t]:t.children.filter(n=>n.kind==="element"&&n.name==="BehaviorTree"):[]}function cr(e,t){let n=e.line,r=e.character,i=e.offset;for(let o of t){if(i+=o.length,o===`
10
- `){n+=1,r=0;continue}r+=o.length}return{line:n,character:r,offset:i}}function zo(e,t,n){let r=cr(e,t),i=cr(r,n);return{start:r,end:i}}function Ko(e,t){let n=t.valueContentRange||t.valueRange,r=e.originalText.slice(n.start.offset,n.end.offset),i=[];for(let o of r.matchAll(/\{([^}]+)\}/g)){let s=o[0],a=o[1],d=o.index??0;i.push({raw:s,key:a,range:zo(n.start,r.slice(0,d),s),syntax:"braced"})}return i.length===0&&(r.includes("{")||r.includes("}"))&&i.push({raw:r,key:r,range:n,syntax:"invalid"}),i}function Go(e,t){return jo(e.name)?e.name:t.model.status==="resolved"?t.model.model.kind:"unknown"}function mr(e){let t=[];for(let n of e)t.push(n),t.push(...mr(n.children));return t}function Wo(e){return e.model.status==="resolved"?{status:"resolved",model:e.model.model,source:e.model.model.sourceMeta}:e.model.status==="ambiguous"?{status:"ambiguous",nodeType:e.model.nodeType,candidates:e.model.candidates}:{status:"unresolved",nodeType:e.nodeType??e.tagName}}function Yo(e){return e.status==="resolved"?{status:"resolved",port:e.port}:e.status==="allowed-arbitrary"?{status:"allowed-arbitrary",name:e.name}:e.status==="undeclared"?{status:"undeclared",name:e.name}:{status:"unknown-node-model"}}function pr(e,t){return e.attributes.find(n=>n.name===t)}function Ho(e){let t=new Set;if(!e)return t;let n=r=>{t.add(r);for(let i of r.children)i.kind==="element"&&n(i)};if(e.name==="TreeNodesModel")return n(e),t;for(let r of e.children)r.kind!=="element"||r.name!=="TreeNodesModel"||n(r);return t}function tt(e,t){let n=t.semantic,r=Ho(e.root),i=$o(e).map(d=>({id:pr(d,"ID")?.value,element:d,rootNode:void 0,nodes:[]})),o=[],s=[],a=(d,u,l,m)=>{let p=H(n,{element:d,uri:e.uri,documentRoot:e.root,config:t?.config,policy:t?.policy,isModelDefinition:r.has(d)}),g=Wo(p),x={element:d,path:m,tagName:d.name,kind:Go(d,p),model:g,usage:p,portBindings:[],children:[],parent:l,behaviorTree:u};if(x.portBindings=p.portUsages.filter(T=>T.status!=="reserved-attribute").map(T=>({name:T.name,value:T.value,attribute:T.attribute,declaredPort:Yo(T),usage:T,blackboardReferences:Ko(e,T.attribute)})),x.children=d.children.filter(T=>T.kind==="element").map((T,N)=>a(T,u,x,[...m,N])),d.name==="SubTree"){let T=pr(d,"ID")?.value;o.push({node:x,id:T,target:p.subtree?.target??{status:"unresolved",id:T},portRemaps:x.portBindings})}return x};for(let d of i){let u=d.element.children.filter(l=>l.kind==="element").map((l,m)=>a(l,d,void 0,[m]));d.rootNode=u[0],d.nodes=mr(u),s.push(...d.nodes)}return{document:e,behaviorTrees:i,subtreeCalls:o,nodes:s}}function fr(){return{includeIssuesByUri:new Map,suppressionIssuesByUri:new Map}}function gr(e,t){return e.includeIssuesByUri.get(t)??[]}function yr(e,t){return e.suppressionIssuesByUri.get(t)??[]}function Sr(e){let{document:t,semantic:n,config:r,view:i}=e,o=new Map(i.nodes.map(u=>[u.element,u])),s=new Map(i.subtreeCalls.map(u=>[u.node.element,u])),a=me(r),d=Jo(t.root);return{document:t,view:i,semantic:n,config:r,options:e.options,facts:e.facts,report(u){let l=P(u.code??e.code,e.severity,u.message,u.range,t.uri,u.details,u.data);e.diagnostics.push({...l,rule:e.rule,...u.relatedInformation?{relatedInformation:u.relatedInformation}:{}})},getIncludeIssues(u){let l=gr(e.facts,t.uri);return u?l.filter(m=>m.kind===u):l},getSuppressionIssues(u){let l=yr(e.facts,t.uri);return u?l.filter(m=>m.kind===u):l},getNodeUsage(u){return H(n,{element:u,documentRoot:t.root,uri:t.uri,config:r,policy:a,isModelDefinition:d.has(u)})},getPortUsage(u,l){return et(n,{element:u,documentRoot:t.root,attributeName:l,uri:t.uri,config:r,policy:a,isModelDefinition:d.has(u)})},resolveSubTree(u,l){return _e(n,{id:u,fileLocalUri:l,config:r})},getNodeModel(u){return Y(n,u)},getBehaviorTrees(u){return te(n,u)},getTreeNodeView(u){return o.get(u)},getSubTreeCallView(u){return s.get(u)}}}function Jo(e){let t=new Set;if(!e)return t;if(e.name==="TreeNodesModel")return jt(e,t),t;for(let n of e.children)n.kind!=="element"||n.name!=="TreeNodesModel"||jt(n,t);return t}function jt(e,t){t.add(e);for(let n of e.children)n.kind==="element"&&jt(n,t)}function R(e){let t=cn[e.name];return{...e,code:t.code,defaultSeverity:t.defaultSeverity,optionsSchema:t.optionsSchema,meta:e.meta??{description:t.description}}}var Qo={"missing-path":"include/require-path","not-found":"include/no-missing-file",cycle:"include/no-cycle","unresolved-variable":"include/no-unresolved-variable","outside-root":"include/no-outside-root","external-used":"include/report-external-used","depth-exceeded":"include/no-depth-exceeded","too-many-files":"include/no-too-many-files"};function Z(e){return R({name:Qo[e],create(t){return{ProgramExit(){for(let n of t.getIncludeIssues(e))t.report({message:n.message,range:n.range,data:es(n)})}}}})}function es(e){switch(e.kind){case"missing-path":return;case"unresolved-variable":return{variable:e.variable};case"cycle":return{path:e.path,cycle:e.cycle};default:return{path:e.path}}}var br=[Z("missing-path"),Z("not-found"),Z("cycle"),Z("outside-root"),Z("unresolved-variable"),Z("depth-exceeded"),Z("too-many-files"),Z("external-used")];import ts from"ajv";var ns=ts,rs=new ns,is=["IDLE","RUNNING","SUCCESS","FAILURE","SKIPPED"],os={int8_t:{min:-128n,max:127n},"std::int8_t":{min:-128n,max:127n},int16_t:{min:-32768n,max:32767n},"std::int16_t":{min:-32768n,max:32767n},int32:{min:-2147483648n,max:2147483647n},int32_t:{min:-2147483648n,max:2147483647n},"std::int32_t":{min:-2147483648n,max:2147483647n},int64_t:{min:-9223372036854775808n,max:9223372036854775807n},int64:{min:-9223372036854775808n,max:9223372036854775807n},"std::int64_t":{min:-9223372036854775808n,max:9223372036854775807n},int:{min:-2147483648n,max:2147483647n},long:{min:-9223372036854775808n,max:9223372036854775807n},short:{min:-32768n,max:32767n},uint8_t:{min:0n,max:255n},"std::uint8_t":{min:0n,max:255n},uint16_t:{min:0n,max:65535n},"std::uint16_t":{min:0n,max:65535n},uint32:{min:0n,max:4294967295n},uint32_t:{min:0n,max:4294967295n},"std::uint32_t":{min:0n,max:4294967295n},uint64_t:{min:0n,max:18446744073709551615n},uint64:{min:0n,max:18446744073709551615n},"std::uint64_t":{min:0n,max:18446744073709551615n},uint:{min:0n,max:4294967295n},unsigned:{min:0n,max:4294967295n},"unsigned int":{min:0n,max:4294967295n},size_t:{min:0n,max:18446744073709551615n},"std::size_t":{min:0n,max:18446744073709551615n}},$t=new Set(["int8_t","int16_t","int32","int32_t","std::int32_t","int64_t","int64","std::int64_t","int","long","short","std::int8_t","std::int16_t"]),hr=new Set(["uint8_t","uint16_t","uint32","uint32_t","std::uint32_t","uint64_t","uint64","std::uint64_t","uint","unsigned","unsigned int","std::uint8_t","std::uint16_t","size_t","std::size_t"]);function Tr(e){return e.children.filter(t=>t.kind==="element")}function O(e){return e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"}function vr(e){return e.children.some(t=>t.kind==="element")}function rt(e,t){let n=Rr(t);n&&e.report({code:n.code,message:n.message,range:t.range,details:n.details})}function Rr(e){let t=z(e.port.name,e.value);if(e.allowRemap&&t!==void 0)return;if(!e.allowRemap&&t!==void 0||e.port.enum&&!e.port.enum.includes(e.value))return nt(e.diagnosticCode,e.value,e.portLabel);let n=e.port.validate??e.typeDefinition?.validate;if(n)return us(e.registry,n,e.value)?void 0:nt(e.diagnosticCode,e.value,e.portLabel);let r=e.typeDefinition?.canonical??e.port.type;if(r&&!kr(r,e.value))return ss(r)?nt(e.diagnosticCode,e.value,e.portLabel):{code:e.customLiteralDiagnosticCode,message:`literal value for custom type \`${r}\` requires a validator`,details:{primaryLabel:`literal value requires a validator for custom type \`${r}\``,help:`use a blackboard remap such as \`${e.portLabel}="{${e.port.name}}"\`, or define a validator in btxml.model-augment.json`}}}function ye(e){return e.effectiveType??e.type}function xr(e,t){return U(e,ye(t))}function zt(e,t){return z(e,t)}function nt(e,t,n){return{code:e,message:`invalid value \`${t}\` for port \`${n}\``}}function ss(e){let t=Re(e)??e;return Dr(e)!==void 0||cs.has(t.toLowerCase())}function kr(e,t){let n=Dr(e);if(n)return as(n,t);let r=(Re(e)??e).toLowerCase();switch(r){case"std::string":case"string":case"bt::any":case"bt::anytypeallowed":case"bt::anytype":case"any":return!0;case"bool":return t==="0"||t==="1"||t==="true"||t==="TRUE"||t==="True"||t==="false"||t==="FALSE"||t==="False";case"float":case"double":return/^-?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/.test(t);case"bt::nodestatus":case"nodestatus":return is.includes(t);default:return $t.has(r)||hr.has(r)?Er(r,t):!1}}function Dr(e){return/^std::vector<\s*(.+?)\s*>$/.exec(e)?.[1]}function as(e,t){let n=ls(t);return n?n.every(r=>ds(e,r)):!1}function ds(e,t){if(t.kind==="string")return kr(e,t.value);let n=(Re(e)??e).toLowerCase();switch(n){case"std::string":return typeof t.value=="string";case"bool":return typeof t.value=="boolean";case"float":case"double":return typeof t.value=="number"&&Number.isFinite(t.value);default:return $t.has(n)||hr.has(n)?typeof t.value=="number"&&Number.isInteger(t.value)&&Er(n,String(t.value)):!1}}function Er(e,t){let n=os[e];if(!n)return!1;if($t.has(e)){if(!/^-?\d+$/.test(t))return!1}else if(!/^\d+$/.test(t))return!1;try{let r=BigInt(t);return r>=n.min&&r<=n.max}catch{return!1}}function ls(e){if(e.startsWith("json:"))try{let t=JSON.parse(e.slice(5));return Array.isArray(t)?t.map(n=>({kind:"json",value:n})):void 0}catch{return}return e.split(";").map(t=>({kind:"string",value:t}))}function us(e,t,n){switch(t.kind){case"pattern":return new RegExp(`^(?:${t.pattern})$`).test(n);case"enum":return t.values.includes(n);case"tuple":{let r=n.split(t.separator);return r.length!==t.items.length?!1:r.every((i,o)=>{let s=t.items[o];return s?Rr({port:{name:`tuple[${o}]`,type:s},value:i,registry:e,typeDefinition:U(e,s),allowRemap:!1,diagnosticCode:"BT103_INVALID_PORT_VALUE_TYPE",customLiteralDiagnosticCode:"BT112_CUSTOM_LITERAL_REQUIRES_VALIDATOR",portLabel:`tuple[${o}]`})===void 0:!1})}case"json-schema":try{let r=JSON.parse(n);return rs.compile(t.schema)(r)===!0}catch{return!1}}}var cs=new Set(["std::string","string","bool","int8_t","std::int8_t","int16_t","std::int16_t","int","int32","int32_t","std::int32_t","int64_t","int64","std::int64_t","long","short","uint8_t","std::uint8_t","uint16_t","std::uint16_t","uint","uint32","uint32_t","std::uint32_t","uint64_t","uint64","std::uint64_t","size_t","std::size_t","unsigned","unsigned int","float","double","bt::nodestatus","nodestatus","bt::any","bt::anytypeallowed","bt::anytype","any"]);var Nr=[R({name:"model/require-port-name",meta:{description:"Port elements require a name attribute."},create(e){return{TreeNodeModel(t){for(let n of t.ports)n.name||e.report({message:"Port must have name attribute",range:n.range||n.nameRange||t.idRange||t.range})}}}}),R({name:"model/no-duplicate-port-name",meta:{description:"Ports with the same name are not allowed."},create(e){return{TreeNodeModel(t){let n=new Set;for(let r of t.ports)r.name&&(n.has(r.name)&&e.report({message:`Duplicate port name "${r.name}" in ${t.id}`,range:r.nameRange||r.range||t.idRange||t.range}),n.add(r.name))}}}}),R({name:"model/valid-port-name",meta:{description:"Port names must be valid XML attribute names for BT nodes."},create(e){return{TreeNodeModel(t){for(let n of t.ports){if(!n.name)continue;let r=Tt(n.name);r&&e.report({code:y.InvalidPortName,message:`invalid port name \`${n.name}\`: ${r}`,range:n.nameRange||n.range||t.idRange||t.range,details:{primaryLabel:`invalid port name \`${n.name}\``,help:"rename the port to a non-reserved XML attribute name without forbidden characters"}})}}}}}),R({name:"model/no-conflicting-definition",create(e){return{ProgramExit(){for(let t of Me(e.semantic))t.uri&&t.uri!==e.document.uri||ps(e.document,t.id)||e.report({code:t.code,message:t.message,range:t.range,details:t.details,data:t.data,relatedInformation:t.relatedInformation})}}}}),R({name:"model/valid-port-default-value",meta:{description:"TreeNodesModel port defaults must match the declared type."},create(e){return{Element(t){if(!ms(t))return;let n=t.attributes.find(d=>d.name==="default")??t.attributes.find(d=>d.name==="default_value");if(!n)return;let r=t.attributes.find(d=>d.name==="name")?.value;if(!r)return;let o=fs(e.document.root,t)?.attributes.find(d=>d.name==="ID")?.value;if(!o)return;let a=e.getNodeModel(o)?.ports.find(d=>d.name===r);if(a){if(a.direction==="output"){z(a.name,n.value)===void 0&&e.report({code:y.InvalidPortDefaultValue,message:`output port default for \`${a.name}\` must be a blackboard remap`,range:n.range,details:{primaryLabel:`output port default for \`${a.name}\` must be a blackboard remap`,help:`use \`${a.name}="{${a.name}}"\` or \`${a.name}="{=}"\``}});return}rt(e,{port:a,value:n.value,range:n.range,registry:V(e.semantic),typeDefinition:K(e.semantic,a.type),allowRemap:!0,diagnosticCode:y.InvalidPortDefaultValue,customLiteralDiagnosticCode:y.CustomLiteralRequiresValidator,portLabel:a.name})}}}}}),R({name:"model/no-blackboard-type-mismatch",meta:{description:"Blackboard entries must not mix incompatible resolved port types."},create(e){return{ProgramExit(){let t=V(e.semantic),n=new Map,r=e.options.allowStringEntryCompatibility??!0;for(let i of e.view.nodes)for(let o of i.portBindings){if(o.declaredPort.status!=="resolved")continue;let s=zt(o.name,o.value);if(!s)continue;let a=xr(t,o.declaredPort.port);if(!a||a.kind==="any")continue;let d=n.get(s)??[];d.push({key:s,nodeId:Ss(i.element),port:o.declaredPort.port,typeDefinition:a,range:o.attribute.range}),n.set(s,d)}for(let[i,o]of n){let s=gs(e.semantic,o,r);if(s.length<2)continue;let a=o.find(d=>d.typeDefinition.canonical===s[0]);e.report({code:y.BlackboardTypeMismatch,message:`blackboard entry \`${i}\` is used with incompatible port types: ${s.map(d=>`\`${d}\``).join(", ")}`,range:a?.range,details:{primaryLabel:`blackboard entry \`${i}\` mixes incompatible port types`,notes:o.filter(d=>s.includes(d.typeDefinition.canonical)).map(d=>`${d.nodeId}.${d.port.name} declares ${ys(d.port,d.typeDefinition)}`),help:"use different blackboard keys, align the port types, or declare compatibility in btxml.model-augment.json"}})}}}}}),R({name:"model/require-output-port-remap",meta:{description:"Resolved output ports must write to a blackboard remap."},create(e){return{Element(t){if(bs(t))return;let n=e.getNodeUsage(t);if(!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of t.attributes){let i=e.getPortUsage(t,r.name);i?.status==="resolved"&&i.port.direction==="output"&&zt(i.port.name,r.value)===void 0&&e.report({code:y.OutputPortRequiresRemap,message:`output port \`${i.port.name}\` must be remapped to a blackboard entry`,range:r.range,details:{primaryLabel:`output port \`${i.port.name}\` requires a blackboard remap`,help:`use \`${i.port.name}="{${i.port.name}}"\` or \`${i.port.name}="{some_key}"\``}})}}}}})];function ps(e,t){return e.diagnostics.some(n=>n.code===y.DuplicateNodeModelId&&n.message.includes(`\`${t}\``))}function ms(e){return e.name==="input_port"||e.name==="output_port"||e.name==="inout_port"}function fs(e,t){if(!e)return;return n(e,!1,void 0);function n(r,i,o){let s=i||r.name==="TreeNodesModel",a=s&&(r.name==="Action"||r.name==="Condition"||r.name==="Control"||r.name==="Decorator"||r.name==="SubTree")?r:o;if(r===t)return a;for(let d of r.children){if(d.kind!=="element")continue;let u=n(d,s,a);if(u)return u}}}function gs(e,t,n){let r=new Set;for(let i=0;i<t.length;i+=1){let o=t[i];if(o)for(let s=i+1;s<t.length;s+=1){let a=t[s];a&&(n&&(o.typeDefinition.canonical==="std::string"||a.typeDefinition.canonical==="std::string")||ge(e,o.typeDefinition.canonical,a.typeDefinition.canonical)||(r.add(o.typeDefinition.canonical),r.add(a.typeDefinition.canonical)))}}return[...r].sort()}function ys(e,t){return ye(e)??t.canonical}function Ss(e){return e.attributes.find(t=>t.name==="name")?.value??e.attributes.find(t=>t.name==="ID")?.value??e.name}function bs(e){return e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"}var hs=new Set(["_failureIf","_successIf","_skipIf","_while"]),Ts=new Set(["_onSuccess","_onFailure","_onHalted","_post"]);function Kt(e){if(hs.has(e.attributeName))return{kind:"precondition",expectedResult:"bool-compatible"};if(Ts.has(e.attributeName))return{kind:"postcondition",expectedResult:"ignored"};let t=e.resolvedNodeType??e.elementName;if(e.attributeName==="code"&&t==="Script")return{kind:"script-node-code",expectedResult:"ignored"};if(e.attributeName==="code"&&t==="ScriptCondition")return{kind:"script-condition-code",expectedResult:"bool-compatible"};if(e.attributeName==="if"&&t==="Precondition")return{kind:"precondition-node-if",expectedResult:"bool-compatible"}}var Cr=new Map([["..","DotDot"],["&&","AmpAmp"],["||","PipePipe"],["==","EqualEqual"],["!=","BangEqual"],["<=","LessEqual"],[">=","GreaterEqual"],[":=","ColonEqual"],["+=","PlusEqual"],["-=","MinusEqual"],["*=","StarEqual"],["/=","SlashEqual"]]),Ir=new Map([["+","Plus"],["-","Minus"],["*","Star"],["/","Slash"],["&","Ampersand"],["|","Pipe"],["^","Caret"],["~","Tilde"],["!","Bang"],["<","Less"],[">","Greater"],["=","Equal"],["?","Question"],[":","Colon"],["(","LeftParen"],[")","RightParen"],[";","Semicolon"]]);function Br(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(Mr(r)){n++;continue}if(Gt(r)){let a=n;for(n++;n<e.length&&xs(e[n]);)n++;let d=e.slice(a,n);t.push({type:d==="true"||d==="false"?"Boolean":"Identifier",text:d,start:a,end:n});continue}if(ne(r)){let a=Rs(e,n);t.push(a),n=a.end;continue}if(r==="'"){let a=vs(e,n);t.push(a),n=a.end;continue}let i=e.slice(n,n+2),o=Cr.get(i);if(o){t.push({type:o,text:i,start:n,end:n+2}),n+=2;continue}let s=Ir.get(r);if(s){t.push({type:s,text:r,start:n,end:n+1}),n+=1;continue}t.push({type:"Error",text:r,start:n,end:n+1}),n+=1}return t.push({type:"EndOfInput",text:"",start:e.length,end:e.length}),t}function vs(e,t){let n=t+1;for(;n<e.length&&e[n]!=="'";)n++;return n>=e.length?{type:"Error",text:e.slice(t),start:t,end:e.length}:{type:"String",text:e.slice(t+1,n),start:t,end:n+1}}function Rs(e,t){let n=t;if(e[n]==="0"&&(e[n+1]==="x"||e[n+1]==="X")){n+=2;let i=n;for(;n<e.length&&ks(e[n]);)n++;return i===n||Es(e,n)?(n=we(e,n),Pe(e,t,n)):{type:"Integer",text:e.slice(t,n),start:t,end:n}}for(;n<e.length&&ne(e[n]);)n++;let r="Integer";if(e[n]==="."){if(e[n+1]===".")return{type:r,text:e.slice(t,n),start:t,end:n};if(!ne(e[n+1]))return n=we(e,n+1),Pe(e,t,n);for(r="Real",n+=1;n<e.length&&ne(e[n]);)n++}if(e[n]==="e"||e[n]==="E"){let i=n;n+=1,(e[n]==="+"||e[n]==="-")&&(n+=1);let o=n;for(;n<e.length&&ne(e[n]);)n++;if(o===n)return n=we(e,Math.max(n,i+1)),Pe(e,t,n);r="Real"}return Ds(e,n)?(n=we(e,n),Pe(e,t,n)):{type:r,text:e.slice(t,n),start:t,end:n}}function we(e,t){let n=t;for(;n<e.length;){let r=e[n];if(Mr(r)||Ir.has(r)||Cr.has(e.slice(n,n+2))||r==="."&&e[n+1]===".")break;n++}return n}function Pe(e,t,n){return{type:"Error",text:e.slice(t,n),start:t,end:n}}function Mr(e){return e===" "||e===" "||e===`
11
- `||e==="\r"}function Gt(e){return e!==void 0&&/[A-Za-z_@]/.test(e)}function xs(e){return e!==void 0&&/[A-Za-z0-9_]/.test(e)}function ne(e){return e!==void 0&&/[0-9]/.test(e)}function ks(e){return e!==void 0&&/[0-9A-Fa-f]/.test(e)}function Ds(e,t){let n=e[t];return Gt(n)||ne(n)}function Es(e,t){let n=e[t];return n==="."||Gt(n)||ne(n)}var Ns=new Map([["ColonEqual",":="],["Equal","="],["PlusEqual","+="],["MinusEqual","-="],["StarEqual","*="],["SlashEqual","/="]]),Cs=new Map([["PipePipe","||"],["AmpAmp","&&"],["Pipe","|"],["Caret","^"],["Ampersand","&"],["Plus","+"],["Minus","-"],["DotDot",".."],["Star","*"],["Slash","/"]]),_r=new Map([["EqualEqual","=="],["BangEqual","!="],["Less","<"],["Greater",">"],["LessEqual","<="],["GreaterEqual",">="]]),L={assignment:2,ternary:4,pipePipe:6,ampAmp:8,comparison:10,pipeCaret:12,ampersand:14,additive:16,multiplicative:18};function Le(e){let t=Br(e),n=t.filter(r=>r.type==="Error");return n.length>0?{ok:!1,errors:n.map(r=>({kind:"invalid-token",message:`invalid token \`${r.text}\``,range:{start:r.start,end:r.end}})),tokens:t}:wr(t,e)}function wr(e,t=""){let n=new Wt(e,t),r=[];if(n.peek().type==="EndOfInput")return{ok:!1,errors:[{kind:"empty-script",message:"empty script",range:{start:0,end:0}}],tokens:e};for(;n.peek().type!=="EndOfInput";){let o=n.parseExpression(0);if(!o)return{ok:!1,errors:n.errors,tokens:e};for(r.push(o);n.match("Semicolon"););}if(n.errors.length>0)return{ok:!1,errors:n.errors,tokens:e};let i=ws(r);return{ok:!0,program:{kind:"Program",statements:r,range:i},tokens:e}}var Wt=class{constructor(t,n,r=0){this.tokens=t;this.source=n;this.index=r}tokens;source;index;errors=[];parseExpression(t){let n=this.parsePrefix();if(n){for(;;){let r=this.peek();if(r.type==="EndOfInput"||r.type==="Semicolon"||r.type==="RightParen"||r.type==="Colon")break;let i=Ns.get(r.type);if(i){if(t>=L.assignment)break;this.consume();let d=this.parseExpression(0);if(!d)return;n={kind:"AssignmentExpression",operator:i,left:n,right:d,range:Ae(n.range,d.range)};break}if(r.type==="Question"){if(t>=L.ternary)break;this.consume();let d=this.parseExpression(0);if(!d)return;if(!this.match("Colon")){this.reportError("expected-ternary-colon","expected ':' in ternary expression",this.peek());return}let u=this.parseExpression(L.ternary);if(!u)return;n={kind:"ConditionalExpression",condition:n,thenExpression:d,elseExpression:u,range:Ae(n.range,u.range)};break}let o=_r.get(r.type);if(o){if(t>=L.comparison)break;this.consume();let d=[n],u=[o],l=this.parseExpression(L.comparison);if(!l)return;for(d.push(l);;){let m=_r.get(this.peek().type);if(!m)break;this.consume();let p=this.parseExpression(L.comparison);if(!p)return;u.push(m),d.push(p)}n={kind:"ComparisonChain",operands:d,operators:u,range:Ae(d[0].range,d[d.length-1].range)};continue}let s=Cs.get(r.type),a=s?Ms(r.type):void 0;if(s&&a!==void 0){if(t>=a)break;this.consume();let d=this.parseExpression(a);if(!d)return;n={kind:"BinaryExpression",operator:s,left:n,right:d,range:Ae(n.range,d.range)};continue}this.reportError("unexpected-token-after-expression",`unexpected token after expression: \`${r.text||r.type}\``,r);return}return n}}parsePrefix(){let t=this.peek();switch(t.type){case"Identifier":return this.consume(),{kind:"Identifier",name:t.text,range:re(t)};case"Integer":case"Real":case"Boolean":case"String":return this.consume(),Is(t,this.source);case"Minus":case"Tilde":case"Bang":{this.consume();let n=this.parseExpression(20);return n?{kind:"UnaryExpression",operator:Bs(t.type),argument:n,range:Ae(re(t),n.range)}:void 0}case"LeftParen":{let n=this.consume(),r=this.parseExpression(0);if(!r)return;let i=this.peek();if(i.type!=="RightParen"){this.reportError("expected-right-paren","expected ')'",i);return}return this.consume(),_s(r,{start:n.start,end:i.end})}default:this.reportError("expected-operand","expected operand",t);return}}peek(){return this.tokens[this.index]??this.tokens[this.tokens.length-1]}consume(){let t=this.peek();return this.index+=1,t}match(t){return this.peek().type!==t?!1:(this.consume(),!0)}reportError(t,n,r){this.errors.push({kind:t,message:n,range:re(r)})}};function Is(e,t){switch(e.type){case"Integer":return{kind:"Literal",valueKind:"integer",raw:t.slice(e.start,e.end),value:e.text.startsWith("0x")||e.text.startsWith("0X")?Number(e.text):Number.parseInt(e.text,10),range:re(e)};case"Real":return{kind:"Literal",valueKind:"real",raw:t.slice(e.start,e.end),value:Number(e.text),range:re(e)};case"Boolean":return{kind:"Literal",valueKind:"boolean",raw:t.slice(e.start,e.end),value:e.text==="true",range:re(e)};case"String":return{kind:"Literal",valueKind:"string",raw:t.slice(e.start,e.end),value:e.text,range:re(e)};default:throw new Error(`unsupported literal token ${e.type}`)}}function Bs(e){switch(e){case"Minus":return"-";case"Tilde":return"~";case"Bang":return"!";default:throw new Error(`unsupported unary token ${e}`)}}function Ms(e){switch(e){case"PipePipe":return L.pipePipe;case"AmpAmp":return L.ampAmp;case"Pipe":case"Caret":return L.pipeCaret;case"Ampersand":return L.ampersand;case"Plus":case"Minus":case"DotDot":return L.additive;case"Star":case"Slash":return L.multiplicative;default:return}}function re(e){return{start:e.start,end:e.end}}function Ae(e,t){return{start:e.start,end:t.end}}function _s(e,t){return{...e,range:t}}function ws(e){return{start:e[0]?.range.start??0,end:e[e.length-1]?.range.end??0}}var Ps=new Set(["int8_t","std::int8_t","int16_t","std::int16_t","int32","int32_t","std::int32_t","int64","int64_t","std::int64_t","int","long","short","uint8_t","std::uint8_t","uint16_t","std::uint16_t","uint32","uint32_t","std::uint32_t","uint64","uint64_t","std::uint64_t","uint","unsigned","unsigned int","size_t","std::size_t","float","double"]);function Yt(e={}){let t=pe(e.augmentations??[]),n=e.areTypesCompatible??((o,s)=>xe(t,o,s)),r=new Map,i={symbols:new Map,enums:As(e.enums,e.augmentations??[])};for(let o of e.symbols??[])Ls(i,r,o,n);return i}function ie(e){return{symbols:new Map([...e?.symbols.entries()??[]].map(([t,n])=>[t,{...n}])),enums:new Map(e?.enums??[])}}function Ht(e){let t=ie(e.baseEnvironment),n=[];for(let r of e.entries){let i=ie(t),o=r.parseResult??Le(r.source),s=ie(i),a;o.ok&&(a=Ue({program:o.program,environment:i,attributeName:r.attributeName,originId:r.originId??String(r.id)}),s=ie(a.environment)),n.push({id:r.id,parseResult:o,environmentBefore:i,environmentAfter:s,...a?{analysis:a}:{}}),t.symbols.clear(),t.enums.clear();for(let[d,u]of s.symbols)t.symbols.set(d,{...u});for(let[d,u]of s.enums)t.enums.set(d,u)}return n}function Pr(e){let t=new Map;for(let n of e)for(let[r,i]of Object.entries(n.script?.enums??{}))t.set(r,i);return t}function it(e,t){let n=U(e,t);return Ar(t,n)}function Ar(e,t){if(!e||!t)return{kind:"unknown"};if(t.kind==="any")return{kind:"any"};let n=t.canonical.toLowerCase();return n==="bool"?{kind:"bool"}:n==="std::string"||n==="string"?{kind:"string"}:Ps.has(n)?{kind:"number"}:{kind:"custom",name:t.name??e,canonical:t.canonical}}function Lr(e,t){return e.kind==="any"||t.kind==="any"||e.kind==="unknown"||t.kind==="unknown"||e.kind==="error"||t.kind==="error"?!0:e.kind==="custom"&&t.kind==="custom"?e.canonical===t.canonical:e.kind===t.kind}function ot(e,t){return e.kind==="any"||t.kind==="any"||e.kind==="unknown"||t.kind==="unknown"||e.kind==="error"||t.kind==="error"?!0:e.kind==="custom"||t.kind==="custom"?e.kind==="custom"&&t.kind==="custom"?e.canonical===t.canonical:!1:e.kind==="bool"&&t.kind==="number"?!0:e.kind===t.kind}function oe(e){return e.kind==="bool"||e.kind==="number"||e.kind==="unknown"||e.kind==="any"||e.kind==="error"}function Zt(e,t){return e.kind==="error"||t.kind==="error"?{kind:"error"}:e.kind==="unknown"||t.kind==="unknown"?{kind:"unknown"}:e.kind==="any"||t.kind==="any"?e.kind===t.kind?e:{kind:"unknown"}:e.kind==="custom"||t.kind==="custom"?e.kind==="custom"&&t.kind==="custom"&&e.canonical===t.canonical?e:void 0:e.kind===t.kind?e:void 0}function As(e,t){if(e instanceof Map)return new Map(e);let n=Pr(t??[]);for(let[r,i]of Object.entries(e??{}))n.set(r,i);return n}function Ls(e,t,n,r){let i=e.symbols.get(n.name);if(!i){e.symbols.set(n.name,{name:n.name,type:n.type,source:n.source,writable:n.writable,readable:n.readable}),t.set(n.name,n.compatibilityKey);return}let o=t.get(n.name),s=i.conflict===!0||o!==void 0&&n.compatibilityKey!==void 0&&!r(o,n.compatibilityKey)||!Lr(i.type,n.type);e.symbols.set(n.name,{...i,readable:i.readable||n.readable,writable:i.writable||n.writable,conflict:s}),o===void 0&&t.set(n.name,n.compatibilityKey)}var se={kind:"number"},at={kind:"string"},st={kind:"bool"},G={kind:"unknown"},_={kind:"error"};function Ue(e){let t=ie(e.environment),n=[],r=[],i=[],o=[],s=[],a=[];return e.program.statements.forEach((d,u)=>{a.push(j({expression:d,statementIndex:u,environment:t,identifiers:n,resolvedIdentifiers:r,unknownIdentifiers:i,introducedSymbols:o,diagnostics:s,attributeName:e.attributeName??"code",originId:e.originId}))}),{environment:t,identifiers:n,resolvedIdentifiers:r,unknownIdentifiers:i,introducedSymbols:o,diagnostics:s,statementTypes:a,finalType:a.at(-1)}}function j(e){let{expression:t}=e;switch(t.kind){case"Literal":return t.valueKind==="integer"||t.valueKind==="real"?se:t.valueKind==="string"?at:t.valueKind==="boolean"?st:G;case"Identifier":return Vs(e,t.name,t.range);case"UnaryExpression":{let n=j({...e,expression:t.argument});return t.operator==="!"?oe(n)?st:(q(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires a bool-compatible operand`,`operand for \`${t.operator}\` is not bool-compatible`,"use a boolean, number, or unknown-compatible expression here"),_):n.kind==="number"?se:n.kind==="unknown"||n.kind==="any"||n.kind==="error"?n.kind==="any"?n:n.kind==="error"?_:G:(q(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires a numeric operand`,`operand for \`${t.operator}\` is not numeric`,"use a number expression here"),_)}case"BinaryExpression":{let n=j({...e,expression:t.left}),r=j({...e,expression:t.right});switch(t.operator){case"&&":case"||":return Ur(n)||Ur(r)?(q(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires bool-compatible operands`,`operands for \`${t.operator}\` are not bool-compatible`,"use boolean or numeric expressions here"),_):st;case"+":return n.kind==="string"&&r.kind==="string"?at:n.kind==="number"&&r.kind==="number"?se:Jt(n,r)?G:(Qt(e,t.range,t.operator),_);case"-":case"*":case"/":case"&":case"|":case"^":return n.kind==="number"&&r.kind==="number"?se:Jt(n,r)?G:(Qt(e,t.range,t.operator),_);case"..":return n.kind==="string"&&(r.kind==="string"||r.kind==="number")||r.kind==="string"&&(n.kind==="string"||n.kind==="number")?at:Jt(n,r)?G:(Qt(e,t.range,t.operator),_)}return G}case"ComparisonChain":{let n=t.operands.map(r=>j({...e,expression:r}));for(let r=0;r<t.operators.length;r+=1){let i=t.operators[r],o=n[r],s=n[r+1];if(!qs(i,o,s))return q(e,"invalid-operand-type",{start:t.operands[r]?.range.start??t.range.start,end:t.operands[r+1]?.range.end??t.range.end},`operator \`${i}\` cannot compare these operand types`,`comparison operands for \`${i}\` are not compatible`,"compare values of the same primitive type, or use == / != for matching custom types"),_}return st}case"ConditionalExpression":{let n=j({...e,expression:t.condition});oe(n)||q(e,"invalid-operand-type",t.condition.range,"ternary condition must be bool-compatible","ternary condition is not bool-compatible","use a boolean or numeric condition expression here");let r=j({...e,expression:t.thenExpression}),i=j({...e,expression:t.elseExpression}),o=Zt(r,i);return o||(q(e,"invalid-operand-type",t.range,"ternary branches must produce compatible types","then and else branches have incompatible types","return the same type from both ternary branches"),_)}case"AssignmentExpression":return Us(e)}}function Us(e){let{environment:t,attributeName:n,identifiers:r,introducedSymbols:i}=e,o=e.expression,s=j({...e,expression:o.right});if(o.left.kind!=="Identifier")return j({...e,expression:o.left}),q(e,"invalid-operand-type",o.left.range,"assignment target must be an identifier","this assignment target is not writable","assign to a variable name instead of an expression"),_;let a=o.left,d=o.operator===":="?"declare":o.operator==="="?"write":"readwrite",u={name:a.name,kind:d,range:a.range,identifier:a,statementIndex:e.statementIndex};r.push(u);let l=t.symbols.get(a.name);if(o.operator===":="&&!l){let p={name:a.name,type:s,source:{kind:"script-assignment",attributeName:n,range:a.range,originId:e.originId},readable:!0,writable:!0};return t.symbols.set(a.name,p),e.resolvedIdentifiers.push({access:u,resolution:{kind:"symbol",symbol:p}}),i.push(p),s}if(!l)return e.resolvedIdentifiers.push({access:u,resolution:{kind:"unknown"}}),q(e,"assignment-to-unknown-variable",a.range,`assignment target \`${a.name}\` is not defined`,`\`${a.name}\` must already exist before this assignment`,"introduce the variable earlier with `:=` or add a matching blackboard remap"),_;if(e.resolvedIdentifiers.push({access:u,resolution:{kind:"symbol",symbol:l}}),o.operator==="=")return ot(l.type,s)?(en(l,s),s):(Vr(e,a,l.type,s),_);if(o.operator===":=")return ot(l.type,s)?(en(l,s),s):(Vr(e,a,l.type,s),_);let m=Os(l.type,s,o.operator);return m?(en(l,m),m):(q(e,"invalid-compound-assignment",o.range,`operator \`${o.operator}\` is not valid for these operand types`,`compound assignment \`${o.operator}\` is not allowed here`,o.operator==="+="?"use number += number or string += string":"use numeric operands for this compound assignment"),_)}function Vs(e,t,n){let r={name:t,kind:"read",range:n,identifier:e.expression,statementIndex:e.statementIndex};e.identifiers.push(r);let i=e.environment.enums.get(t);if(i!==void 0)return e.resolvedIdentifiers.push({access:r,resolution:{kind:"enum",name:t,value:i}}),se;let o=e.environment.symbols.get(t);return o?(e.resolvedIdentifiers.push({access:r,resolution:{kind:"symbol",symbol:o}}),o.type):(e.resolvedIdentifiers.push({access:r,resolution:{kind:"unknown"}}),e.unknownIdentifiers.push(r),G)}function Os(e,t,n){return e.kind==="error"||t.kind==="error"?_:e.kind==="unknown"||t.kind==="unknown"||e.kind==="any"||t.kind==="any"?G:n==="+="?e.kind==="number"&&t.kind==="number"?se:e.kind==="string"&&t.kind==="string"?at:void 0:e.kind==="number"&&t.kind==="number"?se:void 0}function Jt(e,t){return dt(e)||dt(t)}function dt(e){return e.kind==="unknown"||e.kind==="any"||e.kind==="error"}function Ur(e){return!oe(e)}function qs(e,t,n){return dt(t)||dt(n)?!0:e==="=="||e==="!="?t.kind==="custom"||n.kind==="custom"?t.kind==="custom"&&n.kind==="custom"&&t.canonical===n.canonical:t.kind===n.kind:t.kind==="custom"||n.kind==="custom"?!1:t.kind==="number"&&n.kind==="number"||t.kind==="string"&&n.kind==="string"}function Qt(e,t,n){q(e,"invalid-operand-type",t,`operator \`${n}\` cannot be applied to these operand types`,`operands for \`${n}\` are not compatible`,"use operands with the types required by this operator")}function Vr(e,t,n,r){q(e,"variable-type-mismatch",t.range,`cannot assign ${tn(r)} to variable \`${t.name}\` of type ${tn(n)}`,`\`${t.name}\` expects ${tn(n)} here`,"assign a compatible value or change the variable's source type")}function en(e,t){e.source.kind==="script-assignment"&&(e.type.kind!=="unknown"&&e.type.kind!=="error"||t.kind==="unknown"||t.kind==="any"||t.kind==="error"||(e.type=t))}function q(e,t,n,r,i,o){e.diagnostics.push({code:t,range:n,message:r,details:{primaryLabel:i,help:o}})}function tn(e){return e.kind==="custom"?e.name:e.kind}var Or=new WeakMap;function lt(e,t){let n=e.getNodeUsage(t),r=n.model.status==="resolved"?n.model.model.id:n.nodeType;return t.attributes.flatMap(i=>{let o=Kt({elementName:t.name,attributeName:i.name,resolvedNodeType:r});return o?[{attribute:i,info:o,parseResult:Le(i.value)}]:[]})}function F(e,t,n){return yt(e.document,t,n)}function qr(e){return{start:0,end:e.value.length}}function J(e,t){let n=e.getTreeNodeView(t),r=n?.behaviorTree;return!n||!r?lt(e,t).map(i=>{let o=Fr(e,[]);return{...i,environment:o,analysis:i.parseResult.ok?Ue({program:i.parseResult.program,environment:o,attributeName:i.attribute.name}):void 0}}):Fs(e,r).filter(i=>i.node.element===t).map(i=>({...i.candidate,environment:i.environmentBefore,analysis:i.analysis}))}function Fs(e,t){let n=Or.get(e.view);n||(n=new WeakMap,Or.set(e.view,n));let r=n.get(t);if(r)return r;let i=t.nodes.flatMap(s=>lt(e,s.element).map((a,d)=>({id:`${s.path.join(".")}:${a.attribute.name}:${d}`,node:s,candidate:a}))),o=Ht({baseEnvironment:Fr(e,t.nodes),entries:i.map(s=>({id:s.id,source:s.candidate.attribute.value,attributeName:s.candidate.attribute.name,originId:s.id,parseResult:s.candidate.parseResult}))}).flatMap((s,a)=>{let d=i[a];return d?[{...s,node:d.node,candidate:d.candidate}]:[]});return n.set(t,o),o}function Fr(e,t){let n=V(e.semantic),r=[],i=t[0]?.behaviorTree.id;if(i){let o=e.getNodeModel(i);if(o?.kind==="SubTree")for(let s of o.ports){let a=ye(s),u=K(e.semantic,a)?.canonical??a;r.push({name:s.name,type:it(n,a),source:{kind:"subtree-port",nodeType:i,portName:s.name,direction:s.direction},readable:!0,writable:s.direction==="output"||s.direction==="inout",compatibilityKey:u})}}for(let o of t){let s=o.usage.model.status==="resolved"?o.usage.model.model.id:o.usage.nodeType;for(let a of o.portBindings){if(a.usage.status!=="resolved")continue;let d=z(a.usage.port.name,a.usage.value);if(!d)continue;let u=ye(a.usage.port),m=K(e.semantic,u)?.canonical??u,p=a.usage.port.direction;r.push({name:d,type:it(n,u),source:{kind:"port-remap",nodeType:s,portName:a.usage.port.name,direction:p},readable:p==="input"||p==="output"||p==="inout",writable:p==="output"||p==="inout",compatibilityKey:m})}}return Yt({symbols:r,augmentations:Vt(e.semantic),areTypesCompatible:(o,s)=>o&&s?ge(e.semantic,o,s):!0})}var Xr=R({name:"script/no-unknown-variable",create(e){return{Element(t){for(let n of J(e,t))if(n.analysis)for(let r of n.analysis.unknownIdentifiers)e.report({code:y.UnknownScriptVariable,message:`unknown script variable \`${r.name}\``,range:F(e,n.attribute,r.range),details:{primaryLabel:`\`${r.name}\` is not defined in the script environment`,help:"introduce it earlier with `:=`, add a matching blackboard remap, or define a script enum in btxml.model-augment.json"}})}}}});var jr=R({name:"script/valid-assignment",create(e){return{Element(t){for(let n of J(e,t))if(n.analysis)for(let r of n.analysis.diagnostics){let i=r.code==="assignment-to-unknown-variable"?y.AssignmentToUnknownVariable:r.code==="invalid-compound-assignment"?y.InvalidCompoundAssignment:r.code==="variable-type-mismatch"?y.ScriptVariableTypeMismatch:void 0;i&&e.report({code:i,message:r.message,range:F(e,n.attribute,r.range),details:r.details})}}}}});var $r=R({name:"script/valid-expression-type",create(e){return{Element(t){for(let n of J(e,t))if(n.analysis)for(let r of n.analysis.diagnostics)r.code==="invalid-operand-type"&&e.report({code:y.InvalidScriptOperandType,message:r.message,range:F(e,n.attribute,r.range),details:r.details})}}}});var zr=R({name:"script/valid-result-type",create(e){return{Element(t){for(let n of J(e,t)){if(n.info.expectedResult!=="bool-compatible"||!n.parseResult.ok||!n.analysis)continue;let r=n.parseResult.program.statements.at(-1),i=n.analysis.finalType;!r||!i||oe(i)||e.report({code:y.ScriptResultNotBoolCompatible,message:`script result for \`${n.attribute.name}\` is not bool-compatible`,range:F(e,n.attribute,r.range),details:{primaryLabel:"script result is not bool-compatible here",help:"return a boolean or numeric expression, or move side effects into a postcondition/script node"}})}}}}});var Kr=R({name:"script/valid-syntax",create(e){return{Element(t){for(let n of lt(e,t))if(!n.parseResult.ok)for(let r of n.parseResult.errors){let i=r.kind==="empty-script"?y.EmptyScript:r.kind==="invalid-token"?y.InvalidScriptToken:y.InvalidScriptSyntax;e.report({code:i,message:r.message,range:r.kind==="empty-script"?n.attribute.valueContentRange??n.attribute.valueRange??F(e,n.attribute,qr(n.attribute)):F(e,n.attribute,r.range),details:{primaryLabel:`invalid script in \`${n.attribute.name}\``}})}}}}});var Gr=[Kr,Xr,jr,$r,zr];var Xs={unused:"suppression/no-unused","missing-reason":"suppression/require-reason"};function Wr(e){return R({name:Xs[e],create(t){return{ProgramExit(){for(let n of t.getSuppressionIssues(e))t.report({message:n.message,range:n.range,data:js(n)})}}}})}function js(e){return e.code?{code:e.code}:void 0}var Yr=[Wr("unused"),Wr("missing-reason")];function ut(e,t){return e.attributes.find(n=>n.name===t)}var Hr=[R({name:"tree/require-id",create(e){return{Element(t){t.name!=="BehaviorTree"||ut(t,"ID")||e.report({message:"BehaviorTree must have ID attribute",range:t.range})}}}}),R({name:"tree/no-duplicate-id-in-file",create(e){let t=new Set;return{ProgramExit(){let n=Be(e.semantic,e.document.uri);for(let r of n?.behaviorTrees??[])r.idRange&&(t.has(r.id)&&e.report({message:`Duplicate BehaviorTree ID: ${r.id}`,range:r.idRange}),t.add(r.id))}}}}),R({name:"tree/no-duplicate-id",create(e){return{ProgramExit(){if(e.config.resolver.behaviorTreeIds!=="allow-ambiguous")for(let t of Pt(e.semantic)){let n=te(e.semantic,t);if(n.length<=1||new Set(n.map(o=>o.uri)).size<=1)continue;let i=n.filter(o=>o.uri===e.document.uri);i.length>0&&e.report({message:`Duplicate BehaviorTree ID: ${t}`,range:i[0]?.idRange})}}}}}),R({name:"tree/no-unknown-main-tree",create(e){return{Document(){let t=e.document.root;if(e.document.kind!=="bt-document"||!t)return;let n=ut(t,"main_tree_to_execute");!n?.value||wt(e.semantic,n.value)||e.report({message:`main_tree_to_execute references unknown BehaviorTree: ${n.value}`,range:n.range})}}}}),R({name:"tree/no-unknown-subtree",create(e){return{Element(t){if(t.name!=="SubTree")return;let n=e.getSubTreeCallView(t),r=n?.node.element.attributes.find(o=>o.name==="ID")??ut(t,"ID");!r||n?.target.status==="resolved"||e.resolveSubTree(r.value,e.document.uri).status!=="unresolved"||e.report({message:`unknown subtree \`${r.value}\``,range:r.valueContentRange||r.valueRange})}}}}),R({name:"tree/no-ambiguous-subtree",create(e){return{Element(t){if(t.name!=="SubTree")return;let n=ut(t,"ID");if(!n||e.getSubTreeCallView(t)?.target.status==="resolved")return;let i=e.resolveSubTree(n.value,e.document.uri);i.status!=="ambiguous"||i.behaviorTrees.length<=1||e.report({message:`ambiguous subtree \`${n.value}\``,range:n.valueContentRange||n.valueRange})}}}}),R({name:"tree/no-duplicate-node-model-id",meta:{description:"TreeNodesModel elements must have unique IDs within the same model block."},create(){return{}}})];var $s=new Map([["IfThenElse",{min:2,max:3}],["WhileDoElse",{min:2,max:3}]]);function zs(e,t){return e===t?String(e):`${e}\u2013${t}`}var Zr=R({name:"model/valid-child-count",create(e){return{Element(t){if(O(t))return;let n=e.getNodeUsage(t);n.model.status==="resolved"&&Ks(e,t,n.model.model.id,n.model.model.kind)}}}});function Ks(e,t,n,r){let i=Tr(t).length,o=$s.get(n);if(o){if(i<o.min||i>o.max){let s=zs(o.min,o.max);e.report({message:`\`${n}\` requires ${s} child node(s), but has ${i}.`,range:t.range})}return}if(r==="Action"||r==="Condition"){i>0&&e.report({message:`${r} node \`${n}\` must not have child nodes, but has ${i}.`,range:t.range});return}if(r==="Decorator"){i!==1&&e.report({message:`Decorator node \`${n}\` must have exactly 1 child node, but has ${i}.`,range:t.range});return}if(r==="Control"){i<1&&e.report({message:`Control node \`${n}\` must have at least 1 child node.`,range:t.range});return}r==="SubTree"&&i>0&&e.report({message:`SubTree node \`${n}\` must not have child nodes, but has ${i}.`,range:t.range})}var Jr=R({name:"model/valid-port-value",create(e){return{Element(t){if(O(t))return;let n=e.getNodeUsage(t);if(!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of t.attributes){let i=e.getPortUsage(t,r.name);i?.status==="resolved"&&rt(e,{port:i.port,value:r.value,range:r.range,registry:V(e.semantic),typeDefinition:K(e.semantic,i.port.type),allowRemap:!0,diagnosticCode:y.InvalidPortValueType,customLiteralDiagnosticCode:y.CustomLiteralRequiresValidator,portLabel:r.name})}}}}});var Qr=R({name:"model/require-port",create(e){return{Element(t){if(O(t))return;let n=e.getNodeUsage(t);if(!(n.tagForm==="subtree"&&n.allowsArbitraryAttributes)&&!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of n.ports)!r.required||n.portUsages.some(o=>o.name===r.name&&o.status==="resolved")||e.report({message:`missing required port \`${r.name}\``,range:t.range,details:n.tagForm==="subtree"?{primaryLabel:n.model.status==="resolved"?`node \`${n.model.model.id}\` requires port \`${r.name}\``:`SubTree requires port \`${r.name}\``,help:`add \`${r.name}="..."\` or provide a blackboard reference such as \`${r.name}="{value}"\``}:void 0})}}}});var ei=[R({name:"model/no-childless-control-shape-mismatch",create(e){return{Element(t){if(O(t)||!t.selfClosing)return;let n=e.getTreeNodeView(t);if(n?.model.status!=="resolved")return;let r=n.model.model.kind;r!=="Control"&&r!=="Decorator"||e.report({message:`${r} node \`${n.model.model.id}\` normally expects child nodes.`,range:t.range})}}}}),R({name:"model/no-leaf-block-shape",create(e){return{Element(t){if(O(t)||t.selfClosing||vr(t))return;let n=e.getTreeNodeView(t);if(n?.model.status!=="resolved")return;let r=n.model.model.kind;r!=="Action"&&r!=="Condition"&&r!=="SubTree"||e.report({message:`${r} node \`${n.model.model.id}\` should be self-closing or have no children.`,range:t.range})}}}})];var ti=R({name:"model/no-unknown-node",create(e){return{Element(t){let n=e.getNodeUsage(t);if(n.tagForm==="root"||n.tagForm==="behavior-tree"||n.tagForm==="tree-nodes-model"||n.tagForm==="include"||n.tagForm==="model-definition"||n.tagForm==="subtree"||n.tagForm==="unknown-xml"||n.model.status==="resolved"||n.model.status==="ambiguous")return;let r=t.attributes.find(i=>i.name==="ID");e.report({message:`unknown node \`${n.nodeType??n.tagName}\``,range:r?.valueContentRange??r?.valueRange??t.range})}}}});var ni=R({name:"model/no-unknown-port",create(e){return{Element(t){if(O(t))return;let n=e.getNodeUsage(t);for(let r of n.portUsages){if(r.status!=="undeclared")continue;let i=n.ports.map(s=>s.name).sort(),o=i.length>=1&&i.length<=8?[`note: defined ports: ${i.map(s=>`\`${s}\``).join(", ")}`]:void 0;e.report({message:`unknown port \`${r.name}\``,range:r.attribute.range,details:n.tagForm==="subtree"?{primaryLabel:n.model.status==="resolved"?`node \`${n.model.model.id}\` does not define this port`:"SubTree does not define this port in strict mode",help:n.model.status==="resolved"?`remove \`${r.name}\` or add it to the \`${n.model.model.id}\` SubTree model`:`remove \`${r.name}\`, add it to a SubTree model, or set the \`model/no-unknown-port\` rule option \`subTreePorts\` to \`loose\``,notes:o}:void 0})}}}}});var ri=[ti,ni,Qr,Jr,...ei,Zr];function Gs(e,t){return e.attributes.find(n=>n.name===t)}function Ws(e){let t=e.resolver.includes.elements;return new Set(["BehaviorTree","TreeNodesModel",...t.map(n=>n.name)])}var ii=[R({name:"xml/valid-root",create(e){return{Document(){let t=e.document.root;e.document.kind!=="bt-document"||!t||t.name==="root"||e.report({message:"Root element must be <root>",range:t.range})}}}}),{name:"xml/require-btcpp-format",code:y.MissingBTCPPFormat,defaultSeverity:"error",meta:{description:'Root element must declare BTCPP_format="4".'},create(e){return{Document(){let t=e.document.root;e.document.kind!=="bt-document"||!t||Gs(t,"BTCPP_format")?.value==="4"||e.report({message:'Root element must have BTCPP_format="4"',range:t.range})}}}},R({name:"xml/no-unknown-top-level-element",meta:{description:"Top-level elements must be BehaviorTree, TreeNodesModel, or configured include elements."},create(e){return{Element(t){let n=e.document.root;e.document.kind!=="bt-document"||!n||t===n||!n.children.includes(t)||Ws(e.config).has(t.name)||e.report({message:`Unknown top-level element: ${t.name}`,range:t.range})}}}})];var nn=[...ii,...Gr,...Hr,...Nr,...ri,...br,...Yr],Sp=new Map(nn.map(e=>[e.name,e]));function oi(e){if(e!=="off")return e==="info"?b.Info:e==="warn"?b.Warning:b.Error}function si(e,t){return Ze(e.linter.rules[t])?.options??{}}function ai(e){let t=Ze(e.config.linter.rules[e.rule]);return oi(t?t.severity:e.defaultSeverity)}function di(e){let t=[],n=e.facts??fr(),r=e.rules?new Set(e.rules):void 0,i=[];for(let s of nn){if(r&&!r.has(s.name))continue;let a=ai({config:e.config,rule:s.name,defaultSeverity:s.defaultSeverity});if(!a)continue;let d=si(e.config,s.name),u=s.optionsSchema?.safeParse(d),l=u?.success?u.data:d,m=Sr({document:e.document,view:e.view,semantic:e.semantic,config:e.config,options:l,diagnostics:t,rule:s.name,code:s.code,severity:a,facts:n});i.push(s.create(m))}for(let s of i)s.Document?.();e.document.root&&li(e.document.root,i);let o=Be(e.semantic,e.document.uri);for(let s of o?.treeNodesModel??[])for(let a of i)a.TreeNodeModel?.(s);for(let s of i)s.ProgramExit?.();return t.map((s,a)=>({diag:s,index:a})).sort((s,a)=>Ys(s.diag,a.diag)||s.index-a.index).map(s=>s.diag)}function li(e,t){for(let n of t)n.Element?.(e);for(let n of e.children)n.kind==="element"&&li(n,t)}function Ys(e,t){let n=e.range,r=t.range;return!n&&!r?0:n?r?n.start.line-r.start.line||n.start.character-r.start.character||n.end.line-r.end.line||n.end.character-r.end.character:-1:1}function ae(e,t){let n=ee(e,{uri:t.uri,path:t.path});if(!n.ok||!n.document)return{ok:!1,diagnostics:[...n.diagnostics]};let r=n.document,i=Ie([r],{config:t.config,augmentations:t.augmentations}),o=tt(r,{semantic:i.index,config:t.config,policy:me(t.config)}),s=di({document:r,view:o,semantic:i.index,config:t.config}),a=[...n.diagnostics,...i.diagnostics,...s];return{ok:!a.some(d=>d.severity===b.Error),diagnostics:a}}function ui(e,t){let n=ae(e,{config:t.config,uri:t.uri,path:t.path}),r=[...n.diagnostics],i,o=!1,s=!1;if(t.format!==!1){let d=he(e,t.config.formatter);r.push(...d.diagnostics),d.ok&&d.skipped?s=!0:d.ok&&!d.skipped&&(i=d.text,o=d.changed)}return n.ok&&!o&&r.every(d=>d.severity!=="error")?{ok:!0,diagnostics:r,formattedText:i,needsFormat:!1,skipped:s}:{ok:!1,diagnostics:r,formattedText:i,needsFormat:o,skipped:s}}function ci(e,t){return!e.isBtXml}async function pi(e){let t=e.inputs.map(s=>{let a=ee(s.text,{uri:s.uri,path:s.path,kind:s.kind});return{input:s,result:a}}),n=t.flatMap(({result:s})=>s.document&&!ci(s.document,e)?[s.document]:[]),r=Ie(n,{config:e.config}),i=t.map(({input:s,result:a})=>{let d=a.document;if(!a.ok)return{uri:s.uri,path:s.path,diagnostics:a.diagnostics,skipped:!1,formatted:!1};if(d&&ci(d,e))return{uri:s.uri,path:s.path,diagnostics:[],skipped:!0,skipReason:"not detected as BT XML",formatted:!1};let u=d&&At(r.index,d.uri)?ae(s.text,{config:e.config,uri:s.uri,path:s.path}).diagnostics:a.diagnostics;return{uri:s.uri,path:s.path,diagnostics:u,skipped:!1,formatted:!1}}),o={files:i.length,errors:r.diagnostics.filter(s=>s.severity===b.Error).length+i.flatMap(s=>s.diagnostics).filter(s=>s.severity===b.Error).length,warnings:r.diagnostics.filter(s=>s.severity===b.Warning).length+i.flatMap(s=>s.diagnostics).filter(s=>s.severity===b.Warning).length,infos:r.diagnostics.filter(s=>s.severity===b.Info).length+i.flatMap(s=>s.diagnostics).filter(s=>s.severity===b.Info).length};return{ok:o.errors===0,files:i,projectDiagnostics:r.diagnostics,summary:o}}import{z as c}from"zod";var mi=c.object({line:c.number(),character:c.number(),offset:c.number()}).strict(),rn=c.object({start:mi,end:mi}).strict(),Hs=c.object({primaryLabel:c.string().optional(),help:c.string().optional(),notes:c.array(c.string()).optional()}).strict(),Zs=c.object({uri:c.string(),range:rn,message:c.string()}).strict(),fi=c.object({code:c.string(),rule:c.string().optional(),severity:c.enum(["error","warning","info"]),message:c.string(),uri:c.string(),range:rn.optional(),relatedInformation:c.array(Zs).optional(),suppressed:c.boolean().optional(),details:Hs.optional(),data:c.record(c.string(),c.unknown()).optional()}).strict(),Js=c.object({path:c.string(),diagnostics:c.array(fi),needsFormat:c.boolean().optional(),skipped:c.boolean().optional(),skipReason:c.string().optional()}).strict(),Qs=c.object({ok:c.boolean(),version:c.literal(2),schemaVersion:c.literal("2"),toolVersion:c.string(),project:c.record(c.string(),c.unknown()),projectDiagnostics:c.array(fi),files:c.array(Js),summary:c.object({files:c.number(),errors:c.number(),warnings:c.number(),infos:c.number(),suppressed:c.number(),baselineFiltered:c.number()}).strict()}).strict(),ct=c.object({definitionId:c.string(),uri:c.string().optional(),range:rn.optional()}).strict(),ea=ct.extend({sourceKind:c.string(),kind:c.string(),signatureId:c.string(),signatureText:c.string()}).strict(),ta=c.object({id:c.string(),signatureKey:c.string(),signatureText:c.string(),definitions:c.array(ct),editableDefinitions:c.array(ct),nonEditableDefinitions:c.array(ct)}).strict(),na=c.object({files:c.number(),definitions:c.number(),edits:c.number(),affectedUris:c.array(c.string())}).strict(),ra=c.object({id:c.string(),title:c.string(),description:c.string(),kind:c.enum(["match-signature","keep-model-definition","keep-port-definition","manual","skip"]),applicable:c.boolean(),targetSignatureId:c.string().optional(),editSummary:na,workspaceEdits:c.array(c.unknown()).optional(),usageImpact:c.unknown().optional(),warnings:c.array(c.string()).optional()}).strict(),ia=c.object({nodeId:c.string(),totalUsages:c.number(),byPort:c.record(c.string(),c.unknown())}).strict(),oa=c.object({key:c.string(),label:c.string()}).strict(),sa=c.object({id:c.string(),kind:c.enum(["model-signature-conflict","duplicate-model-id","duplicate-port-name"]),nodeId:c.string(),portName:c.string().optional(),displayName:c.string(),codes:c.array(c.string()),severity:c.enum(["error","warning"]),pairwiseConflictCount:c.number(),definitions:c.array(ea),signatures:c.array(ta),differences:c.array(c.unknown()),usageEvidence:ia,usageImpacts:c.array(c.unknown()),differencePattern:oa,actions:c.array(ra)}).strict(),aa=c.object({ok:c.boolean(),version:c.literal(2),schemaVersion:c.literal("2"),toolVersion:c.string(),groups:c.array(sa),summary:c.object({groups:c.number(),signatureConflictGroups:c.number(),duplicateModelGroups:c.number(),duplicatePortGroups:c.number(),pairwiseSignatureConflicts:c.number(),errors:c.number(),warnings:c.number()}).strict()}).strict();export{pi as checkBtWorkspace,ui as checkBtXml,Ct as createInitConfig,he as formatBtXml,He as getEffectiveConfigForFile,It as getEffectiveConfigForUri,Qs as jsonCheckReportSchema,aa as jsonRepairReportSchema,Nt as normalizeBtxmlConfig,Ne as parseBtxmlConfig,ae as validateBtXml};
8
+ `);let l=s.join(u),p=u.replace(/\\/g,"\\\\").replace(/\r/g,"\\r").replace(/\n/g,"\\n"),m=new RegExp(`(?:${p})+$`,"u"),k=`${l.replace(m,"")}${u}`;return{ok:!0,text:k,changed:k!==e,skipped:!1,diagnostics:n.diagnostics.filter(h=>h.severity!==S.Error)}}function Tt(e,t){let n=e.valueOffsets;return!n||n.length===0?t:t<=0?0:t>=n.length?n[n.length-1]??0:n[t]??0}function vt(e,t,n){let r=t.valueContentRange??t.valueRange,i=Tt(t,n.start),o=Tt(t,n.end),a=I(e.originalText,r.start.offset+i),s=I(e.originalText,r.start.offset+o);return v(a,s)}import{z as Ye}from"zod";var y={InvalidScriptSyntax:"BT401_INVALID_SCRIPT_SYNTAX",EmptyScript:"BT402_EMPTY_SCRIPT",InvalidScriptToken:"BT403_INVALID_SCRIPT_TOKEN",UnknownScriptVariable:"BT404_UNKNOWN_SCRIPT_VARIABLE",AssignmentToUnknownVariable:"BT405_ASSIGNMENT_TO_UNKNOWN_VARIABLE",InvalidCompoundAssignment:"BT406_INVALID_COMPOUND_ASSIGNMENT",InvalidScriptOperandType:"BT407_INVALID_SCRIPT_OPERAND_TYPE",ScriptResultNotBoolCompatible:"BT408_SCRIPT_RESULT_NOT_BOOL_COMPATIBLE",ScriptVariableTypeMismatch:"BT410_SCRIPT_VARIABLE_TYPE_MISMATCH",InvalidGlobalBlackboardIdentifier:"BT411_INVALID_GLOBAL_BLACKBOARD_IDENTIFIER",InvalidRootElement:"BT001_INVALID_ROOT_ELEMENT",MissingBTCPPFormat:"BT002_MISSING_BTCPP_FORMAT",MissingBehaviorTreeID:"BT003_MISSING_BEHAVIOR_TREE_ID",DuplicateBehaviorTreeID:"BT004_DUPLICATE_BEHAVIOR_TREE_ID",UnknownSubTree:"BT005_UNKNOWN_SUBTREE",DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID",MissingPortName:"BT007_MISSING_PORT_NAME",DuplicatePortName:"BT008_DUPLICATE_PORT_NAME",UnknownTopLevelElement:"BT009_UNKNOWN_TOP_LEVEL_ELEMENT",UnknownMainTree:"BT010_UNKNOWN_MAIN_TREE",AmbiguousSubTree:"BT011_AMBIGUOUS_SUBTREE",ConflictingNodeModel:"BT012_CONFLICTING_NODE_MODEL",DuplicateBehaviorTreeIdInWorkspace:"BT013_DUPLICATE_BEHAVIOR_TREE_ID_IN_WORKSPACE",MissingIncludePath:"BT301_MISSING_INCLUDE_PATH",IncludeNotFound:"BT302_INCLUDE_NOT_FOUND",IncludeCycle:"BT303_INCLUDE_CYCLE",UnresolvedIncludePathVariable:"BT304_UNRESOLVED_INCLUDE_PATH_VARIABLE",IncludeOutsideWorkspace:"BT306_INCLUDE_OUTSIDE_WORKSPACE",ExternalIncludeUsed:"BT307_EXTERNAL_INCLUDE_USED",IncludeDepthExceeded:"BT309_INCLUDE_DEPTH_EXCEEDED",TooManyResolvedFiles:"BT310_TOO_MANY_RESOLVED_FILES",EntrypointNotFound:"BT311_ENTRYPOINT_NOT_FOUND",RosPackageResolverMissing:"BT312_ROS_PACKAGE_RESOLVER_MISSING",RosPackageNotFound:"BT313_ROS_PACKAGE_NOT_FOUND",UnknownNode:"BT105_UNKNOWN_NODE",MissingRequiredPort:"BT101_MISSING_REQUIRED_PORT",UnknownPort:"BT102_UNKNOWN_PORT",InvalidPortValueType:"BT103_INVALID_PORT_VALUE_TYPE",ChildCapableNodeSelfClosing:"BT108_CHILD_CAPABLE_NODE_SELF_CLOSING",LeafNodeOpenClose:"BT109_LEAF_NODE_OPEN_CLOSE",InvalidChildCount:"BT110_INVALID_CHILD_COUNT",BlackboardTypeMismatch:"BT111_BLACKBOARD_TYPE_MISMATCH",CustomLiteralRequiresValidator:"BT112_CUSTOM_LITERAL_REQUIRES_VALIDATOR",InvalidPortDefaultValue:"BT114_INVALID_PORT_DEFAULT_VALUE",OutputPortRequiresRemap:"BT115_OUTPUT_PORT_REQUIRES_REMAP",InvalidPortName:"BT116_INVALID_PORT_NAME",AugmentTargetNotFound:"BT117_AUGMENT_TARGET_NOT_FOUND",AugmentPortNotFound:"BT118_AUGMENT_PORT_NOT_FOUND",InvalidTypeRefinement:"BT119_INVALID_TYPE_REFINEMENT",ConflictingModelKind:"BT120_CONFLICTING_MODEL_KIND",UnusedModelDefinition:"BT121_UNUSED_MODEL_DEFINITION",DuplicateModelDefinition:"BT122_DUPLICATE_MODEL_DEFINITION",ExternalModelFileNotFound:"BT321_EXTERNAL_MODEL_FILE_NOT_FOUND",AugmentationFileNotFound:"BT324_AUGMENTATION_FILE_NOT_FOUND",MissingTreeNodesModel:"BT322_MISSING_TREENODESMODEL",ExternalModelXmlParseError:"BT323_EXTERNAL_MODEL_XML_PARSE_ERROR",NodeDefinitionFileNotFound:"BT331_NODE_DEFINITION_FILE_NOT_FOUND",InvalidNodeDefinitionJson:"BT332_INVALID_NODE_DEFINITION_JSON",InvalidNodeDefinitionSchema:"BT333_INVALID_NODE_DEFINITION_SCHEMA",DuplicateNodeDefinitionId:"BT334_DUPLICATE_NODE_DEFINITION_ID",InvalidAugmentationJson:"BT335_INVALID_AUGMENTATION_JSON",InvalidAugmentationSchema:"BT336_INVALID_AUGMENTATION_SCHEMA",ConflictingPortDefault:"BT107_CONFLICTING_PORT_DEFAULT",UnusedSuppression:"BT351_UNUSED_SUPPRESSION",MissingSuppressionReason:"BT353_MISSING_SUPPRESSION_REASON"},sd=Object.values(y).sort();var Vi=Ye.object({subTreePorts:Ye.enum(["loose","strict"]).optional()}).strict(),Fi=Ye.object({allowStringEntryCompatibility:Ye.boolean().optional()}).strict(),hn={"script/valid-syntax":{code:y.InvalidScriptSyntax,defaultSeverity:"error",description:"Script-bearing attributes must parse as valid BT.CPP scripts."},"script/no-unknown-variable":{code:y.UnknownScriptVariable,defaultSeverity:"warn",description:"Script-bearing attributes should not reference unknown variables."},"script/valid-assignment":{code:y.AssignmentToUnknownVariable,codes:[y.AssignmentToUnknownVariable,y.InvalidCompoundAssignment,y.ScriptVariableTypeMismatch,y.InvalidGlobalBlackboardIdentifier],defaultSeverity:"error",description:"Script assignments must target known variables and use compatible types."},"script/valid-expression-type":{code:y.InvalidScriptOperandType,defaultSeverity:"error",description:"Script expressions must use operators with compatible operand types."},"script/valid-result-type":{code:y.ScriptResultNotBoolCompatible,defaultSeverity:"error",description:"Condition-style script attributes must have a bool-compatible inferred result."},"xml/valid-root":{code:y.InvalidRootElement,defaultSeverity:"error",description:"Root element must be <root>."},"xml/require-btcpp-format":{code:y.MissingBTCPPFormat,defaultSeverity:"warn",description:'Root element must declare BTCPP_format="4".'},"tree/require-id":{code:y.MissingBehaviorTreeID,defaultSeverity:"error",description:"BehaviorTree elements require an ID attribute."},"tree/no-duplicate-id-in-file":{code:y.DuplicateBehaviorTreeID,defaultSeverity:"error",description:"BehaviorTree IDs must be unique within a file."},"tree/no-duplicate-id":{code:y.DuplicateBehaviorTreeIdInWorkspace,defaultSeverity:"error",description:"BehaviorTree IDs must be unique across the workspace."},"tree/no-unknown-subtree":{code:y.UnknownSubTree,defaultSeverity:"error",description:"A SubTree must resolve to a BehaviorTree or a configured model."},"tree/no-unknown-main-tree":{code:y.UnknownMainTree,defaultSeverity:"error",description:"main_tree_to_execute must reference a known BehaviorTree."},"tree/no-ambiguous-subtree":{code:y.AmbiguousSubTree,defaultSeverity:"error",description:"SubTree references must resolve to a single definition."},"tree/no-duplicate-node-model-id":{code:y.DuplicateNodeModelId,defaultSeverity:"error",description:"TreeNodesModel elements must have unique IDs within the same model block."},"xml/no-unknown-top-level-element":{code:y.UnknownTopLevelElement,defaultSeverity:"warn",description:"Top-level elements must be BehaviorTree, TreeNodesModel, or configured include elements."},"include/require-path":{code:y.MissingIncludePath,defaultSeverity:"error",description:"include elements require a path attribute."},"include/no-missing-file":{code:y.IncludeNotFound,defaultSeverity:"error",description:"Referenced include file does not exist."},"include/no-cycle":{code:y.IncludeCycle,defaultSeverity:"error",description:"Include graph cycles are not allowed."},"include/no-outside-root":{code:y.IncludeOutsideWorkspace,defaultSeverity:"error",description:"Includes must stay within the workspace root."},"include/no-unresolved-variable":{code:y.UnresolvedIncludePathVariable,defaultSeverity:"error",description:"Include path variables must resolve before lookup."},"include/no-depth-exceeded":{code:y.IncludeDepthExceeded,defaultSeverity:"error",description:"Include resolution must stay within the configured maximum depth."},"include/no-too-many-files":{code:y.TooManyResolvedFiles,defaultSeverity:"error",description:"Include resolution must stay within the configured file limit."},"include/require-ros-package-resolver":{code:y.RosPackageResolverMissing,defaultSeverity:"error",description:"When include uses ros_pkg, a host resolvePackageUri capability must be provided."},"include/no-missing-ros-package":{code:y.RosPackageNotFound,defaultSeverity:"error",description:"ros_pkg include must resolve to an existing ROS package root URI."},"include/report-external-used":{code:y.ExternalIncludeUsed,defaultSeverity:"info",description:"Reports when an allowed include resolves outside the workspace root."},"model/no-unknown-node":{code:y.UnknownNode,defaultSeverity:"warn",description:"Node usages must resolve to a known model."},"model/require-port":{code:y.MissingRequiredPort,defaultSeverity:"error",description:"Required ports must be supplied."},"model/require-port-name":{code:y.MissingPortName,defaultSeverity:"error",description:"Port elements require a name attribute."},"model/no-duplicate-port-name":{code:y.DuplicatePortName,defaultSeverity:"error",description:"Ports with the same name are not allowed."},"model/valid-port-name":{code:y.InvalidPortName,defaultSeverity:"error",description:"Port names must be valid XML attribute names for BT nodes."},"model/no-unknown-port":{code:y.UnknownPort,defaultSeverity:"warn",optionsSchema:Vi,options:[{name:"subTreePorts",type:'"loose" | "strict"',default:"loose",description:"Controls whether SubTree remap attributes are checked strictly."}],description:"Reports ports that are not declared by the resolved node model."},"model/valid-port-value":{code:y.InvalidPortValueType,defaultSeverity:"error",description:"Port values must match the declared type."},"model/no-blackboard-type-mismatch":{code:y.BlackboardTypeMismatch,defaultSeverity:"error",optionsSchema:Fi,options:[{name:"allowStringEntryCompatibility",type:"boolean",default:"true",description:"Treat std::string blackboard entries as runtime-compatible with other port types, matching BT.CPP's existing-entry special case."}],description:"Blackboard entries must not mix incompatible resolved port types."},"model/valid-port-default-value":{code:y.InvalidPortDefaultValue,defaultSeverity:"error",description:"TreeNodesModel port defaults must match the declared type."},"model/require-output-port-remap":{code:y.OutputPortRequiresRemap,defaultSeverity:"warn",description:"Resolved output ports must write to a blackboard remap."},"model/no-childless-control-shape-mismatch":{code:y.ChildCapableNodeSelfClosing,defaultSeverity:"warn",description:"Control and decorator nodes should normally use open/close tags."},"model/no-leaf-block-shape":{code:y.LeafNodeOpenClose,defaultSeverity:"warn",description:"Leaf nodes should normally be self-closing unless they contain child nodes."},"model/valid-child-count":{code:y.InvalidChildCount,defaultSeverity:"warn",description:"Child count must match the expected count for the node kind (Action/Condition: 0, Decorator: 1, Control: >=1, special builtins: fixed range)."},"model/no-conflicting-definition":{code:y.ConflictingNodeModel,defaultSeverity:"error",description:"Node model definitions must agree on kind and port shape."},"model/no-conflicting-kind-for-id":{code:y.ConflictingModelKind,defaultSeverity:"error",description:"A model ID must not be defined with different kinds."},"model/no-unused-definition":{code:y.UnusedModelDefinition,defaultSeverity:"error",description:"Inline model definitions should be used in the same BT XML file."},"model/no-duplicate-definition":{code:y.DuplicateModelDefinition,defaultSeverity:"error",description:"A user-defined model (ID, kind) should be defined only once."},"suppression/no-unused":{code:y.UnusedSuppression,defaultSeverity:"warn",description:"Suppressions should match at least one diagnostic."},"suppression/require-reason":{code:y.MissingSuppressionReason,defaultSeverity:"off",description:"Suppressions should include a reason when required."}};var He=["off","info","warn","error"];var Tn={linter:{rules:{"xml/require-btcpp-format":"error","xml/no-unknown-top-level-element":"error","model/no-unknown-node":"error","model/no-unknown-port":["error",{subTreePorts:"strict"}],"script/no-unknown-variable":"error","model/no-childless-control-shape-mismatch":"error","model/no-leaf-block-shape":"error","model/valid-child-count":"error","suppression/no-unused":"error","suppression/require-reason":"warn"}}},qi={files:{include:["**/*.xml"],ignore:["build/**","install/**","log/**","node_modules/**",".git/**"],useGitignore:!0,followSymlinks:!1,maxSize:5*1024*1024},resolver:{entrypoints:[],includes:{elements:[{name:"include",attribute:"path",base:"file"}],variables:{},allowOutsideRoot:!1,maxDepth:32,maxFiles:1e3},behaviorTreeIds:"workspace-unique"},models:{builtins:["btcpp-v4"],files:[],augmentations:[],definitions:[],inline:{},convention:"allow-unused"},linter:{enabled:!0,rules:{},baseline:void 0,suppressions:{inline:"allow"}},formatter:{indentWidth:2,xmlDeclaration:"always",blankLineBetweenBehaviorTrees:!0,lineEnding:"lf"},overrides:[]};function Rt(){return structuredClone(qi)}function De(e,t){return{files:t.files?{...e.files,...t.files}:e.files,resolver:t.resolver?{...e.resolver,...t.resolver,includes:{...e.resolver.includes,...t.resolver.includes||{},variables:{...e.resolver.includes.variables,...t.resolver.includes?.variables||{}}}}:e.resolver,models:t.models?{...e.models,...t.models}:e.models,linter:t.linter?{...e.linter,...t.linter,rules:t.linter.rules?{...e.linter.rules,...t.linter.rules}:e.linter.rules,suppressions:t.linter.suppressions?{...e.linter.suppressions,...t.linter.suppressions}:e.linter.suppressions}:e.linter,formatter:t.formatter?{...e.formatter,...t.formatter}:e.formatter,overrides:t.overrides?[...e.overrides,...t.overrides]:e.overrides}}var Xi=/^[A-Za-z_][A-Za-z0-9_./:-]*$/;function kt(e){return{ok:!0,reference:e}}function J(e,t,n){return{ok:!1,error:{kind:e,raw:t,message:n}}}function vn(e){return Xi.test(e)}function Rn(e){if(!e)return J("empty-key",e,"Blackboard reference key must not be empty");if(e[0]==="@"){let t=e.slice(1);return t?vn(t)?{ok:!0,scope:"global",key:t}:J("invalid-global-key",e,`Invalid global blackboard reference key: ${e}`):J("empty-key",e,"Global blackboard reference key must not be empty")}return vn(e)?{ok:!0,scope:"local",key:e}:J("invalid-key",e,`Invalid blackboard reference key: ${e}`)}function A(e){let{portName:t}=e,n=e.rawValue.trim();if(n==="="||n==="{=}")return kt({scope:"local",key:t,raw:n,syntax:"shorthand"});if(!n.startsWith("{")&&!n.endsWith("}"))return J("not-a-reference",n,`Not a blackboard reference: ${n}`);if(!(n.startsWith("{")&&n.endsWith("}")))return J("unbalanced-braces",n,`Unbalanced blackboard reference braces: ${n}`);let r=n.slice(1,-1).trim(),i=Rn(r);return i.ok?kt({scope:i.scope,key:i.key,raw:n,syntax:"braced"}):i}function Ze(e){let{rawName:t}=e;if(!t.startsWith("@"))return J("not-a-reference",t,`Not a script blackboard identifier: ${t}`);let n=Rn(t);return n.ok?n.scope!=="global"?J("not-a-reference",t,`Script blackboard identifiers must use the global scope marker: ${t}`):kt({scope:n.scope,key:n.key,raw:t,syntax:"script"}):n}function Je(e){return e.scope==="global"?`{@${e.key}}`:`{${e.key}}`}function Z(e){return`${e.scope}:${e.key}`}var $i={DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID"};function ji(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function U(e,t){return e.attributes.find(n=>n.name===t)}function zi(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function Gi(e){if(e)return{uri:e.uri,range:e.range,value:e.value}}function Ki(e,t="inline-tree-nodes-model"){return e.kind==="model-document"?"external-tree-nodes-model":t}function kn(e,t){let n=e.line,r=e.character,i=e.offset;for(let o of t){if(i+=o.length,o===`
9
+ `){n+=1,r=0;continue}r+=o.length}return{line:n,character:r,offset:i}}function Wi(e,t,n){let r=kn(e,t),i=kn(r,n);return{start:r,end:i}}function xn(e,t,n,r){for(let i of e.attributes||[]){let o=i.valueContentRange??i.valueRange,a=r.slice(o.start.offset,o.end.offset),s=u=>{let l=A({portName:i.name,rawValue:u.parsedRaw});if(!l.ok)return;let p=l.reference.raw.length;t.push({raw:l.reference.raw,key:l.reference.key,scope:l.reference.scope,identity:Z(l.reference),syntax:l.reference.syntax,attributeName:i.name,element:e,uri:n,range:Wi(o.start,a.slice(0,u.parsedOffset),l.reference.raw.slice(0,p))})},d=A({portName:i.name,rawValue:a});if(d.ok){let u=Math.max(0,a.indexOf(d.reference.raw));s({parsedRaw:d.reference.raw,parsedOffset:u});continue}for(let u of a.matchAll(/\{[^}]*\}/g)){let l=u[0],p=u.index??0;s({parsedRaw:l,parsedOffset:p})}}for(let i of e.children||[])i.kind==="element"&&xn(i,t,n,r)}function Yi(e,t,n,r){let i=[];for(let o of e.children||[]){if(o.kind!=="element"||!zi(o.name))continue;let a=U(o,"ID");if(!a)continue;let s=[];for(let d of o.children||[]){if(d.kind!=="element"||d.name!=="input_port"&&d.name!=="output_port"&&d.name!=="inout_port")continue;let u=U(d,"name"),l=U(d,"type"),p=U(d,"default")||U(d,"default_value"),m=U(d,"enum"),g=(d.children||[]).filter(E=>E.kind==="text").map(E=>E.text).join("").trim()||void 0,k=d.name==="input_port"?"input":d.name==="output_port"?"output":"inout",h=(k==="input"||k==="inout")&&p===void 0;s.push({source:n,direction:k,name:u?u.value:"",type:l?.value||void 0,defaultValue:p?.value||void 0,description:g,required:h,element:d,uri:t,range:d.range,nameRange:u?.range,enum:m?.value?m.value.split(";"):void 0})}i.push({id:a.value,kind:o.name,source:n,sourceMeta:{sourceKind:n,file:t,range:o.range},editable:r,ports:s,element:o,uri:t,range:o.range,elementRange:o.range,idRange:a.range})}return i}function Hi(e,t){let n=[];for(let r of e.children||[]){if(r.kind!=="element"||r.name!=="BehaviorTree")continue;let i=U(r,"ID");i&&n.push({id:i.value,kind:"BehaviorTree",uri:t,element:r,range:r.range,elementRange:r.range,idRange:i.range})}return n}function Zi(e,t){let n=[],r=(i,o,a=!1)=>{if(a)return;let s=i.name==="BehaviorTree"?U(i,"ID")?.value??o:o,d=i.name==="TreeNodesModel";if(i.name==="SubTree"){let u=U(i,"ID");u&&n.push({id:u.value,uri:t,element:i,range:i.range,elementRange:i.range,idRange:u.range,parentBehaviorTreeId:s,attributes:i.attributes})}for(let u of i.children||[])u.kind==="element"&&r(u,s,d)};if(e.name==="TreeNodesModel")return n;for(let i of e.children||[])i.kind==="element"&&r(i);return n}function Ji(e){return{id:e.id,kind:e.kind,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange}}function Dn(e){return{source:e.source,direction:e.direction,name:e.name,type:e.type,defaultValue:e.defaultValue,description:e.description,required:e.required,uri:e.uri,range:e.range,nameRange:e.nameRange,enum:e.enum?[...e.enum]:void 0}}function Qi(e){return{id:e.id,kind:e.kind,editable:e.editable,ports:e.ports.map(Dn),source:e.source,sourceMeta:e.sourceMeta?{sourceKind:e.sourceMeta.sourceKind,file:e.sourceMeta.file,range:e.sourceMeta.range}:void 0,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange}}function eo(e){return{id:e.id,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange,parentBehaviorTreeId:e.parentBehaviorTreeId}}function to(e){return{id:e.id,uri:e.uri,kind:e.kind,range:e.range,elementRange:e.elementRange,parentBehaviorTreeId:e.parentBehaviorTreeId}}function no(e){return{raw:e.raw,key:e.key,scope:e.scope,identity:e.identity,syntax:e.syntax,attributeName:e.attributeName,uri:e.uri,range:e.range}}function ro(e){return{uri:e.uri,path:e.path,isBtXml:e.isBtXml,kind:e.kind,behaviorTrees:e.behaviorTrees.map(Ji),subtreeReferences:e.subtreeReferences.map(eo),nodeUsages:e.nodeUsages.map(to),blackboardReferences:e.blackboardReferences.map(no),treeNodesModel:e.treeNodesModel.map(Qi),genericSubTreePorts:e.genericSubTreePorts.map(Dn),rootMainTreeToExecute:Gi(e.rootMainTreeToExecute)}}function io(e,t){if(e.name==="TreeNodesModel")return[];let n=[],r=(i,o,a=!1)=>{if(a)return;let s=i.name==="TreeNodesModel",d=i.name==="BehaviorTree"?U(i,"ID")?.value??o:o,u=d!==void 0;if(i.name==="SubTree"){let l=U(i,"ID");l&&u&&n.push({id:l.value,kind:"SubTree",uri:t,range:i.range,elementRange:i.range,parentBehaviorTreeId:d})}else u&&i.name!=="root"&&i.name!=="BehaviorTree"&&i.name!=="TreeNodesModel"&&n.push({id:i.name,kind:"node",uri:t,range:i.range,elementRange:i.range,parentBehaviorTreeId:d});for(let l of i.children||[])l.kind==="element"&&r(l,d,s)};for(let i of e.children||[])i.kind==="element"&&r(i);return n}function oo(e){return e.node.kind==="SubTree"&&e.node.id==="SubTree"?(e.genericSubTreePorts.push(...e.node.ports),!0):(e.treeNodesModel.push(e.node),!1)}function ao(e){return P($i.DuplicateNodeModelId,S.Error,`duplicate node model ID \`${e.id}\``,e.idRange||e.range,e.uri,{primaryLabel:"this node model ID is already defined in the same model source",help:"merge the duplicate definitions or rename one of them"})}function so(e,t){let n=[],r=t?.uri||e.uri,i=e.root,o=e.isBtXml,a=ji(e),s=Ki(e),d=((t?.path??e.path)||r==="")&&e.kind==="model-document"?!0:e.kind!=="model-document",u=i&&e.kind!=="model-document"?Hi(i,r):[],l=[],p=[],m=i?i.name==="TreeNodesModel"?[i]:i.children.filter(M=>M.kind==="element"&&M.name==="TreeNodesModel"):[];for(let M of m){let F=Yi(M,r,s,d),w=new Map;for(let G of F)oo({node:G,treeNodesModel:l,genericSubTreePorts:p})||(w.has(G.id)?n.push(ao(G)):w.set(G.id,G))}let g=i?Zi(i,r):[],k=i?io(i,r):[],h=i?(()=>{let M=[];return xn(i,M,r,e.originalText),M})():[],E=i?U(i,"main_tree_to_execute"):void 0;return{extracted:{publicModel:ro({uri:r,path:t?.path??e.path,isBtXml:o,kind:a,behaviorTrees:u,subtreeReferences:g,nodeUsages:k,blackboardReferences:h,treeNodesModel:l,genericSubTreePorts:p,rootMainTreeToExecute:E?{uri:r,range:E.range,value:E.value}:void 0}),extractedBehaviorTrees:u,extractedTreeNodesModel:l,extractedSubTreeReferences:g,extractedBlackboardReferences:h},diagnostics:n}}function Nn(e,t){let{extracted:n,diagnostics:r}=so(e,t);return{model:n.publicModel,diagnostics:r}}function xt(e,t){return Nn(e,t)}var En=new Set(["ID","name","_name","_autoremap","_failureIf","_successIf","_skipIf","_while","_onSuccess","_onFailure","_onHalted","_post"]),lo=new Set([...En,"_autoremap","_description","__shared_blackboard"]),uo=new Map([[".","port names must not contain `.`"],["<","port names must not contain `<`"],[">","port names must not contain `>`"],["&","port names must not contain `&`"],['"','port names must not contain `"`'],["'","port names must not contain `'`"],["/","port names must not contain `/`"],["\\","port names must not contain `\\`"],[":","port names must not contain `:`"],["*","port names must not contain `*`"],["?","port names must not contain `?`"],["|","port names must not contain `|`"]]);function Dt(e){return En.has(e)}function Bn(e){return lo.has(e)}function Nt(e){if(e.length===0)return"port names must not be empty";if(/^[0-9]/.test(e))return"port names must not start with a digit";if(Bn(e))return`\`${e}\` is a reserved attribute name`;for(let t of e){let n=t.charCodeAt(0);if(n<=31||n===127)return"port names must not contain ASCII control characters";if(t===" "||t===" "||t===`
10
+ `||t==="\r")return"port names must not contain whitespace";let r=uo.get(t);if(r)return r}}function In(e,t){let n=t.direction??"input";return{source:"config",name:e,direction:n,type:t.type,defaultValue:t.default,description:t.description,required:t.required??((n==="input"||n==="inout")&&t.default===void 0),enum:t.enum}}function Et(e,t){return{id:e,kind:t.kind,source:"config",sourceMeta:{sourceKind:"config"},editable:!0,ports:Object.entries(t.ports??{}).map(([n,r])=>In(n,r))}}var co=[{name:"std::string",kind:"primitive",aliases:["string"]},{name:"bool",kind:"primitive",aliases:[]},{name:"int8_t",kind:"primitive",aliases:["std::int8_t"]},{name:"int16_t",kind:"primitive",aliases:["std::int16_t"]},{name:"int32",kind:"primitive",aliases:["int","int32_t","std::int32_t"]},{name:"int64_t",kind:"primitive",aliases:["long","int64","std::int64_t"]},{name:"short",kind:"primitive",aliases:[]},{name:"uint8_t",kind:"primitive",aliases:["std::uint8_t"]},{name:"uint16_t",kind:"primitive",aliases:["std::uint16_t"]},{name:"uint32",kind:"primitive",aliases:["uint","unsigned","unsigned int","uint32_t","std::uint32_t"]},{name:"uint64_t",kind:"primitive",aliases:["uint64","std::uint64_t","size_t","std::size_t"]},{name:"float",kind:"primitive",aliases:[]},{name:"double",kind:"primitive",aliases:[]},{name:"BT::NodeStatus",kind:"primitive",aliases:["NodeStatus"]},{name:"BT::Any",kind:"any",aliases:["BT::AnyTypeAllowed","BT::AnyType","Any"]}],Ne=new Map,Cn=new Map;for(let e of co){let t={name:e.name,kind:e.kind,canonical:e.name,aliases:e.aliases,compatibleWith:[],source:"builtin"};Cn.set(e.name,t),Ne.set(e.name,e.name);for(let n of e.aliases)Ne.set(n,e.name)}function po(e,t,n){return{name:e,kind:n.kind,canonical:t,aliases:new Set([e,t,...n.aliases??[]]),compatibleWith:new Set(n.compatibleWith??[]),validate:n.validate,source:"augmentation"}}function Bt(e){return Ne.get(e)??e}function mo(e){return{name:e.name,kind:e.kind,canonical:e.canonical,aliases:[...e.aliases].filter(t=>t!==e.canonical),compatibleWith:[...e.compatibleWith],validate:e.validate,source:e.source}}function Ee(e){return Ne.get(e)}function be(e=[]){let t=new Map,n=new Map(Ne);for(let r of Cn.values())t.set(r.canonical,{name:r.name,kind:r.kind,canonical:r.canonical,aliases:new Set([r.name,r.canonical,...r.aliases]),compatibleWith:new Set(r.compatibleWith),validate:r.validate,source:r.source});for(let r of e)for(let[i,o]of Object.entries(r.types??{})){let a=Bt(o.canonical??i),d=t.get(a)??po(i,a,o);d.name=i,d.kind=o.kind,d.canonical=a,d.source="augmentation",d.validate=o.validate??d.validate,d.aliases.add(i),d.aliases.add(a);for(let u of o.aliases??[])d.aliases.add(u);for(let u of o.compatibleWith??[])d.compatibleWith.add(u);t.set(a,d),n.set(i,a),n.set(a,a);for(let u of o.aliases??[])n.set(u,a)}for(let r of t.values())r.compatibleWith=new Set([...r.compatibleWith].map(i=>n.get(i)??Bt(i))),r.compatibleWith.delete(r.canonical);return{entriesByCanonical:new Map([...t.entries()].map(([r,i])=>[r,mo(i)])),namesToCanonical:n}}function q(e,t){if(!t)return;let n=e.namesToCanonical.get(t)??Bt(t),r=e.entriesByCanonical.get(n);return r||{name:t,kind:"opaque",canonical:n,aliases:[],compatibleWith:[],source:"custom"}}function Qe(e,t){return q(e,t)?.canonical}function Be(e,t,n){let r=q(e,t),i=q(e,n);return!r||!i?!1:r.kind==="any"||i.kind==="any"||r.canonical===i.canonical?!0:r.compatibleWith.includes(i.canonical)||i.compatibleWith.includes(r.canonical)}var Mn=[{id:"AlwaysFailure",kind:"Action",ports:[]},{id:"AlwaysSuccess",kind:"Action",ports:[]},{id:"AsyncFallback",kind:"Control",ports:[]},{id:"AsyncSequence",kind:"Control",ports:[]},{id:"Delay",kind:"Decorator",ports:[{name:"delay_msec",direction:"input",type:"unsigned int",description:"Tick the child after a few milliseconds",required:!0}]},{id:"Fallback",kind:"Control",ports:[]},{id:"ForceFailure",kind:"Decorator",ports:[]},{id:"ForceSuccess",kind:"Decorator",ports:[]},{id:"IfThenElse",kind:"Control",ports:[]},{id:"Inverter",kind:"Decorator",ports:[]},{id:"KeepRunningUntilFailure",kind:"Decorator",ports:[]},{id:"LoopBool",kind:"Decorator",ports:[{name:"value",direction:"output",type:"bool",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<bool, std::allocator<bool> > >",required:!0}]},{id:"LoopDouble",kind:"Decorator",ports:[{name:"value",direction:"output",type:"double",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<double, std::allocator<double> > >",required:!0}]},{id:"LoopInt",kind:"Decorator",ports:[{name:"value",direction:"output",type:"int",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<int, std::allocator<int> > >",required:!0}]},{id:"LoopString",kind:"Decorator",ports:[{name:"value",direction:"output",type:"std::string",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >",required:!0}]},{id:"Parallel",kind:"Control",ports:[{name:"failure_count",direction:"input",type:"int",defaultValue:"1",description:"number of children that need to fail to trigger a FAILURE",required:!1},{name:"success_count",direction:"input",type:"int",defaultValue:"-1",description:"number of children that need to succeed to trigger a SUCCESS",required:!1}]},{id:"ParallelAll",kind:"Control",ports:[{name:"max_failures",direction:"input",type:"int",defaultValue:"1",description:"If the number of children returning FAILURE exceeds this value, ParallelAll returns FAILURE",required:!1}]},{id:"Precondition",kind:"Decorator",ports:[{name:"else",direction:"input",type:"BT::NodeStatus",defaultValue:"FAILURE",description:"Return status if condition is false",required:!1},{name:"if",direction:"input",type:"std::string",required:!0}]},{id:"ReactiveFallback",kind:"Control",ports:[]},{id:"ReactiveSequence",kind:"Control",ports:[]},{id:"Repeat",kind:"Decorator",ports:[{name:"num_cycles",direction:"input",type:"int",description:"Repeat a successful child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RetryUntilSuccessful",kind:"Decorator",ports:[{name:"num_attempts",direction:"input",type:"int",description:"Execute again a failing child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RunOnce",kind:"Decorator",ports:[{name:"then_skip",direction:"input",type:"bool",defaultValue:"true",description:"If true, skip after the first execution, otherwise return the same NodeStatus returned once bu the child.",required:!1}]},{id:"Script",kind:"Action",ports:[{name:"code",direction:"input",type:"std::string",description:"Piece of code that can be parsed",required:!0}]},{id:"ScriptCondition",kind:"Condition",ports:[{name:"code",direction:"input",type:"BT::AnyTypeAllowed",description:"Piece of code that can be parsed. Must return false or true",required:!0}]},{id:"Sequence",kind:"Control",ports:[]},{id:"SequenceWithMemory",kind:"Control",ports:[]},{id:"SetBlackboard",kind:"Action",ports:[{name:"output_key",direction:"inout",type:"BT::AnyTypeAllowed",description:"Name of the blackboard entry where the value should be written",required:!0},{name:"value",direction:"input",type:"BT::AnyTypeAllowed",description:"Value to be written int othe output_key",required:!0}]},{id:"SkipUnlessUpdated",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"Sleep",kind:"Action",ports:[{name:"msec",direction:"input",type:"unsigned int",required:!0}]},{id:"Switch2",kind:"Control",ports:[{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch3",kind:"Control",ports:[{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch4",kind:"Control",ports:[{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch5",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch6",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_6",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Timeout",kind:"Decorator",ports:[{name:"msec",direction:"input",type:"unsigned int",description:"After a certain amount of time, halt() the child if it is still running.",required:!0}]},{id:"UnsetBlackboard",kind:"Action",ports:[{name:"key",direction:"input",type:"std::string",description:"Key of the entry to remove",required:!0}]},{id:"WaitValueUpdate",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WasEntryUpdated",kind:"Action",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WhileDoElse",kind:"Control",ports:[]}],_n={id:"SubTree",kind:"SubTree",ports:[{name:"_autoremap",direction:"input",type:"bool",defaultValue:"false",description:"If true, all the ports with the same name will be remapped",required:!1}]};var wn=[{id:"AlwaysFailure",kind:"Action",ports:[]},{id:"AlwaysSuccess",kind:"Action",ports:[]},{id:"AsyncFallback",kind:"Control",ports:[]},{id:"AsyncSequence",kind:"Control",ports:[]},{id:"Delay",kind:"Decorator",ports:[{name:"delay_msec",direction:"input",type:"unsigned int",description:"Tick the child after a few milliseconds",required:!0}]},{id:"Fallback",kind:"Control",ports:[]},{id:"ForceFailure",kind:"Decorator",ports:[]},{id:"ForceSuccess",kind:"Decorator",ports:[]},{id:"IfThenElse",kind:"Control",ports:[]},{id:"Inverter",kind:"Decorator",ports:[]},{id:"KeepRunningUntilFailure",kind:"Decorator",ports:[]},{id:"LoopBool",kind:"Decorator",ports:[{name:"value",direction:"output",type:"bool",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<bool, std::allocator<bool> > >",required:!0}]},{id:"LoopDouble",kind:"Decorator",ports:[{name:"value",direction:"output",type:"double",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<double, std::allocator<double> > >",required:!0}]},{id:"LoopInt",kind:"Decorator",ports:[{name:"value",direction:"output",type:"int",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<int, std::allocator<int> > >",required:!0}]},{id:"LoopString",kind:"Decorator",ports:[{name:"value",direction:"output",type:"std::string",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"std::shared_ptr<std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >",required:!0}]},{id:"Parallel",kind:"Control",ports:[{name:"failure_count",direction:"input",type:"int",defaultValue:"1",description:"number of children that need to fail to trigger a FAILURE",required:!1},{name:"success_count",direction:"input",type:"int",defaultValue:"-1",description:"number of children that need to succeed to trigger a SUCCESS",required:!1}]},{id:"ParallelAll",kind:"Control",ports:[{name:"max_failures",direction:"input",type:"int",defaultValue:"1",description:"If the number of children returning FAILURE exceeds this value, ParallelAll returns FAILURE",required:!1}]},{id:"Precondition",kind:"Decorator",ports:[{name:"else",direction:"input",type:"BT::NodeStatus",defaultValue:"FAILURE",description:"Return status if condition is false",required:!1},{name:"if",direction:"input",type:"std::string",required:!0}]},{id:"ReactiveFallback",kind:"Control",ports:[]},{id:"ReactiveSequence",kind:"Control",ports:[]},{id:"Repeat",kind:"Decorator",ports:[{name:"num_cycles",direction:"input",type:"int",description:"Repeat a successful child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RetryUntilSuccessful",kind:"Decorator",ports:[{name:"num_attempts",direction:"input",type:"int",description:"Execute again a failing child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RunOnce",kind:"Decorator",ports:[{name:"then_skip",direction:"input",type:"bool",defaultValue:"true",description:"If true, skip after the first execution, otherwise return the same NodeStatus returned once by the child.",required:!1}]},{id:"Script",kind:"Action",ports:[{name:"code",direction:"input",type:"std::string",description:"Piece of code that can be parsed",required:!0}]},{id:"ScriptCondition",kind:"Condition",ports:[{name:"code",direction:"input",type:"BT::AnyTypeAllowed",description:"Piece of code that can be parsed. Must return false or true",required:!0}]},{id:"Sequence",kind:"Control",ports:[]},{id:"SequenceWithMemory",kind:"Control",ports:[]},{id:"SetBlackboard",kind:"Action",ports:[{name:"output_key",direction:"inout",type:"BT::AnyTypeAllowed",description:"Name of the blackboard entry where the value should be written",required:!0},{name:"value",direction:"input",type:"BT::AnyTypeAllowed",description:"Value to be written into the output_key",required:!0}]},{id:"SkipUnlessUpdated",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"Sleep",kind:"Action",ports:[{name:"msec",direction:"input",type:"unsigned int",required:!0}]},{id:"Switch2",kind:"Control",ports:[{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch3",kind:"Control",ports:[{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch4",kind:"Control",ports:[{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch5",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch6",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_6",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Timeout",kind:"Decorator",ports:[{name:"msec",direction:"input",type:"unsigned int",description:"After a certain amount of time, halt() the child if it is still running.",required:!0}]},{id:"UnsetBlackboard",kind:"Action",ports:[{name:"key",direction:"input",type:"std::string",description:"Key of the entry to remove",required:!0}]},{id:"WaitValueUpdate",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WasEntryUpdated",kind:"Action",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WhileDoElse",kind:"Control",ports:[]}],Pn={id:"SubTree",kind:"SubTree",ports:[{name:"_autoremap",direction:"input",type:"bool",defaultValue:"false",description:"If true, all the ports with the same name will be remapped",required:!1}]};var An=[{id:"AlwaysFailure",kind:"Action",ports:[]},{id:"AlwaysSuccess",kind:"Action",ports:[]},{id:"AsyncFallback",kind:"Control",ports:[]},{id:"AsyncSequence",kind:"Control",ports:[]},{id:"Delay",kind:"Decorator",ports:[{name:"delay_msec",direction:"input",type:"unsigned int",description:"Tick the child after a few milliseconds",required:!0}]},{id:"Fallback",kind:"Control",ports:[]},{id:"ForceFailure",kind:"Decorator",ports:[]},{id:"ForceSuccess",kind:"Decorator",ports:[]},{id:"IfThenElse",kind:"Control",ports:[]},{id:"Inverter",kind:"Decorator",ports:[]},{id:"KeepRunningUntilFailure",kind:"Decorator",ports:[]},{id:"LoopBool",kind:"Decorator",ports:[{name:"value",direction:"output",type:"bool",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"LoopDouble",kind:"Decorator",ports:[{name:"value",direction:"output",type:"double",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"LoopInt",kind:"Decorator",ports:[{name:"value",direction:"output",type:"int",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"LoopString",kind:"Decorator",ports:[{name:"value",direction:"output",type:"std::string",required:!1},{name:"if_empty",direction:"input",type:"BT::NodeStatus",defaultValue:"SUCCESS",description:"Status to return if queue is empty: SUCCESS, FAILURE, SKIPPED",required:!1},{name:"queue",direction:"inout",type:"BT::AnyTypeAllowed",required:!0}]},{id:"Parallel",kind:"Control",ports:[{name:"failure_count",direction:"input",type:"int",defaultValue:"1",description:"number of children that need to fail to trigger a FAILURE",required:!1},{name:"success_count",direction:"input",type:"int",defaultValue:"-1",description:"number of children that need to succeed to trigger a SUCCESS",required:!1}]},{id:"ParallelAll",kind:"Control",ports:[{name:"max_failures",direction:"input",type:"int",defaultValue:"1",description:"If the number of children returning FAILURE exceeds this value, ParallelAll returns FAILURE",required:!1}]},{id:"Precondition",kind:"Decorator",ports:[{name:"else",direction:"input",type:"BT::NodeStatus",defaultValue:"FAILURE",description:"Return status if condition is false",required:!1},{name:"if",direction:"input",type:"std::string",required:!0}]},{id:"ReactiveFallback",kind:"Control",ports:[]},{id:"ReactiveSequence",kind:"Control",ports:[]},{id:"Repeat",kind:"Decorator",ports:[{name:"num_cycles",direction:"input",type:"int",description:"Repeat a successful child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RetryUntilSuccessful",kind:"Decorator",ports:[{name:"num_attempts",direction:"input",type:"int",description:"Execute again a failing child up to N times. Use -1 to create an infinite loop.",required:!0}]},{id:"RunOnce",kind:"Decorator",ports:[{name:"then_skip",direction:"input",type:"bool",defaultValue:"true",description:"If true, skip after the first execution, otherwise return the same NodeStatus returned once by the child.",required:!1}]},{id:"Script",kind:"Action",ports:[{name:"code",direction:"input",type:"std::string",description:"Piece of code that can be parsed",required:!0}]},{id:"ScriptCondition",kind:"Condition",ports:[{name:"code",direction:"input",type:"BT::AnyTypeAllowed",description:"Piece of code that can be parsed. Must return false or true",required:!0}]},{id:"Sequence",kind:"Control",ports:[]},{id:"SequenceWithMemory",kind:"Control",ports:[]},{id:"SetBlackboard",kind:"Action",ports:[{name:"output_key",direction:"inout",type:"BT::AnyTypeAllowed",description:"Name of the blackboard entry where the value should be written",required:!0},{name:"value",direction:"input",type:"BT::AnyTypeAllowed",description:"Value to be written into the output_key",required:!0}]},{id:"SkipUnlessUpdated",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"Sleep",kind:"Action",ports:[{name:"msec",direction:"input",type:"unsigned int",required:!0}]},{id:"Switch2",kind:"Control",ports:[{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch3",kind:"Control",ports:[{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch4",kind:"Control",ports:[{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch5",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Switch6",kind:"Control",ports:[{name:"case_5",direction:"input",type:"std::string",required:!0},{name:"case_4",direction:"input",type:"std::string",required:!0},{name:"case_6",direction:"input",type:"std::string",required:!0},{name:"case_3",direction:"input",type:"std::string",required:!0},{name:"case_2",direction:"input",type:"std::string",required:!0},{name:"case_1",direction:"input",type:"std::string",required:!0},{name:"variable",direction:"input",type:"std::string",required:!0}]},{id:"Timeout",kind:"Decorator",ports:[{name:"msec",direction:"input",type:"unsigned int",description:"After a certain amount of time, halt() the child if it is still running.",required:!0}]},{id:"TryCatch",kind:"Control",ports:[{name:"catch_on_halt",direction:"input",type:"bool",defaultValue:"false",description:"If true, execute the catch child when the node is halted during the try-block",required:!1}]},{id:"UnsetBlackboard",kind:"Action",ports:[{name:"key",direction:"input",type:"std::string",description:"Key of the entry to remove",required:!0}]},{id:"WaitValueUpdate",kind:"Decorator",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WasEntryUpdated",kind:"Action",ports:[{name:"entry",direction:"input",type:"BT::Any",description:"Entry to check",required:!0}]},{id:"WhileDoElse",kind:"Control",ports:[]}],Ln={id:"SubTree",kind:"SubTree",ports:[{name:"_autoremap",direction:"input",type:"bool",defaultValue:"false",description:"If true, all the ports with the same name will be remapped",required:!1}]};var Un=["4.6.2","4.8.2","4.9.0"],It="4.9.0",Ie={"4.6.2":{models:Mn,genericSubTreeModel:_n},"4.8.2":{models:wn,genericSubTreeModel:Pn},"4.9.0":{models:An,genericSubTreeModel:Ln}};var On=Un.map(e=>`btcpp-v${e}`),Ce=["btcpp-v4",...On],Vn=`btcpp-v${It}`;function Fn(e){return{source:"builtin",direction:e.direction,name:e.name,type:e.type,defaultValue:e.defaultValue,description:e.description,required:e.required,enum:e.enum}}function fo(e){return e.map(t=>({id:t.id,kind:t.kind,ports:t.ports.map(Fn)}))}function qn(e){if(e)return{id:e.id,kind:e.kind,ports:e.ports.map(Fn)}}function go(){let e={};for(let[t,n]of Object.entries(Ie))e[`btcpp-v${t}`]=fo(n.models);return e}function yo(){let e={};for(let[t,n]of Object.entries(Ie))e[`btcpp-v${t}`]=qn(n.genericSubTreeModel);return e}var bo=go(),So=yo();function ho(e){let t=e.replace(/^btcpp-v/,"");return Object.hasOwn(Ie,t)}function Xn(e){return e==="btcpp-v4"?Vn:e}function To(e){return e==="btcpp-v4"?It:e.replace(/^btcpp-v/,"")}function $n(e){if(e&&e!=="btcpp-v4"&&!ho(e))throw new Error(`unsupported builtin model set: ${e}`)}function Ct(e="btcpp-v4"){$n(e);let t=Xn(e);return bo[t].map(r=>jn(r))}function Mt(e="btcpp-v4"){$n(e);let t=So[Xn(e)]??qn(Ie[To(e)].genericSubTreeModel);return t?(t.ports??[]).map(n=>({...n,enum:n.enum?[...n.enum]:void 0})):[]}function jn(e){return{id:e.id,kind:e.kind,source:"builtin",sourceMeta:{sourceKind:"builtin"},editable:!1,ports:(e.ports??[]).map(t=>({...t,enum:t.enum?[...t.enum]:void 0}))}}function Me(e){return{id:e.id,kind:e.kind,ports:[...e.ports].sort((t,n)=>{let r=t.name.localeCompare(n.name);if(r!==0)return r;let i=t.direction.localeCompare(n.direction);if(i!==0)return i;let o=(t.type??"").localeCompare(n.type??"");if(o!==0)return o;let a=(t.defaultValue??"").localeCompare(n.defaultValue??"");return a!==0?a:(t.description??"").localeCompare(n.description??"")}).map(t=>({name:t.name,direction:t.direction,type:t.type,required:t.required,defaultValue:t.defaultValue,enum:t.enum?[...t.enum].sort():void 0,description:t.description}))}}function et(e,t){let n=Me(e),r=Me(t);return JSON.stringify(n)===JSON.stringify(r)}function _t(e,t){if(et(e,t))return"none";let n=Me(e),r=Me(t);if(n.kind!==r.kind)return"kind";if(n.ports.length!==r.ports.length)return"ports";let i=new Map(r.ports.map(s=>[s.name,s])),o=!1,a=!1;for(let s of n.ports){let d=i.get(s.name);if(!d){a=!0;continue}(s.direction!==d.direction||s.type!==d.type||s.required!==d.required)&&(a=!0);let u=s.enum?JSON.stringify(s.enum):"",l=d.enum?JSON.stringify(d.enum):"";u!==l&&(a=!0),s.description!==d.description&&(a=!0),s.defaultValue!==d.defaultValue&&(o=!0)}return a?"ports":o?"port-default":"mixed"}import{z as C}from"zod";var zn=C.object({direction:C.enum(["input","output","inout"]).optional(),type:C.string().optional(),required:C.boolean().optional(),default:C.string().optional(),description:C.string().optional(),enum:C.array(C.string()).optional()}).strict(),tt=C.object({kind:C.enum(["Action","Condition","Control","Decorator","SubTree"]),ports:C.record(C.string(),zn).optional(),description:C.string().optional()}).strict(),vo=C.object({nodes:C.record(C.string(),tt)}).strict();import{z as b}from"zod";var Gn=b.enum(["off","info","warn","error"]),Kn=b.union([Gn,b.tuple([Gn,b.record(b.string(),b.unknown())])]),Ro=b.object({include:b.array(b.string()).optional(),ignore:b.array(b.string()).optional(),useGitignore:b.boolean().optional(),followSymlinks:b.boolean().optional(),maxSize:b.number().int().positive().optional()}).strict(),ko=b.string(),xo=b.object({name:b.string(),attribute:b.string(),base:b.enum(["file","project-root"]).optional()}).strict(),Do=b.object({elements:b.array(xo).optional(),variables:b.record(b.string(),b.string()).optional(),allowOutsideRoot:b.boolean().optional(),maxDepth:b.number().int().min(1).optional(),maxFiles:b.number().int().min(1).optional()}).strict(),No=b.object({entrypoints:b.array(ko).optional(),includes:Do.optional(),behaviorTreeIds:b.enum(["workspace-unique","file-local-first","allow-ambiguous"]).optional()}).strict(),Eo=b.enum(["allow-unused","used-only","single-source"]),Bo=b.object({builtins:b.array(b.enum(Ce)).optional(),files:b.array(b.string()).optional(),augmentations:b.array(b.string()).optional(),definitions:b.array(b.string()).optional(),inline:b.record(b.string(),tt).optional(),convention:Eo.optional()}).strict(),Wn=b.object({inline:b.enum(["allow","deny"]).optional()}).strict(),Io=b.object({enabled:b.boolean().optional(),rules:b.record(b.string(),Kn).optional(),baseline:b.string().optional(),suppressions:Wn.optional()}).strict(),Co=b.object({rules:b.record(b.string(),Kn).optional(),suppressions:Wn.optional()}).strict(),Yn=b.object({indentWidth:b.number().int().min(1).max(8).optional(),xmlDeclaration:b.enum(["always","never","preserve"]).optional(),blankLineBetweenBehaviorTrees:b.boolean().optional(),lineEnding:b.enum(["lf","crlf","auto"]).optional()}).strict(),Mo=b.object({files:b.array(b.string()),linter:Co.optional(),formatter:Yn.optional()}).strict(),Hn=b.object({$schema:b.string().optional(),strict:b.boolean().optional(),files:Ro.optional(),resolver:No.optional(),models:Bo.optional(),linter:Io.optional(),formatter:Yn.optional(),overrides:b.array(Mo).optional()}).strict();function Qn(e){return e.flatMap(_o)}function _o(e){if(String(e.code)==="unrecognized_keys")return(Array.isArray(e.keys)?e.keys??[]:[]).map(i=>{let o=Zn([...e.path,String(i)]);return{code:"CFG002_UNKNOWN_CONFIG_FIELD",severity:"error",path:o,message:`unknown config field \`${o}\``}});let n=Zn(e.path);return er(e)?[{code:"CFG003_INVALID_CONFIG_VALUE",severity:"error",path:n,message:n?`invalid config value at \`${n}\``:"invalid config value"}]:[{code:"CFG001_INVALID_CONFIG",severity:"error",path:n,message:n?`invalid config at \`${n}\``:"invalid config"}]}function Zn(e){return e.map(String).join(".")||void 0}function er(e){let t=String(e.code);if(t==="invalid_value"||t==="invalid_enum_value"||t==="invalid_literal")return!0;if(t!=="invalid_union")return!1;let n=e.errors;if(Array.isArray(n))return n.flat().some(Jn);let r=e.unionErrors;return Array.isArray(r)?r.flatMap(i=>i.issues??[]).some(Jn):!1}function Jn(e){return typeof e=="object"&&e!==null&&er(e)}function _e(e){let t=Hn.safeParse(e);return t.success?{ok:!0,value:t.data,diagnostics:[]}:{ok:!1,diagnostics:Qn(t.error.issues)}}function wo(e){if(!e)return;let t={};return e.indentWidth!==void 0&&(t.indentWidth=e.indentWidth),e.xmlDeclaration!==void 0&&(t.xmlDeclaration=e.xmlDeclaration),e.blankLineBetweenBehaviorTrees!==void 0&&(t.blankLineBetweenBehaviorTrees=e.blankLineBetweenBehaviorTrees),e.lineEnding!==void 0&&(t.lineEnding=e.lineEnding),t}function Po(e){if(!e)return;let t={};return e.rules!==void 0&&(t.rules=e.rules),e.suppressions!==void 0&&(t.suppressions={},e.suppressions.inline!==void 0&&(t.suppressions.inline=e.suppressions.inline)),t}function Ao(e){return e.map(t=>P(t.code,t.severity==="error"?S.Error:S.Warning,t.message,void 0,"",t.help?{help:t.help}:void 0))}function Lo(e){let t=[],n=Rt(),{$schema:r,strict:i,overrides:o,...a}=e;i&&(n=De(n,Tn)),n=De(n,a),n.overrides=(o??[]).map(d=>({files:d.files,linter:Po(d.linter),formatter:wo(d.formatter)}));let s=!t.some(d=>d.severity===S.Error);return{config:n,diagnostics:t,ok:s}}function wt(e){let t=_e(e);return t.ok?Lo(t.value):{ok:!1,config:Rt(),diagnostics:Ao(t.diagnostics)}}var Uo="https://unpkg.com/@abco20/btxml-checker/schemas/btxml.config.schema.json";function Pt(){return{$schema:Uo}}function Oo(e){let t="",n=0;for(;n<e.length;)e.slice(n,n+3)==="/**"&&(n+3===e.length||e[n+3]==="/")?n+3===e.length?(t+="(?:/.*)?",n+=3):(t+="(?:/.*)?/",n+=4):n===0&&e.slice(n,n+3)==="**/"?(t+="(?:.*/)?",n+=3):e.slice(n,n+2)==="**"?(t+=".*",n+=2):e[n]==="*"?(t+="[^/]*",n+=1):e[n]==="?"?(t+="[^/]",n+=1):(t+=e[n].replace(/[.+^${}()|[\]\\]/g,"\\$&"),n+=1);return new RegExp(`^${t}$`)}function Vo(e,t){let n=e.replace(/\\/g,"/"),r=t.startsWith("!"),i=r?t.slice(1):t,a=Oo(i).test(n);return r?!a:a}function tr(e,t){return e.overrides.filter(n=>n.files.some(r=>Vo(t,r)))}function nt(e){return e.replaceAll("\\","/")}function Fo(e){try{return decodeURIComponent(e)}catch{return e}}function nr(e){if(!e.startsWith("file://"))return e;let t;try{t=new URL(e)}catch{return e}let n=Fo(t.pathname);return/^\/[A-Za-z]:/.test(n)?nt(n.slice(1)):t.host?nt(`//${t.host}${n}`):nt(n)}function rt(e,t){let n=nt(t),r=tr(e,n),i=e;for(let o of r)i=De(i,{linter:o.linter,formatter:o.formatter});return{files:i.files,resolver:i.resolver,models:i.models,linter:i.linter,formatter:i.formatter}}function At(e,t){return rt(e,nr(t))}function Se(e){let t=e.linter.rules["model/no-unknown-port"];return Array.isArray(t)&&t.length>=2&&t[1].subTreePorts==="strict"?{unknownSubTreePorts:"reject"}:{unknownSubTreePorts:"allow"}}function it(e){if(typeof e=="string")return He.includes(e)?{severity:e}:null;if(Array.isArray(e)&&e.length>=1&&e.length<=2){let[t,n]=e;if(typeof t=="string"&&He.includes(t)&&(n===void 0||typeof n=="object"&&n!==null&&!Array.isArray(n))){let r={severity:t};return n!==void 0&&(r.options=n),r}}return null}function rr(e,t){if(t)return Qe(e,t)}function ir(e){return e.source==="inline-tree-nodes-model"||e.source==="external-tree-nodes-model",e.source}function or(e){let t=e.port?.uri??e.model?.uri??"",n=e.port?.nameRange??e.port?.range??e.model?.idRange??e.model?.range;return P(e.code,S.Error,e.message,n,t,{primaryLabel:e.message,help:e.help,notes:e.notes},e.data)}function qo(e,t,n,r,i){let o=n.effectiveType??n.type,a=n.originalType??n.type,s={...n,originalType:a,effectiveType:o,typeSource:n.typeSource??ir(n),validate:r.validate??n.validate,required:r.required??n.required,enum:r.enum?[...r.enum]:n.enum,description:r.description??n.description},d=r.typeRefinement;if(!d)return{...s,type:s.effectiveType};let u=rr(e,d.from),l=rr(e,o);return u&&u!==l?(i.push(or({code:"BT119_INVALID_TYPE_REFINEMENT",message:`invalid type refinement for port \`${n.name}\` on node \`${t.id}\``,help:`make \`typeRefinement.from\` match the base port type \`${o??"unknown"}\`, or remove it for an unconditional refinement`,model:t,port:n,data:{kind:"invalid-type-refinement",nodeId:t.id,portName:n.name,expectedFrom:o,actualFrom:d.from,to:d.to},notes:o||d.from?[`base type: ${o??"(unspecified)"}`,`requested from: ${d.from??"(unspecified)"}`]:void 0})),{...s,type:s.effectiveType}):{...s,type:d.to,effectiveType:d.to,typeSource:"model-augmentation",typeRefinement:d}}function Xo(e,t,n,r){let i=new Map(t.ports.map(o=>[o.name,o]));for(let[o,a]of Object.entries(n.ports??{})){let s=i.get(o);if(!s){r.push(or({code:"BT118_AUGMENT_PORT_NOT_FOUND",message:`augmentation port \`${o}\` not found on node \`${t.id}\``,help:`change the augmentation to an existing port on \`${t.id}\` or remove the override`,model:t,data:{kind:"augment-port-not-found",nodeId:t.id,portName:o}}));continue}i.set(o,qo(e,t,s,a,r))}return{...t,ports:t.ports.map(o=>i.get(o.name)??o)}}function $o(e){let t=e.effectiveType??e.type,n=e.originalType??e.type;return{...e,type:t,effectiveType:t,originalType:n,typeSource:e.typeSource??ir(e)}}function ar(e,t,n){let r=[],i=new Map([...e.entries()].map(([o,a])=>[o,{...a,ports:a.ports.map($o)}]));for(let o of n)for(let[a,s]of Object.entries(o.augment??{})){let d=i.get(a);if(!d){r.push(P("BT117_AUGMENT_TARGET_NOT_FOUND",S.Error,`augmentation target node \`${a}\` not found`,void 0,o.uri??"",{primaryLabel:`augmentation target \`${a}\` does not match any node model`,help:"change the augmentation target to an existing node model or remove it",notes:o.path?[`augmentation file: ${o.path}`]:void 0},{kind:"augment-target-not-found",nodeId:a,filePath:o.path}));continue}i.set(a,Xo(t,d,s,r))}return{modelsById:i,diagnostics:r}}function lr(e){return we("builtin",0,!1,e)}function ur(e){return we("xml-tree-nodes-model",10,!0,e)}function cr(e){return we("external-tree-nodes-model",15,e.some(t=>t.editable!==!1),e)}function pr(e){return we("node-definition-file",20,!0,e)}function mr(e){return we("config-inline",30,!0,e)}function we(e,t,n,r){return{kind:e,precedence:t,editable:n,models:r.map(i=>fr(i,e,n&&i.editable!==!1))}}function jo(e){return e==="config-inline"?"config":e==="xml-tree-nodes-model"?"inline-tree-nodes-model":e}function fr(e,t,n){let r=jo(t);return{...e,source:r,sourceMeta:e.sourceMeta??{sourceKind:r,file:e.uri,range:e.range},editable:n,ports:e.ports.map(i=>({...i,source:r}))}}function he(e,t){return{uri:e.uri,sourceKind:e.source||"inline-tree-nodes-model",nodeId:e.id,kind:e.kind,range:e.range,idRange:e.idRange,sourceIndex:t}}function sr(e){return{name:e.name,direction:e.direction,type:e.type,required:e.required,defaultValue:e.defaultValue,enum:e.enum?[...e.enum].sort():void 0,description:e.description}}function zo(e,t){let n=[];e.kind!==t.kind&&n.push({kind:"node-kind",left:e.kind,right:t.kind});let r=new Map(e.ports.map(o=>[o.name,o])),i=new Map(t.ports.map(o=>[o.name,o]));for(let[o,a]of r)i.has(o)||n.push({kind:"port-removed",portName:o,sourceIndex:0,port:sr(a)});for(let[o,a]of i)r.has(o)||n.push({kind:"port-added",portName:o,sourceIndex:1,port:sr(a)});for(let[o,a]of r){let s=i.get(o);if(!s)continue;a.direction!==s.direction&&n.push({kind:"port-direction",portName:o,left:a.direction,right:s.direction}),a.type!==s.type&&n.push({kind:"port-type",portName:o,left:a.type,right:s.type}),a.required!==s.required&&n.push({kind:"port-required",portName:o,left:a.required,right:s.required}),a.defaultValue!==s.defaultValue&&n.push({kind:"port-default",portName:o,left:a.defaultValue,right:s.defaultValue});let d=a.enum?JSON.stringify([...a.enum].sort()):"",u=s.enum?JSON.stringify([...s.enum].sort()):"";d!==u&&n.push({kind:"port-enum",portName:o,left:a.enum?[...a.enum].sort():void 0,right:s.enum?[...s.enum].sort():void 0}),a.description!==s.description&&n.push({kind:"port-description",portName:o,left:a.description,right:s.description})}return n}function dr(e,t){let n=new Map;for(let r of e){let i=n.get(r.id);if(!i){n.set(r.id,r);continue}if(et(i,r))continue;let o=_t(i,r),a=zo(i,r),s;if(o==="port-default"){let d=new Map(i.ports.map(m=>[m.name,m])),u=r.ports.find(m=>{let g=d.get(m.name);return g&&g.defaultValue!==m.defaultValue}),l=u?.name??"unknown",p=[he(i,0),he(r,1)];s={kind:"port-default-conflict",nodeId:r.id,portName:l,sources:[{source:he(i,0),value:d.get(l)?.defaultValue},{source:he(r,1),value:u?.defaultValue}]},t.push({id:r.id,definitions:[i,r],sources:p,code:"BT107_CONFLICTING_PORT_DEFAULT",message:`conflicting default for port \`${l}\` on node \`${r.id}\``,uri:r.uri,range:r.idRange||r.range,details:{primaryLabel:"the same port has different default values across model definitions",help:`use the same default value in every \`${r.id}\` definition or remove the duplicate model`},data:s,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}else{let d=[he(i,0),he(r,1)];s={kind:"node-model-conflict",nodeId:r.id,sources:d,differences:a},t.push({id:r.id,definitions:[i,r],sources:d,code:"BT012_CONFLICTING_NODE_MODEL",message:`conflicting node model \`${r.id}\``,uri:r.uri,range:r.idRange||r.range,details:{primaryLabel:"another model with this ID defines a different kind or port shape",help:`make all \`${r.id}\` model definitions agree, or keep only one definition at the same precedence level`},data:s,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}}return n}function Go(e,t){if(!e)return{...t,ports:[...t.ports]};let n=new Map(e.ports.map(r=>[r.name,r]));for(let r of t.ports)n.set(r.name,r);return{...e,...t,sourceMeta:t.sourceMeta||e.sourceMeta,ports:[...n.values()]}}function gr(e){let t=[],n=new Map,r=new Map,i=[...e].sort((s,d)=>s.precedence-d.precedence),o=new Map,a=new Map;for(let s of i){let d=o.get(s.precedence)??[],u=s.models.map(l=>fr(l,s.kind,s.editable&&l.editable!==!1));d.push(...u),o.set(s.precedence,d);for(let l of u)a.set(l.id,s.precedence)}for(let[s,d]of[...o.entries()].sort((u,l)=>u[0]-l[0])){let u=d.filter(g=>a.get(g.id)===s),l=d.filter(g=>a.get(g.id)!==s),p=dr(l,[]);for(let[g,k]of dr(u,t))p.set(g,k);let m=new Set(d.map(g=>g.id));for(let g of m)a.get(g)===s&&n.set(g,d.filter(k=>k.id===g));for(let[g,k]of p)r.set(g,Go(r.get(g),k))}return{nodeModelsById:n,mergedNodeModelsById:r,conflicts:t}}function Ko(e){return Ce.includes(e)}function Wo(){return{documents:new Map,behaviorTreesById:new Map,nodeModelsById:new Map,mergedNodeModelsById:new Map,modelLayers:[],builtins:new Map,genericSubTreePorts:[],modelConflicts:[],typeRegistry:be(),augmentations:[]}}function Yo(e,t,n){let r=e.get(t)||[];r.push(n),e.set(t,r)}function Ho(e,t,n){for(let r of new Set(n))if(Ko(r)){for(let i of Ct(r))e.builtins.set(i.id,i),t.push(i);e.genericSubTreePorts.push(...Mt(r))}}function Zo(e,t,n,r,i){for(let o of i){let a=xt(o,{uri:o.uri,path:o.path}),s=a.model;t.push(...a.diagnostics),e.documents.set(o.uri,s);for(let d of s.behaviorTrees)Yo(e.behaviorTreesById,d.id,d);o.kind==="model-document"?r.push(...s.treeNodesModel):n.push(...s.treeNodesModel),e.genericSubTreePorts.push(...s.genericSubTreePorts)}}function Jo(e){return JSON.stringify({name:e.name,direction:e.direction,type:e.type,required:e.required,defaultValue:e.defaultValue,enum:e.enum?[...e.enum].sort((t,n)=>t.localeCompare(n)):void 0,description:e.description})}function Qo(e){let t=new Set,n=[];for(let r of e.genericSubTreePorts){let i=Jo(r);t.has(i)||(t.add(i),n.push(r))}e.genericSubTreePorts=n}function ea(e,t,n,r,i){e.modelLayers.push(lr(t),ur(n),cr(r)),i.models?.length&&e.modelLayers.push(pr([...i.models])),e.modelLayers.push(...i.additionalModelLayers??[])}function Pe(e,t){return ta(e,t)}function ta(e,t){let n=Wo(),r=[],i=[],o=[],a=[];Ho(n,i,t.config.models.builtins),n.augmentations=t.augmentations??[],n.typeRegistry=be(t.augmentations??[]),Zo(n,r,o,a,e),Qo(n),ea(n,i,o,a,t);let s=t.config.models.inline;if(s){let l=[];for(let[p,m]of Object.entries(s))l.push(Et(p,m));n.modelLayers.push(mr(l))}let d=gr(n.modelLayers),u=ar(d.mergedNodeModelsById,n.typeRegistry,t.augmentations??[]);return n.nodeModelsById=d.nodeModelsById,n.mergedNodeModelsById=u.modelsById,n.modelConflicts=d.conflicts,r.push(...u.diagnostics),{ok:r.every(l=>l.severity!==S.Error),index:n,diagnostics:r}}var yr={unknownSubTreePorts:"allow"};function br(e){return{...yr,...e}}var na=["Action","Condition","Control","Decorator"],ra=new Set(na);var ia=new Set(["input_port","output_port","inout_port"]);function Ut(e){return ra.has(e)}function ot(e,t){return e.attributes.find(n=>n.name===t)?.value}function Lt(e,t){if(e===t)return!0;for(let n of e.children)if(n.kind==="element"&&Lt(n,t))return!0;return!1}function Sr(e,t){if(!e)return!1;if(e.name==="TreeNodesModel")return Lt(e,t);for(let n of e.children)if(!(n.kind!=="element"||n.name!=="TreeNodesModel")&&Lt(n,t))return!0;return!1}function at(e){return ia.has(e.name)}function hr(e){return e.name==="root"?"root":e.name==="BehaviorTree"?"behavior-tree":e.name==="TreeNodesModel"?"tree-nodes-model":e.name==="include"?"include":e.name==="SubTree"?"subtree":Ut(e.name)?"generic-node":at(e)?"unknown-xml":"concrete-node"}function Ot(e){if(e.name==="SubTree")return ot(e,"ID")||"SubTree";if(Ut(e.name))return ot(e,"ID");if(!(e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"||e.name==="include"||at(e)))return e.name}function X(e){return e.typeRegistry}function K(e,t){return q(X(e),t)}function Te(e,t,n){return Be(X(e),t,n)}function Ae(e,t){return e.documents.get(t)}function oe(e,t){return e.behaviorTreesById.get(t)??[]}function Vt(e,t){return e.behaviorTreesById.has(t)}function Ft(e){return[...e.behaviorTreesById.keys()]}function qt(e,t){return e.documents.has(t)}function Q(e,t){let n=e;return n.mergedNodeModelsById.get(t)??n.builtins.get(t)}function Xt(e,t){return e.modelLayers.flatMap(n=>n.models.filter(r=>r.id===t))}function $t(e){return[...e.genericSubTreePorts]}function jt(e){return[...e.augmentations]}function Le(e){return e.modelConflicts}function Ue(e,t){let{id:n,fileLocalUri:r,config:i}=t,o=oe(e,n);if(o.length>0){if((i?.resolver?.behaviorTreeIds==="file-local-first"||i?.resolver?.behaviorTreeIds==="allow-ambiguous")&&r){let u=o.filter(l=>l.uri===r);u.length>0&&(o=u)}let s=Q(e,n),d=s?.kind==="SubTree"?[s]:[];return o.length===1?{status:"resolved",kind:"behavior-tree",treeId:o[0].id,behaviorTree:o[0]}:{status:"ambiguous",candidates:[...o.map(u=>u.id),...d.map(u=>u.id)],behaviorTrees:o,definitions:d}}let a=Q(e,n);return a?.kind==="SubTree"?{status:"resolved",kind:"node-model",modelId:a.id,model:a}:{status:"unresolved",id:n}}function zt(e,t){if(!t)return{status:"unresolved",nodeType:t};let n=Q(e,t);if(n){let i=Le(e).find(o=>o.id===t&&o.code==="BT012_CONFLICTING_NODE_MODEL");return i?{status:"ambiguous",nodeType:t,candidates:i.definitions}:{status:"resolved",model:n}}let r=Xt(e,t);return r.length===1?{status:"resolved",model:r[0]}:r.length>1?{status:"ambiguous",nodeType:t,candidates:r}:{status:"unresolved",nodeType:t}}function Gt(e){let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);return[...t.values()]}function Kt(e){let t=$t(e.index);if(e.tagForm==="subtree"){let n=e.model.status==="resolved"?e.model.model.ports:e.subtreeModelPorts??[];return Gt([...n,...t])}return e.model.status==="resolved"?[...e.model.model.ports]:[]}function Wt(e){let{attribute:t}=e,n=e.ports.find(r=>r.name===t.name);return n?{status:"resolved",attribute:t,name:t.name,value:t.value,port:n}:Dt(t.name)?{status:"reserved-attribute",attribute:t,name:t.name,value:t.value}:e.allowsArbitraryAttributes?{status:"allowed-arbitrary",attribute:t,name:t.name,value:t.value}:e.unknownModelPortStatus==="undeclared"?{status:"undeclared",attribute:t,name:t.name,value:t.value}:e.model.status==="unresolved"||e.model.status==="ambiguous"?{status:"unknown-node-model",attribute:t,name:t.name,value:t.value}:{status:"undeclared",attribute:t,name:t.name,value:t.value}}function ee(e,t){let n=br(t.policy),r=t.element,i=hr(r),o=Sr(t.documentRoot,r);if((t.isModelDefinition||o&&(i==="generic-node"||i==="subtree"))&&(i="model-definition"),o&&at(r)&&(i="unknown-xml"),i==="root"||i==="behavior-tree"||i==="tree-nodes-model"||i==="include"||i==="model-definition"||i==="unknown-xml")return{element:r,tagName:r.name,tagForm:i,model:{status:"not-a-node"},ports:[],allowsArbitraryAttributes:!1,portUsages:[]};let a=Ot(r);if(i!=="subtree"){let g=zt(e,a),k=Kt({index:e,tagForm:i,model:g}),h=r.attributes.map(E=>Wt({attribute:E,ports:k,allowsArbitraryAttributes:!1,model:g}));return{element:r,tagName:r.name,tagForm:i,nodeType:a,model:g,ports:k,allowsArbitraryAttributes:!1,portUsages:h}}let s=ot(r,"ID"),d=s?Ue(e,{id:s,fileLocalUri:t.uri,config:t.config}):{status:"unresolved",id:void 0},u={status:"unresolved",nodeType:s},l=!1;if(d.status==="resolved"&&d.kind==="node-model")u={status:"resolved",model:d.model};else if(d.status==="resolved"&&d.kind==="behavior-tree"){let g=zt(e,d.treeId);g.status==="resolved"&&g.model.kind==="SubTree"?u=g:l=n.unknownSubTreePorts==="allow"}else d.status==="ambiguous"&&d.definitions.length>0?u=d.definitions.length===1?{status:"resolved",model:d.definitions[0]}:{status:"ambiguous",nodeType:s??"SubTree",candidates:d.definitions}:l=n.unknownSubTreePorts==="allow";let p=Kt({index:e,tagForm:i,model:u,subtreeModelPorts:d.status==="ambiguous"?Gt(d.definitions.flatMap(g=>g.ports)):void 0}),m=r.attributes.map(g=>Wt({attribute:g,ports:p,allowsArbitraryAttributes:l,model:u,unknownModelPortStatus:!l&&u.status!=="resolved"?"undeclared":void 0}));return{element:r,tagName:r.name,tagForm:i,nodeType:a,model:u,subtree:{id:s,target:d},ports:p,allowsArbitraryAttributes:l,portUsages:m}}function st(e,t){return ee(e,t).portUsages.find(r=>r.name===t.attributeName)}function sa(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function da(e){let t=e.root;return t?t.name==="BehaviorTree"?[t]:t.children.filter(n=>n.kind==="element"&&n.name==="BehaviorTree"):[]}function Tr(e,t){let n=e.line,r=e.character,i=e.offset;for(let o of t){if(i+=o.length,o===`
11
+ `){n+=1,r=0;continue}r+=o.length}return{line:n,character:r,offset:i}}function Yt(e,t,n){let r=Tr(e,t),i=Tr(r,n);return{start:r,end:i}}function la(e,t,n){let r=n.valueContentRange||n.valueRange,i=e.originalText.slice(r.start.offset,r.end.offset),o=[];for(let a of i.matchAll(/\{[^}]*\}/g)){let s=a[0],d=a.index??0,u=A({portName:t,rawValue:s});if(u.ok){o.push({raw:s,key:u.reference.key,scope:u.reference.scope,identity:Z(u.reference),range:Yt(r.start,i.slice(0,d),s),syntax:u.reference.syntax==="shorthand"?"shorthand":"braced"});continue}o.push({raw:s,key:s,scope:"local",identity:`invalid:${s}`,range:Yt(r.start,i.slice(0,d),s),syntax:"invalid"})}if(o.length===0){let a=A({portName:t,rawValue:i});if(a.ok){let s=Math.max(0,i.indexOf(a.reference.raw));return o.push({raw:a.reference.raw,key:a.reference.key,scope:a.reference.scope,identity:Z(a.reference),range:Yt(r.start,i.slice(0,s),a.reference.raw),syntax:a.reference.syntax==="shorthand"?"shorthand":"braced"}),o}}return o.length===0&&(i.includes("{")||i.includes("}"))&&o.push({raw:i,key:i,scope:"local",identity:`invalid:${i}`,range:r,syntax:"invalid"}),o}function ua(e,t){return sa(e.name)?e.name:t.model.status==="resolved"?t.model.model.kind:"unknown"}function Rr(e){let t=[];for(let n of e)t.push(n),t.push(...Rr(n.children));return t}function ca(e){return e.model.status==="resolved"?{status:"resolved",model:e.model.model,source:e.model.model.sourceMeta}:e.model.status==="ambiguous"?{status:"ambiguous",nodeType:e.model.nodeType,candidates:e.model.candidates}:{status:"unresolved",nodeType:e.nodeType??e.tagName}}function pa(e){return e.status==="resolved"?{status:"resolved",port:e.port}:e.status==="allowed-arbitrary"?{status:"allowed-arbitrary",name:e.name}:e.status==="undeclared"?{status:"undeclared",name:e.name}:{status:"unknown-node-model"}}function vr(e,t){return e.attributes.find(n=>n.name===t)}function ma(e){let t=new Set;if(!e)return t;let n=r=>{t.add(r);for(let i of r.children)i.kind==="element"&&n(i)};if(e.name==="TreeNodesModel")return n(e),t;for(let r of e.children)r.kind!=="element"||r.name!=="TreeNodesModel"||n(r);return t}function dt(e,t){let n=t.semantic,r=ma(e.root),i=da(e).map(d=>({id:vr(d,"ID")?.value,element:d,rootNode:void 0,nodes:[]})),o=[],a=[],s=(d,u,l,p)=>{let m=ee(n,{element:d,uri:e.uri,documentRoot:e.root,config:t?.config,policy:t?.policy,isModelDefinition:r.has(d)}),g=ca(m),k={element:d,path:p,tagName:d.name,kind:ua(d,m),model:g,usage:m,portBindings:[],children:[],parent:l,behaviorTree:u};if(k.portBindings=m.portUsages.filter(h=>h.status!=="reserved-attribute").map(h=>({name:h.name,value:h.value,attribute:h.attribute,declaredPort:pa(h),usage:h,blackboardReferences:la(e,h.name,h.attribute)})),k.children=d.children.filter(h=>h.kind==="element").map((h,E)=>s(h,u,k,[...p,E])),d.name==="SubTree"){let h=vr(d,"ID")?.value;o.push({node:k,id:h,target:m.subtree?.target??{status:"unresolved",id:h},portRemaps:k.portBindings})}return k};for(let d of i){let u=d.element.children.filter(l=>l.kind==="element").map((l,p)=>s(l,d,void 0,[p]));d.rootNode=u[0],d.nodes=Rr(u),a.push(...d.nodes)}return{document:e,behaviorTrees:i,subtreeCalls:o,nodes:a}}function kr(){return{includeIssuesByUri:new Map,suppressionIssuesByUri:new Map}}function xr(e,t){return e.includeIssuesByUri.get(t)??[]}function Dr(e,t){return e.suppressionIssuesByUri.get(t)??[]}function Nr(e){let{document:t,semantic:n,config:r,view:i}=e,o=new Map(i.nodes.map(u=>[u.element,u])),a=new Map(i.subtreeCalls.map(u=>[u.node.element,u])),s=Se(r),d=ga(t.root);return{document:t,view:i,semantic:n,config:r,options:e.options,facts:e.facts,report(u){let l=P(u.code??e.code,e.severity,u.message,u.range,t.uri,u.details,u.data);e.diagnostics.push({...l,rule:e.rule,...u.relatedInformation?{relatedInformation:u.relatedInformation}:{}})},getIncludeIssues(u){let l=xr(e.facts,t.uri);return u?l.filter(p=>p.kind===u):l},getSuppressionIssues(u){let l=Dr(e.facts,t.uri);return u?l.filter(p=>p.kind===u):l},getNodeUsage(u){return ee(n,{element:u,documentRoot:t.root,uri:t.uri,config:r,policy:s,isModelDefinition:d.has(u)})},getPortUsage(u,l){return st(n,{element:u,documentRoot:t.root,attributeName:l,uri:t.uri,config:r,policy:s,isModelDefinition:d.has(u)})},resolveSubTree(u,l){return Ue(n,{id:u,fileLocalUri:l,config:r})},getNodeModel(u){return Q(n,u)},getBehaviorTrees(u){return oe(n,u)},getTreeNodeView(u){return o.get(u)},getSubTreeCallView(u){return a.get(u)}}}function ga(e){let t=new Set;if(!e)return t;if(e.name==="TreeNodesModel")return Ht(e,t),t;for(let n of e.children)n.kind!=="element"||n.name!=="TreeNodesModel"||Ht(n,t);return t}function Ht(e,t){t.add(e);for(let n of e.children)n.kind==="element"&&Ht(n,t)}function R(e){let t=hn[e.name];return{...e,code:t.code,defaultSeverity:t.defaultSeverity,optionsSchema:t.optionsSchema,meta:e.meta??{description:t.description}}}var ya={"missing-path":"include/require-path","not-found":"include/no-missing-file",cycle:"include/no-cycle","unresolved-variable":"include/no-unresolved-variable","outside-root":"include/no-outside-root","external-used":"include/report-external-used","depth-exceeded":"include/no-depth-exceeded","too-many-files":"include/no-too-many-files"};function te(e){return R({name:ya[e],create(t){return{ProgramExit(){for(let n of t.getIncludeIssues(e))t.report({message:n.message,range:n.range,data:ba(n)})}}}})}function ba(e){switch(e.kind){case"missing-path":return;case"unresolved-variable":return{variable:e.variable};case"cycle":return{path:e.path,cycle:e.cycle};default:return{path:e.path}}}var Er=[te("missing-path"),te("not-found"),te("cycle"),te("outside-root"),te("unresolved-variable"),te("depth-exceeded"),te("too-many-files"),te("external-used")];import Sa from"ajv";var ha=Sa,Ta=new ha,va=["IDLE","RUNNING","SUCCESS","FAILURE","SKIPPED"],Ra={int8_t:{min:-128n,max:127n},"std::int8_t":{min:-128n,max:127n},int16_t:{min:-32768n,max:32767n},"std::int16_t":{min:-32768n,max:32767n},int32:{min:-2147483648n,max:2147483647n},int32_t:{min:-2147483648n,max:2147483647n},"std::int32_t":{min:-2147483648n,max:2147483647n},int64_t:{min:-9223372036854775808n,max:9223372036854775807n},int64:{min:-9223372036854775808n,max:9223372036854775807n},"std::int64_t":{min:-9223372036854775808n,max:9223372036854775807n},int:{min:-2147483648n,max:2147483647n},long:{min:-9223372036854775808n,max:9223372036854775807n},short:{min:-32768n,max:32767n},uint8_t:{min:0n,max:255n},"std::uint8_t":{min:0n,max:255n},uint16_t:{min:0n,max:65535n},"std::uint16_t":{min:0n,max:65535n},uint32:{min:0n,max:4294967295n},uint32_t:{min:0n,max:4294967295n},"std::uint32_t":{min:0n,max:4294967295n},uint64_t:{min:0n,max:18446744073709551615n},uint64:{min:0n,max:18446744073709551615n},"std::uint64_t":{min:0n,max:18446744073709551615n},uint:{min:0n,max:4294967295n},unsigned:{min:0n,max:4294967295n},"unsigned int":{min:0n,max:4294967295n},size_t:{min:0n,max:18446744073709551615n},"std::size_t":{min:0n,max:18446744073709551615n}},Zt=new Set(["int8_t","int16_t","int32","int32_t","std::int32_t","int64_t","int64","std::int64_t","int","long","short","std::int8_t","std::int16_t"]),Br=new Set(["uint8_t","uint16_t","uint32","uint32_t","std::uint32_t","uint64_t","uint64","std::uint64_t","uint","unsigned","unsigned int","std::uint8_t","std::uint16_t","size_t","std::size_t"]);function Ir(e){return e.children.filter(t=>t.kind==="element")}function $(e){return e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"}function Cr(e){return e.children.some(t=>t.kind==="element")}function ut(e,t){let n=Mr(t);n&&e.report({code:n.code,message:n.message,range:t.range,details:n.details})}function Mr(e){let t=Oe(e.port.name,e.value);if(e.allowRemap&&t!==void 0)return;if(!e.allowRemap&&t!==void 0||e.port.enum&&!e.port.enum.includes(e.value))return lt(e.diagnosticCode,e.value,e.portLabel);let n=e.port.validate??e.typeDefinition?.validate;if(n)return Ea(e.registry,n,e.value)?void 0:lt(e.diagnosticCode,e.value,e.portLabel);let r=e.typeDefinition?.canonical??e.port.type;if(r&&!wr(r,e.value))return ka(r)?lt(e.diagnosticCode,e.value,e.portLabel):{code:e.customLiteralDiagnosticCode,message:`literal value for custom type \`${r}\` requires a validator`,details:{primaryLabel:`literal value requires a validator for custom type \`${r}\``,help:`use a blackboard remap such as \`${e.portLabel}="{${e.port.name}}"\`, or define a validator in btxml.model-augment.json`}}}function ae(e){return e.effectiveType??e.type}function _r(e,t){return q(e,ae(t))}function Oe(e,t){let n=A({portName:e,rawValue:t.trim()});return n.ok?n.reference:void 0}function lt(e,t,n){return{code:e,message:`invalid value \`${t}\` for port \`${n}\``}}function ka(e){let t=Ee(e)??e;return Pr(e)!==void 0||Ba.has(t.toLowerCase())}function wr(e,t){let n=Pr(e);if(n)return xa(n,t);let r=(Ee(e)??e).toLowerCase();switch(r){case"std::string":case"string":case"bt::any":case"bt::anytypeallowed":case"bt::anytype":case"any":return!0;case"bool":return t==="0"||t==="1"||t==="true"||t==="TRUE"||t==="True"||t==="false"||t==="FALSE"||t==="False";case"float":case"double":return/^-?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/.test(t);case"bt::nodestatus":case"nodestatus":return va.includes(t);default:return Zt.has(r)||Br.has(r)?Ar(r,t):!1}}function Pr(e){return/^std::vector<\s*(.+?)\s*>$/.exec(e)?.[1]}function xa(e,t){let n=Na(t);return n?n.every(r=>Da(e,r)):!1}function Da(e,t){if(t.kind==="string")return wr(e,t.value);let n=(Ee(e)??e).toLowerCase();switch(n){case"std::string":return typeof t.value=="string";case"bool":return typeof t.value=="boolean";case"float":case"double":return typeof t.value=="number"&&Number.isFinite(t.value);default:return Zt.has(n)||Br.has(n)?typeof t.value=="number"&&Number.isInteger(t.value)&&Ar(n,String(t.value)):!1}}function Ar(e,t){let n=Ra[e];if(!n)return!1;if(Zt.has(e)){if(!/^-?\d+$/.test(t))return!1}else if(!/^\d+$/.test(t))return!1;try{let r=BigInt(t);return r>=n.min&&r<=n.max}catch{return!1}}function Na(e){if(e.startsWith("json:"))try{let t=JSON.parse(e.slice(5));return Array.isArray(t)?t.map(n=>({kind:"json",value:n})):void 0}catch{return}return e.split(";").map(t=>({kind:"string",value:t}))}function Ea(e,t,n){switch(t.kind){case"pattern":return new RegExp(`^(?:${t.pattern})$`).test(n);case"enum":return t.values.includes(n);case"tuple":{let r=n.split(t.separator);return r.length!==t.items.length?!1:r.every((i,o)=>{let a=t.items[o];return a?Mr({port:{name:`tuple[${o}]`,type:a},value:i,registry:e,typeDefinition:q(e,a),allowRemap:!1,diagnosticCode:"BT103_INVALID_PORT_VALUE_TYPE",customLiteralDiagnosticCode:"BT112_CUSTOM_LITERAL_REQUIRES_VALIDATOR",portLabel:`tuple[${o}]`})===void 0:!1})}case"json-schema":try{let r=JSON.parse(n);return Ta.compile(t.schema)(r)===!0}catch{return!1}}}var Ba=new Set(["std::string","string","bool","int8_t","std::int8_t","int16_t","std::int16_t","int","int32","int32_t","std::int32_t","int64_t","int64","std::int64_t","long","short","uint8_t","std::uint8_t","uint16_t","std::uint16_t","uint","uint32","uint32_t","std::uint32_t","uint64_t","uint64","std::uint64_t","size_t","std::size_t","unsigned","unsigned int","float","double","bt::nodestatus","nodestatus","bt::any","bt::anytypeallowed","bt::anytype","any"]);var Lr=[R({name:"model/require-port-name",meta:{description:"Port elements require a name attribute."},create(e){return{TreeNodeModel(t){for(let n of t.ports)n.name||e.report({message:"Port must have name attribute",range:n.range||n.nameRange||t.idRange||t.range})}}}}),R({name:"model/no-duplicate-port-name",meta:{description:"Ports with the same name are not allowed."},create(e){return{TreeNodeModel(t){let n=new Set;for(let r of t.ports)r.name&&(n.has(r.name)&&e.report({message:`Duplicate port name "${r.name}" in ${t.id}`,range:r.nameRange||r.range||t.idRange||t.range}),n.add(r.name))}}}}),R({name:"model/valid-port-name",meta:{description:"Port names must be valid XML attribute names for BT nodes."},create(e){return{TreeNodeModel(t){for(let n of t.ports){if(!n.name)continue;let r=Nt(n.name);r&&e.report({code:y.InvalidPortName,message:`invalid port name \`${n.name}\`: ${r}`,range:n.nameRange||n.range||t.idRange||t.range,details:{primaryLabel:`invalid port name \`${n.name}\``,help:"rename the port to a non-reserved XML attribute name without forbidden characters"}})}}}}}),R({name:"model/no-conflicting-definition",create(e){return{ProgramExit(){for(let t of Le(e.semantic))t.uri&&t.uri!==e.document.uri||Ia(e.document,t.id)||e.report({code:t.code,message:t.message,range:t.range,details:t.details,data:t.data,relatedInformation:t.relatedInformation})}}}}),R({name:"model/valid-port-default-value",meta:{description:"TreeNodesModel port defaults must match the declared type."},create(e){return{Element(t){if(!Ca(t))return;let n=t.attributes.find(d=>d.name==="default")??t.attributes.find(d=>d.name==="default_value");if(!n)return;let r=t.attributes.find(d=>d.name==="name")?.value;if(!r)return;let o=Ma(e.document.root,t)?.attributes.find(d=>d.name==="ID")?.value;if(!o)return;let s=e.getNodeModel(o)?.ports.find(d=>d.name===r);if(s){if(s.direction==="output"){Oe(s.name,n.value)===void 0&&e.report({code:y.InvalidPortDefaultValue,message:`output port default for \`${s.name}\` must be a blackboard remap`,range:n.range,details:{primaryLabel:`output port default for \`${s.name}\` must be a blackboard remap`,help:`use \`${s.name}="{${s.name}}"\` or \`${s.name}="{=}"\``}});return}ut(e,{port:s,value:n.value,range:n.range,registry:X(e.semantic),typeDefinition:K(e.semantic,s.type),allowRemap:!0,diagnosticCode:y.InvalidPortDefaultValue,customLiteralDiagnosticCode:y.CustomLiteralRequiresValidator,portLabel:s.name})}}}}}),R({name:"model/no-blackboard-type-mismatch",meta:{description:"Blackboard entries must not mix incompatible resolved port types."},create(e){return{ProgramExit(){let t=X(e.semantic),n=new Map,r=e.options.allowStringEntryCompatibility??!0;for(let i of e.view.nodes)for(let o of i.portBindings){if(o.declaredPort.status!=="resolved")continue;let a=Oe(o.name,o.value);if(!a)continue;let s=_r(t,o.declaredPort.port);if(!s||s.kind==="any")continue;let d=Z(a),u=n.get(d)??[];u.push({key:a.key,scope:a.scope,displayName:Je(a),identity:d,nodeId:Pa(i.element),port:o.declaredPort.port,typeDefinition:s,range:o.attribute.range}),n.set(d,u)}for(let i of n.values()){let o=_a(e.semantic,i,r);if(o.length<2)continue;let a=i.find(s=>s.typeDefinition.canonical===o[0]);e.report({code:y.BlackboardTypeMismatch,message:`blackboard entry \`${a?.displayName??i[0]?.displayName??i[0]?.key??""}\` is used with incompatible port types: ${o.map(s=>`\`${s}\``).join(", ")}`,range:a?.range,details:{primaryLabel:`blackboard entry \`${a?.displayName??i[0]?.displayName??i[0]?.key??""}\` mixes incompatible port types`,notes:i.filter(s=>o.includes(s.typeDefinition.canonical)).map(s=>`${s.nodeId}.${s.port.name} declares ${wa(s.port,s.typeDefinition)}`),help:"use different blackboard keys, align the port types, or declare compatibility in btxml.model-augment.json"}})}}}}}),R({name:"model/require-output-port-remap",meta:{description:"Resolved output ports must write to a blackboard remap."},create(e){return{Element(t){if(Aa(t))return;let n=e.getNodeUsage(t);if(!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of t.attributes){let i=e.getPortUsage(t,r.name);i?.status==="resolved"&&i.port.direction==="output"&&Oe(i.port.name,r.value)===void 0&&e.report({code:y.OutputPortRequiresRemap,message:`output port \`${i.port.name}\` must be remapped to a blackboard entry`,range:r.range,details:{primaryLabel:`output port \`${i.port.name}\` requires a blackboard remap`,help:`use \`${i.port.name}="{${i.port.name}}"\` or \`${i.port.name}="{some_key}"\``}})}}}}})];function Ia(e,t){return e.diagnostics.some(n=>n.code===y.DuplicateNodeModelId&&n.message.includes(`\`${t}\``))}function Ca(e){return e.name==="input_port"||e.name==="output_port"||e.name==="inout_port"}function Ma(e,t){if(!e)return;return n(e,!1,void 0);function n(r,i,o){let a=i||r.name==="TreeNodesModel",s=a&&(r.name==="Action"||r.name==="Condition"||r.name==="Control"||r.name==="Decorator"||r.name==="SubTree")?r:o;if(r===t)return s;for(let d of r.children){if(d.kind!=="element")continue;let u=n(d,a,s);if(u)return u}}}function _a(e,t,n){let r=new Set;for(let i=0;i<t.length;i+=1){let o=t[i];if(o)for(let a=i+1;a<t.length;a+=1){let s=t[a];s&&(n&&(o.typeDefinition.canonical==="std::string"||s.typeDefinition.canonical==="std::string")||Te(e,o.typeDefinition.canonical,s.typeDefinition.canonical)||(r.add(o.typeDefinition.canonical),r.add(s.typeDefinition.canonical)))}}return[...r].sort()}function wa(e,t){return ae(e)??t.canonical}function Pa(e){return e.attributes.find(t=>t.name==="name")?.value??e.attributes.find(t=>t.name==="ID")?.value??e.name}function Aa(e){return e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"}var La=new Set(["_failureIf","_successIf","_skipIf","_while"]),Ua=new Set(["_onSuccess","_onFailure","_onHalted","_post"]);function Jt(e){if(La.has(e.attributeName))return{kind:"precondition",expectedResult:"bool-compatible"};if(Ua.has(e.attributeName))return{kind:"postcondition",expectedResult:"ignored"};let t=e.resolvedNodeType??e.elementName;if(e.attributeName==="code"&&t==="Script")return{kind:"script-node-code",expectedResult:"ignored"};if(e.attributeName==="code"&&t==="ScriptCondition")return{kind:"script-condition-code",expectedResult:"bool-compatible"};if(e.attributeName==="if"&&t==="Precondition")return{kind:"precondition-node-if",expectedResult:"bool-compatible"}}function Qt(e){if(!e.startsWith("@"))return{kind:"local",name:e};let t=Ze({rawName:e});return t.ok?{kind:"global-blackboard",key:t.reference.key}:{kind:"invalid-global-blackboard",raw:e,message:`invalid global blackboard identifier \`${e}\``}}var Ur=new Map([["..","DotDot"],["&&","AmpAmp"],["||","PipePipe"],["==","EqualEqual"],["!=","BangEqual"],["<=","LessEqual"],[">=","GreaterEqual"],[":=","ColonEqual"],["+=","PlusEqual"],["-=","MinusEqual"],["*=","StarEqual"],["/=","SlashEqual"]]),Or=new Map([["+","Plus"],["-","Minus"],["*","Star"],["/","Slash"],["&","Ampersand"],["|","Pipe"],["^","Caret"],["~","Tilde"],["!","Bang"],["<","Less"],[">","Greater"],["=","Equal"],["?","Question"],[":","Colon"],["(","LeftParen"],[")","RightParen"],[";","Semicolon"]]);function Vr(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(Fr(r)){n++;continue}if(en(r)){let s=n;for(n++;n<e.length&&Fa(e[n]);)n++;let d=e.slice(s,n);t.push({type:d==="true"||d==="false"?"Boolean":"Identifier",text:d,start:s,end:n});continue}if(se(r)){let s=Va(e,n);t.push(s),n=s.end;continue}if(r==="'"){let s=Oa(e,n);t.push(s),n=s.end;continue}let i=e.slice(n,n+2),o=Ur.get(i);if(o){t.push({type:o,text:i,start:n,end:n+2}),n+=2;continue}let a=Or.get(r);if(a){t.push({type:a,text:r,start:n,end:n+1}),n+=1;continue}t.push({type:"Error",text:r,start:n,end:n+1}),n+=1}return t.push({type:"EndOfInput",text:"",start:e.length,end:e.length}),t}function Oa(e,t){let n=t+1;for(;n<e.length&&e[n]!=="'";)n++;return n>=e.length?{type:"Error",text:e.slice(t),start:t,end:e.length}:{type:"String",text:e.slice(t+1,n),start:t,end:n+1}}function Va(e,t){let n=t;if(e[n]==="0"&&(e[n+1]==="x"||e[n+1]==="X")){n+=2;let i=n;for(;n<e.length&&qa(e[n]);)n++;return i===n||$a(e,n)?(n=Ve(e,n),Fe(e,t,n)):{type:"Integer",text:e.slice(t,n),start:t,end:n}}for(;n<e.length&&se(e[n]);)n++;let r="Integer";if(e[n]==="."){if(e[n+1]===".")return{type:r,text:e.slice(t,n),start:t,end:n};if(!se(e[n+1]))return n=Ve(e,n+1),Fe(e,t,n);for(r="Real",n+=1;n<e.length&&se(e[n]);)n++}if(e[n]==="e"||e[n]==="E"){let i=n;n+=1,(e[n]==="+"||e[n]==="-")&&(n+=1);let o=n;for(;n<e.length&&se(e[n]);)n++;if(o===n)return n=Ve(e,Math.max(n,i+1)),Fe(e,t,n);r="Real"}return Xa(e,n)?(n=Ve(e,n),Fe(e,t,n)):{type:r,text:e.slice(t,n),start:t,end:n}}function Ve(e,t){let n=t;for(;n<e.length;){let r=e[n];if(Fr(r)||Or.has(r)||Ur.has(e.slice(n,n+2))||r==="."&&e[n+1]===".")break;n++}return n}function Fe(e,t,n){return{type:"Error",text:e.slice(t,n),start:t,end:n}}function Fr(e){return e===" "||e===" "||e===`
12
+ `||e==="\r"}function en(e){return e!==void 0&&/[A-Za-z_@]/.test(e)}function Fa(e){return e!==void 0&&/[A-Za-z0-9_]/.test(e)}function se(e){return e!==void 0&&/[0-9]/.test(e)}function qa(e){return e!==void 0&&/[0-9A-Fa-f]/.test(e)}function Xa(e,t){let n=e[t];return en(n)||se(n)}function $a(e,t){let n=e[t];return n==="."||en(n)||se(n)}var ja=new Map([["ColonEqual",":="],["Equal","="],["PlusEqual","+="],["MinusEqual","-="],["StarEqual","*="],["SlashEqual","/="]]),za=new Map([["PipePipe","||"],["AmpAmp","&&"],["Pipe","|"],["Caret","^"],["Ampersand","&"],["Plus","+"],["Minus","-"],["DotDot",".."],["Star","*"],["Slash","/"]]),qr=new Map([["EqualEqual","=="],["BangEqual","!="],["Less","<"],["Greater",">"],["LessEqual","<="],["GreaterEqual",">="]]),O={assignment:2,ternary:4,pipePipe:6,ampAmp:8,comparison:10,pipeCaret:12,ampersand:14,additive:16,multiplicative:18};function Xe(e){let t=Vr(e),n=t.filter(r=>r.type==="Error");return n.length>0?{ok:!1,errors:n.map(r=>({kind:"invalid-token",message:`invalid token \`${r.text}\``,range:{start:r.start,end:r.end}})),tokens:t}:Xr(t,e)}function Xr(e,t=""){let n=new tn(e,t),r=[];if(n.peek().type==="EndOfInput")return{ok:!1,errors:[{kind:"empty-script",message:"empty script",range:{start:0,end:0}}],tokens:e};for(;n.peek().type!=="EndOfInput";){let o=n.parseExpression(0);if(!o)return{ok:!1,errors:n.errors,tokens:e};for(r.push(o);n.match("Semicolon"););}if(n.errors.length>0)return{ok:!1,errors:n.errors,tokens:e};let i=Ha(r);return{ok:!0,program:{kind:"Program",statements:r,range:i},tokens:e}}var tn=class{constructor(t,n,r=0){this.tokens=t;this.source=n;this.index=r}tokens;source;index;errors=[];parseExpression(t){let n=this.parsePrefix();if(n){for(;;){let r=this.peek();if(r.type==="EndOfInput"||r.type==="Semicolon"||r.type==="RightParen"||r.type==="Colon")break;let i=ja.get(r.type);if(i){if(t>=O.assignment)break;this.consume();let d=this.parseExpression(0);if(!d)return;n={kind:"AssignmentExpression",operator:i,left:n,right:d,range:qe(n.range,d.range)};break}if(r.type==="Question"){if(t>=O.ternary)break;this.consume();let d=this.parseExpression(0);if(!d)return;if(!this.match("Colon")){this.reportError("expected-ternary-colon","expected ':' in ternary expression",this.peek());return}let u=this.parseExpression(O.ternary);if(!u)return;n={kind:"ConditionalExpression",condition:n,thenExpression:d,elseExpression:u,range:qe(n.range,u.range)};break}let o=qr.get(r.type);if(o){if(t>=O.comparison)break;this.consume();let d=[n],u=[o],l=this.parseExpression(O.comparison);if(!l)return;for(d.push(l);;){let p=qr.get(this.peek().type);if(!p)break;this.consume();let m=this.parseExpression(O.comparison);if(!m)return;u.push(p),d.push(m)}n={kind:"ComparisonChain",operands:d,operators:u,range:qe(d[0].range,d[d.length-1].range)};continue}let a=za.get(r.type),s=a?Wa(r.type):void 0;if(a&&s!==void 0){if(t>=s)break;this.consume();let d=this.parseExpression(s);if(!d)return;n={kind:"BinaryExpression",operator:a,left:n,right:d,range:qe(n.range,d.range)};continue}this.reportError("unexpected-token-after-expression",`unexpected token after expression: \`${r.text||r.type}\``,r);return}return n}}parsePrefix(){let t=this.peek();switch(t.type){case"Identifier":return this.consume(),{kind:"Identifier",name:t.text,range:de(t)};case"Integer":case"Real":case"Boolean":case"String":return this.consume(),Ga(t,this.source);case"Minus":case"Tilde":case"Bang":{this.consume();let n=this.parseExpression(20);return n?{kind:"UnaryExpression",operator:Ka(t.type),argument:n,range:qe(de(t),n.range)}:void 0}case"LeftParen":{let n=this.consume(),r=this.parseExpression(0);if(!r)return;let i=this.peek();if(i.type!=="RightParen"){this.reportError("expected-right-paren","expected ')'",i);return}return this.consume(),Ya(r,{start:n.start,end:i.end})}default:this.reportError("expected-operand","expected operand",t);return}}peek(){return this.tokens[this.index]??this.tokens[this.tokens.length-1]}consume(){let t=this.peek();return this.index+=1,t}match(t){return this.peek().type!==t?!1:(this.consume(),!0)}reportError(t,n,r){this.errors.push({kind:t,message:n,range:de(r)})}};function Ga(e,t){switch(e.type){case"Integer":return{kind:"Literal",valueKind:"integer",raw:t.slice(e.start,e.end),value:e.text.startsWith("0x")||e.text.startsWith("0X")?Number(e.text):Number.parseInt(e.text,10),range:de(e)};case"Real":return{kind:"Literal",valueKind:"real",raw:t.slice(e.start,e.end),value:Number(e.text),range:de(e)};case"Boolean":return{kind:"Literal",valueKind:"boolean",raw:t.slice(e.start,e.end),value:e.text==="true",range:de(e)};case"String":return{kind:"Literal",valueKind:"string",raw:t.slice(e.start,e.end),value:e.text,range:de(e)};default:throw new Error(`unsupported literal token ${e.type}`)}}function Ka(e){switch(e){case"Minus":return"-";case"Tilde":return"~";case"Bang":return"!";default:throw new Error(`unsupported unary token ${e}`)}}function Wa(e){switch(e){case"PipePipe":return O.pipePipe;case"AmpAmp":return O.ampAmp;case"Pipe":case"Caret":return O.pipeCaret;case"Ampersand":return O.ampersand;case"Plus":case"Minus":case"DotDot":return O.additive;case"Star":case"Slash":return O.multiplicative;default:return}}function de(e){return{start:e.start,end:e.end}}function qe(e,t){return{start:e.start,end:t.end}}function Ya(e,t){return{...e,range:t}}function Ha(e){return{start:e[0]?.range.start??0,end:e[e.length-1]?.range.end??0}}var Za=new Set(["int8_t","std::int8_t","int16_t","std::int16_t","int32","int32_t","std::int32_t","int64","int64_t","std::int64_t","int","long","short","uint8_t","std::uint8_t","uint16_t","std::uint16_t","uint32","uint32_t","std::uint32_t","uint64","uint64_t","std::uint64_t","uint","unsigned","unsigned int","size_t","std::size_t","float","double"]);function nn(e={}){let t=be(e.augmentations??[]),n=e.areTypesCompatible??((a,s)=>Be(t,a,s)),r=new Map,i=new Map,o={symbols:new Map,globalBlackboard:new Map,enums:Ja(e.enums,e.augmentations??[])};for(let a of e.symbols??[])$r(o.symbols,r,a,n);for(let a of e.globalBlackboardSymbols??[])$r(o.globalBlackboard,i,a,n);return o}function le(e){return{symbols:new Map([...e?.symbols.entries()??[]].map(([t,n])=>[t,{...n}])),globalBlackboard:new Map([...e?.globalBlackboard.entries()??[]].map(([t,n])=>[t,{...n}])),enums:new Map(e?.enums??[])}}function rn(e){let t=le(e.baseEnvironment),n=[];for(let r of e.entries){let i=le(t),o=r.parseResult??Xe(r.source),a=le(i),s;o.ok&&(s=je({program:o.program,environment:i,attributeName:r.attributeName,originId:r.originId??String(r.id)}),a=le(s.environment)),n.push({id:r.id,parseResult:o,environmentBefore:i,environmentAfter:a,...s?{analysis:s}:{}}),t.symbols.clear(),t.globalBlackboard.clear(),t.enums.clear();for(let[d,u]of a.symbols)t.symbols.set(d,{...u});for(let[d,u]of a.globalBlackboard)t.globalBlackboard.set(d,{...u});for(let[d,u]of a.enums)t.enums.set(d,u)}return n}function jr(e){let t=new Map;for(let n of e)for(let[r,i]of Object.entries(n.script?.enums??{}))t.set(r,i);return t}function $e(e,t){let n=q(e,t);return zr(t,n)}function zr(e,t){if(!e||!t)return{kind:"unknown"};if(t.kind==="any")return{kind:"any"};let n=t.canonical.toLowerCase();return n==="bool"?{kind:"bool"}:n==="std::string"||n==="string"?{kind:"string"}:Za.has(n)?{kind:"number"}:{kind:"custom",name:t.name??e,canonical:t.canonical}}function Gr(e,t){return e.kind==="any"||t.kind==="any"||e.kind==="unknown"||t.kind==="unknown"||e.kind==="error"||t.kind==="error"?!0:e.kind==="custom"&&t.kind==="custom"?e.canonical===t.canonical:e.kind===t.kind}function ve(e,t){return e.kind==="any"||t.kind==="any"||e.kind==="unknown"||t.kind==="unknown"||e.kind==="error"||t.kind==="error"?!0:e.kind==="custom"||t.kind==="custom"?e.kind==="custom"&&t.kind==="custom"?e.canonical===t.canonical:!1:e.kind==="bool"&&t.kind==="number"?!0:e.kind===t.kind}function ue(e){return e.kind==="bool"||e.kind==="number"||e.kind==="unknown"||e.kind==="any"||e.kind==="error"}function on(e,t){return e.kind==="error"||t.kind==="error"?{kind:"error"}:e.kind==="unknown"||t.kind==="unknown"?{kind:"unknown"}:e.kind==="any"||t.kind==="any"?e.kind===t.kind?e:{kind:"unknown"}:e.kind==="custom"||t.kind==="custom"?e.kind==="custom"&&t.kind==="custom"&&e.canonical===t.canonical?e:void 0:e.kind===t.kind?e:void 0}function Ja(e,t){if(e instanceof Map)return new Map(e);let n=jr(t??[]);for(let[r,i]of Object.entries(e??{}))n.set(r,i);return n}function $r(e,t,n,r){let i=e.get(n.name);if(!i){e.set(n.name,{name:n.name,type:n.type,source:n.source,writable:n.writable,readable:n.readable}),t.set(n.name,n.compatibilityKey);return}let o=t.get(n.name),a=i.conflict===!0||o!==void 0&&n.compatibilityKey!==void 0&&!r(o,n.compatibilityKey)||!Gr(i.type,n.type);e.set(n.name,{...i,readable:i.readable||n.readable,writable:i.writable||n.writable,conflict:a}),o===void 0&&t.set(n.name,n.compatibilityKey)}var ce={kind:"number"},pt={kind:"string"},ct={kind:"bool"},V={kind:"unknown"},B={kind:"error"};function je(e){let t=le(e.environment),n=[],r=[],i=[],o=[],a=[],s=[],d=[],u=[];return e.program.statements.forEach((l,p)=>{u.push(W({expression:l,statementIndex:p,environment:t,identifiers:n,resolvedIdentifiers:r,unknownIdentifiers:i,globalBlackboardAccesses:o,invalidGlobalBlackboardIdentifiers:a,introducedSymbols:s,diagnostics:d,attributeName:e.attributeName??"code",originId:e.originId}))}),{environment:t,identifiers:n,resolvedIdentifiers:r,unknownIdentifiers:i,globalBlackboardAccesses:o,invalidGlobalBlackboardIdentifiers:a,introducedSymbols:s,diagnostics:d,statementTypes:u,finalType:u.at(-1)}}function W(e){let{expression:t}=e;switch(t.kind){case"Literal":return t.valueKind==="integer"||t.valueKind==="real"?ce:t.valueKind==="string"?pt:t.valueKind==="boolean"?ct:V;case"Identifier":return es(e,t.name,t.range);case"UnaryExpression":{let n=W({...e,expression:t.argument});return t.operator==="!"?ue(n)?ct:(L(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires a bool-compatible operand`,`operand for \`${t.operator}\` is not bool-compatible`,"use a boolean, number, or unknown-compatible expression here"),B):n.kind==="number"?ce:n.kind==="unknown"||n.kind==="any"||n.kind==="error"?n.kind==="any"?n:n.kind==="error"?B:V:(L(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires a numeric operand`,`operand for \`${t.operator}\` is not numeric`,"use a number expression here"),B)}case"BinaryExpression":{let n=W({...e,expression:t.left}),r=W({...e,expression:t.right});switch(t.operator){case"&&":case"||":return Wr(n)||Wr(r)?(L(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires bool-compatible operands`,`operands for \`${t.operator}\` are not bool-compatible`,"use boolean or numeric expressions here"),B):ct;case"+":return n.kind==="string"&&r.kind==="string"?pt:n.kind==="number"&&r.kind==="number"?ce:an(n,r)?V:(sn(e,t.range,t.operator),B);case"-":case"*":case"/":case"&":case"|":case"^":return n.kind==="number"&&r.kind==="number"?ce:an(n,r)?V:(sn(e,t.range,t.operator),B);case"..":return n.kind==="string"&&(r.kind==="string"||r.kind==="number")||r.kind==="string"&&(n.kind==="string"||n.kind==="number")?pt:an(n,r)?V:(sn(e,t.range,t.operator),B)}return V}case"ComparisonChain":{let n=t.operands.map(r=>W({...e,expression:r}));for(let r=0;r<t.operators.length;r+=1){let i=t.operators[r],o=n[r],a=n[r+1];if(!ts(i,o,a))return L(e,"invalid-operand-type",{start:t.operands[r]?.range.start??t.range.start,end:t.operands[r+1]?.range.end??t.range.end},`operator \`${i}\` cannot compare these operand types`,`comparison operands for \`${i}\` are not compatible`,"compare values of the same primitive type, or use == / != for matching custom types"),B}return ct}case"ConditionalExpression":{let n=W({...e,expression:t.condition});ue(n)||L(e,"invalid-operand-type",t.condition.range,"ternary condition must be bool-compatible","ternary condition is not bool-compatible","use a boolean or numeric condition expression here");let r=W({...e,expression:t.thenExpression}),i=W({...e,expression:t.elseExpression}),o=on(r,i);return o||(L(e,"invalid-operand-type",t.range,"ternary branches must produce compatible types","then and else branches have incompatible types","return the same type from both ternary branches"),B)}case"AssignmentExpression":return Qa(e)}}function Qa(e){let{environment:t,attributeName:n,identifiers:r,introducedSymbols:i}=e,o=e.expression,a=W({...e,expression:o.right});if(o.left.kind!=="Identifier")return W({...e,expression:o.left}),L(e,"invalid-operand-type",o.left.range,"assignment target must be an identifier","this assignment target is not writable","assign to a variable name instead of an expression"),B;let s=o.left,d=o.operator===":="?"declare":o.operator==="="?"write":"readwrite",u={name:s.name,kind:d,range:s.range,identifier:s,statementIndex:e.statementIndex};r.push(u);let l=Qt(s.name);if(l.kind==="invalid-global-blackboard")return e.invalidGlobalBlackboardIdentifiers.push(u),Yr(e,s.range,l.raw,l.message),B;if(l.kind==="global-blackboard"){let g=t.globalBlackboard.get(l.key),k=o.operator===":="?a:o.operator==="="?g&&ve(g.type,a)?a:g?void 0:a:Kr(g?.type??V,a,o.operator);if(o.operator!==":="&&o.operator!=="="&&!k)return L(e,"invalid-compound-assignment",o.range,`operator \`${o.operator}\` is not valid for these operand types`,`compound assignment \`${o.operator}\` is not allowed here`,o.operator==="+="?"use number += number or string += string":"use numeric operands for this compound assignment"),B;if((o.operator===":="||o.operator==="=")&&g&&!ve(g.type,a))return dn(e,s,g.type,a),B;let h=g?{...g}:{name:l.key,type:a,source:{kind:"global-blackboard",key:l.key,range:s.range,originId:e.originId},readable:!0,writable:!0};return h.type=k??a,t.globalBlackboard.set(l.key,h),e.resolvedIdentifiers.push({access:u,resolution:{kind:"global-blackboard",key:l.key,symbol:h}}),e.globalBlackboardAccesses.push({key:l.key,rawName:s.name,kind:d,range:s.range,inferredType:h.type}),h.type}let p=t.symbols.get(s.name);if(o.operator===":="&&!p){let g={name:s.name,type:a,source:{kind:"script-assignment",attributeName:n,range:s.range,originId:e.originId},readable:!0,writable:!0};return t.symbols.set(s.name,g),e.resolvedIdentifiers.push({access:u,resolution:{kind:"symbol",symbol:g}}),i.push(g),a}if(!p)return e.resolvedIdentifiers.push({access:u,resolution:{kind:"unknown"}}),L(e,"assignment-to-unknown-variable",s.range,`assignment target \`${s.name}\` is not defined`,`\`${s.name}\` must already exist before this assignment`,"introduce the variable earlier with `:=` or add a matching blackboard remap"),B;if(e.resolvedIdentifiers.push({access:u,resolution:{kind:"symbol",symbol:p}}),o.operator==="=")return ve(p.type,a)?(ln(p,a),a):(dn(e,s,p.type,a),B);if(o.operator===":=")return ve(p.type,a)?(ln(p,a),a):(dn(e,s,p.type,a),B);let m=Kr(p.type,a,o.operator);return m?(ln(p,m),m):(L(e,"invalid-compound-assignment",o.range,`operator \`${o.operator}\` is not valid for these operand types`,`compound assignment \`${o.operator}\` is not allowed here`,o.operator==="+="?"use number += number or string += string":"use numeric operands for this compound assignment"),B)}function es(e,t,n){let r={name:t,kind:"read",range:n,identifier:e.expression,statementIndex:e.statementIndex};e.identifiers.push(r);let i=Qt(t);if(i.kind==="invalid-global-blackboard")return e.invalidGlobalBlackboardIdentifiers.push(r),Yr(e,n,i.raw,i.message),B;if(i.kind==="global-blackboard"){let s=e.environment.globalBlackboard.get(i.key);return e.globalBlackboardAccesses.push({key:i.key,rawName:t,kind:"read",range:n,inferredType:s?.type??V}),e.resolvedIdentifiers.push({access:r,resolution:{kind:"global-blackboard",key:i.key,...s?{symbol:s}:{}}}),s?.type??V}let o=e.environment.enums.get(t);if(o!==void 0)return e.resolvedIdentifiers.push({access:r,resolution:{kind:"enum",name:t,value:o}}),ce;let a=e.environment.symbols.get(t);return a?(e.resolvedIdentifiers.push({access:r,resolution:{kind:"symbol",symbol:a}}),a.type):(e.resolvedIdentifiers.push({access:r,resolution:{kind:"unknown"}}),e.unknownIdentifiers.push(r),V)}function Kr(e,t,n){return e.kind==="error"||t.kind==="error"?B:e.kind==="unknown"||t.kind==="unknown"||e.kind==="any"||t.kind==="any"?V:n==="+="?e.kind==="number"&&t.kind==="number"?ce:e.kind==="string"&&t.kind==="string"?pt:void 0:e.kind==="number"&&t.kind==="number"?ce:void 0}function an(e,t){return mt(e)||mt(t)}function mt(e){return e.kind==="unknown"||e.kind==="any"||e.kind==="error"}function Wr(e){return!ue(e)}function ts(e,t,n){return mt(t)||mt(n)?!0:e==="=="||e==="!="?t.kind==="custom"||n.kind==="custom"?t.kind==="custom"&&n.kind==="custom"&&t.canonical===n.canonical:t.kind===n.kind:t.kind==="custom"||n.kind==="custom"?!1:t.kind==="number"&&n.kind==="number"||t.kind==="string"&&n.kind==="string"}function sn(e,t,n){L(e,"invalid-operand-type",t,`operator \`${n}\` cannot be applied to these operand types`,`operands for \`${n}\` are not compatible`,"use operands with the types required by this operator")}function dn(e,t,n,r){L(e,"variable-type-mismatch",t.range,`cannot assign ${un(r)} to variable \`${t.name}\` of type ${un(n)}`,`\`${t.name}\` expects ${un(n)} here`,"assign a compatible value or change the variable's source type")}function Yr(e,t,n,r){L(e,"invalid-global-blackboard-identifier",t,r,`\`${n}\` is not a valid global blackboard identifier`,"use `@name` with a valid blackboard key that starts with a letter or underscore")}function ln(e,t){e.source.kind==="script-assignment"&&(e.type.kind!=="unknown"&&e.type.kind!=="error"||t.kind==="unknown"||t.kind==="any"||t.kind==="error"||(e.type=t))}function L(e,t,n,r,i,o){e.diagnostics.push({code:t,range:n,message:r,details:{primaryLabel:i,help:o}})}function un(e){return e.kind==="custom"?e.name:e.kind}var Hr=new WeakMap;function ft(e,t){let n=e.getNodeUsage(t),r=n.model.status==="resolved"?n.model.model.id:n.nodeType;return t.attributes.flatMap(i=>{let o=Jt({elementName:t.name,attributeName:i.name,resolvedNodeType:r});return o?[{attribute:i,info:o,parseResult:Xe(i.value)}]:[]})}function j(e,t,n){return vt(e.document,t,n)}function Zr(e){return{start:0,end:e.value.length}}function ne(e,t){let n=e.getTreeNodeView(t),r=n?.behaviorTree;return!n||!r?ft(e,t).map(i=>{let o=Jr(e,[]);return{...i,environment:o,analysis:i.parseResult.ok?je({program:i.parseResult.program,environment:o,attributeName:i.attribute.name}):void 0}}):ns(e,r).filter(i=>i.node.element===t).map(i=>({...i.candidate,environment:i.environmentBefore,analysis:i.analysis}))}function ns(e,t){let n=Hr.get(e.view);n||(n=new WeakMap,Hr.set(e.view,n));let r=n.get(t);if(r)return r;let i=t.nodes.flatMap(a=>ft(e,a.element).map((s,d)=>({id:`${a.path.join(".")}:${s.attribute.name}:${d}`,node:a,candidate:s}))),o=rn({baseEnvironment:Jr(e,t.nodes),entries:i.map(a=>({id:a.id,source:a.candidate.attribute.value,attributeName:a.candidate.attribute.name,originId:a.id,parseResult:a.candidate.parseResult}))}).flatMap((a,s)=>{let d=i[s];return d?[{...a,node:d.node,candidate:d.candidate}]:[]});return n.set(t,o),o}function Jr(e,t){let n=X(e.semantic),r=[],i=[],o=t[0]?.behaviorTree.id;if(o){let a=e.getNodeModel(o);if(a?.kind==="SubTree")for(let s of a.ports){let d=ae(s),l=K(e.semantic,d)?.canonical??d;r.push({name:s.name,type:$e(n,d),source:{kind:"subtree-port",nodeType:o,portName:s.name,direction:s.direction},readable:!0,writable:s.direction==="output"||s.direction==="inout",compatibilityKey:l})}}for(let a of t)for(let s of a.portBindings){if(s.usage.status!=="resolved")continue;let d=A({portName:s.usage.port.name,rawValue:s.usage.value});if(!d.ok||d.reference.scope==="global")continue;let u=ae(s.usage.port),p=K(e.semantic,u)?.canonical??u,m=s.usage.port.direction,g=a.usage.model.status==="resolved"?a.usage.model.model.id:a.usage.nodeType;r.push({name:d.reference.key,type:$e(n,u),source:{kind:"port-remap",nodeType:g,portName:s.usage.port.name,direction:m},readable:m==="input"||m==="output"||m==="inout",writable:m==="output"||m==="inout",compatibilityKey:p})}return i.push(...rs(e,n)),nn({symbols:r,globalBlackboardSymbols:i,augmentations:jt(e.semantic),areTypesCompatible:(a,s)=>a&&s?Te(e.semantic,a,s):!0})}function rs(e,t){let n=[];for(let r of e.view.nodes){let i=r.usage.model.status==="resolved"?r.usage.model.model.id:r.usage.nodeType;for(let o of r.portBindings){if(o.usage.status!=="resolved")continue;let a=A({portName:o.usage.port.name,rawValue:o.usage.value});if(!a.ok||a.reference.scope!=="global")continue;let s=ae(o.usage.port),u=K(e.semantic,s)?.canonical??s,l=o.usage.port.direction;n.push({name:a.reference.key,type:$e(t,s),source:{kind:"global-blackboard-remap",nodeType:i,portName:o.usage.port.name,direction:l,key:a.reference.key},readable:l==="input"||l==="output"||l==="inout",writable:l==="output"||l==="inout",compatibilityKey:u})}}return n}var Qr=R({name:"script/no-unknown-variable",create(e){return{Element(t){for(let n of ne(e,t))if(n.analysis)for(let r of n.analysis.unknownIdentifiers)e.report({code:y.UnknownScriptVariable,message:`unknown script variable \`${r.name}\``,range:j(e,n.attribute,r.range),details:{primaryLabel:`\`${r.name}\` is not defined in the script environment`,help:"introduce it earlier with `:=`, add a matching blackboard remap, or define a script enum in btxml.model-augment.json"}})}}}});var ei=R({name:"script/valid-assignment",create(e){return{Element(t){for(let n of ne(e,t))if(n.analysis)for(let r of n.analysis.diagnostics){let i=r.code==="assignment-to-unknown-variable"?y.AssignmentToUnknownVariable:r.code==="invalid-compound-assignment"?y.InvalidCompoundAssignment:r.code==="variable-type-mismatch"?y.ScriptVariableTypeMismatch:r.code==="invalid-global-blackboard-identifier"?y.InvalidGlobalBlackboardIdentifier:void 0;i&&e.report({code:i,message:r.message,range:j(e,n.attribute,r.range),details:r.details})}}}}});var ti=R({name:"script/valid-expression-type",create(e){return{Element(t){for(let n of ne(e,t))if(n.analysis)for(let r of n.analysis.diagnostics)r.code==="invalid-operand-type"&&e.report({code:y.InvalidScriptOperandType,message:r.message,range:j(e,n.attribute,r.range),details:r.details})}}}});var ni=R({name:"script/valid-result-type",create(e){return{Element(t){for(let n of ne(e,t)){if(n.info.expectedResult!=="bool-compatible"||!n.parseResult.ok||!n.analysis)continue;let r=n.parseResult.program.statements.at(-1),i=n.analysis.finalType;!r||!i||ue(i)||e.report({code:y.ScriptResultNotBoolCompatible,message:`script result for \`${n.attribute.name}\` is not bool-compatible`,range:j(e,n.attribute,r.range),details:{primaryLabel:"script result is not bool-compatible here",help:"return a boolean or numeric expression, or move side effects into a postcondition/script node"}})}}}}});var ri=R({name:"script/valid-syntax",create(e){return{Element(t){for(let n of ft(e,t))if(!n.parseResult.ok)for(let r of n.parseResult.errors){let i=r.kind==="empty-script"?y.EmptyScript:r.kind==="invalid-token"?y.InvalidScriptToken:y.InvalidScriptSyntax;e.report({code:i,message:r.message,range:r.kind==="empty-script"?n.attribute.valueContentRange??n.attribute.valueRange??j(e,n.attribute,Zr(n.attribute)):j(e,n.attribute,r.range),details:{primaryLabel:`invalid script in \`${n.attribute.name}\``}})}}}}});var ii=[ri,Qr,ei,ti,ni];var is={unused:"suppression/no-unused","missing-reason":"suppression/require-reason"};function oi(e){return R({name:is[e],create(t){return{ProgramExit(){for(let n of t.getSuppressionIssues(e))t.report({message:n.message,range:n.range,data:os(n)})}}}})}function os(e){return e.code?{code:e.code}:void 0}var ai=[oi("unused"),oi("missing-reason")];function gt(e,t){return e.attributes.find(n=>n.name===t)}function si(e,t){if(!e)return!1;let n=(r,i)=>{let o=i||r.name==="TreeNodesModel";if(r===t)return o;for(let a of r.children)if(a.kind==="element"&&n(a,o))return!0;return!1};return n(e,!1)}var di=[R({name:"tree/require-id",create(e){return{Element(t){t.name!=="BehaviorTree"||gt(t,"ID")||e.report({message:"BehaviorTree must have ID attribute",range:t.range})}}}}),R({name:"tree/no-duplicate-id-in-file",create(e){let t=new Set;return{ProgramExit(){let n=Ae(e.semantic,e.document.uri);for(let r of n?.behaviorTrees??[])r.idRange&&(t.has(r.id)&&e.report({message:`Duplicate BehaviorTree ID: ${r.id}`,range:r.idRange}),t.add(r.id))}}}}),R({name:"tree/no-duplicate-id",create(e){return{ProgramExit(){if(e.config.resolver.behaviorTreeIds!=="allow-ambiguous")for(let t of Ft(e.semantic)){let n=oe(e.semantic,t);if(n.length<=1||new Set(n.map(o=>o.uri)).size<=1)continue;let i=n.filter(o=>o.uri===e.document.uri);i.length>0&&e.report({message:`Duplicate BehaviorTree ID: ${t}`,range:i[0]?.idRange})}}}}}),R({name:"tree/no-unknown-main-tree",create(e){return{Document(){let t=e.document.root;if(e.document.kind!=="bt-document"||!t)return;let n=gt(t,"main_tree_to_execute");!n?.value||Vt(e.semantic,n.value)||e.report({message:`main_tree_to_execute references unknown BehaviorTree: ${n.value}`,range:n.range})}}}}),R({name:"tree/no-unknown-subtree",create(e){return{Element(t){if(t.name!=="SubTree"||si(e.document.root,t))return;let n=e.getSubTreeCallView(t),r=n?.node.element.attributes.find(o=>o.name==="ID")??gt(t,"ID");!r||n?.target.status==="resolved"||e.resolveSubTree(r.value,e.document.uri).status!=="unresolved"||e.report({message:`unknown subtree \`${r.value}\``,range:r.valueContentRange||r.valueRange})}}}}),R({name:"tree/no-ambiguous-subtree",create(e){return{Element(t){if(t.name!=="SubTree"||si(e.document.root,t))return;let n=gt(t,"ID");if(!n||e.getSubTreeCallView(t)?.target.status==="resolved")return;let i=e.resolveSubTree(n.value,e.document.uri);i.status!=="ambiguous"||i.behaviorTrees.length<=1||e.report({message:`ambiguous subtree \`${n.value}\``,range:n.valueContentRange||n.valueRange})}}}}),R({name:"tree/no-duplicate-node-model-id",meta:{description:"TreeNodesModel elements must have unique IDs within the same model block."},create(){return{}}})];var as=new Map([["IfThenElse",{min:2,max:3}],["WhileDoElse",{min:2,max:3}]]);function ss(e,t){return e===t?String(e):`${e}\u2013${t}`}var li=R({name:"model/valid-child-count",create(e){return{Element(t){if($(t))return;let n=e.getNodeUsage(t);n.model.status==="resolved"&&ds(e,t,n.model.model.id,n.model.model.kind)}}}});function ds(e,t,n,r){let i=Ir(t).length,o=as.get(n);if(o){if(i<o.min||i>o.max){let a=ss(o.min,o.max);e.report({message:`\`${n}\` requires ${a} child node(s), but has ${i}.`,range:t.range})}return}if(r==="Action"||r==="Condition"){i>0&&e.report({message:`${r} node \`${n}\` must not have child nodes, but has ${i}.`,range:t.range});return}if(r==="Decorator"){i!==1&&e.report({message:`Decorator node \`${n}\` must have exactly 1 child node, but has ${i}.`,range:t.range});return}if(r==="Control"){i<1&&e.report({message:`Control node \`${n}\` must have at least 1 child node.`,range:t.range});return}r==="SubTree"&&i>0&&e.report({message:`SubTree node \`${n}\` must not have child nodes, but has ${i}.`,range:t.range})}var ui=R({name:"model/valid-port-value",create(e){return{Element(t){if($(t))return;let n=e.getNodeUsage(t);if(!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of t.attributes){let i=e.getPortUsage(t,r.name);i?.status==="resolved"&&ut(e,{port:i.port,value:r.value,range:r.range,registry:X(e.semantic),typeDefinition:K(e.semantic,i.port.type),allowRemap:!0,diagnosticCode:y.InvalidPortValueType,customLiteralDiagnosticCode:y.CustomLiteralRequiresValidator,portLabel:r.name})}}}}});var ci=R({name:"model/require-port",create(e){return{Element(t){if($(t))return;let n=e.getNodeUsage(t);if(!(n.tagForm==="subtree"&&n.allowsArbitraryAttributes)&&!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of n.ports)!r.required||n.portUsages.some(o=>o.name===r.name&&o.status==="resolved")||e.report({message:`missing required port \`${r.name}\``,range:t.range,details:n.tagForm==="subtree"?{primaryLabel:n.model.status==="resolved"?`node \`${n.model.model.id}\` requires port \`${r.name}\``:`SubTree requires port \`${r.name}\``,help:`add \`${r.name}="..."\` or provide a blackboard reference such as \`${r.name}="{value}"\``}:void 0})}}}});var pi=[R({name:"model/no-childless-control-shape-mismatch",create(e){return{Element(t){if($(t)||!t.selfClosing)return;let n=e.getTreeNodeView(t);if(n?.model.status!=="resolved")return;let r=n.model.model.kind;r!=="Control"&&r!=="Decorator"||e.report({message:`${r} node \`${n.model.model.id}\` normally expects child nodes.`,range:t.range})}}}}),R({name:"model/no-leaf-block-shape",create(e){return{Element(t){if($(t)||t.selfClosing||Cr(t))return;let n=e.getTreeNodeView(t);if(n?.model.status!=="resolved")return;let r=n.model.model.kind;r!=="Action"&&r!=="Condition"&&r!=="SubTree"||e.report({message:`${r} node \`${n.model.model.id}\` should be self-closing or have no children.`,range:t.range})}}}})];var mi=R({name:"model/no-unknown-node",create(e){return{Element(t){let n=e.getNodeUsage(t);if(n.tagForm==="root"||n.tagForm==="behavior-tree"||n.tagForm==="tree-nodes-model"||n.tagForm==="include"||n.tagForm==="model-definition"||n.tagForm==="subtree"||n.tagForm==="unknown-xml"||n.model.status==="resolved"||n.model.status==="ambiguous")return;let r=t.attributes.find(i=>i.name==="ID");e.report({message:`unknown node \`${n.nodeType??n.tagName}\``,range:r?.valueContentRange??r?.valueRange??t.range})}}}});var fi=R({name:"model/no-unknown-port",create(e){return{Element(t){if($(t))return;let n=e.getNodeUsage(t);for(let r of n.portUsages){if(r.status!=="undeclared")continue;let i=n.ports.map(a=>a.name).sort(),o=i.length>=1&&i.length<=8?[`note: defined ports: ${i.map(a=>`\`${a}\``).join(", ")}`]:void 0;e.report({message:`unknown port \`${r.name}\``,range:r.attribute.range,details:n.tagForm==="subtree"?{primaryLabel:n.model.status==="resolved"?`node \`${n.model.model.id}\` does not define this port`:"SubTree does not define this port in strict mode",help:n.model.status==="resolved"?`remove \`${r.name}\` or add it to the \`${n.model.model.id}\` SubTree model`:`remove \`${r.name}\`, add it to a SubTree model, or set the \`model/no-unknown-port\` rule option \`subTreePorts\` to \`loose\``,notes:o}:void 0})}}}}});var gi=[mi,fi,ci,ui,...pi,li];function ls(e,t){return e.attributes.find(n=>n.name===t)}function us(e){let t=e.resolver.includes.elements;return new Set(["BehaviorTree","TreeNodesModel",...t.map(n=>n.name)])}var yi=[R({name:"xml/valid-root",create(e){return{Document(){let t=e.document.root;e.document.kind!=="bt-document"||!t||t.name==="root"||e.report({message:"Root element must be <root>",range:t.range})}}}}),{name:"xml/require-btcpp-format",code:y.MissingBTCPPFormat,defaultSeverity:"error",meta:{description:'Root element must declare BTCPP_format="4".'},create(e){return{Document(){let t=e.document.root;e.document.kind!=="bt-document"||!t||ls(t,"BTCPP_format")?.value==="4"||e.report({message:'Root element must have BTCPP_format="4"',range:t.range})}}}},R({name:"xml/no-unknown-top-level-element",meta:{description:"Top-level elements must be BehaviorTree, TreeNodesModel, or configured include elements."},create(e){return{Element(t){let n=e.document.root;e.document.kind!=="bt-document"||!n||t===n||!n.children.includes(t)||us(e.config).has(t.name)||e.report({message:`Unknown top-level element: ${t.name}`,range:t.range})}}}})];var cn=[...yi,...ii,...di,...Lr,...gi,...Er,...ai],$p=new Map(cn.map(e=>[e.name,e]));function bi(e){if(e!=="off")return e==="info"?S.Info:e==="warn"?S.Warning:S.Error}function Si(e,t){return it(e.linter.rules[t])?.options??{}}function hi(e){let t=it(e.config.linter.rules[e.rule]);return bi(t?t.severity:e.defaultSeverity)}function Ti(e){let t=[],n=e.facts??kr(),r=e.rules?new Set(e.rules):void 0,i=[];for(let a of cn){if(r&&!r.has(a.name))continue;let s=hi({config:e.config,rule:a.name,defaultSeverity:a.defaultSeverity});if(!s)continue;let d=Si(e.config,a.name),u=a.optionsSchema?.safeParse(d),l=u?.success?u.data:d,p=Nr({document:e.document,view:e.view,semantic:e.semantic,config:e.config,options:l,diagnostics:t,rule:a.name,code:a.code,severity:s,facts:n});i.push(a.create(p))}for(let a of i)a.Document?.();e.document.root&&vi(e.document.root,i);let o=Ae(e.semantic,e.document.uri);for(let a of o?.treeNodesModel??[])for(let s of i)s.TreeNodeModel?.(a);for(let a of i)a.ProgramExit?.();return t.map((a,s)=>({diag:a,index:s})).sort((a,s)=>cs(a.diag,s.diag)||a.index-s.index).map(a=>a.diag)}function vi(e,t){for(let n of t)n.Element?.(e);for(let n of e.children)n.kind==="element"&&vi(n,t)}function cs(e,t){let n=e.range,r=t.range;return!n&&!r?0:n?r?n.start.line-r.start.line||n.start.character-r.start.character||n.end.line-r.end.line||n.end.character-r.end.character:-1:1}function pe(e,t){let n=ie(e,{uri:t.uri,path:t.path});if(!n.ok||!n.document)return{ok:!1,diagnostics:[...n.diagnostics]};let r=n.document,i=Pe([r],{config:t.config,augmentations:t.augmentations}),o=dt(r,{semantic:i.index,config:t.config,policy:Se(t.config)}),a=Ti({document:r,view:o,semantic:i.index,config:t.config}),s=[...n.diagnostics,...i.diagnostics,...a];return{ok:!s.some(d=>d.severity===S.Error),diagnostics:s}}function Ri(e,t){let n=pe(e,{config:t.config,uri:t.uri,path:t.path}),r=[...n.diagnostics],i,o=!1,a=!1;if(t.format!==!1){let d=xe(e,t.config.formatter);r.push(...d.diagnostics),d.ok&&d.skipped?a=!0:d.ok&&!d.skipped&&(i=d.text,o=d.changed)}return n.ok&&!o&&r.every(d=>d.severity!=="error")?{ok:!0,diagnostics:r,formattedText:i,needsFormat:!1,skipped:a}:{ok:!1,diagnostics:r,formattedText:i,needsFormat:o,skipped:a}}function ki(e,t){return!e.isBtXml}async function xi(e){let t=e.inputs.map(a=>{let s=ie(a.text,{uri:a.uri,path:a.path,kind:a.kind});return{input:a,result:s}}),n=t.flatMap(({result:a})=>a.document&&!ki(a.document,e)?[a.document]:[]),r=Pe(n,{config:e.config}),i=t.map(({input:a,result:s})=>{let d=s.document;if(!s.ok)return{uri:a.uri,path:a.path,diagnostics:s.diagnostics,skipped:!1,formatted:!1};if(d&&ki(d,e))return{uri:a.uri,path:a.path,diagnostics:[],skipped:!0,skipReason:"not detected as BT XML",formatted:!1};let u=d&&qt(r.index,d.uri)?pe(a.text,{config:e.config,uri:a.uri,path:a.path}).diagnostics:s.diagnostics;return{uri:a.uri,path:a.path,diagnostics:u,skipped:!1,formatted:!1}}),o={files:i.length,errors:r.diagnostics.filter(a=>a.severity===S.Error).length+i.flatMap(a=>a.diagnostics).filter(a=>a.severity===S.Error).length,warnings:r.diagnostics.filter(a=>a.severity===S.Warning).length+i.flatMap(a=>a.diagnostics).filter(a=>a.severity===S.Warning).length,infos:r.diagnostics.filter(a=>a.severity===S.Info).length+i.flatMap(a=>a.diagnostics).filter(a=>a.severity===S.Info).length};return{ok:o.errors===0,files:i,projectDiagnostics:r.diagnostics,summary:o}}import{z as c}from"zod";var Di=c.object({line:c.number(),character:c.number(),offset:c.number()}).strict(),pn=c.object({start:Di,end:Di}).strict(),ps=c.object({primaryLabel:c.string().optional(),help:c.string().optional(),notes:c.array(c.string()).optional()}).strict(),ms=c.object({uri:c.string(),range:pn,message:c.string()}).strict(),Ni=c.object({code:c.string(),rule:c.string().optional(),severity:c.enum(["error","warning","info"]),message:c.string(),uri:c.string(),range:pn.optional(),relatedInformation:c.array(ms).optional(),suppressed:c.boolean().optional(),details:ps.optional(),data:c.record(c.string(),c.unknown()).optional()}).strict(),fs=c.object({path:c.string(),diagnostics:c.array(Ni),needsFormat:c.boolean().optional(),skipped:c.boolean().optional(),skipReason:c.string().optional()}).strict(),gs=c.object({ok:c.boolean(),version:c.literal(2),schemaVersion:c.literal("2"),toolVersion:c.string(),project:c.record(c.string(),c.unknown()),projectDiagnostics:c.array(Ni),files:c.array(fs),summary:c.object({files:c.number(),errors:c.number(),warnings:c.number(),infos:c.number(),suppressed:c.number(),baselineFiltered:c.number()}).strict()}).strict(),yt=c.object({definitionId:c.string(),uri:c.string().optional(),range:pn.optional()}).strict(),ys=yt.extend({sourceKind:c.string(),kind:c.string(),signatureId:c.string(),signatureText:c.string()}).strict(),bs=c.object({id:c.string(),signatureKey:c.string(),signatureText:c.string(),definitions:c.array(yt),editableDefinitions:c.array(yt),nonEditableDefinitions:c.array(yt)}).strict(),Ss=c.object({files:c.number(),definitions:c.number(),edits:c.number(),affectedUris:c.array(c.string())}).strict(),hs=c.object({id:c.string(),title:c.string(),description:c.string(),kind:c.enum(["match-signature","keep-model-definition","keep-port-definition","manual","skip"]),applicable:c.boolean(),targetSignatureId:c.string().optional(),editSummary:Ss,workspaceEdits:c.array(c.unknown()).optional(),usageImpact:c.unknown().optional(),warnings:c.array(c.string()).optional()}).strict(),Ts=c.object({nodeId:c.string(),totalUsages:c.number(),byPort:c.record(c.string(),c.unknown())}).strict(),vs=c.object({key:c.string(),label:c.string()}).strict(),Rs=c.object({id:c.string(),kind:c.enum(["model-signature-conflict","duplicate-model-id","duplicate-port-name"]),nodeId:c.string(),portName:c.string().optional(),displayName:c.string(),codes:c.array(c.string()),severity:c.enum(["error","warning"]),pairwiseConflictCount:c.number(),definitions:c.array(ys),signatures:c.array(bs),differences:c.array(c.unknown()),usageEvidence:Ts,usageImpacts:c.array(c.unknown()),differencePattern:vs,actions:c.array(hs)}).strict(),ks=c.object({ok:c.boolean(),version:c.literal(2),schemaVersion:c.literal("2"),toolVersion:c.string(),groups:c.array(Rs),summary:c.object({groups:c.number(),signatureConflictGroups:c.number(),duplicateModelGroups:c.number(),duplicatePortGroups:c.number(),pairwiseSignatureConflicts:c.number(),errors:c.number(),warnings:c.number()}).strict()}).strict();export{xi as checkBtWorkspace,Ri as checkBtXml,Pt as createInitConfig,xe as formatBtXml,rt as getEffectiveConfigForFile,At as getEffectiveConfigForUri,gs as jsonCheckReportSchema,ks as jsonRepairReportSchema,wt as normalizeBtxmlConfig,_e as parseBtxmlConfig,pe as validateBtXml};