@abco20/btxml-checker 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,11 @@
1
1
  import { B as BtDocument, a as BtXmlElement } from './ast-BbfR3S_b.js';
2
- import { a as SemanticIndexOptions, b as SemanticIndexResult, S as SemanticIndex, c as ModelConflictFact } from './types-BaOc_AYN.js';
3
- import { B as BuildSemanticDocumentViewOptions, S as SemanticDocumentView, a as SemanticTreeNodeView, b as SemanticPortBindingView, c as SemanticSubTreeCallView } from './types-CkOvIGPf.js';
2
+ import { a as SemanticIndexOptions, b as SemanticIndexResult, S as SemanticIndex, c as ModelConflictFact } from './types-BIuA9iLZ.js';
3
+ import { B as BuildSemanticDocumentViewOptions, S as SemanticDocumentView, a as SemanticTreeNodeView, b as SemanticPortBindingView, c as SemanticSubTreeCallView } from './types-DkQEPPAM.js';
4
4
  import { c as SourcePosition } from './diagnostic-B5htzyJ9.js';
5
- import { P as PortDef, a as TreeNodeModelDef, S as SubTreeReference, B as BehaviorTreeDef } from './public-types-B2noBQY9.js';
6
- import { R as ResolveNodeUsageInput, b as ResolvePortUsageInput, P as PortUsageResolution, N as NodeUsageResolution } from './types-SY4-jKCn.js';
7
- export { a as NodeUsagePolicy, S as SubTreeResolution, r as resolveSubTreeTarget } from './types-SY4-jKCn.js';
8
- import './types-BgqDzlJ8.js';
5
+ import { P as PortDef, a as TreeNodeModelDef, S as SubTreeReference, b as BehaviorTreeDef } from './public-types-zg51kxSL.js';
6
+ import { R as ResolveNodeUsageInput, b as ResolvePortUsageInput, P as PortUsageResolution, N as NodeUsageResolution } from './types-DPS-KRMY.js';
7
+ export { a as NodeUsagePolicy, S as SubTreeResolution, r as resolveSubTreeTarget } from './types-DPS-KRMY.js';
8
+ import './types-H6H-_Z3F.js';
9
9
  import 'zod';
10
10
 
11
11
  declare function buildSemanticIndex(documents: BtDocument[], options: SemanticIndexOptions): SemanticIndexResult;
package/dist/semantic.js CHANGED
@@ -1,2 +1,3 @@
1
- var S={Error:"error",Warning:"warning",Info:"info"};function M(e,t,n,i,r="",o,s){return{code:e,severity:t,message:n,uri:r,...i?{range:i}:{},...o?{details:o}:{},...s?{data:s}:{}}}function E(e,t){return e?e.start.offset<=t&&t<=e.end.offset:!1}var pt={DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID"};function mt(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function T(e,t){return e.attributes.find(n=>n.name===t)}function ft(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function gt(e){if(e)return{uri:e.uri,range:e.range,value:e.value}}function yt(e,t="inline-tree-nodes-model"){return e.kind==="model-document"?"external-tree-nodes-model":t}function me(e,t,n){for(let i of e.attributes||[]){let r=[...String(i.value).matchAll(/\{([^}]+)\}/g)];for(let o of r){let s=o.index??0,a=i.valueRange.start,d={...a,character:a.character+o[0].length,offset:a.offset+s+o[0].length};t.push({name:o[1],attributeName:i.name,element:e,uri:n,range:{start:{...a,character:a.character+s,offset:a.offset+s},end:d}})}}for(let i of e.children||[])i.kind==="element"&&me(i,t,n)}function Tt(e,t,n,i){let r=[];for(let o of e.children||[]){if(o.kind!=="element"||!ft(o.name))continue;let s=T(o,"ID");if(!s)continue;let a=[];for(let d of o.children||[]){if(d.kind!=="element"||d.name!=="input_port"&&d.name!=="output_port"&&d.name!=="inout_port")continue;let u=T(d,"name"),l=T(d,"type"),m=T(d,"default")||T(d,"default_value"),f=T(d,"enum"),c=(d.children||[]).filter(y=>y.kind==="text").map(y=>y.text).join("").trim()||void 0,g=d.name==="input_port"?"input":d.name==="output_port"?"output":"inout",p=(g==="input"||g==="inout")&&m===void 0;a.push({source:n,direction:g,name:u?u.value:"",type:l?.value||void 0,defaultValue:m?.value||void 0,description:c,required:p,element:d,uri:t,range:d.range,nameRange:u?.range,enum:f?.value?f.value.split(";"):void 0})}r.push({id:s.value,kind:o.name,source:n,sourceMeta:{sourceKind:n,file:t,range:o.range},editable:i,ports:a,element:o,uri:t,range:o.range,elementRange:o.range,idRange:s.range})}return r}function St(e,t){let n=[];for(let i of e.children||[]){if(i.kind!=="element"||i.name!=="BehaviorTree")continue;let r=T(i,"ID");r&&n.push({id:r.value,kind:"BehaviorTree",uri:t,element:i,range:i.range,elementRange:i.range,idRange:r.range})}return n}function bt(e,t){let n=[],i=(r,o)=>{let s=r.name==="BehaviorTree"?T(r,"ID")?.value??o:o;if(r.name==="SubTree"){let a=T(r,"ID");a&&n.push({id:a.value,uri:t,element:r,range:r.range,elementRange:r.range,idRange:a.range,parentBehaviorTreeId:s,attributes:r.attributes})}for(let a of r.children||[])a.kind==="element"&&i(a,s)};for(let r of e.children||[])r.kind==="element"&&i(r);return n}function Dt(e){return{id:e.id,kind:e.kind,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange}}function fe(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 ht(e){return{id:e.id,kind:e.kind,editable:e.editable,ports:e.ports.map(fe),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 Nt(e){return{id:e.id,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange,parentBehaviorTreeId:e.parentBehaviorTreeId}}function Mt(e){return{name:e.name,attributeName:e.attributeName,uri:e.uri,range:e.range}}function Bt(e){return{uri:e.uri,path:e.path,isBtXml:e.isBtXml,kind:e.kind,behaviorTrees:e.behaviorTrees.map(Dt),subtreeReferences:e.subtreeReferences.map(Nt),blackboardReferences:e.blackboardReferences.map(Mt),treeNodesModel:e.treeNodesModel.map(ht),genericSubTreePorts:e.genericSubTreePorts.map(fe),rootMainTreeToExecute:gt(e.rootMainTreeToExecute)}}function vt(e){return e.node.kind==="SubTree"&&e.node.id==="SubTree"?(e.genericSubTreePorts.push(...e.node.ports),!0):(e.treeNodesModel.push(e.node),!1)}function xt(e){return M(pt.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 kt(e,t){let n=[],i=t?.uri||e.uri,r=e.root,o=e.isBtXml,s=mt(e),a=yt(e),d=((t?.path??e.path)||i==="")&&e.kind==="model-document"?!0:e.kind!=="model-document",u=r&&e.kind!=="model-document"?St(r,i):[],l=[],m=[],f=r?r.name==="TreeNodesModel"?[r]:r.children.filter(h=>h.kind==="element"&&h.name==="TreeNodesModel"):[];for(let h of f){let ct=Tt(h,i,a,d),pe=new Map;for(let x of ct)vt({node:x,treeNodesModel:l,genericSubTreePorts:m})||(pe.has(x.id)?n.push(xt(x)):pe.set(x.id,x))}let c=r?bt(r,i):[],g=r?(()=>{let h=[];return me(r,h,i),h})():[],p=r?T(r,"main_tree_to_execute"):void 0;return{extracted:{publicModel:Bt({uri:i,path:t?.path??e.path,isBtXml:o,kind:s,behaviorTrees:u,subtreeReferences:c,blackboardReferences:g,treeNodesModel:l,genericSubTreePorts:m,rootMainTreeToExecute:p?{uri:i,range:p.range,value:p.value}:void 0}),extractedBehaviorTrees:u,extractedTreeNodesModel:l,extractedSubTreeReferences:c,extractedBlackboardReferences:g},diagnostics:n}}function ge(e,t){let{extracted:n,diagnostics:i}=kt(e,t);return{model:n.publicModel,diagnostics:i}}function G(e,t){return ge(e,t)}var ye=new Set(["ID","name","_name","_autoremap","_failureIf","_successIf","_skipIf","_while","_onSuccess","_onFailure","_onHalted","_post"]),An=new Set([...ye,"_autoremap","_description","__shared_blackboard"]);function K(e){return ye.has(e)}function Te(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 j(e,t){return{id:e,kind:t.kind,source:"config",sourceMeta:{sourceKind:"config"},editable:!0,ports:Object.entries(t.ports??{}).map(([n,i])=>Te(n,i))}}var Rt=[{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"]}],_=new Map,Se=new Map;for(let e of Rt){let t={name:e.name,kind:e.kind,canonical:e.name,aliases:e.aliases,compatibleWith:[],source:"builtin"};Se.set(e.name,t),_.set(e.name,e.name);for(let n of e.aliases)_.set(n,e.name)}function Pt(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 X(e){return _.get(e)??e}function It(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 w(e=[]){let t=new Map,n=new Map(_);for(let i of Se.values())t.set(i.canonical,{name:i.name,kind:i.kind,canonical:i.canonical,aliases:new Set([i.name,i.canonical,...i.aliases]),compatibleWith:new Set(i.compatibleWith),validate:i.validate,source:i.source});for(let i of e)for(let[r,o]of Object.entries(i.types??{})){let s=X(o.canonical??r),d=t.get(s)??Pt(r,s,o);d.name=r,d.kind=o.kind,d.canonical=s,d.source="augmentation",d.validate=o.validate??d.validate,d.aliases.add(r),d.aliases.add(s);for(let u of o.aliases??[])d.aliases.add(u);for(let u of o.compatibleWith??[])d.compatibleWith.add(u);t.set(s,d),n.set(r,s),n.set(s,s);for(let u of o.aliases??[])n.set(u,s)}for(let i of t.values())i.compatibleWith=new Set([...i.compatibleWith].map(r=>n.get(r)??X(r))),i.compatibleWith.delete(i.canonical);return{entriesByCanonical:new Map([...t.entries()].map(([i,r])=>[i,It(r)])),namesToCanonical:n}}function be(e,t){if(!t)return;let n=e.namesToCanonical.get(t)??X(t),i=e.entriesByCanonical.get(n);return i||{name:t,kind:"opaque",canonical:n,aliases:[],compatibleWith:[],source:"custom"}}function W(e,t){return be(e,t)?.canonical}var De=[{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:[]}],he={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 Ne=[{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:[]}],Me={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 Be=[{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:[]}],ve={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 xe=["4.6.2","4.8.2","4.9.0"],$="4.9.0",k={"4.6.2":{models:De,genericSubTreeModel:he},"4.8.2":{models:Ne,genericSubTreeModel:Me},"4.9.0":{models:Be,genericSubTreeModel:ve}};var ke=xe.map(e=>`btcpp-v${e}`),z=["btcpp-v4",...ke],Re=`btcpp-v${$}`;function Pe(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 Et(e){return e.map(t=>({id:t.id,kind:t.kind,ports:t.ports.map(Pe)}))}function Ie(e){if(e)return{id:e.id,kind:e.kind,ports:e.ports.map(Pe)}}function _t(){let e={};for(let[t,n]of Object.entries(k))e[`btcpp-v${t}`]=Et(n.models);return e}function wt(){let e={};for(let[t,n]of Object.entries(k))e[`btcpp-v${t}`]=Ie(n.genericSubTreeModel);return e}var Ct=_t(),At=wt();function Vt(e){let t=e.replace(/^btcpp-v/,"");return Object.hasOwn(k,t)}function Ee(e){return e==="btcpp-v4"?Re:e}function qt(e){return e==="btcpp-v4"?$:e.replace(/^btcpp-v/,"")}function _e(e){if(e&&e!=="btcpp-v4"&&!Vt(e))throw new Error(`unsupported builtin model set: ${e}`)}function J(e="btcpp-v4"){_e(e);let t=Ee(e);return Ct[t].map(i=>we(i))}function Y(e="btcpp-v4"){_e(e);let t=At[Ee(e)]??Ie(k[qt(e)].genericSubTreeModel);return t?(t.ports??[]).map(n=>({...n,enum:n.enum?[...n.enum]:void 0})):[]}function we(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 R(e){return{id:e.id,kind:e.kind,ports:[...e.ports].sort((t,n)=>{let i=t.name.localeCompare(n.name);if(i!==0)return i;let r=t.direction.localeCompare(n.direction);if(r!==0)return r;let o=(t.type??"").localeCompare(n.type??"");if(o!==0)return o;let s=(t.defaultValue??"").localeCompare(n.defaultValue??"");return s!==0?s:(t.description??"").localeCompare(n.description??"")}).map(t=>({name:t.name,direction:t.direction,type:t.type,required:t.required,defaultValue:t.defaultValue,enum:t.enum?[...t.enum].sort():void 0,description:t.description}))}}function C(e,t){let n=R(e),i=R(t);return JSON.stringify(n)===JSON.stringify(i)}function H(e,t){if(C(e,t))return"none";let n=R(e),i=R(t);if(n.kind!==i.kind)return"kind";if(n.ports.length!==i.ports.length)return"ports";let r=new Map(i.ports.map(a=>[a.name,a])),o=!1,s=!1;for(let a of n.ports){let d=r.get(a.name);if(!d){s=!0;continue}(a.direction!==d.direction||a.type!==d.type||a.required!==d.required)&&(s=!0);let u=a.enum?JSON.stringify(a.enum):"",l=d.enum?JSON.stringify(d.enum):"";u!==l&&(s=!0),a.description!==d.description&&(s=!0),a.defaultValue!==d.defaultValue&&(o=!0)}return s?"ports":o?"port-default":"mixed"}function Ce(e,t){if(t)return W(e,t)}function Ae(e){return e.source==="inline-tree-nodes-model"||e.source==="external-tree-nodes-model",e.source}function Ve(e){let t=e.port?.uri??e.model?.uri??"",n=e.port?.nameRange??e.port?.range??e.model?.idRange??e.model?.range;return M(e.code,S.Error,e.message,n,t,{primaryLabel:e.message,help:e.help,notes:e.notes},e.data)}function Lt(e,t,n,i,r){let o=n.effectiveType??n.type,s=n.originalType??n.type,a={...n,originalType:s,effectiveType:o,typeSource:n.typeSource??Ae(n),validate:i.validate??n.validate,required:i.required??n.required,enum:i.enum?[...i.enum]:n.enum,description:i.description??n.description},d=i.typeRefinement;if(!d)return{...a,type:a.effectiveType};let u=Ce(e,d.from),l=Ce(e,o);return u&&u!==l?(r.push(Ve({code:"BT119_INVALID_TYPE_REFINEMENT",message:`invalid type refinement for port \`${n.name}\` on node \`${t.id}\``,help:`make \`typeRefinement.from\` match the base port type \`${o??"unknown"}\`, or remove it for an unconditional refinement`,model:t,port:n,data:{kind:"invalid-type-refinement",nodeId:t.id,portName:n.name,expectedFrom:o,actualFrom:d.from,to:d.to},notes:o||d.from?[`base type: ${o??"(unspecified)"}`,`requested from: ${d.from??"(unspecified)"}`]:void 0})),{...a,type:a.effectiveType}):{...a,type:d.to,effectiveType:d.to,typeSource:"model-augmentation",typeRefinement:d}}function Ft(e,t,n,i){let r=new Map(t.ports.map(o=>[o.name,o]));for(let[o,s]of Object.entries(n.ports??{})){let a=r.get(o);if(!a){i.push(Ve({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}r.set(o,Lt(e,t,a,s,i))}return{...t,ports:t.ports.map(o=>r.get(o.name)??o)}}function Ot(e){let t=e.effectiveType??e.type,n=e.originalType??e.type;return{...e,type:t,effectiveType:t,originalType:n,typeSource:e.typeSource??Ae(e)}}function qe(e,t,n){let i=[],r=new Map([...e.entries()].map(([o,s])=>[o,{...s,ports:s.ports.map(Ot)}]));for(let o of n)for(let[s,a]of Object.entries(o.augment??{})){let d=r.get(s);if(!d){i.push(M("BT117_AUGMENT_TARGET_NOT_FOUND",S.Error,`augmentation target node \`${s}\` not found`,void 0,o.uri??"",{primaryLabel:`augmentation target \`${s}\` does not match any node model`,help:"change the augmentation target to an existing node model or remove it",notes:o.path?[`augmentation file: ${o.path}`]:void 0},{kind:"augment-target-not-found",nodeId:s,filePath:o.path}));continue}r.set(s,Ft(t,d,a,i))}return{modelsById:r,diagnostics:i}}function Fe(e){return P("builtin",0,!1,e)}function Oe(e){return P("xml-tree-nodes-model",10,!0,e)}function Ge(e){return P("external-tree-nodes-model",15,e.some(t=>t.editable!==!1),e)}function Ke(e){return P("node-definition-file",20,!0,e)}function je(e){return P("config-inline",30,!0,e)}function P(e,t,n,i){return{kind:e,precedence:t,editable:n,models:i.map(r=>Xe(r,e,n&&r.editable!==!1))}}function Gt(e){return e==="config-inline"?"config":e==="xml-tree-nodes-model"?"inline-tree-nodes-model":e}function Xe(e,t,n){let i=Gt(t);return{...e,source:i,sourceMeta:e.sourceMeta??{sourceKind:i,file:e.uri,range:e.range},editable:n,ports:e.ports.map(r=>({...r,source:i}))}}function B(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 Ue(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 Kt(e,t){let n=[];e.kind!==t.kind&&n.push({kind:"node-kind",left:e.kind,right:t.kind});let i=new Map(e.ports.map(o=>[o.name,o])),r=new Map(t.ports.map(o=>[o.name,o]));for(let[o,s]of i)r.has(o)||n.push({kind:"port-removed",portName:o,sourceIndex:0,port:Ue(s)});for(let[o,s]of r)i.has(o)||n.push({kind:"port-added",portName:o,sourceIndex:1,port:Ue(s)});for(let[o,s]of i){let a=r.get(o);if(!a)continue;s.direction!==a.direction&&n.push({kind:"port-direction",portName:o,left:s.direction,right:a.direction}),s.type!==a.type&&n.push({kind:"port-type",portName:o,left:s.type,right:a.type}),s.required!==a.required&&n.push({kind:"port-required",portName:o,left:s.required,right:a.required}),s.defaultValue!==a.defaultValue&&n.push({kind:"port-default",portName:o,left:s.defaultValue,right:a.defaultValue});let d=s.enum?JSON.stringify([...s.enum].sort()):"",u=a.enum?JSON.stringify([...a.enum].sort()):"";d!==u&&n.push({kind:"port-enum",portName:o,left:s.enum?[...s.enum].sort():void 0,right:a.enum?[...a.enum].sort():void 0}),s.description!==a.description&&n.push({kind:"port-description",portName:o,left:s.description,right:a.description})}return n}function Le(e,t){let n=new Map;for(let i of e){let r=n.get(i.id);if(!r){n.set(i.id,i);continue}if(C(r,i))continue;let o=H(r,i),s=Kt(r,i),a;if(o==="port-default"){let d=new Map(r.ports.map(f=>[f.name,f])),u=i.ports.find(f=>{let c=d.get(f.name);return c&&c.defaultValue!==f.defaultValue}),l=u?.name??"unknown",m=[B(r,0),B(i,1)];a={kind:"port-default-conflict",nodeId:i.id,portName:l,sources:[{source:B(r,0),value:d.get(l)?.defaultValue},{source:B(i,1),value:u?.defaultValue}]},t.push({id:i.id,definitions:[r,i],sources:m,code:"BT107_CONFLICTING_PORT_DEFAULT",message:`conflicting default for port \`${l}\` on node \`${i.id}\``,uri:i.uri,range:i.idRange||i.range,details:{primaryLabel:"the same port has different default values across model definitions",help:`use the same default value in every \`${i.id}\` definition or remove the duplicate model`},data:a,relatedInformation:r.uri&&r.range?[{uri:r.uri,range:r.range,message:"previous definition"}]:void 0})}else{let d=[B(r,0),B(i,1)];a={kind:"node-model-conflict",nodeId:i.id,sources:d,differences:s},t.push({id:i.id,definitions:[r,i],sources:d,code:"BT012_CONFLICTING_NODE_MODEL",message:`conflicting node model \`${i.id}\``,uri:i.uri,range:i.idRange||i.range,details:{primaryLabel:"another model with this ID defines a different kind or port shape",help:`make all \`${i.id}\` model definitions agree, or keep only one definition at the same precedence level`},data:a,relatedInformation:r.uri&&r.range?[{uri:r.uri,range:r.range,message:"previous definition"}]:void 0})}}return n}function jt(e,t){if(!e)return{...t,ports:[...t.ports]};let n=new Map(e.ports.map(i=>[i.name,i]));for(let i of t.ports)n.set(i.name,i);return{...e,...t,sourceMeta:t.sourceMeta||e.sourceMeta,ports:[...n.values()]}}function We(e){let t=[],n=new Map,i=new Map,r=[...e].sort((a,d)=>a.precedence-d.precedence),o=new Map,s=new Map;for(let a of r){let d=o.get(a.precedence)??[],u=a.models.map(l=>Xe(l,a.kind,a.editable&&l.editable!==!1));d.push(...u),o.set(a.precedence,d);for(let l of u)s.set(l.id,a.precedence)}for(let[a,d]of[...o.entries()].sort((u,l)=>u[0]-l[0])){let u=d.filter(c=>s.get(c.id)===a),l=d.filter(c=>s.get(c.id)!==a),m=Le(l,[]);for(let[c,g]of Le(u,t))m.set(c,g);let f=new Set(d.map(c=>c.id));for(let c of f)s.get(c)===a&&n.set(c,d.filter(g=>g.id===c));for(let[c,g]of m)i.set(c,jt(i.get(c),g))}return{nodeModelsById:n,mergedNodeModelsById:i,conflicts:t}}function Xt(e){return z.includes(e)}function Wt(){return{documents:new Map,behaviorTreesById:new Map,nodeModelsById:new Map,mergedNodeModelsById:new Map,modelLayers:[],builtins:new Map,genericSubTreePorts:[],modelConflicts:[],typeRegistry:w(),augmentations:[]}}function $t(e,t,n){let i=e.get(t)||[];i.push(n),e.set(t,i)}function zt(e,t,n){for(let i of new Set(n))if(Xt(i)){for(let r of J(i))e.builtins.set(r.id,r),t.push(r);e.genericSubTreePorts.push(...Y(i))}}function Jt(e,t,n,i,r){for(let o of r){let s=G(o,{uri:o.uri,path:o.path}),a=s.model;t.push(...s.diagnostics),e.documents.set(o.uri,a);for(let d of a.behaviorTrees)$t(e.behaviorTreesById,d.id,d);o.kind==="model-document"?i.push(...a.treeNodesModel):n.push(...a.treeNodesModel),e.genericSubTreePorts.push(...a.genericSubTreePorts)}}function Yt(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 Ht(e){let t=new Set,n=[];for(let i of e.genericSubTreePorts){let r=Yt(i);t.has(r)||(t.add(r),n.push(i))}e.genericSubTreePorts=n}function Qt(e,t,n,i,r){e.modelLayers.push(Fe(t),Oe(n),Ge(i)),r.models?.length&&e.modelLayers.push(Ke([...r.models])),e.modelLayers.push(...r.additionalModelLayers??[])}function $e(e,t){return Zt(e,t)}function Zt(e,t){let n=Wt(),i=[],r=[],o=[],s=[];zt(n,r,t.config.models.builtins),n.augmentations=t.augmentations??[],n.typeRegistry=w(t.augmentations??[]),Jt(n,i,o,s,e),Ht(n),Qt(n,r,o,s,t);let a=t.config.models.inline;if(a){let l=[];for(let[m,f]of Object.entries(a))l.push(j(m,f));n.modelLayers.push(je(l))}let d=We(n.modelLayers),u=qe(d.mergedNodeModelsById,n.typeRegistry,t.augmentations??[]);return n.nodeModelsById=d.nodeModelsById,n.mergedNodeModelsById=u.modelsById,n.modelConflicts=d.conflicts,i.push(...u.diagnostics),{ok:i.every(l=>l.severity!==S.Error),index:n,diagnostics:i}}var ze={unknownSubTreePorts:"allow"};function Je(e){return{...ze,...e}}var en=["Action","Condition","Control","Decorator"],tn=new Set(en);var nn=new Set(["input_port","output_port","inout_port"]);function v(e){return tn.has(e)}function Z(e){return v(e)?e:void 0}function A(e,t){return e.attributes.find(n=>n.name===t)?.value}function Q(e,t){if(e===t)return!0;for(let n of e.children)if(n.kind==="element"&&Q(n,t))return!0;return!1}function Ye(e,t){if(!e)return!1;if(e.name==="TreeNodesModel")return Q(e,t);for(let n of e.children)if(!(n.kind!=="element"||n.name!=="TreeNodesModel")&&Q(n,t))return!0;return!1}function V(e){return nn.has(e.name)}function He(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":v(e.name)?"generic-node":V(e)?"unknown-xml":"concrete-node"}function I(e){if(e.name==="SubTree")return A(e,"ID")||"SubTree";if(v(e.name))return A(e,"ID");if(!(e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"||e.name==="include"||V(e)))return e.name}function q(e,t){return e.behaviorTreesById.get(t)??[]}function Qe(e,t){return ee(e).flatMap(n=>n.subtreeReferences.filter(i=>i.id===t))}function Ze(e){return ee(e).flatMap(t=>t.subtreeReferences)}function et(e){return[...e.behaviorTreesById.keys()]}function ee(e){return[...e.documents.values()]}function N(e,t){let n=e;return n.mergedNodeModelsById.get(t)??n.builtins.get(t)}function U(e,t){return e.modelLayers.flatMap(n=>n.models.filter(i=>i.id===t))}function tt(e){return[...e.mergedNodeModelsById.values()]}function nt(e){return[...e.mergedNodeModelsById.values()]}function L(e){return[...e.genericSubTreePorts]}function F(e){return e.modelConflicts}function O(e,t){let{id:n,fileLocalUri:i,config:r}=t,o=q(e,n);if(o.length>0){if((r?.resolver?.behaviorTreeIds==="file-local-first"||r?.resolver?.behaviorTreeIds==="allow-ambiguous")&&i){let u=o.filter(l=>l.uri===i);u.length>0&&(o=u)}let a=N(e,n),d=a?.kind==="SubTree"?[a]:[];return o.length===1?{status:"resolved",kind:"behavior-tree",treeId:o[0].id,behaviorTree:o[0]}:{status:"ambiguous",candidates:[...o.map(u=>u.id),...d.map(u=>u.id)],behaviorTrees:o,definitions:d}}let s=N(e,n);return s?.kind==="SubTree"?{status:"resolved",kind:"node-model",modelId:s.id,model:s}:{status:"unresolved",id:n}}function te(e,t){if(!t)return{status:"unresolved",nodeType:t};let n=N(e,t);if(n){let r=F(e).find(o=>o.id===t&&o.code==="BT012_CONFLICTING_NODE_MODEL");return r?{status:"ambiguous",nodeType:t,candidates:r.definitions}:{status:"resolved",model:n}}let i=U(e,t);return i.length===1?{status:"resolved",model:i[0]}:i.length>1?{status:"ambiguous",nodeType:t,candidates:i}:{status:"unresolved",nodeType:t}}function ne(e){let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);return[...t.values()]}function ie(e){let t=L(e.index);if(e.tagForm==="subtree"){let n=e.model.status==="resolved"?e.model.model.ports:e.subtreeModelPorts??[];return ne([...n,...t])}return e.model.status==="resolved"?[...e.model.model.ports]:[]}function re(e){let{attribute:t}=e,n=e.ports.find(i=>i.name===t.name);return n?{status:"resolved",attribute:t,name:t.name,value:t.value,port:n}:K(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 b(e,t){let n=Je(t.policy),i=t.element,r=He(i),o=Ye(t.documentRoot,i);if((t.isModelDefinition||o&&(r==="generic-node"||r==="subtree"))&&(r="model-definition"),o&&V(i)&&(r="unknown-xml"),r==="root"||r==="behavior-tree"||r==="tree-nodes-model"||r==="include"||r==="model-definition"||r==="unknown-xml")return{element:i,tagName:i.name,tagForm:r,model:{status:"not-a-node"},ports:[],allowsArbitraryAttributes:!1,portUsages:[]};let s=I(i);if(r!=="subtree"){let c=te(e,s),g=ie({index:e,tagForm:r,model:c}),p=i.attributes.map(y=>re({attribute:y,ports:g,allowsArbitraryAttributes:!1,model:c}));return{element:i,tagName:i.name,tagForm:r,nodeType:s,model:c,ports:g,allowsArbitraryAttributes:!1,portUsages:p}}let a=A(i,"ID"),d=a?O(e,{id:a,fileLocalUri:t.uri,config:t.config}):{status:"unresolved",id:void 0},u={status:"unresolved",nodeType:a},l=!1;if(d.status==="resolved"&&d.kind==="node-model")u={status:"resolved",model:d.model};else if(d.status==="resolved"&&d.kind==="behavior-tree"){let c=te(e,d.treeId);c.status==="resolved"&&c.model.kind==="SubTree"?u=c:l=n.unknownSubTreePorts==="allow"}else d.status==="ambiguous"&&d.definitions.length>0?u=d.definitions.length===1?{status:"resolved",model:d.definitions[0]}:{status:"ambiguous",nodeType:a??"SubTree",candidates:d.definitions}:l=n.unknownSubTreePorts==="allow";let m=ie({index:e,tagForm:r,model:u,subtreeModelPorts:d.status==="ambiguous"?ne(d.definitions.flatMap(c=>c.ports)):void 0}),f=i.attributes.map(c=>re({attribute:c,ports:m,allowsArbitraryAttributes:l,model:u,unknownModelPortStatus:!l&&u.status!=="resolved"?"undeclared":void 0}));return{element:i,tagName:i.name,tagForm:r,nodeType:s,model:u,subtree:{id:a,target:d},ports:m,allowsArbitraryAttributes:l,portUsages:f}}function oe(e,t){return b(e,t).portUsages.find(i=>i.name===t.attributeName)}function de(e,t){return b(e,t).ports}function rn(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function on(e){let t=e.root;return t?t.name==="BehaviorTree"?[t]:t.children.filter(n=>n.kind==="element"&&n.name==="BehaviorTree"):[]}function it(e,t){let n=e.line,i=e.character,r=e.offset;for(let o of t){if(r+=o.length,o===`
2
- `){n+=1,i=0;continue}i+=o.length}return{line:n,character:i,offset:r}}function dn(e,t,n){let i=it(e,t),r=it(i,n);return{start:i,end:r}}function ot(e,t){let n=t.valueContentRange||t.valueRange,i=e.originalText.slice(n.start.offset,n.end.offset),r=[];for(let o of i.matchAll(/\{([^}]+)\}/g)){let s=o[0],a=o[1],d=o.index??0;r.push({raw:s,key:a,range:dn(n.start,i.slice(0,d),s),syntax:"braced"})}return r.length===0&&(i.includes("{")||i.includes("}"))&&r.push({raw:i,key:i,range:n,syntax:"invalid"}),r}function an(e,t){return rn(e.name)?e.name:t.model.status==="resolved"?t.model.model.kind:"unknown"}function dt(e){let t=[];for(let n of e)t.push(n),t.push(...dt(n.children));return t}function sn(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function un(e){let t=new Map(e.map((n,i)=>[n,i]));return n=>`bt:${t.get(n.behaviorTree)??0}/node:${n.path.join(".")}`}function ln(e){return{name:e.name,value:e.value,range:e.range,nameRange:e.nameRange,valueRange:e.valueContentRange||e.valueRange}}function at(e){return D(e,"name")?.value}function cn(e){return at(e)||D(e,"ID")?.value||e.name}function pn(e){let t=[],n=e;for(;n;){let i=n.path.at(-1)??0;t.unshift(`${i}:${cn(n.element)}`),n=n.parent}return[e.behaviorTree.id||"<anonymous>",...t].join("/")}function st(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 ut(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 mn(e){return e.status==="resolved"?e.port.direction:"unknown"}function fn(e,t){return e===""?"empty":e==="{=}"?"substitution":t.some(n=>n.syntax==="braced")?"blackboard-reference":t.some(n=>n.syntax==="invalid")?"unknown":"literal"}function rt(e,t){return{nodeId:e,portName:t.name,rawValue:t.value,direction:mn(t.usage),valueKind:fn(t.value,t.blackboardReferences),range:t.attribute.range,nameRange:t.attribute.nameRange,valueRange:t.attribute.valueContentRange||t.attribute.valueRange,resolution:t.declaredPort,usage:t.usage,blackboardReferences:t.blackboardReferences}}function gn(e){let t=new Set;for(let n of[e.name,e.idAttr,e.nodeType,e.tagName,e.instancePath,e.behaviorTreeId&&!e.instancePath.startsWith(`${e.behaviorTreeId}/`)?`${e.behaviorTreeId}/${e.instancePath}`:void 0,e.nodeId])n&&t.add(n);return[...t]}function D(e,t){return e.attributes.find(n=>n.name===t)}function yn(e){return e.root?D(e.root,"main_tree_to_execute")?.value:void 0}function Tn(e){let t=new Set;if(!e)return t;let n=i=>{t.add(i);for(let r of i.children)r.kind==="element"&&n(r)};if(e.name==="TreeNodesModel")return n(e),t;for(let i of e.children)i.kind!=="element"||i.name!=="TreeNodesModel"||n(i);return t}function lt(e,t){let n=t.semantic,i=Tn(e.root),r=on(e).map(d=>({id:D(d,"ID")?.value,element:d,rootNode:void 0,nodes:[]})),o=[],s=[],a=(d,u,l,m)=>{let f=b(n,{element:d,uri:e.uri,documentRoot:e.root,config:t?.config,policy:t?.policy,isModelDefinition:i.has(d)}),c=st(f),g={element:d,path:m,tagName:d.name,kind:an(d,f),model:c,usage:f,portBindings:[],children:[],parent:l,behaviorTree:u};if(g.portBindings=f.portUsages.filter(p=>p.status!=="reserved-attribute").map(p=>({name:p.name,value:p.value,attribute:p.attribute,declaredPort:ut(p),usage:p,blackboardReferences:ot(e,p.attribute)})),g.children=d.children.filter(p=>p.kind==="element").map((p,y)=>a(p,u,g,[...m,y])),d.name==="SubTree"){let p=D(d,"ID")?.value;o.push({node:g,id:p,target:f.subtree?.target??{status:"unresolved",id:p},portRemaps:g.portBindings})}return g};for(let d of r){let u=d.element.children.filter(l=>l.kind==="element").map((l,m)=>a(l,d,void 0,[m]));d.rootNode=u[0],d.nodes=dt(u),s.push(...d.nodes)}return{document:e,behaviorTrees:r,subtreeCalls:o,nodes:s}}function ae(e,t,n){let i=lt(e,{semantic:t,config:n?.config,policy:n?.policy}),r=un(i.behaviorTrees),o=i.nodes.map(u=>{let l=r(u),m=u.usage,f=m.nodeType??u.tagName,c=at(u.element),g=D(u.element,"ID")?.value,p=pn(u);return{nodeId:l,path:u.path,instancePath:p,tagName:u.tagName,nodeType:f,name:c,idAttr:g,kind:u.kind,range:u.element.range,fullRange:u.element.fullRange,nameRange:u.element.nameRange,parentNodeId:u.parent?r(u.parent):void 0,childNodeIds:u.children.map(r),behaviorTreeId:u.behaviorTree.id,attributes:u.element.attributes.map(ln),identityCandidates:gn({name:c,idAttr:g,nodeType:f,tagName:u.tagName,instancePath:p,behaviorTreeId:u.behaviorTree.id,nodeId:l}),model:st(m),usage:m,portBindings:m.portUsages.filter(y=>y.status!=="reserved-attribute").map(y=>rt(l,{name:y.name,value:y.value,attribute:y.attribute,declaredPort:ut(y),usage:y,blackboardReferences:ot(e,y.attribute)}))}}),s=i.behaviorTrees.map(u=>({id:u.id,range:u.element.range,idRange:D(u.element,"ID")?.valueContentRange,rootNodeId:u.rootNode?r(u.rootNode):void 0,nodeIds:u.nodes.map(r)})),a=i.subtreeCalls.map(u=>({nodeId:r(u.node),callId:u.id,range:u.node.element.range,target:u.target,portBindings:u.portRemaps.map(l=>rt(r(u.node),l))})),d=e.root?D(e.root,"main_tree_to_execute"):void 0;return{uri:e.uri,kind:sn(e),mainTreeToExecute:yn(e),mainTreeToExecuteRange:d?.valueContentRange||d?.valueRange,behaviorTrees:s,nodes:o,subtreeCalls:a}}function Sn(e,t){return E(e.fullRange||e.range,t)}function bn(e,t){let n=e.fullRange||e.range,i=t.fullRange||t.range;return n.end.offset-n.start.offset<i.end.offset-i.start.offset}function se(e){return e.nodes}function ue(e){return e.subtreeCalls}function le(e,t){let n;for(let i of e.nodes)Sn(i,t.offset)&&(!n||bn(i,n))&&(n=i);return n}function ce(e,t){for(let n of e.nodes)for(let i of n.portBindings)if(E(i.range,t.offset))return i}export{ae as buildSemanticDocumentView,$e as buildSemanticIndex,le as findSemanticNodeAtPosition,ce as findSemanticPortBindingAtPosition,tt as getAllNodeModels,se as getAllSemanticTreeNodes,Ze as getAllSubTreeReferences,et as getBehaviorTreeIds,q as getBehaviorTrees,nt as getEffectiveNodeModels,Z as getGenericNodeKindFromTag,L as getGenericSubTreePorts,F as getModelConflicts,N as getNodeModel,U as getNodeModelDefinitions,I as getNodeTypeFromElement,ue as getSemanticSubTreeCalls,Qe as getSubTreeReferences,de as getUsagePorts,v as isGenericNodeTag,b as resolveNodeUsage,oe as resolvePortUsage,O as resolveSubTreeTarget};
1
+ var T={Error:"error",Warning:"warning",Info:"info"};function M(e,t,n,r,i="",o,s){return{code:e,severity:t,message:n,uri:i,...r?{range:r}:{},...o?{details:o}:{},...s?{data:s}:{}}}function A(e,t){return e?e.start.offset<=t&&t<=e.end.offset:!1}var St=/^[A-Za-z_][A-Za-z0-9_./:-]*$/;function be(e){return{ok:!0,reference:e}}function x(e,t,n){return{ok:!1,error:{kind:e,raw:t,message:n}}}function Te(e){return St.test(e)}function ht(e){if(!e)return x("empty-key",e,"Blackboard reference key must not be empty");if(e[0]==="@"){let t=e.slice(1);return t?Te(t)?{ok:!0,scope:"global",key:t}:x("invalid-global-key",e,`Invalid global blackboard reference key: ${e}`):x("empty-key",e,"Global blackboard reference key must not be empty")}return Te(e)?{ok:!0,scope:"local",key:e}:x("invalid-key",e,`Invalid blackboard reference key: ${e}`)}function S(e){let{portName:t}=e,n=e.rawValue.trim();if(n==="="||n==="{=}")return be({scope:"local",key:t,raw:n,syntax:"shorthand"});if(!n.startsWith("{")&&!n.endsWith("}"))return x("not-a-reference",n,`Not a blackboard reference: ${n}`);if(!(n.startsWith("{")&&n.endsWith("}")))return x("unbalanced-braces",n,`Unbalanced blackboard reference braces: ${n}`);let r=n.slice(1,-1).trim(),i=ht(r);return i.ok?be({scope:i.scope,key:i.key,raw:n,syntax:"braced"}):i}function k(e){return`${e.scope}:${e.key}`}var Dt={DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID"};function Nt(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function b(e,t){return e.attributes.find(n=>n.name===t)}function kt(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function Bt(e){if(e)return{uri:e.uri,range:e.range,value:e.value}}function Mt(e,t="inline-tree-nodes-model"){return e.kind==="model-document"?"external-tree-nodes-model":t}function Se(e,t){let n=e.line,r=e.character,i=e.offset;for(let o of t){if(i+=o.length,o===`
2
+ `){n+=1,r=0;continue}r+=o.length}return{line:n,character:r,offset:i}}function xt(e,t,n){let r=Se(e,t),i=Se(r,n);return{start:r,end:i}}function he(e,t,n,r){for(let i of e.attributes||[]){let o=i.valueContentRange??i.valueRange,s=r.slice(o.start.offset,o.end.offset),u=d=>{let c=S({portName:i.name,rawValue:d.parsedRaw});if(!c.ok)return;let p=c.reference.raw.length;t.push({raw:c.reference.raw,key:c.reference.key,scope:c.reference.scope,identity:k(c.reference),syntax:c.reference.syntax,attributeName:i.name,element:e,uri:n,range:xt(o.start,s.slice(0,d.parsedOffset),c.reference.raw.slice(0,p))})},a=S({portName:i.name,rawValue:s});if(a.ok){let d=Math.max(0,s.indexOf(a.reference.raw));u({parsedRaw:a.reference.raw,parsedOffset:d});continue}for(let d of s.matchAll(/\{[^}]*\}/g)){let c=d[0],p=d.index??0;u({parsedRaw:c,parsedOffset:p})}}for(let i of e.children||[])i.kind==="element"&&he(i,t,n,r)}function vt(e,t,n,r){let i=[];for(let o of e.children||[]){if(o.kind!=="element"||!kt(o.name))continue;let s=b(o,"ID");if(!s)continue;let u=[];for(let a of o.children||[]){if(a.kind!=="element"||a.name!=="input_port"&&a.name!=="output_port"&&a.name!=="inout_port")continue;let d=b(a,"name"),c=b(a,"type"),p=b(a,"default")||b(a,"default_value"),m=b(a,"enum"),l=(a.children||[]).filter(y=>y.kind==="text").map(y=>y.text).join("").trim()||void 0,g=a.name==="input_port"?"input":a.name==="output_port"?"output":"inout",f=(g==="input"||g==="inout")&&p===void 0;u.push({source:n,direction:g,name:d?d.value:"",type:c?.value||void 0,defaultValue:p?.value||void 0,description:l,required:f,element:a,uri:t,range:a.range,nameRange:d?.range,enum:m?.value?m.value.split(";"):void 0})}i.push({id:s.value,kind:o.name,source:n,sourceMeta:{sourceKind:n,file:t,range:o.range},editable:r,ports:u,element:o,uri:t,range:o.range,elementRange:o.range,idRange:s.range})}return i}function Rt(e,t){let n=[];for(let r of e.children||[]){if(r.kind!=="element"||r.name!=="BehaviorTree")continue;let i=b(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 Pt(e,t){let n=[],r=(i,o,s=!1)=>{if(s)return;let u=i.name==="BehaviorTree"?b(i,"ID")?.value??o:o,a=i.name==="TreeNodesModel";if(i.name==="SubTree"){let d=b(i,"ID");d&&n.push({id:d.value,uri:t,element:i,range:i.range,elementRange:i.range,idRange:d.range,parentBehaviorTreeId:u,attributes:i.attributes})}for(let d of i.children||[])d.kind==="element"&&r(d,u,a)};if(e.name==="TreeNodesModel")return n;for(let i of e.children||[])i.kind==="element"&&r(i);return n}function It(e){return{id:e.id,kind:e.kind,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange}}function De(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 wt(e){return{id:e.id,kind:e.kind,editable:e.editable,ports:e.ports.map(De),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 Et(e){return{id:e.id,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange,parentBehaviorTreeId:e.parentBehaviorTreeId}}function _t(e){return{id:e.id,uri:e.uri,kind:e.kind,range:e.range,elementRange:e.elementRange,parentBehaviorTreeId:e.parentBehaviorTreeId}}function At(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 Vt(e){return{uri:e.uri,path:e.path,isBtXml:e.isBtXml,kind:e.kind,behaviorTrees:e.behaviorTrees.map(It),subtreeReferences:e.subtreeReferences.map(Et),nodeUsages:e.nodeUsages.map(_t),blackboardReferences:e.blackboardReferences.map(At),treeNodesModel:e.treeNodesModel.map(wt),genericSubTreePorts:e.genericSubTreePorts.map(De),rootMainTreeToExecute:Bt(e.rootMainTreeToExecute)}}function Ct(e,t){if(e.name==="TreeNodesModel")return[];let n=[],r=(i,o,s=!1)=>{if(s)return;let u=i.name==="TreeNodesModel",a=i.name==="BehaviorTree"?b(i,"ID")?.value??o:o,d=a!==void 0;if(i.name==="SubTree"){let c=b(i,"ID");c&&d&&n.push({id:c.value,kind:"SubTree",uri:t,range:i.range,elementRange:i.range,parentBehaviorTreeId:a})}else d&&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:a});for(let c of i.children||[])c.kind==="element"&&r(c,a,u)};for(let i of e.children||[])i.kind==="element"&&r(i);return n}function qt(e){return e.node.kind==="SubTree"&&e.node.id==="SubTree"?(e.genericSubTreePorts.push(...e.node.ports),!0):(e.treeNodesModel.push(e.node),!1)}function Ut(e){return M(Dt.DuplicateNodeModelId,T.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 Lt(e,t){let n=[],r=t?.uri||e.uri,i=e.root,o=e.isBtXml,s=Nt(e),u=Mt(e),a=((t?.path??e.path)||r==="")&&e.kind==="model-document"?!0:e.kind!=="model-document",d=i&&e.kind!=="model-document"?Rt(i,r):[],c=[],p=[],m=i?i.name==="TreeNodesModel"?[i]:i.children.filter(N=>N.kind==="element"&&N.name==="TreeNodesModel"):[];for(let N of m){let Tt=vt(N,r,u,a),ye=new Map;for(let P of Tt)qt({node:P,treeNodesModel:c,genericSubTreePorts:p})||(ye.has(P.id)?n.push(Ut(P)):ye.set(P.id,P))}let l=i?Pt(i,r):[],g=i?Ct(i,r):[],f=i?(()=>{let N=[];return he(i,N,r,e.originalText),N})():[],y=i?b(i,"main_tree_to_execute"):void 0;return{extracted:{publicModel:Vt({uri:r,path:t?.path??e.path,isBtXml:o,kind:s,behaviorTrees:d,subtreeReferences:l,nodeUsages:g,blackboardReferences:f,treeNodesModel:c,genericSubTreePorts:p,rootMainTreeToExecute:y?{uri:r,range:y.range,value:y.value}:void 0}),extractedBehaviorTrees:d,extractedTreeNodesModel:c,extractedSubTreeReferences:l,extractedBlackboardReferences:f},diagnostics:n}}function Ne(e,t){let{extracted:n,diagnostics:r}=Lt(e,t);return{model:n.publicModel,diagnostics:r}}function X(e,t){return Ne(e,t)}var ke=new Set(["ID","name","_name","_autoremap","_failureIf","_successIf","_skipIf","_while","_onSuccess","_onFailure","_onHalted","_post"]),Yn=new Set([...ke,"_autoremap","_description","__shared_blackboard"]);function $(e){return ke.has(e)}function Be(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 W(e,t){return{id:e,kind:t.kind,source:"config",sourceMeta:{sourceKind:"config"},editable:!0,ports:Object.entries(t.ports??{}).map(([n,r])=>Be(n,r))}}var Ft=[{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"]}],V=new Map,Me=new Map;for(let e of Ft){let t={name:e.name,kind:e.kind,canonical:e.name,aliases:e.aliases,compatibleWith:[],source:"builtin"};Me.set(e.name,t),V.set(e.name,e.name);for(let n of e.aliases)V.set(n,e.name)}function Ot(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 z(e){return V.get(e)??e}function Kt(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 C(e=[]){let t=new Map,n=new Map(V);for(let r of Me.values())t.set(r.canonical,{name:r.name,kind:r.kind,canonical:r.canonical,aliases:new Set([r.name,r.canonical,...r.aliases]),compatibleWith:new Set(r.compatibleWith),validate:r.validate,source:r.source});for(let r of e)for(let[i,o]of Object.entries(r.types??{})){let s=z(o.canonical??i),a=t.get(s)??Ot(i,s,o);a.name=i,a.kind=o.kind,a.canonical=s,a.source="augmentation",a.validate=o.validate??a.validate,a.aliases.add(i),a.aliases.add(s);for(let d of o.aliases??[])a.aliases.add(d);for(let d of o.compatibleWith??[])a.compatibleWith.add(d);t.set(s,a),n.set(i,s),n.set(s,s);for(let d of o.aliases??[])n.set(d,s)}for(let r of t.values())r.compatibleWith=new Set([...r.compatibleWith].map(i=>n.get(i)??z(i))),r.compatibleWith.delete(r.canonical);return{entriesByCanonical:new Map([...t.entries()].map(([r,i])=>[r,Kt(i)])),namesToCanonical:n}}function xe(e,t){if(!t)return;let n=e.namesToCanonical.get(t)??z(t),r=e.entriesByCanonical.get(n);return r||{name:t,kind:"opaque",canonical:n,aliases:[],compatibleWith:[],source:"custom"}}function J(e,t){return xe(e,t)?.canonical}var ve=[{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:[]}],Re={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 Pe=[{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:[]}],Ie={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 we=[{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:[]}],Ee={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 _e=["4.6.2","4.8.2","4.9.0"],Y="4.9.0",I={"4.6.2":{models:ve,genericSubTreeModel:Re},"4.8.2":{models:Pe,genericSubTreeModel:Ie},"4.9.0":{models:we,genericSubTreeModel:Ee}};var Ae=_e.map(e=>`btcpp-v${e}`),Z=["btcpp-v4",...Ae],Ve=`btcpp-v${Y}`;function Ce(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 Gt(e){return e.map(t=>({id:t.id,kind:t.kind,ports:t.ports.map(Ce)}))}function qe(e){if(e)return{id:e.id,kind:e.kind,ports:e.ports.map(Ce)}}function jt(){let e={};for(let[t,n]of Object.entries(I))e[`btcpp-v${t}`]=Gt(n.models);return e}function Xt(){let e={};for(let[t,n]of Object.entries(I))e[`btcpp-v${t}`]=qe(n.genericSubTreeModel);return e}var $t=jt(),Wt=Xt();function zt(e){let t=e.replace(/^btcpp-v/,"");return Object.hasOwn(I,t)}function Ue(e){return e==="btcpp-v4"?Ve:e}function Jt(e){return e==="btcpp-v4"?Y:e.replace(/^btcpp-v/,"")}function Le(e){if(e&&e!=="btcpp-v4"&&!zt(e))throw new Error(`unsupported builtin model set: ${e}`)}function H(e="btcpp-v4"){Le(e);let t=Ue(e);return $t[t].map(r=>Fe(r))}function Q(e="btcpp-v4"){Le(e);let t=Wt[Ue(e)]??qe(I[Jt(e)].genericSubTreeModel);return t?(t.ports??[]).map(n=>({...n,enum:n.enum?[...n.enum]:void 0})):[]}function Fe(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 w(e){return{id:e.id,kind:e.kind,ports:[...e.ports].sort((t,n)=>{let r=t.name.localeCompare(n.name);if(r!==0)return r;let i=t.direction.localeCompare(n.direction);if(i!==0)return i;let o=(t.type??"").localeCompare(n.type??"");if(o!==0)return o;let s=(t.defaultValue??"").localeCompare(n.defaultValue??"");return s!==0?s:(t.description??"").localeCompare(n.description??"")}).map(t=>({name:t.name,direction:t.direction,type:t.type,required:t.required,defaultValue:t.defaultValue,enum:t.enum?[...t.enum].sort():void 0,description:t.description}))}}function q(e,t){let n=w(e),r=w(t);return JSON.stringify(n)===JSON.stringify(r)}function ee(e,t){if(q(e,t))return"none";let n=w(e),r=w(t);if(n.kind!==r.kind)return"kind";if(n.ports.length!==r.ports.length)return"ports";let i=new Map(r.ports.map(u=>[u.name,u])),o=!1,s=!1;for(let u of n.ports){let a=i.get(u.name);if(!a){s=!0;continue}(u.direction!==a.direction||u.type!==a.type||u.required!==a.required)&&(s=!0);let d=u.enum?JSON.stringify(u.enum):"",c=a.enum?JSON.stringify(a.enum):"";d!==c&&(s=!0),u.description!==a.description&&(s=!0),u.defaultValue!==a.defaultValue&&(o=!0)}return s?"ports":o?"port-default":"mixed"}function Oe(e,t){if(t)return J(e,t)}function Ke(e){return e.source==="inline-tree-nodes-model"||e.source==="external-tree-nodes-model",e.source}function Ge(e){let t=e.port?.uri??e.model?.uri??"",n=e.port?.nameRange??e.port?.range??e.model?.idRange??e.model?.range;return M(e.code,T.Error,e.message,n,t,{primaryLabel:e.message,help:e.help,notes:e.notes},e.data)}function Ht(e,t,n,r,i){let o=n.effectiveType??n.type,s=n.originalType??n.type,u={...n,originalType:s,effectiveType:o,typeSource:n.typeSource??Ke(n),validate:r.validate??n.validate,required:r.required??n.required,enum:r.enum?[...r.enum]:n.enum,description:r.description??n.description},a=r.typeRefinement;if(!a)return{...u,type:u.effectiveType};let d=Oe(e,a.from),c=Oe(e,o);return d&&d!==c?(i.push(Ge({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:a.from,to:a.to},notes:o||a.from?[`base type: ${o??"(unspecified)"}`,`requested from: ${a.from??"(unspecified)"}`]:void 0})),{...u,type:u.effectiveType}):{...u,type:a.to,effectiveType:a.to,typeSource:"model-augmentation",typeRefinement:a}}function Qt(e,t,n,r){let i=new Map(t.ports.map(o=>[o.name,o]));for(let[o,s]of Object.entries(n.ports??{})){let u=i.get(o);if(!u){r.push(Ge({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,Ht(e,t,u,s,r))}return{...t,ports:t.ports.map(o=>i.get(o.name)??o)}}function en(e){let t=e.effectiveType??e.type,n=e.originalType??e.type;return{...e,type:t,effectiveType:t,originalType:n,typeSource:e.typeSource??Ke(e)}}function je(e,t,n){let r=[],i=new Map([...e.entries()].map(([o,s])=>[o,{...s,ports:s.ports.map(en)}]));for(let o of n)for(let[s,u]of Object.entries(o.augment??{})){let a=i.get(s);if(!a){r.push(M("BT117_AUGMENT_TARGET_NOT_FOUND",T.Error,`augmentation target node \`${s}\` not found`,void 0,o.uri??"",{primaryLabel:`augmentation target \`${s}\` does not match any node model`,help:"change the augmentation target to an existing node model or remove it",notes:o.path?[`augmentation file: ${o.path}`]:void 0},{kind:"augment-target-not-found",nodeId:s,filePath:o.path}));continue}i.set(s,Qt(t,a,u,r))}return{modelsById:i,diagnostics:r}}function We(e){return E("builtin",0,!1,e)}function ze(e){return E("xml-tree-nodes-model",10,!0,e)}function Je(e){return E("external-tree-nodes-model",15,e.some(t=>t.editable!==!1),e)}function Ye(e){return E("node-definition-file",20,!0,e)}function Ze(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=>He(i,e,n&&i.editable!==!1))}}function tn(e){return e==="config-inline"?"config":e==="xml-tree-nodes-model"?"inline-tree-nodes-model":e}function He(e,t,n){let r=tn(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 v(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 Xe(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 nn(e,t){let n=[];e.kind!==t.kind&&n.push({kind:"node-kind",left:e.kind,right:t.kind});let r=new Map(e.ports.map(o=>[o.name,o])),i=new Map(t.ports.map(o=>[o.name,o]));for(let[o,s]of r)i.has(o)||n.push({kind:"port-removed",portName:o,sourceIndex:0,port:Xe(s)});for(let[o,s]of i)r.has(o)||n.push({kind:"port-added",portName:o,sourceIndex:1,port:Xe(s)});for(let[o,s]of r){let u=i.get(o);if(!u)continue;s.direction!==u.direction&&n.push({kind:"port-direction",portName:o,left:s.direction,right:u.direction}),s.type!==u.type&&n.push({kind:"port-type",portName:o,left:s.type,right:u.type}),s.required!==u.required&&n.push({kind:"port-required",portName:o,left:s.required,right:u.required}),s.defaultValue!==u.defaultValue&&n.push({kind:"port-default",portName:o,left:s.defaultValue,right:u.defaultValue});let a=s.enum?JSON.stringify([...s.enum].sort()):"",d=u.enum?JSON.stringify([...u.enum].sort()):"";a!==d&&n.push({kind:"port-enum",portName:o,left:s.enum?[...s.enum].sort():void 0,right:u.enum?[...u.enum].sort():void 0}),s.description!==u.description&&n.push({kind:"port-description",portName:o,left:s.description,right:u.description})}return n}function $e(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(q(i,r))continue;let o=ee(i,r),s=nn(i,r),u;if(o==="port-default"){let a=new Map(i.ports.map(m=>[m.name,m])),d=r.ports.find(m=>{let l=a.get(m.name);return l&&l.defaultValue!==m.defaultValue}),c=d?.name??"unknown",p=[v(i,0),v(r,1)];u={kind:"port-default-conflict",nodeId:r.id,portName:c,sources:[{source:v(i,0),value:a.get(c)?.defaultValue},{source:v(r,1),value:d?.defaultValue}]},t.push({id:r.id,definitions:[i,r],sources:p,code:"BT107_CONFLICTING_PORT_DEFAULT",message:`conflicting default for port \`${c}\` 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:u,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}else{let a=[v(i,0),v(r,1)];u={kind:"node-model-conflict",nodeId:r.id,sources:a,differences:s},t.push({id:r.id,definitions:[i,r],sources:a,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:u,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}}return n}function rn(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 Qe(e){let t=[],n=new Map,r=new Map,i=[...e].sort((u,a)=>u.precedence-a.precedence),o=new Map,s=new Map;for(let u of i){let a=o.get(u.precedence)??[],d=u.models.map(c=>He(c,u.kind,u.editable&&c.editable!==!1));a.push(...d),o.set(u.precedence,a);for(let c of d)s.set(c.id,u.precedence)}for(let[u,a]of[...o.entries()].sort((d,c)=>d[0]-c[0])){let d=a.filter(l=>s.get(l.id)===u),c=a.filter(l=>s.get(l.id)!==u),p=$e(c,[]);for(let[l,g]of $e(d,t))p.set(l,g);let m=new Set(a.map(l=>l.id));for(let l of m)s.get(l)===u&&n.set(l,a.filter(g=>g.id===l));for(let[l,g]of p)r.set(l,rn(r.get(l),g))}return{nodeModelsById:n,mergedNodeModelsById:r,conflicts:t}}function on(e){return Z.includes(e)}function an(){return{documents:new Map,behaviorTreesById:new Map,nodeModelsById:new Map,mergedNodeModelsById:new Map,modelLayers:[],builtins:new Map,genericSubTreePorts:[],modelConflicts:[],typeRegistry:C(),augmentations:[]}}function dn(e,t,n){let r=e.get(t)||[];r.push(n),e.set(t,r)}function sn(e,t,n){for(let r of new Set(n))if(on(r)){for(let i of H(r))e.builtins.set(i.id,i),t.push(i);e.genericSubTreePorts.push(...Q(r))}}function un(e,t,n,r,i){for(let o of i){let s=X(o,{uri:o.uri,path:o.path}),u=s.model;t.push(...s.diagnostics),e.documents.set(o.uri,u);for(let a of u.behaviorTrees)dn(e.behaviorTreesById,a.id,a);o.kind==="model-document"?r.push(...u.treeNodesModel):n.push(...u.treeNodesModel),e.genericSubTreePorts.push(...u.genericSubTreePorts)}}function cn(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 ln(e){let t=new Set,n=[];for(let r of e.genericSubTreePorts){let i=cn(r);t.has(i)||(t.add(i),n.push(r))}e.genericSubTreePorts=n}function pn(e,t,n,r,i){e.modelLayers.push(We(t),ze(n),Je(r)),i.models?.length&&e.modelLayers.push(Ye([...i.models])),e.modelLayers.push(...i.additionalModelLayers??[])}function et(e,t){return fn(e,t)}function fn(e,t){let n=an(),r=[],i=[],o=[],s=[];sn(n,i,t.config.models.builtins),n.augmentations=t.augmentations??[],n.typeRegistry=C(t.augmentations??[]),un(n,r,o,s,e),ln(n),pn(n,i,o,s,t);let u=t.config.models.inline;if(u){let c=[];for(let[p,m]of Object.entries(u))c.push(W(p,m));n.modelLayers.push(Ze(c))}let a=Qe(n.modelLayers),d=je(a.mergedNodeModelsById,n.typeRegistry,t.augmentations??[]);return n.nodeModelsById=a.nodeModelsById,n.mergedNodeModelsById=d.modelsById,n.modelConflicts=a.conflicts,r.push(...d.diagnostics),{ok:r.every(c=>c.severity!==T.Error),index:n,diagnostics:r}}var tt={unknownSubTreePorts:"allow"};function nt(e){return{...tt,...e}}var mn=["Action","Condition","Control","Decorator"],gn=new Set(mn);var yn=new Set(["input_port","output_port","inout_port"]);function R(e){return gn.has(e)}function ne(e){return R(e)?e:void 0}function U(e,t){return e.attributes.find(n=>n.name===t)?.value}function te(e,t){if(e===t)return!0;for(let n of e.children)if(n.kind==="element"&&te(n,t))return!0;return!1}function rt(e,t){if(!e)return!1;if(e.name==="TreeNodesModel")return te(e,t);for(let n of e.children)if(!(n.kind!=="element"||n.name!=="TreeNodesModel")&&te(n,t))return!0;return!1}function L(e){return yn.has(e.name)}function it(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":R(e.name)?"generic-node":L(e)?"unknown-xml":"concrete-node"}function _(e){if(e.name==="SubTree")return U(e,"ID")||"SubTree";if(R(e.name))return U(e,"ID");if(!(e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"||e.name==="include"||L(e)))return e.name}function F(e,t){return e.behaviorTreesById.get(t)??[]}function ot(e,t){return re(e).flatMap(n=>n.subtreeReferences.filter(r=>r.id===t))}function at(e){return re(e).flatMap(t=>t.subtreeReferences)}function dt(e){return[...e.behaviorTreesById.keys()]}function re(e){return[...e.documents.values()]}function B(e,t){let n=e;return n.mergedNodeModelsById.get(t)??n.builtins.get(t)}function O(e,t){return e.modelLayers.flatMap(n=>n.models.filter(r=>r.id===t))}function st(e){return[...e.mergedNodeModelsById.values()]}function ut(e){return[...e.mergedNodeModelsById.values()]}function K(e){return[...e.genericSubTreePorts]}function G(e){return e.modelConflicts}function j(e,t){let{id:n,fileLocalUri:r,config:i}=t,o=F(e,n);if(o.length>0){if((i?.resolver?.behaviorTreeIds==="file-local-first"||i?.resolver?.behaviorTreeIds==="allow-ambiguous")&&r){let d=o.filter(c=>c.uri===r);d.length>0&&(o=d)}let u=B(e,n),a=u?.kind==="SubTree"?[u]:[];return o.length===1?{status:"resolved",kind:"behavior-tree",treeId:o[0].id,behaviorTree:o[0]}:{status:"ambiguous",candidates:[...o.map(d=>d.id),...a.map(d=>d.id)],behaviorTrees:o,definitions:a}}let s=B(e,n);return s?.kind==="SubTree"?{status:"resolved",kind:"node-model",modelId:s.id,model:s}:{status:"unresolved",id:n}}function ie(e,t){if(!t)return{status:"unresolved",nodeType:t};let n=B(e,t);if(n){let i=G(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=O(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 oe(e){let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);return[...t.values()]}function ae(e){let t=K(e.index);if(e.tagForm==="subtree"){let n=e.model.status==="resolved"?e.model.model.ports:e.subtreeModelPorts??[];return oe([...n,...t])}return e.model.status==="resolved"?[...e.model.model.ports]:[]}function de(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}:$(t.name)?{status:"reserved-attribute",attribute:t,name:t.name,value:t.value}:e.allowsArbitraryAttributes?{status:"allowed-arbitrary",attribute:t,name:t.name,value:t.value}:e.unknownModelPortStatus==="undeclared"?{status:"undeclared",attribute:t,name:t.name,value:t.value}:e.model.status==="unresolved"||e.model.status==="ambiguous"?{status:"unknown-node-model",attribute:t,name:t.name,value:t.value}:{status:"undeclared",attribute:t,name:t.name,value:t.value}}function h(e,t){let n=nt(t.policy),r=t.element,i=it(r),o=rt(t.documentRoot,r);if((t.isModelDefinition||o&&(i==="generic-node"||i==="subtree"))&&(i="model-definition"),o&&L(r)&&(i="unknown-xml"),i==="root"||i==="behavior-tree"||i==="tree-nodes-model"||i==="include"||i==="model-definition"||i==="unknown-xml")return{element:r,tagName:r.name,tagForm:i,model:{status:"not-a-node"},ports:[],allowsArbitraryAttributes:!1,portUsages:[]};let s=_(r);if(i!=="subtree"){let l=ie(e,s),g=ae({index:e,tagForm:i,model:l}),f=r.attributes.map(y=>de({attribute:y,ports:g,allowsArbitraryAttributes:!1,model:l}));return{element:r,tagName:r.name,tagForm:i,nodeType:s,model:l,ports:g,allowsArbitraryAttributes:!1,portUsages:f}}let u=U(r,"ID"),a=u?j(e,{id:u,fileLocalUri:t.uri,config:t.config}):{status:"unresolved",id:void 0},d={status:"unresolved",nodeType:u},c=!1;if(a.status==="resolved"&&a.kind==="node-model")d={status:"resolved",model:a.model};else if(a.status==="resolved"&&a.kind==="behavior-tree"){let l=ie(e,a.treeId);l.status==="resolved"&&l.model.kind==="SubTree"?d=l:c=n.unknownSubTreePorts==="allow"}else a.status==="ambiguous"&&a.definitions.length>0?d=a.definitions.length===1?{status:"resolved",model:a.definitions[0]}:{status:"ambiguous",nodeType:u??"SubTree",candidates:a.definitions}:c=n.unknownSubTreePorts==="allow";let p=ae({index:e,tagForm:i,model:d,subtreeModelPorts:a.status==="ambiguous"?oe(a.definitions.flatMap(l=>l.ports)):void 0}),m=r.attributes.map(l=>de({attribute:l,ports:p,allowsArbitraryAttributes:c,model:d,unknownModelPortStatus:!c&&d.status!=="resolved"?"undeclared":void 0}));return{element:r,tagName:r.name,tagForm:i,nodeType:s,model:d,subtree:{id:u,target:a},ports:p,allowsArbitraryAttributes:c,portUsages:m}}function se(e,t){return h(e,t).portUsages.find(r=>r.name===t.attributeName)}function ue(e,t){return h(e,t).ports}function bn(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function Tn(e){let t=e.root;return t?t.name==="BehaviorTree"?[t]:t.children.filter(n=>n.kind==="element"&&n.name==="BehaviorTree"):[]}function ct(e,t){let n=e.line,r=e.character,i=e.offset;for(let o of t){if(i+=o.length,o===`
3
+ `){n+=1,r=0;continue}r+=o.length}return{line:n,character:r,offset:i}}function ce(e,t,n){let r=ct(e,t),i=ct(r,n);return{start:r,end:i}}function pt(e,t,n){let r=n.valueContentRange||n.valueRange,i=e.originalText.slice(r.start.offset,r.end.offset),o=[];for(let s of i.matchAll(/\{[^}]*\}/g)){let u=s[0],a=s.index??0,d=S({portName:t,rawValue:u});if(d.ok){o.push({raw:u,key:d.reference.key,scope:d.reference.scope,identity:k(d.reference),range:ce(r.start,i.slice(0,a),u),syntax:d.reference.syntax==="shorthand"?"shorthand":"braced"});continue}o.push({raw:u,key:u,scope:"local",identity:`invalid:${u}`,range:ce(r.start,i.slice(0,a),u),syntax:"invalid"})}if(o.length===0){let s=S({portName:t,rawValue:i});if(s.ok){let u=Math.max(0,i.indexOf(s.reference.raw));return o.push({raw:s.reference.raw,key:s.reference.key,scope:s.reference.scope,identity:k(s.reference),range:ce(r.start,i.slice(0,u),s.reference.raw),syntax:s.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 Sn(e,t){return bn(e.name)?e.name:t.model.status==="resolved"?t.model.model.kind:"unknown"}function ft(e){let t=[];for(let n of e)t.push(n),t.push(...ft(n.children));return t}function hn(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function Dn(e){let t=new Map(e.map((n,r)=>[n,r]));return n=>`bt:${t.get(n.behaviorTree)??0}/node:${n.path.join(".")}`}function Nn(e){return{name:e.name,value:e.value,range:e.range,nameRange:e.nameRange,valueRange:e.valueContentRange||e.valueRange}}function mt(e){return D(e,"name")?.value}function kn(e){return mt(e)||D(e,"ID")?.value||e.name}function Bn(e){let t=[],n=e;for(;n;){let r=n.path.at(-1)??0;t.unshift(`${r}:${kn(n.element)}`),n=n.parent}return[e.behaviorTree.id||"<anonymous>",...t].join("/")}function gt(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 yt(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 Mn(e){return e.status==="resolved"?e.port.direction:"unknown"}function xn(e,t){return e===""?"empty":e==="{=}"||e==="="?"substitution":t.some(n=>n.syntax==="braced")?"blackboard-reference":t.some(n=>n.syntax==="shorthand")?"substitution":t.some(n=>n.syntax==="invalid")?"unknown":"literal"}function lt(e,t){return{nodeId:e,portName:t.name,rawValue:t.value,direction:Mn(t.usage),valueKind:xn(t.value,t.blackboardReferences),range:t.attribute.range,nameRange:t.attribute.nameRange,valueRange:t.attribute.valueContentRange||t.attribute.valueRange,resolution:t.declaredPort,usage:t.usage,blackboardReferences:t.blackboardReferences}}function vn(e){let t=new Set;for(let n of[e.name,e.idAttr,e.nodeType,e.tagName,e.instancePath,e.behaviorTreeId&&!e.instancePath.startsWith(`${e.behaviorTreeId}/`)?`${e.behaviorTreeId}/${e.instancePath}`:void 0,e.nodeId])n&&t.add(n);return[...t]}function D(e,t){return e.attributes.find(n=>n.name===t)}function Rn(e){return e.root?D(e.root,"main_tree_to_execute")?.value:void 0}function Pn(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 bt(e,t){let n=t.semantic,r=Pn(e.root),i=Tn(e).map(a=>({id:D(a,"ID")?.value,element:a,rootNode:void 0,nodes:[]})),o=[],s=[],u=(a,d,c,p)=>{let m=h(n,{element:a,uri:e.uri,documentRoot:e.root,config:t?.config,policy:t?.policy,isModelDefinition:r.has(a)}),l=gt(m),g={element:a,path:p,tagName:a.name,kind:Sn(a,m),model:l,usage:m,portBindings:[],children:[],parent:c,behaviorTree:d};if(g.portBindings=m.portUsages.filter(f=>f.status!=="reserved-attribute").map(f=>({name:f.name,value:f.value,attribute:f.attribute,declaredPort:yt(f),usage:f,blackboardReferences:pt(e,f.name,f.attribute)})),g.children=a.children.filter(f=>f.kind==="element").map((f,y)=>u(f,d,g,[...p,y])),a.name==="SubTree"){let f=D(a,"ID")?.value;o.push({node:g,id:f,target:m.subtree?.target??{status:"unresolved",id:f},portRemaps:g.portBindings})}return g};for(let a of i){let d=a.element.children.filter(c=>c.kind==="element").map((c,p)=>u(c,a,void 0,[p]));a.rootNode=d[0],a.nodes=ft(d),s.push(...a.nodes)}return{document:e,behaviorTrees:i,subtreeCalls:o,nodes:s}}function le(e,t,n){let r=bt(e,{semantic:t,config:n?.config,policy:n?.policy}),i=Dn(r.behaviorTrees),o=r.nodes.map(d=>{let c=i(d),p=d.usage,m=p.nodeType??d.tagName,l=mt(d.element),g=D(d.element,"ID")?.value,f=Bn(d);return{nodeId:c,path:d.path,instancePath:f,tagName:d.tagName,nodeType:m,name:l,idAttr:g,kind:d.kind,range:d.element.range,fullRange:d.element.fullRange,nameRange:d.element.nameRange,parentNodeId:d.parent?i(d.parent):void 0,childNodeIds:d.children.map(i),behaviorTreeId:d.behaviorTree.id,attributes:d.element.attributes.map(Nn),identityCandidates:vn({name:l,idAttr:g,nodeType:m,tagName:d.tagName,instancePath:f,behaviorTreeId:d.behaviorTree.id,nodeId:c}),model:gt(p),usage:p,portBindings:p.portUsages.filter(y=>y.status!=="reserved-attribute").map(y=>lt(c,{name:y.name,value:y.value,attribute:y.attribute,declaredPort:yt(y),usage:y,blackboardReferences:pt(e,y.name,y.attribute)}))}}),s=r.behaviorTrees.map(d=>({id:d.id,range:d.element.range,idRange:D(d.element,"ID")?.valueContentRange,rootNodeId:d.rootNode?i(d.rootNode):void 0,nodeIds:d.nodes.map(i)})),u=r.subtreeCalls.map(d=>({nodeId:i(d.node),callId:d.id,range:d.node.element.range,target:d.target,portBindings:d.portRemaps.map(c=>lt(i(d.node),c))})),a=e.root?D(e.root,"main_tree_to_execute"):void 0;return{uri:e.uri,kind:hn(e),mainTreeToExecute:Rn(e),mainTreeToExecuteRange:a?.valueContentRange||a?.valueRange,behaviorTrees:s,nodes:o,subtreeCalls:u}}function In(e,t){return A(e.fullRange||e.range,t)}function wn(e,t){let n=e.fullRange||e.range,r=t.fullRange||t.range;return n.end.offset-n.start.offset<r.end.offset-r.start.offset}function pe(e){return e.nodes}function fe(e){return e.subtreeCalls}function me(e,t){let n;for(let r of e.nodes)In(r,t.offset)&&(!n||wn(r,n))&&(n=r);return n}function ge(e,t){for(let n of e.nodes)for(let r of n.portBindings)if(A(r.range,t.offset))return r}export{le as buildSemanticDocumentView,et as buildSemanticIndex,me as findSemanticNodeAtPosition,ge as findSemanticPortBindingAtPosition,st as getAllNodeModels,pe as getAllSemanticTreeNodes,at as getAllSubTreeReferences,dt as getBehaviorTreeIds,F as getBehaviorTrees,ut as getEffectiveNodeModels,ne as getGenericNodeKindFromTag,K as getGenericSubTreePorts,G as getModelConflicts,B as getNodeModel,O as getNodeModelDefinitions,_ as getNodeTypeFromElement,fe as getSemanticSubTreeCalls,ot as getSubTreeReferences,ue as getUsagePorts,R as isGenericNodeTag,h as resolveNodeUsage,se as resolvePortUsage,j as resolveSubTreeTarget};