@abco20/btxml-checker 0.1.2 → 0.1.4
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/cli.js +29 -28
- package/dist/config.d.ts +3 -3
- package/dist/config.js +1 -1
- package/dist/editor-node.d.ts +7 -7
- package/dist/editor-node.js +22 -22
- package/dist/editor.d.ts +7 -7
- package/dist/editor.js +16 -16
- package/dist/{effective-t_u6qJ-7.d.ts → effective-Dmz864HF.d.ts} +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +10 -10
- package/dist/model.d.ts +2 -2
- package/dist/model.js +3 -3
- package/dist/{public-types-Cp3bKKQ3.d.ts → public-types-D3_VR6Sy.d.ts} +5 -5
- package/dist/{public-types-DCvVgnqw.d.ts → public-types-zg51kxSL.d.ts} +9 -0
- package/dist/rules.d.ts +24 -6
- package/dist/rules.js +4 -3
- package/dist/semantic.d.ts +6 -6
- package/dist/semantic.js +3 -3
- package/dist/server.cjs +336 -5
- package/dist/server.cjs.map +1 -1
- package/dist/{types-f9KgrQFd.d.ts → types-BIuA9iLZ.d.ts} +2 -2
- package/dist/{types-BRzExVMv.d.ts → types-DPS-KRMY.d.ts} +2 -2
- package/dist/{types-B2hnkNNL.d.ts → types-DkQEPPAM.d.ts} +2 -2
- package/dist/{types-BgqDzlJ8.d.ts → types-H6H-_Z3F.d.ts} +12 -0
- package/package.json +1 -1
- package/schemas/btxml.config.schema.json +10 -0
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
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
|
|
2
|
-
`?(n++,r=0):r++;return
|
|
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 ` ` or escape the ampersand as `&`"}),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 ` ` or escape the ampersand as `&`"}),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 ` ` or escape the ampersand as `&`"}),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 ` ` or escape the ampersand as `&`"}),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 `&`, `<`, `>`, `"`, `'`, 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 `&`",help:"replace `&` with `&` 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 `&`",help:"replace `&` with `&` unless this is a valid XML entity"})}}function Re(e){return e.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/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(""")||n.startsWith("'")||n.startsWith("<")||n.startsWith(">")||n.startsWith("&")){let a=n.startsWith(""")?""":n.startsWith("'")?"'":n.startsWith("<")?"<":n.startsWith(">")?">":"&";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
3
|
`||e==="\r"}function Ai(e){let t=e.codePointAt(0);return t!==void 0&&t<32&&e!==" "&&e!==`
|
|
4
|
-
`&&e!=="\r"}function
|
|
5
|
-
`?(a+=1,s=0):s+=1}function k(){for(;!p()&&Pi(m());)g()}let h=(f,x,E,B,v,w)=>{n.push(P(f,x,E,T(B,v),i.uri,w))};function D(f,x,E,B,v,w){n.push(P(f,x,E,B&&v?T(B,v):void 0,i.uri,w))}function C(){if(!_i(m()))return"";let f=o;for(g();!p()&&wi(m());)g();return e.slice(f,o)}function H(){let f=m();if(f!=='"'&&f!=="'")return{value:"",ok:!1};let x=u();g();let E=u(),B=o;for(;!p()&&m()!==f&&m()!=="<";)g();let v=u();if(p()||m()!==f)return{value:e.slice(B,o),ok:!1,valueRange:T(x,v),valueContentRange:T(E,v)};let w=e.slice(B,o);g(),ht(w,E.offset,e,h);let W=gn(w);return{value:W.value,valueOffsets:W.offsets,ok:!0,valueRange:T(x,u()),valueContentRange:T(E,v)}}function V(){let f=[],x=new Set;for(;;){k();let E=m();if(!E||E===">"||E==="/"&&m(1)===">")break;let B=u(),v=C(),w=u();if(!v)break;k();let W=u();if(m()!=="="){if(h("XML001_INVALID_SYNTAX",S.Error,"invalid attribute syntax",B,w,{primaryLabel:`expected \`=\` after attribute \`${v}\``,help:`write the attribute as \`${v}="..."\``}),l=!0,r)continue;break}g();let Ii=u();k();let bt=u(),ne=H(),me=u();if(!ne.ok&&(h("XML005_INVALID_ATTRIBUTE_VALUE",S.Error,"invalid attribute value",bt,me,{primaryLabel:"expected a quoted attribute value",help:`write the value with quotes, for example \`${v}="value"\``}),l=!0,!r)||(x.has(v)?h("XML004_DUPLICATE_ATTRIBUTE",S.Error,`duplicate attribute \`${v}\``,B,me,{primaryLabel:`attribute \`${v}\` is already defined on this element`,help:`remove one of the duplicate \`${v}\` attributes`}):x.add(v),f.push({name:v,value:ne.value,...ne.valueOffsets?{valueOffsets:ne.valueOffsets}:{},range:T(B,me),fullRange:T(B,me),nameRange:T(B,w),equalsRange:T(W,Ii),valueRange:ne.valueRange||T(bt,me),valueContentRange:ne.valueContentRange||T(bt,me)}),!ne.ok&&r))break}return f}function M(f){d.length>0?d[d.length-1].children.push(f):(i.nodes.push(f),!i.root&&f.kind==="element"&&(i.root=f))}function je(){let f=u(),x=o;for(;!p()&&m()!=="<";)g();let E=e.slice(x,o);if(E.length===0)return;for(let v of E)if(Ai(v)){h("XML007_INVALID_CHARACTER",S.Error,"invalid XML character",f,u(),{primaryLabel:"this control character is not allowed in XML",help:"remove the character or replace it with valid text"});break}ht(E,x,e,h);let B={kind:"text",text:Te(E),range:T(f,u()),fullRange:T(f,u())};M(B)}function ze(){let f=u();g(4);let x=u(),E=o;for(;!p()&&!(m()==="-"&&m(1)==="-"&&m(2)===">");)g();let B=e.slice(E,o);if(p()){if(h("XML001_INVALID_SYNTAX",S.Error,"unterminated XML comment",f,u(),{primaryLabel:"comment started here but no closing `-->` was found",help:"close the comment with `-->`"}),l=!0,!r)return;let W={kind:"comment",text:B,range:T(f,u()),fullRange:T(f,u()),contentRange:T(x,u())};M(W);return}(B.includes("--")||B.endsWith("-"))&&h("XML001_INVALID_SYNTAX",S.Error,"invalid XML comment",x,u(),{primaryLabel:"XML comments cannot contain `--`",help:"remove `--` from the comment body or split it into separate comments"});let v=u();g(3);let w={kind:"comment",text:B,range:T(f,u()),fullRange:T(f,u()),contentRange:T(x,v)};M(w)}function pe(){let f=u();g(5),k();let x=V();k(),m()==="?"&&m(1)===">"?g(2):h("XML001_INVALID_SYNTAX",S.Error,"invalid XML declaration",f,u(),{primaryLabel:"expected `?>` to close the XML declaration",help:'close the declaration as `<?xml version="1.0" encoding="UTF-8"?>`'});let E={range:T(f,u()),attributes:x};for(let B of x)B.name==="version"&&(E.version=B.value),B.name==="encoding"&&(E.encoding=B.value),B.name==="standalone"&&(E.standalone=B.value);i.xmlDeclaration=E}function Di(){let f=u();g(2),k();let x=u(),E=C(),B=u();if(k(),m()!==">")for(h("XML001_INVALID_SYNTAX",S.Error,"invalid closing tag syntax",f,u(),{primaryLabel:"expected `>` to close the tag",help:"close the tag with `>`"}),l=!0;!p()&&m()!==">";)g();m()===">"&&g();let v=d.pop();if(!v||v.name!==E){let w=v?v.name:E||"",W=E||"";h("XML006_MISSING_CLOSING_TAG",S.Error,`mismatched closing tag \`</${W}>\``,f,u(),{primaryLabel:`opened as \`<${w}>\` but closed as \`</${W}>\``,help:`change the closing tag to \`</${w}>\` or fix the nesting`});return}v.closeTagRange=T(f,u()),v.endTagRange=T(f,u()),v.nameRange||(v.nameRange=T(x,B)),v.range=T(v.range.start,u()),v.fullRange=T(v.range.start,u())}for(;!p();)if(m()==="<")if(m(1)==="?")if(e.slice(o,o+5).toLowerCase()==="<?xml"&&e.charAt(o+5)===" ")pe();else{let f=u();for(;!p()&&!(m()==="?"&&m(1)===">");)g();p()||g(2),h("XML012_UNSUPPORTED_PROCESSING_INSTRUCTION",S.Error,"processing instruction is not supported",f,u(),{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=u();for(g(8);!p()&&!(m()==="]"&&m(1)==="]"&&m(2)===">");)g();p()||g(3),h("XML010_UNSUPPORTED_CDATA",S.Error,"CDATA is not supported",f,u(),{primaryLabel:"CDATA sections are not supported by btxml",help:"replace the CDATA section with normal escaped XML text",notes:["escape `<` as `<`, `>` as `>`, and `&` as `&`"]})}else if(m(1)==="!"&&e.slice(o+2,o+9)==="DOCTYPE"){let f=u();for(g(8);!p()&&m()!==">";)g();p()||g(1),h("XML011_UNSUPPORTED_DOCTYPE",S.Error,"DOCTYPE is not supported",f,u(),{primaryLabel:"DOCTYPE declarations are not supported by btxml",help:"remove the DOCTYPE declaration"})}else if(m(1)==="/")Di();else{let f=u();g();let x=u(),E=C(),B=u();if(!E){if(h("XML001_INVALID_SYNTAX",S.Error,"invalid XML tag",f,u(),{primaryLabel:"expected an XML element name after `<`",help:"start the tag with a valid XML name such as `<root>` or `<BehaviorTree>`"}),l=!0,r){g();continue}break}let v={kind:"element",name:E,attributes:[],children:[],range:T(f,f),fullRange:T(f,f),openTagRange:T(f,f),startTagRange:T(f,f),nameRange:T(x,B),selfClosing:!1};if(v.attributes=V(),k(),m()==="/"&&m(1)===">"){g(2),v.selfClosing=!0,v.openTagRange=T(f,u()),v.startTagRange=v.openTagRange,v.range=T(f,u()),v.fullRange=T(f,u()),M(v);continue}if(m()!==">"){if(h("XML001_INVALID_SYNTAX",S.Error,"invalid XML tag",f,u(),{primaryLabel:"expected `>` or `/>` to close the start tag",help:"close the start tag with `>` or make it self-closing with `/>`"}),l=!0,r){v.openTagRange=T(f,u()),v.startTagRange=v.openTagRange,v.range=T(f,u()),v.fullRange=T(f,u()),M(v);continue}break}g(),v.openTagRange=T(f,u()),v.startTagRange=v.openTagRange,v.range=T(f,u()),v.fullRange=T(f,u()),M(v),d.push(v)}else je();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`}),l=!0,r)for(;d.length>0;){let x=d.pop();if(!x)break;x.range=T(x.range.start,u()),x.fullRange=T(x.range.start,u())}}let mn=i.nodes.filter(f=>f.kind==="element");mn.length===0?D("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&&D("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 K=i.root,Ni=K?.name==="BehaviorTree"||K?.name==="TreeNodesModel"||K?.name==="root"&&(K.attributes.some(f=>f.name==="BTCPP_format"&&f.value==="4")||K.children.some(f=>f.kind==="element"&&(f.name==="BehaviorTree"||f.name==="TreeNodesModel")));if(K)for(let f of i.nodes)f!==K&&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&&!Ni)D("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 K&&St(K,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:l,options:t})}var Re={indentWidth:2,xmlDeclaration:"always",blankLineBetweenBehaviorTrees:!0,lineEnding:"lf"};function bn(e){if(!e)return Re;let t=typeof e.indentWidth=="number"?e.indentWidth:Re.indentWidth,n=e.xmlDeclaration==="always"||e.xmlDeclaration==="never"||e.xmlDeclaration==="preserve"?e.xmlDeclaration:Re.xmlDeclaration,r=typeof e.blankLineBetweenBehaviorTrees=="boolean"?e.blankLineBetweenBehaviorTrees:Re.blankLineBetweenBehaviorTrees,i=e.lineEnding==="lf"||e.lineEnding==="crlf"||e.lineEnding==="auto"?e.lineEnding:Re.lineEnding;return{indentWidth:t,xmlDeclaration:n,blankLineBetweenBehaviorTrees:r,lineEnding:i}}function Ge(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Ke(e){return Ge(e).replace(/"/g,""")}function Li(e){return e.filter(t=>!(t.kind==="text"&&t.text.trim()===""))}function Vi(e,t,n){return`${" ".repeat(e*n)}${t}`}function ge(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 l=o[d],u=d===o.length-1?n:"";a.push(`${s}${l.name}="${Ke(l.value)}"${u}`)}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 u=e.text.trim();return u?[Vi(t,Ge(u),n)]:[]}let o=Li(e.children||[]),a=e.kind==="element"&&(e.name==="input_port"||e.name==="output_port"),s=(e.children||[]).filter(u=>u.kind==="text").map(u=>u.text).join("").trim(),d=o.some(u=>u.kind==="element"||u.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 u=(e.attributes||[]).length===0?"":` ${e.attributes[0].name}="${Ke(e.attributes[0].value)}"`;return[`${i}<${e.name}${u}>${Ge(s)}</${e.name}>`]}return ge(e,t,`>${Ge(s)}</${e.name}>`,n)}if(o.length===0){if(e.selfClosing)return ge(e,t,"/>".slice(0),n);let u=ge(e,t,">",n);return u.push(`${i}</${e.name}>`),u}let l=ge(e,t,">",n);for(let u of e.children||[])u.kind==="text"&&u.text.trim()===""||l.push(...We(u,t+1,n,r));return l.push(`${i}</${e.name}>`),l}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],l=o[a+1],u=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"&&l&&l.kind==="element"&&l.name==="TreeNodesModel"&&d!==void 0;(u||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 ke(e,t={}){let n=re(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(...ge(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 l=`
|
|
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 `<`, `>` as `>`, and `&` as `&`"]})}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,"&").replace(/</g,"<").replace(/>/g,">")}function Ke(e){return Ge(e).replace(/"/g,""")}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
|
-
`))&&(
|
|
8
|
-
`);let u=s.join(l),p=l.replace(/\\/g,"\\\\").replace(/\r/g,"\\r").replace(/\n/g,"\\n"),m=new RegExp(`(?:${p})+$`,"u"),k=`${u.replace(m,"")}${l}`;return{ok:!0,text:k,changed:k!==e,skipped:!1,diagnostics:n.diagnostics.filter(h=>h.severity!==S.Error)}}function vt(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 Tt(e,t,n){let r=t.valueContentRange??t.valueRange,i=vt(t,n.start),o=vt(t,n.end),a=I(e.originalText,r.start.offset+i),s=I(e.originalText,r.start.offset+o);return T(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",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"},id=Object.values(y).sort();var Ui=Ye.object({subTreePorts:Ye.enum(["loose","strict"]).optional()}).strict(),qi=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:Ui,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:qi,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 He=["off","info","warn","error"];var vn={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"}}},Fi={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 Rt(){return structuredClone(Fi)}function xe(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 Z(e,t,n){return{ok:!1,error:{kind:e,raw:t,message:n}}}function Tn(e){return Xi.test(e)}function Rn(e){if(!e)return Z("empty-key",e,"Blackboard reference key must not be empty");if(e[0]==="@"){let t=e.slice(1);return t?Tn(t)?{ok:!0,scope:"global",key:t}:Z("invalid-global-key",e,`Invalid global blackboard reference key: ${e}`):Z("empty-key",e,"Global blackboard reference key must not be empty")}return Tn(e)?{ok:!0,scope:"local",key:e}:Z("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 Z("not-a-reference",n,`Not a blackboard reference: ${n}`);if(!(n.startsWith("{")&&n.endsWith("}")))return Z("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 Z("not-a-reference",t,`Not a script blackboard identifier: ${t}`);let n=Rn(t);return n.ok?n.scope!=="global"?Z("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 Y(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 j(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=
|
|
10
|
-
`||t==="\r")return"port names must not contain whitespace";let r=so.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 Dt(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 lo=[{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"]}],Ee=new Map,Cn=new Map;for(let e of lo){let t={name:e.name,kind:e.kind,canonical:e.name,aliases:e.aliases,compatibleWith:[],source:"builtin"};Cn.set(e.name,t),Ee.set(e.name,e.name);for(let n of e.aliases)Ee.set(n,e.name)}function uo(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 Nt(e){return Ee.get(e)??e}function co(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 Be(e){return Ee.get(e)}function ye(e=[]){let t=new Map,n=new Map(Ee);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=Nt(o.canonical??i),d=t.get(a)??uo(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 l of o.aliases??[])d.aliases.add(l);for(let l of o.compatibleWith??[])d.compatibleWith.add(l);t.set(a,d),n.set(i,a),n.set(a,a);for(let l of o.aliases??[])n.set(l,a)}for(let r of t.values())r.compatibleWith=new Set([...r.compatibleWith].map(i=>n.get(i)??Nt(i))),r.compatibleWith.delete(r.canonical);return{entriesByCanonical:new Map([...t.entries()].map(([r,i])=>[r,co(i)])),namesToCanonical:n}}function q(e,t){if(!t)return;let n=e.namesToCanonical.get(t)??Nt(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 De(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 Vn=["4.6.2","4.8.2","4.9.0"],It="4.9.0",Ne={"4.6.2":{models:Mn,genericSubTreeModel:_n},"4.8.2":{models:wn,genericSubTreeModel:Pn},"4.9.0":{models:An,genericSubTreeModel:Ln}};var On=Vn.map(e=>`btcpp-v${e}`),Ie=["btcpp-v4",...On],Un=`btcpp-v${It}`;function qn(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 po(e){return e.map(t=>({id:t.id,kind:t.kind,ports:t.ports.map(qn)}))}function Fn(e){if(e)return{id:e.id,kind:e.kind,ports:e.ports.map(qn)}}function mo(){let e={};for(let[t,n]of Object.entries(Ne))e[`btcpp-v${t}`]=po(n.models);return e}function fo(){let e={};for(let[t,n]of Object.entries(Ne))e[`btcpp-v${t}`]=Fn(n.genericSubTreeModel);return e}var go=mo(),yo=fo();function bo(e){let t=e.replace(/^btcpp-v/,"");return Object.hasOwn(Ne,t)}function Xn(e){return e==="btcpp-v4"?Un:e}function So(e){return e==="btcpp-v4"?It:e.replace(/^btcpp-v/,"")}function $n(e){if(e&&e!=="btcpp-v4"&&!bo(e))throw new Error(`unsupported builtin model set: ${e}`)}function Ct(e="btcpp-v4"){$n(e);let t=Xn(e);return go[t].map(r=>jn(r))}function Mt(e="btcpp-v4"){$n(e);let t=yo[Xn(e)]??Fn(Ne[So(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 Ce(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=Ce(e),r=Ce(t);return JSON.stringify(n)===JSON.stringify(r)}function _t(e,t){if(et(e,t))return"none";let n=Ce(e),r=Ce(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 l=s.enum?JSON.stringify(s.enum):"",u=d.enum?JSON.stringify(d.enum):"";l!==u&&(a=!0),s.description!==d.description&&(a=!0),s.defaultValue!==d.defaultValue&&(o=!0)}return a?"ports":o?"port-default":"mixed"}import{z as _}from"zod";var zn=_.object({direction:_.enum(["input","output","inout"]).optional(),type:_.string().optional(),required:_.boolean().optional(),default:_.string().optional(),description:_.string().optional(),enum:_.array(_.string()).optional()}).strict(),tt=_.object({kind:_.enum(["Action","Condition","Control","Decorator","SubTree"]),ports:_.record(_.string(),zn).optional(),description:_.string().optional()}).strict(),ho=_.object({nodes:_.record(_.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())])]),vo=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(),To=b.string(),Ro=b.object({name:b.string(),attribute:b.string(),base:b.enum(["file","project-root"]).optional()}).strict(),ko=b.object({elements:b.array(Ro).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(),xo=b.object({entrypoints:b.array(To).optional(),includes:ko.optional(),behaviorTreeIds:b.enum(["workspace-unique","file-local-first","allow-ambiguous"]).optional()}).strict(),Eo=b.object({builtins:b.array(b.enum(Ie)).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()}).strict(),Wn=b.object({inline:b.enum(["allow","deny"]).optional()}).strict(),Bo=b.object({enabled:b.boolean().optional(),rules:b.record(b.string(),Kn).optional(),baseline:b.string().optional(),suppressions:Wn.optional()}).strict(),Do=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(),No=b.object({files:b.array(b.string()),linter:Do.optional(),formatter:Yn.optional()}).strict(),Hn=b.object({$schema:b.string().optional(),strict:b.boolean().optional(),files:vo.optional(),resolver:xo.optional(),models:Eo.optional(),linter:Bo.optional(),formatter:Yn.optional(),overrides:b.array(No).optional()}).strict();function Qn(e){return e.flatMap(Io)}function Io(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 Me(e){let t=Hn.safeParse(e);return t.success?{ok:!0,value:t.data,diagnostics:[]}:{ok:!1,diagnostics:Qn(t.error.issues)}}function Co(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 Mo(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 _o(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 wo(e){let t=[],n=Rt(),{$schema:r,strict:i,overrides:o,...a}=e;i&&(n=xe(n,vn)),n=xe(n,a),n.overrides=(o??[]).map(d=>({files:d.files,linter:Mo(d.linter),formatter:Co(d.formatter)}));let s=!t.some(d=>d.severity===S.Error);return{config:n,diagnostics:t,ok:s}}function wt(e){let t=Me(e);return t.ok?wo(t.value):{ok:!1,config:Rt(),diagnostics:_o(t.diagnostics)}}var Po="https://unpkg.com/@abco20/btxml-checker/schemas/btxml.config.schema.json";function Pt(){return{$schema:Po}}function Ao(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 Lo(e,t){let n=e.replace(/\\/g,"/"),r=t.startsWith("!"),i=r?t.slice(1):t,a=Ao(i).test(n);return r?!a:a}function tr(e,t){return e.overrides.filter(n=>n.files.some(r=>Lo(t,r)))}function nt(e){return e.replaceAll("\\","/")}function Vo(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=Vo(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=xe(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 be(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 Oo(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 l=rr(e,d.from),u=rr(e,o);return l&&l!==u?(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 Uo(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,Oo(e,t,s,a,r))}return{...t,ports:t.ports.map(o=>i.get(o.name)??o)}}function qo(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(qo)}]));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,Uo(t,d,s,r))}return{modelsById:i,diagnostics:r}}function lr(e){return _e("builtin",0,!1,e)}function ur(e){return _e("xml-tree-nodes-model",10,!0,e)}function cr(e){return _e("external-tree-nodes-model",15,e.some(t=>t.editable!==!1),e)}function pr(e){return _e("node-definition-file",20,!0,e)}function mr(e){return _e("config-inline",30,!0,e)}function _e(e,t,n,r){return{kind:e,precedence:t,editable:n,models:r.map(i=>fr(i,e,n&&i.editable!==!1))}}function Fo(e){return e==="config-inline"?"config":e==="xml-tree-nodes-model"?"inline-tree-nodes-model":e}function fr(e,t,n){let r=Fo(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 Se(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 Xo(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()):"",l=s.enum?JSON.stringify([...s.enum].sort()):"";d!==l&&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=Xo(i,r),s;if(o==="port-default"){let d=new Map(i.ports.map(m=>[m.name,m])),l=r.ports.find(m=>{let g=d.get(m.name);return g&&g.defaultValue!==m.defaultValue}),u=l?.name??"unknown",p=[Se(i,0),Se(r,1)];s={kind:"port-default-conflict",nodeId:r.id,portName:u,sources:[{source:Se(i,0),value:d.get(u)?.defaultValue},{source:Se(r,1),value:l?.defaultValue}]},t.push({id:r.id,definitions:[i,r],sources:p,code:"BT107_CONFLICTING_PORT_DEFAULT",message:`conflicting default for port \`${u}\` 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=[Se(i,0),Se(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 $o(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)??[],l=s.models.map(u=>fr(u,s.kind,s.editable&&u.editable!==!1));d.push(...l),o.set(s.precedence,d);for(let u of l)a.set(u.id,s.precedence)}for(let[s,d]of[...o.entries()].sort((l,u)=>l[0]-u[0])){let l=d.filter(g=>a.get(g.id)===s),u=d.filter(g=>a.get(g.id)!==s),p=dr(u,[]);for(let[g,k]of dr(l,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,$o(r.get(g),k))}return{nodeModelsById:n,mergedNodeModelsById:r,conflicts:t}}function jo(e){return Ie.includes(e)}function zo(){return{documents:new Map,behaviorTreesById:new Map,nodeModelsById:new Map,mergedNodeModelsById:new Map,modelLayers:[],builtins:new Map,genericSubTreePorts:[],modelConflicts:[],typeRegistry:ye(),augmentations:[]}}function Go(e,t,n){let r=e.get(t)||[];r.push(n),e.set(t,r)}function Ko(e,t,n){for(let r of new Set(n))if(jo(r)){for(let i of Ct(r))e.builtins.set(i.id,i),t.push(i);e.genericSubTreePorts.push(...Mt(r))}}function Wo(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)Go(e.behaviorTreesById,d.id,d);o.kind==="model-document"?r.push(...s.treeNodesModel):n.push(...s.treeNodesModel),e.genericSubTreePorts.push(...s.genericSubTreePorts)}}function Yo(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 Ho(e){let t=new Set,n=[];for(let r of e.genericSubTreePorts){let i=Yo(r);t.has(i)||(t.add(i),n.push(r))}e.genericSubTreePorts=n}function Zo(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 we(e,t){return Jo(e,t)}function Jo(e,t){let n=zo(),r=[],i=[],o=[],a=[];Ko(n,i,t.config.models.builtins),n.augmentations=t.augmentations??[],n.typeRegistry=ye(t.augmentations??[]),Wo(n,r,o,a,e),Ho(n),Zo(n,i,o,a,t);let s=t.config.models.inline;if(s){let u=[];for(let[p,m]of Object.entries(s))u.push(Dt(p,m));n.modelLayers.push(mr(u))}let d=gr(n.modelLayers),l=ar(d.mergedNodeModelsById,n.typeRegistry,t.augmentations??[]);return n.nodeModelsById=d.nodeModelsById,n.mergedNodeModelsById=l.modelsById,n.modelConflicts=d.conflicts,r.push(...l.diagnostics),{ok:r.every(u=>u.severity!==S.Error),index:n,diagnostics:r}}var yr={unknownSubTreePorts:"allow"};function br(e){return{...yr,...e}}var Qo=["Action","Condition","Control","Decorator"],ea=new Set(Qo);var ta=new Set(["input_port","output_port","inout_port"]);function Vt(e){return ea.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 ta.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":Vt(e.name)?"generic-node":at(e)?"unknown-xml":"concrete-node"}function Ot(e){if(e.name==="SubTree")return ot(e,"ID")||"SubTree";if(Vt(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 F(e){return e.typeRegistry}function z(e,t){return q(F(e),t)}function he(e,t,n){return De(F(e),t,n)}function Pe(e,t){return e.documents.get(t)}function ie(e,t){return e.behaviorTreesById.get(t)??[]}function Ut(e,t){return e.behaviorTreesById.has(t)}function qt(e){return[...e.behaviorTreesById.keys()]}function Ft(e,t){return e.documents.has(t)}function J(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 Ae(e){return e.modelConflicts}function Le(e,t){let{id:n,fileLocalUri:r,config:i}=t,o=ie(e,n);if(o.length>0){if((i?.resolver?.behaviorTreeIds==="file-local-first"||i?.resolver?.behaviorTreeIds==="allow-ambiguous")&&r){let l=o.filter(u=>u.uri===r);l.length>0&&(o=l)}let s=J(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(l=>l.id),...d.map(l=>l.id)],behaviorTrees:o,definitions:d}}let a=J(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=J(e,t);if(n){let i=Ae(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}:Et(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 Q(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(D=>Wt({attribute:D,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?Le(e,{id:s,fileLocalUri:t.uri,config:t.config}):{status:"unresolved",id:void 0},l={status:"unresolved",nodeType:s},u=!1;if(d.status==="resolved"&&d.kind==="node-model")l={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"?l=g:u=n.unknownSubTreePorts==="allow"}else d.status==="ambiguous"&&d.definitions.length>0?l=d.definitions.length===1?{status:"resolved",model:d.definitions[0]}:{status:"ambiguous",nodeType:s??"SubTree",candidates:d.definitions}:u=n.unknownSubTreePorts==="allow";let p=Kt({index:e,tagForm:i,model:l,subtreeModelPorts:d.status==="ambiguous"?Gt(d.definitions.flatMap(g=>g.ports)):void 0}),m=r.attributes.map(g=>Wt({attribute:g,ports:p,allowsArbitraryAttributes:u,model:l,unknownModelPortStatus:!u&&l.status!=="resolved"?"undeclared":void 0}));return{element:r,tagName:r.name,tagForm:i,nodeType:a,model:l,subtree:{id:s,target:d},ports:p,allowsArbitraryAttributes:u,portUsages:m}}function st(e,t){return Q(e,t).portUsages.find(r=>r.name===t.attributeName)}function ia(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function oa(e){let t=e.root;return t?t.name==="BehaviorTree"?[t]:t.children.filter(n=>n.kind==="element"&&n.name==="BehaviorTree"):[]}function vr(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=vr(e,t),i=vr(r,n);return{start:r,end:i}}function aa(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,l=A({portName:t,rawValue:s});if(l.ok){o.push({raw:s,key:l.reference.key,scope:l.reference.scope,identity:Y(l.reference),range:Yt(r.start,i.slice(0,d),s),syntax:l.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:Y(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 sa(e,t){return ia(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 da(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 la(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 Tr(e,t){return e.attributes.find(n=>n.name===t)}function ua(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=ua(e.root),i=oa(e).map(d=>({id:Tr(d,"ID")?.value,element:d,rootNode:void 0,nodes:[]})),o=[],a=[],s=(d,l,u,p)=>{let m=Q(n,{element:d,uri:e.uri,documentRoot:e.root,config:t?.config,policy:t?.policy,isModelDefinition:r.has(d)}),g=da(m),k={element:d,path:p,tagName:d.name,kind:sa(d,m),model:g,usage:m,portBindings:[],children:[],parent:u,behaviorTree:l};if(k.portBindings=m.portUsages.filter(h=>h.status!=="reserved-attribute").map(h=>({name:h.name,value:h.value,attribute:h.attribute,declaredPort:la(h),usage:h,blackboardReferences:aa(e,h.name,h.attribute)})),k.children=d.children.filter(h=>h.kind==="element").map((h,D)=>s(h,l,k,[...p,D])),d.name==="SubTree"){let h=Tr(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 l=d.element.children.filter(u=>u.kind==="element").map((u,p)=>s(u,d,void 0,[p]));d.rootNode=l[0],d.nodes=Rr(l),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 Er(e,t){return e.suppressionIssuesByUri.get(t)??[]}function Br(e){let{document:t,semantic:n,config:r,view:i}=e,o=new Map(i.nodes.map(l=>[l.element,l])),a=new Map(i.subtreeCalls.map(l=>[l.node.element,l])),s=be(r),d=pa(t.root);return{document:t,view:i,semantic:n,config:r,options:e.options,facts:e.facts,report(l){let u=P(l.code??e.code,e.severity,l.message,l.range,t.uri,l.details,l.data);e.diagnostics.push({...u,rule:e.rule,...l.relatedInformation?{relatedInformation:l.relatedInformation}:{}})},getIncludeIssues(l){let u=xr(e.facts,t.uri);return l?u.filter(p=>p.kind===l):u},getSuppressionIssues(l){let u=Er(e.facts,t.uri);return l?u.filter(p=>p.kind===l):u},getNodeUsage(l){return Q(n,{element:l,documentRoot:t.root,uri:t.uri,config:r,policy:s,isModelDefinition:d.has(l)})},getPortUsage(l,u){return st(n,{element:l,documentRoot:t.root,attributeName:u,uri:t.uri,config:r,policy:s,isModelDefinition:d.has(l)})},resolveSubTree(l,u){return Le(n,{id:l,fileLocalUri:u,config:r})},getNodeModel(l){return J(n,l)},getBehaviorTrees(l){return ie(n,l)},getTreeNodeView(l){return o.get(l)},getSubTreeCallView(l){return a.get(l)}}}function pa(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 ma={"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 ee(e){return R({name:ma[e],create(t){return{ProgramExit(){for(let n of t.getIncludeIssues(e))t.report({message:n.message,range:n.range,data:fa(n)})}}}})}function fa(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 Dr=[ee("missing-path"),ee("not-found"),ee("cycle"),ee("outside-root"),ee("unresolved-variable"),ee("depth-exceeded"),ee("too-many-files"),ee("external-used")];import ga from"ajv";var ya=ga,ba=new ya,Sa=["IDLE","RUNNING","SUCCESS","FAILURE","SKIPPED"],ha={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"]),Nr=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 X(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=Ve(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 xa(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 va(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 oe(e){return e.effectiveType??e.type}function _r(e,t){return q(e,oe(t))}function Ve(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 va(e){let t=Be(e)??e;return Pr(e)!==void 0||Ea.has(t.toLowerCase())}function wr(e,t){let n=Pr(e);if(n)return Ta(n,t);let r=(Be(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 Sa.includes(t);default:return Zt.has(r)||Nr.has(r)?Ar(r,t):!1}}function Pr(e){return/^std::vector<\s*(.+?)\s*>$/.exec(e)?.[1]}function Ta(e,t){let n=ka(t);return n?n.every(r=>Ra(e,r)):!1}function Ra(e,t){if(t.kind==="string")return wr(e,t.value);let n=(Be(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)||Nr.has(n)?typeof t.value=="number"&&Number.isInteger(t.value)&&Ar(n,String(t.value)):!1}}function Ar(e,t){let n=ha[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 ka(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 xa(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 ba.compile(t.schema)(r)===!0}catch{return!1}}}var Ea=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=Bt(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 Ae(e.semantic))t.uri&&t.uri!==e.document.uri||Ba(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(!Da(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=Na(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"){Ve(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:F(e.semantic),typeDefinition:z(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=F(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=Ve(o.name,o.value);if(!a)continue;let s=_r(t,o.declaredPort.port);if(!s||s.kind==="any")continue;let d=Y(a),l=n.get(d)??[];l.push({key:a.key,scope:a.scope,displayName:Je(a),identity:d,nodeId:Ma(i.element),port:o.declaredPort.port,typeDefinition:s,range:o.attribute.range}),n.set(d,l)}for(let i of n.values()){let o=Ia(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 ${Ca(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(_a(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"&&Ve(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 Ba(e,t){return e.diagnostics.some(n=>n.code===y.DuplicateNodeModelId&&n.message.includes(`\`${t}\``))}function Da(e){return e.name==="input_port"||e.name==="output_port"||e.name==="inout_port"}function Na(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 l=n(d,a,s);if(l)return l}}}function Ia(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")||he(e,o.typeDefinition.canonical,s.typeDefinition.canonical)||(r.add(o.typeDefinition.canonical),r.add(s.typeDefinition.canonical)))}}return[...r].sort()}function Ca(e,t){return oe(e)??t.canonical}function Ma(e){return e.attributes.find(t=>t.name==="name")?.value??e.attributes.find(t=>t.name==="ID")?.value??e.name}function _a(e){return e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"}var wa=new Set(["_failureIf","_successIf","_skipIf","_while"]),Pa=new Set(["_onSuccess","_onFailure","_onHalted","_post"]);function Jt(e){if(wa.has(e.attributeName))return{kind:"precondition",expectedResult:"bool-compatible"};if(Pa.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 Vr=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 Ur(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(qr(r)){n++;continue}if(en(r)){let s=n;for(n++;n<e.length&&Va(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(ae(r)){let s=La(e,n);t.push(s),n=s.end;continue}if(r==="'"){let s=Aa(e,n);t.push(s),n=s.end;continue}let i=e.slice(n,n+2),o=Vr.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 Aa(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 La(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&&Oa(e[n]);)n++;return i===n||qa(e,n)?(n=Oe(e,n),Ue(e,t,n)):{type:"Integer",text:e.slice(t,n),start:t,end:n}}for(;n<e.length&&ae(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(!ae(e[n+1]))return n=Oe(e,n+1),Ue(e,t,n);for(r="Real",n+=1;n<e.length&&ae(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&&ae(e[n]);)n++;if(o===n)return n=Oe(e,Math.max(n,i+1)),Ue(e,t,n);r="Real"}return Ua(e,n)?(n=Oe(e,n),Ue(e,t,n)):{type:r,text:e.slice(t,n),start:t,end:n}}function Oe(e,t){let n=t;for(;n<e.length;){let r=e[n];if(qr(r)||Or.has(r)||Vr.has(e.slice(n,n+2))||r==="."&&e[n+1]===".")break;n++}return n}function Ue(e,t,n){return{type:"Error",text:e.slice(t,n),start:t,end:n}}function qr(e){return e===" "||e===" "||e===`
|
|
12
|
-
`||e==="\r"}function en(e){return e!==void 0&&/[A-Za-z_@]/.test(e)}function Va(e){return e!==void 0&&/[A-Za-z0-9_]/.test(e)}function ae(e){return e!==void 0&&/[0-9]/.test(e)}function Oa(e){return e!==void 0&&/[0-9A-Fa-f]/.test(e)}function Ua(e,t){let n=e[t];return en(n)||ae(n)}function qa(e,t){let n=e[t];return n==="."||en(n)||ae(n)}var Fa=new Map([["ColonEqual",":="],["Equal","="],["PlusEqual","+="],["MinusEqual","-="],["StarEqual","*="],["SlashEqual","/="]]),Xa=new Map([["PipePipe","||"],["AmpAmp","&&"],["Pipe","|"],["Caret","^"],["Ampersand","&"],["Plus","+"],["Minus","-"],["DotDot",".."],["Star","*"],["Slash","/"]]),Fr=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 Fe(e){let t=Ur(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=Ka(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=Fa.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 l=this.parseExpression(O.ternary);if(!l)return;n={kind:"ConditionalExpression",condition:n,thenExpression:d,elseExpression:l,range:qe(n.range,l.range)};break}let o=Fr.get(r.type);if(o){if(t>=O.comparison)break;this.consume();let d=[n],l=[o],u=this.parseExpression(O.comparison);if(!u)return;for(d.push(u);;){let p=Fr.get(this.peek().type);if(!p)break;this.consume();let m=this.parseExpression(O.comparison);if(!m)return;l.push(p),d.push(m)}n={kind:"ComparisonChain",operands:d,operators:l,range:qe(d[0].range,d[d.length-1].range)};continue}let a=Xa.get(r.type),s=a?za(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:se(t)};case"Integer":case"Real":case"Boolean":case"String":return this.consume(),$a(t,this.source);case"Minus":case"Tilde":case"Bang":{this.consume();let n=this.parseExpression(20);return n?{kind:"UnaryExpression",operator:ja(t.type),argument:n,range:qe(se(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(),Ga(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:se(r)})}};function $a(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:se(e)};case"Real":return{kind:"Literal",valueKind:"real",raw:t.slice(e.start,e.end),value:Number(e.text),range:se(e)};case"Boolean":return{kind:"Literal",valueKind:"boolean",raw:t.slice(e.start,e.end),value:e.text==="true",range:se(e)};case"String":return{kind:"Literal",valueKind:"string",raw:t.slice(e.start,e.end),value:e.text,range:se(e)};default:throw new Error(`unsupported literal token ${e.type}`)}}function ja(e){switch(e){case"Minus":return"-";case"Tilde":return"~";case"Bang":return"!";default:throw new Error(`unsupported unary token ${e}`)}}function za(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 se(e){return{start:e.start,end:e.end}}function qe(e,t){return{start:e.start,end:t.end}}function Ga(e,t){return{...e,range:t}}function Ka(e){return{start:e[0]?.range.start??0,end:e[e.length-1]?.range.end??0}}var Wa=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=ye(e.augmentations??[]),n=e.areTypesCompatible??((a,s)=>De(t,a,s)),r=new Map,i=new Map,o={symbols:new Map,globalBlackboard:new Map,enums:Ya(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 de(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=de(e.baseEnvironment),n=[];for(let r of e.entries){let i=de(t),o=r.parseResult??Fe(r.source),a=de(i),s;o.ok&&(s=$e({program:o.program,environment:i,attributeName:r.attributeName,originId:r.originId??String(r.id)}),a=de(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,l]of a.symbols)t.symbols.set(d,{...l});for(let[d,l]of a.globalBlackboard)t.globalBlackboard.set(d,{...l});for(let[d,l]of a.enums)t.enums.set(d,l)}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 Xe(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"}:Wa.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 le(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 Ya(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 ue={kind:"number"},pt={kind:"string"},ct={kind:"bool"},U={kind:"unknown"},N={kind:"error"};function $e(e){let t=de(e.environment),n=[],r=[],i=[],o=[],a=[],s=[],d=[],l=[];return e.program.statements.forEach((u,p)=>{l.push(G({expression:u,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:l,finalType:l.at(-1)}}function G(e){let{expression:t}=e;switch(t.kind){case"Literal":return t.valueKind==="integer"||t.valueKind==="real"?ue:t.valueKind==="string"?pt:t.valueKind==="boolean"?ct:U;case"Identifier":return Za(e,t.name,t.range);case"UnaryExpression":{let n=G({...e,expression:t.argument});return t.operator==="!"?le(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"),N):n.kind==="number"?ue:n.kind==="unknown"||n.kind==="any"||n.kind==="error"?n.kind==="any"?n:n.kind==="error"?N:U:(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"),N)}case"BinaryExpression":{let n=G({...e,expression:t.left}),r=G({...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"),N):ct;case"+":return n.kind==="string"&&r.kind==="string"?pt:n.kind==="number"&&r.kind==="number"?ue:an(n,r)?U:(sn(e,t.range,t.operator),N);case"-":case"*":case"/":case"&":case"|":case"^":return n.kind==="number"&&r.kind==="number"?ue:an(n,r)?U:(sn(e,t.range,t.operator),N);case"..":return n.kind==="string"&&(r.kind==="string"||r.kind==="number")||r.kind==="string"&&(n.kind==="string"||n.kind==="number")?pt:an(n,r)?U:(sn(e,t.range,t.operator),N)}return U}case"ComparisonChain":{let n=t.operands.map(r=>G({...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(!Ja(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"),N}return ct}case"ConditionalExpression":{let n=G({...e,expression:t.condition});le(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=G({...e,expression:t.thenExpression}),i=G({...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"),N)}case"AssignmentExpression":return Ha(e)}}function Ha(e){let{environment:t,attributeName:n,identifiers:r,introducedSymbols:i}=e,o=e.expression,a=G({...e,expression:o.right});if(o.left.kind!=="Identifier")return G({...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"),N;let s=o.left,d=o.operator===":="?"declare":o.operator==="="?"write":"readwrite",l={name:s.name,kind:d,range:s.range,identifier:s,statementIndex:e.statementIndex};r.push(l);let u=Qt(s.name);if(u.kind==="invalid-global-blackboard")return e.invalidGlobalBlackboardIdentifiers.push(l),Yr(e,s.range,u.raw,u.message),N;if(u.kind==="global-blackboard"){let g=t.globalBlackboard.get(u.key),k=o.operator===":="?a:o.operator==="="?g&&ve(g.type,a)?a:g?void 0:a:Kr(g?.type??U,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"),N;if((o.operator===":="||o.operator==="=")&&g&&!ve(g.type,a))return dn(e,s,g.type,a),N;let h=g?{...g}:{name:u.key,type:a,source:{kind:"global-blackboard",key:u.key,range:s.range,originId:e.originId},readable:!0,writable:!0};return h.type=k??a,t.globalBlackboard.set(u.key,h),e.resolvedIdentifiers.push({access:l,resolution:{kind:"global-blackboard",key:u.key,symbol:h}}),e.globalBlackboardAccesses.push({key:u.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:l,resolution:{kind:"symbol",symbol:g}}),i.push(g),a}if(!p)return e.resolvedIdentifiers.push({access:l,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"),N;if(e.resolvedIdentifiers.push({access:l,resolution:{kind:"symbol",symbol:p}}),o.operator==="=")return ve(p.type,a)?(ln(p,a),a):(dn(e,s,p.type,a),N);if(o.operator===":=")return ve(p.type,a)?(ln(p,a),a):(dn(e,s,p.type,a),N);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"),N)}function Za(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),N;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??U}),e.resolvedIdentifiers.push({access:r,resolution:{kind:"global-blackboard",key:i.key,...s?{symbol:s}:{}}}),s?.type??U}let o=e.environment.enums.get(t);if(o!==void 0)return e.resolvedIdentifiers.push({access:r,resolution:{kind:"enum",name:t,value:o}}),ue;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),U)}function Kr(e,t,n){return e.kind==="error"||t.kind==="error"?N:e.kind==="unknown"||t.kind==="unknown"||e.kind==="any"||t.kind==="any"?U:n==="+="?e.kind==="number"&&t.kind==="number"?ue:e.kind==="string"&&t.kind==="string"?pt:void 0:e.kind==="number"&&t.kind==="number"?ue: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!le(e)}function Ja(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:Fe(i.value)}]:[]})}function $(e,t,n){return Tt(e.document,t,n)}function Zr(e){return{start:0,end:e.value.length}}function te(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?$e({program:i.parseResult.program,environment:o,attributeName:i.attribute.name}):void 0}}):Qa(e,r).filter(i=>i.node.element===t).map(i=>({...i.candidate,environment:i.environmentBefore,analysis:i.analysis}))}function Qa(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=F(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=oe(s),u=z(e.semantic,d)?.canonical??d;r.push({name:s.name,type:Xe(n,d),source:{kind:"subtree-port",nodeType:o,portName:s.name,direction:s.direction},readable:!0,writable:s.direction==="output"||s.direction==="inout",compatibilityKey:u})}}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 l=oe(s.usage.port),p=z(e.semantic,l)?.canonical??l,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:Xe(n,l),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(...es(e,n)),nn({symbols:r,globalBlackboardSymbols:i,augmentations:jt(e.semantic),areTypesCompatible:(a,s)=>a&&s?he(e.semantic,a,s):!0})}function es(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=oe(o.usage.port),l=z(e.semantic,s)?.canonical??s,u=o.usage.port.direction;n.push({name:a.reference.key,type:Xe(t,s),source:{kind:"global-blackboard-remap",nodeType:i,portName:o.usage.port.name,direction:u,key:a.reference.key},readable:u==="input"||u==="output"||u==="inout",writable:u==="output"||u==="inout",compatibilityKey:l})}}return n}var Qr=R({name:"script/no-unknown-variable",create(e){return{Element(t){for(let n of te(e,t))if(n.analysis)for(let r of n.analysis.unknownIdentifiers)e.report({code:y.UnknownScriptVariable,message:`unknown script variable \`${r.name}\``,range:$(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 te(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:$(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 te(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:$(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 te(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||le(i)||e.report({code:y.ScriptResultNotBoolCompatible,message:`script result for \`${n.attribute.name}\` is not bool-compatible`,range:$(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??$(e,n.attribute,Zr(n.attribute)):$(e,n.attribute,r.range),details:{primaryLabel:`invalid script in \`${n.attribute.name}\``}})}}}}});var ii=[ri,Qr,ei,ti,ni];var ts={unused:"suppression/no-unused","missing-reason":"suppression/require-reason"};function oi(e){return R({name:ts[e],create(t){return{ProgramExit(){for(let n of t.getSuppressionIssues(e))t.report({message:n.message,range:n.range,data:ns(n)})}}}})}function ns(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=Pe(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 qt(e.semantic)){let n=ie(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||Ut(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 rs=new Map([["IfThenElse",{min:2,max:3}],["WhileDoElse",{min:2,max:3}]]);function is(e,t){return e===t?String(e):`${e}\u2013${t}`}var li=R({name:"model/valid-child-count",create(e){return{Element(t){if(X(t))return;let n=e.getNodeUsage(t);n.model.status==="resolved"&&os(e,t,n.model.model.id,n.model.model.kind)}}}});function os(e,t,n,r){let i=Ir(t).length,o=rs.get(n);if(o){if(i<o.min||i>o.max){let a=is(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(X(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:F(e.semantic),typeDefinition:z(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(X(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(X(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(X(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(X(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 as(e,t){return e.attributes.find(n=>n.name===t)}function ss(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||as(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)||ss(e.config).has(t.name)||e.report({message:`Unknown top-level element: ${t.name}`,range:t.range})}}}})];var cn=[...yi,...ii,...di,...Lr,...gi,...Dr,...ai],Op=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 vi(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),l=a.optionsSchema?.safeParse(d),u=l?.success?l.data:d,p=Br({document:e.document,view:e.view,semantic:e.semantic,config:e.config,options:u,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&&Ti(e.document.root,i);let o=Pe(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)=>ds(a.diag,s.diag)||a.index-s.index).map(a=>a.diag)}function Ti(e,t){for(let n of t)n.Element?.(e);for(let n of e.children)n.kind==="element"&&Ti(n,t)}function ds(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 ce(e,t){let n=re(e,{uri:t.uri,path:t.path});if(!n.ok||!n.document)return{ok:!1,diagnostics:[...n.diagnostics]};let r=n.document,i=we([r],{config:t.config,augmentations:t.augmentations}),o=dt(r,{semantic:i.index,config:t.config,policy:be(t.config)}),a=vi({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=ce(e,{config:t.config,uri:t.uri,path:t.path}),r=[...n.diagnostics],i,o=!1,a=!1;if(t.format!==!1){let d=ke(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=re(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=we(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 l=d&&Ft(r.index,d.uri)?ce(a.text,{config:e.config,uri:a.uri,path:a.path}).diagnostics:s.diagnostics;return{uri:a.uri,path:a.path,diagnostics:l,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 Ei=c.object({line:c.number(),character:c.number(),offset:c.number()}).strict(),pn=c.object({start:Ei,end:Ei}).strict(),ls=c.object({primaryLabel:c.string().optional(),help:c.string().optional(),notes:c.array(c.string()).optional()}).strict(),us=c.object({uri:c.string(),range:pn,message:c.string()}).strict(),Bi=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(us).optional(),suppressed:c.boolean().optional(),details:ls.optional(),data:c.record(c.string(),c.unknown()).optional()}).strict(),cs=c.object({path:c.string(),diagnostics:c.array(Bi),needsFormat:c.boolean().optional(),skipped:c.boolean().optional(),skipReason:c.string().optional()}).strict(),ps=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(Bi),files:c.array(cs),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(),ms=yt.extend({sourceKind:c.string(),kind:c.string(),signatureId:c.string(),signatureText:c.string()}).strict(),fs=c.object({id:c.string(),signatureKey:c.string(),signatureText:c.string(),definitions:c.array(yt),editableDefinitions:c.array(yt),nonEditableDefinitions:c.array(yt)}).strict(),gs=c.object({files:c.number(),definitions:c.number(),edits:c.number(),affectedUris:c.array(c.string())}).strict(),ys=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:gs,workspaceEdits:c.array(c.unknown()).optional(),usageImpact:c.unknown().optional(),warnings:c.array(c.string()).optional()}).strict(),bs=c.object({nodeId:c.string(),totalUsages:c.number(),byPort:c.record(c.string(),c.unknown())}).strict(),Ss=c.object({key:c.string(),label:c.string()}).strict(),hs=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(ms),signatures:c.array(fs),differences:c.array(c.unknown()),usageEvidence:bs,usageImpacts:c.array(c.unknown()),differencePattern:Ss,actions:c.array(ys)}).strict(),vs=c.object({ok:c.boolean(),version:c.literal(2),schemaVersion:c.literal("2"),toolVersion:c.string(),groups:c.array(hs),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,ke as formatBtXml,rt as getEffectiveConfigForFile,At as getEffectiveConfigForUri,ps as jsonCheckReportSchema,vs as jsonRepairReportSchema,wt as normalizeBtxmlConfig,Me as parseBtxmlConfig,ce as validateBtXml};
|
|
7
|
+
`))&&(u=`\r
|
|
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};
|