@abco20/btxml-checker 0.1.0

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.
@@ -0,0 +1,16 @@
1
+ import { L as LanguageServiceOptions, a as LanguageService, B as BtEditorServiceOptions, b as BtEditorService } from './public-types-DaawwXHQ.js';
2
+ export { C as CodeAction, c as CodeActionsInput, d as CodeActionsResult, e as CompletionInput, f as CompletionItem, g as CompletionItemKind, h as CompletionResult, D as DefinitionInput, i as DefinitionResult, j as DiagnosticsInput, k as DiagnosticsResult, l as DocumentSymbol, m as DocumentSymbolsInput, n as DocumentSymbolsResult, F as FormattingInput, o as FormattingResult, H as HoverInput, p as HoverResult, q as Location, N as NodeCatalogResult, r as NodeModelResult, s as NodeUsageAtResult, P as PortInfoResult, R as ReferencesInput, t as ReferencesResult, S as SemanticDocumentViewResult, u as SemanticNodeResult, W as WorkspaceDiagnosticsResult, v as WorkspaceHost } from './public-types-DaawwXHQ.js';
3
+ import './types-BgqDzlJ8.js';
4
+ import './diagnostic-B5htzyJ9.js';
5
+ import 'zod';
6
+ import './public-types-B2noBQY9.js';
7
+ import './types-BaOc_AYN.js';
8
+ import './types-CkOvIGPf.js';
9
+ import './types-SY4-jKCn.js';
10
+ import './ast-BbfR3S_b.js';
11
+
12
+ declare function createLanguageService(options?: LanguageServiceOptions): LanguageService;
13
+
14
+ declare function createBtEditorService(options?: BtEditorServiceOptions): BtEditorService;
15
+
16
+ export { BtEditorService, BtEditorServiceOptions, LanguageService, LanguageServiceOptions, createBtEditorService, createLanguageService };
package/dist/editor.js ADDED
@@ -0,0 +1,28 @@
1
+ import{z as ft}from"zod";var S={InvalidScriptSyntax:"BT401_INVALID_SCRIPT_SYNTAX",EmptyScript:"BT402_EMPTY_SCRIPT",InvalidScriptToken:"BT403_INVALID_SCRIPT_TOKEN",UnknownScriptVariable:"BT404_UNKNOWN_SCRIPT_VARIABLE",AssignmentToUnknownVariable:"BT405_ASSIGNMENT_TO_UNKNOWN_VARIABLE",InvalidCompoundAssignment:"BT406_INVALID_COMPOUND_ASSIGNMENT",InvalidScriptOperandType:"BT407_INVALID_SCRIPT_OPERAND_TYPE",ScriptResultNotBoolCompatible:"BT408_SCRIPT_RESULT_NOT_BOOL_COMPATIBLE",ScriptVariableTypeMismatch:"BT410_SCRIPT_VARIABLE_TYPE_MISMATCH",InvalidRootElement:"BT001_INVALID_ROOT_ELEMENT",MissingBTCPPFormat:"BT002_MISSING_BTCPP_FORMAT",MissingBehaviorTreeID:"BT003_MISSING_BEHAVIOR_TREE_ID",DuplicateBehaviorTreeID:"BT004_DUPLICATE_BEHAVIOR_TREE_ID",UnknownSubTree:"BT005_UNKNOWN_SUBTREE",DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID",MissingPortName:"BT007_MISSING_PORT_NAME",DuplicatePortName:"BT008_DUPLICATE_PORT_NAME",UnknownTopLevelElement:"BT009_UNKNOWN_TOP_LEVEL_ELEMENT",UnknownMainTree:"BT010_UNKNOWN_MAIN_TREE",AmbiguousSubTree:"BT011_AMBIGUOUS_SUBTREE",ConflictingNodeModel:"BT012_CONFLICTING_NODE_MODEL",DuplicateBehaviorTreeIdInWorkspace:"BT013_DUPLICATE_BEHAVIOR_TREE_ID_IN_WORKSPACE",MissingIncludePath:"BT301_MISSING_INCLUDE_PATH",IncludeNotFound:"BT302_INCLUDE_NOT_FOUND",IncludeCycle:"BT303_INCLUDE_CYCLE",UnresolvedIncludePathVariable:"BT304_UNRESOLVED_INCLUDE_PATH_VARIABLE",IncludeOutsideWorkspace:"BT306_INCLUDE_OUTSIDE_WORKSPACE",ExternalIncludeUsed:"BT307_EXTERNAL_INCLUDE_USED",IncludeDepthExceeded:"BT309_INCLUDE_DEPTH_EXCEEDED",TooManyResolvedFiles:"BT310_TOO_MANY_RESOLVED_FILES",EntrypointNotFound:"BT311_ENTRYPOINT_NOT_FOUND",RosPackageResolverMissing:"BT312_ROS_PACKAGE_RESOLVER_MISSING",RosPackageNotFound:"BT313_ROS_PACKAGE_NOT_FOUND",UnknownNode:"BT105_UNKNOWN_NODE",MissingRequiredPort:"BT101_MISSING_REQUIRED_PORT",UnknownPort:"BT102_UNKNOWN_PORT",InvalidPortValueType:"BT103_INVALID_PORT_VALUE_TYPE",ChildCapableNodeSelfClosing:"BT108_CHILD_CAPABLE_NODE_SELF_CLOSING",LeafNodeOpenClose:"BT109_LEAF_NODE_OPEN_CLOSE",InvalidChildCount:"BT110_INVALID_CHILD_COUNT",BlackboardTypeMismatch:"BT111_BLACKBOARD_TYPE_MISMATCH",CustomLiteralRequiresValidator:"BT112_CUSTOM_LITERAL_REQUIRES_VALIDATOR",InvalidPortDefaultValue:"BT114_INVALID_PORT_DEFAULT_VALUE",OutputPortRequiresRemap:"BT115_OUTPUT_PORT_REQUIRES_REMAP",InvalidPortName:"BT116_INVALID_PORT_NAME",AugmentTargetNotFound:"BT117_AUGMENT_TARGET_NOT_FOUND",AugmentPortNotFound:"BT118_AUGMENT_PORT_NOT_FOUND",InvalidTypeRefinement:"BT119_INVALID_TYPE_REFINEMENT",ExternalModelFileNotFound:"BT321_EXTERNAL_MODEL_FILE_NOT_FOUND",AugmentationFileNotFound:"BT324_AUGMENTATION_FILE_NOT_FOUND",MissingTreeNodesModel:"BT322_MISSING_TREENODESMODEL",ExternalModelXmlParseError:"BT323_EXTERNAL_MODEL_XML_PARSE_ERROR",NodeDefinitionFileNotFound:"BT331_NODE_DEFINITION_FILE_NOT_FOUND",InvalidNodeDefinitionJson:"BT332_INVALID_NODE_DEFINITION_JSON",InvalidNodeDefinitionSchema:"BT333_INVALID_NODE_DEFINITION_SCHEMA",DuplicateNodeDefinitionId:"BT334_DUPLICATE_NODE_DEFINITION_ID",InvalidAugmentationJson:"BT335_INVALID_AUGMENTATION_JSON",InvalidAugmentationSchema:"BT336_INVALID_AUGMENTATION_SCHEMA",ConflictingPortDefault:"BT107_CONFLICTING_PORT_DEFAULT",UnusedSuppression:"BT351_UNUSED_SUPPRESSION",MissingSuppressionReason:"BT353_MISSING_SUPPRESSION_REASON"},en=Object.values(S).sort();var Zo=ft.object({subTreePorts:ft.enum(["loose","strict"]).optional()}).strict(),Jo=ft.object({allowStringEntryCompatibility:ft.boolean().optional()}).strict(),dr={"script/valid-syntax":{code:S.InvalidScriptSyntax,defaultSeverity:"error",description:"Script-bearing attributes must parse as valid BT.CPP scripts."},"script/no-unknown-variable":{code:S.UnknownScriptVariable,defaultSeverity:"warn",description:"Script-bearing attributes should not reference unknown variables."},"script/valid-assignment":{code:S.AssignmentToUnknownVariable,codes:[S.AssignmentToUnknownVariable,S.InvalidCompoundAssignment,S.ScriptVariableTypeMismatch],defaultSeverity:"error",description:"Script assignments must target known variables and use compatible types."},"script/valid-expression-type":{code:S.InvalidScriptOperandType,defaultSeverity:"error",description:"Script expressions must use operators with compatible operand types."},"script/valid-result-type":{code:S.ScriptResultNotBoolCompatible,defaultSeverity:"error",description:"Condition-style script attributes must have a bool-compatible inferred result."},"xml/valid-root":{code:S.InvalidRootElement,defaultSeverity:"error",description:"Root element must be <root>."},"xml/require-btcpp-format":{code:S.MissingBTCPPFormat,defaultSeverity:"warn",description:'Root element must declare BTCPP_format="4".'},"tree/require-id":{code:S.MissingBehaviorTreeID,defaultSeverity:"error",description:"BehaviorTree elements require an ID attribute."},"tree/no-duplicate-id-in-file":{code:S.DuplicateBehaviorTreeID,defaultSeverity:"error",description:"BehaviorTree IDs must be unique within a file."},"tree/no-duplicate-id":{code:S.DuplicateBehaviorTreeIdInWorkspace,defaultSeverity:"error",description:"BehaviorTree IDs must be unique across the workspace."},"tree/no-unknown-subtree":{code:S.UnknownSubTree,defaultSeverity:"error",description:"A SubTree must resolve to a BehaviorTree or a configured model."},"tree/no-unknown-main-tree":{code:S.UnknownMainTree,defaultSeverity:"error",description:"main_tree_to_execute must reference a known BehaviorTree."},"tree/no-ambiguous-subtree":{code:S.AmbiguousSubTree,defaultSeverity:"error",description:"SubTree references must resolve to a single definition."},"tree/no-duplicate-node-model-id":{code:S.DuplicateNodeModelId,defaultSeverity:"error",description:"TreeNodesModel elements must have unique IDs within the same model block."},"xml/no-unknown-top-level-element":{code:S.UnknownTopLevelElement,defaultSeverity:"warn",description:"Top-level elements must be BehaviorTree, TreeNodesModel, or configured include elements."},"include/require-path":{code:S.MissingIncludePath,defaultSeverity:"error",description:"include elements require a path attribute."},"include/no-missing-file":{code:S.IncludeNotFound,defaultSeverity:"error",description:"Referenced include file does not exist."},"include/no-cycle":{code:S.IncludeCycle,defaultSeverity:"error",description:"Include graph cycles are not allowed."},"include/no-outside-root":{code:S.IncludeOutsideWorkspace,defaultSeverity:"error",description:"Includes must stay within the workspace root."},"include/no-unresolved-variable":{code:S.UnresolvedIncludePathVariable,defaultSeverity:"error",description:"Include path variables must resolve before lookup."},"include/no-depth-exceeded":{code:S.IncludeDepthExceeded,defaultSeverity:"error",description:"Include resolution must stay within the configured maximum depth."},"include/no-too-many-files":{code:S.TooManyResolvedFiles,defaultSeverity:"error",description:"Include resolution must stay within the configured file limit."},"include/require-ros-package-resolver":{code:S.RosPackageResolverMissing,defaultSeverity:"error",description:"When include uses ros_pkg, a host resolvePackageUri capability must be provided."},"include/no-missing-ros-package":{code:S.RosPackageNotFound,defaultSeverity:"error",description:"ros_pkg include must resolve to an existing ROS package root URI."},"include/report-external-used":{code:S.ExternalIncludeUsed,defaultSeverity:"info",description:"Reports when an allowed include resolves outside the workspace root."},"model/no-unknown-node":{code:S.UnknownNode,defaultSeverity:"warn",description:"Node usages must resolve to a known model."},"model/require-port":{code:S.MissingRequiredPort,defaultSeverity:"error",description:"Required ports must be supplied."},"model/require-port-name":{code:S.MissingPortName,defaultSeverity:"error",description:"Port elements require a name attribute."},"model/no-duplicate-port-name":{code:S.DuplicatePortName,defaultSeverity:"error",description:"Ports with the same name are not allowed."},"model/valid-port-name":{code:S.InvalidPortName,defaultSeverity:"error",description:"Port names must be valid XML attribute names for BT nodes."},"model/no-unknown-port":{code:S.UnknownPort,defaultSeverity:"warn",optionsSchema:Zo,options:[{name:"subTreePorts",type:'"loose" | "strict"',default:"loose",description:"Controls whether SubTree remap attributes are checked strictly."}],description:"Reports ports that are not declared by the resolved node model."},"model/valid-port-value":{code:S.InvalidPortValueType,defaultSeverity:"error",description:"Port values must match the declared type."},"model/no-blackboard-type-mismatch":{code:S.BlackboardTypeMismatch,defaultSeverity:"error",optionsSchema:Jo,options:[{name:"allowStringEntryCompatibility",type:"boolean",default:"true",description:"Treat std::string blackboard entries as runtime-compatible with other port types, matching BT.CPP's existing-entry special case."}],description:"Blackboard entries must not mix incompatible resolved port types."},"model/valid-port-default-value":{code:S.InvalidPortDefaultValue,defaultSeverity:"error",description:"TreeNodesModel port defaults must match the declared type."},"model/require-output-port-remap":{code:S.OutputPortRequiresRemap,defaultSeverity:"warn",description:"Resolved output ports must write to a blackboard remap."},"model/no-childless-control-shape-mismatch":{code:S.ChildCapableNodeSelfClosing,defaultSeverity:"warn",description:"Control and decorator nodes should normally use open/close tags."},"model/no-leaf-block-shape":{code:S.LeafNodeOpenClose,defaultSeverity:"warn",description:"Leaf nodes should normally be self-closing unless they contain child nodes."},"model/valid-child-count":{code:S.InvalidChildCount,defaultSeverity:"warn",description:"Child count must match the expected count for the node kind (Action/Condition: 0, Decorator: 1, Control: >=1, special builtins: fixed range)."},"model/no-conflicting-definition":{code:S.ConflictingNodeModel,defaultSeverity:"error",description:"Node model definitions must agree on kind and port shape."},"suppression/no-unused":{code:S.UnusedSuppression,defaultSeverity:"warn",description:"Suppressions should match at least one diagnostic."},"suppression/require-reason":{code:S.MissingSuppressionReason,defaultSeverity:"off",description:"Suppressions should include a reason when required."}};var gt=["off","info","warn","error"];var lr={linter:{rules:{"xml/require-btcpp-format":"error","xml/no-unknown-top-level-element":"error","model/no-unknown-node":"error","model/no-unknown-port":["error",{subTreePorts:"strict"}],"script/no-unknown-variable":"error","model/no-childless-control-shape-mismatch":"error","model/no-leaf-block-shape":"error","model/valid-child-count":"error","suppression/no-unused":"error","suppression/require-reason":"warn"}}},Qo={files:{include:["**/*.xml"],ignore:["build/**","install/**","log/**","node_modules/**",".git/**"],useGitignore:!0,followSymlinks:!1,maxSize:5*1024*1024},resolver:{entrypoints:[],includes:{elements:[{name:"include",attribute:"path",base:"file"}],variables:{},allowOutsideRoot:!1,maxDepth:32,maxFiles:1e3},behaviorTreeIds:"workspace-unique"},models:{builtins:["btcpp-v4"],files:[],augmentations:[],definitions:[],inline:{}},linter:{enabled:!0,rules:{},baseline:void 0,suppressions:{inline:"allow"}},formatter:{indentWidth:2,xmlDeclaration:"always",blankLineBetweenBehaviorTrees:!0,lineEnding:"lf"},overrides:[]};function we(){return structuredClone(Qo)}function Fe(e,t){return{files:t.files?{...e.files,...t.files}:e.files,resolver:t.resolver?{...e.resolver,...t.resolver,includes:{...e.resolver.includes,...t.resolver.includes||{},variables:{...e.resolver.includes.variables,...t.resolver.includes?.variables||{}}}}:e.resolver,models:t.models?{...e.models,...t.models}:e.models,linter:t.linter?{...e.linter,...t.linter,rules:t.linter.rules?{...e.linter.rules,...t.linter.rules}:e.linter.rules,suppressions:t.linter.suppressions?{...e.linter.suppressions,...t.linter.suppressions}:e.linter.suppressions}:e.linter,formatter:t.formatter?{...e.formatter,...t.formatter}:e.formatter,overrides:t.overrides?[...e.overrides,...t.overrides]:e.overrides}}var C={Error:"error",Warning:"warning",Info:"info"};function z(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 Me(e,t,n){return{line:e,character:t,offset:n}}function R(e,t){return{start:e,end:t}}function F(e,t){return e?e.start.offset<=t&&t<=e.end.offset:!1}function es(e){let t=[0];for(let n=0;n<e.length;n+=1)e[n]===`
2
+ `&&t.push(n+1);return t}function tn(e,t,n){return Math.min(Math.max(e,t),n)}function yt(e,t,n=0,r="xml"){let i=es(t),o=d=>{let l=tn(d,0,t.length),c=0,m=i.length;for(;c<m;){let x=Math.floor((c+m)/2);i[x]>l?m=x:c=x+1}let f=Math.max(0,c-1);return{line:f,character:l-i[f],offset:l}},s=d=>{let l=tn(d.line,0,Math.max(0,i.length-1)),c=i[l],m=l+1<i.length?i[l+1]:t.length;return tn(c+d.character,c,m)};return{uri:e,languageId:r,version:n,text:t,lineOffsets:i,positionAt:o,offsetAt:s,getText:d=>d?t.slice(s(d.start),s(d.end)):t}}var ts={DuplicateNodeModelId:"BT006_DUPLICATE_NODE_MODEL_ID"};function ns(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function oe(e,t){return e.attributes.find(n=>n.name===t)}function rs(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function is(e){if(e)return{uri:e.uri,range:e.range,value:e.value}}function os(e,t="inline-tree-nodes-model"){return e.kind==="model-document"?"external-tree-nodes-model":t}function cr(e,t,n){for(let r of e.attributes||[]){let i=[...String(r.value).matchAll(/\{([^}]+)\}/g)];for(let o of i){let s=o.index??0,a=r.valueRange.start,u={...a,character:a.character+o[0].length,offset:a.offset+s+o[0].length};t.push({name:o[1],attributeName:r.name,element:e,uri:n,range:{start:{...a,character:a.character+s,offset:a.offset+s},end:u}})}}for(let r of e.children||[])r.kind==="element"&&cr(r,t,n)}function ss(e,t,n,r){let i=[];for(let o of e.children||[]){if(o.kind!=="element"||!rs(o.name))continue;let s=oe(o,"ID");if(!s)continue;let a=[];for(let u of o.children||[]){if(u.kind!=="element"||u.name!=="input_port"&&u.name!=="output_port"&&u.name!=="inout_port")continue;let d=oe(u,"name"),l=oe(u,"type"),c=oe(u,"default")||oe(u,"default_value"),m=oe(u,"enum"),f=(u.children||[]).filter(D=>D.kind==="text").map(D=>D.text).join("").trim()||void 0,x=u.name==="input_port"?"input":u.name==="output_port"?"output":"inout",T=(x==="input"||x==="inout")&&c===void 0;a.push({source:n,direction:x,name:d?d.value:"",type:l?.value||void 0,defaultValue:c?.value||void 0,description:f,required:T,element:u,uri:t,range:u.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:a,element:o,uri:t,range:o.range,elementRange:o.range,idRange:s.range})}return i}function as(e,t){let n=[];for(let r of e.children||[]){if(r.kind!=="element"||r.name!=="BehaviorTree")continue;let i=oe(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 us(e,t){let n=[],r=(i,o)=>{let s=i.name==="BehaviorTree"?oe(i,"ID")?.value??o:o;if(i.name==="SubTree"){let a=oe(i,"ID");a&&n.push({id:a.value,uri:t,element:i,range:i.range,elementRange:i.range,idRange:a.range,parentBehaviorTreeId:s,attributes:i.attributes})}for(let a of i.children||[])a.kind==="element"&&r(a,s)};for(let i of e.children||[])i.kind==="element"&&r(i);return n}function ds(e){return{id:e.id,kind:e.kind,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange}}function mr(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 ls(e){return{id:e.id,kind:e.kind,editable:e.editable,ports:e.ports.map(mr),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 cs(e){return{id:e.id,uri:e.uri,range:e.range,elementRange:e.elementRange,idRange:e.idRange,parentBehaviorTreeId:e.parentBehaviorTreeId}}function ms(e){return{name:e.name,attributeName:e.attributeName,uri:e.uri,range:e.range}}function ps(e){return{uri:e.uri,path:e.path,isBtXml:e.isBtXml,kind:e.kind,behaviorTrees:e.behaviorTrees.map(ds),subtreeReferences:e.subtreeReferences.map(cs),blackboardReferences:e.blackboardReferences.map(ms),treeNodesModel:e.treeNodesModel.map(ls),genericSubTreePorts:e.genericSubTreePorts.map(mr),rootMainTreeToExecute:is(e.rootMainTreeToExecute)}}function fs(e){return e.node.kind==="SubTree"&&e.node.id==="SubTree"?(e.genericSubTreePorts.push(...e.node.ports),!0):(e.treeNodesModel.push(e.node),!1)}function gs(e){return z(ts.DuplicateNodeModelId,C.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 ys(e,t){let n=[],r=t?.uri||e.uri,i=e.root,o=e.isBtXml,s=ns(e),a=os(e),u=((t?.path??e.path)||r==="")&&e.kind==="model-document"?!0:e.kind!=="model-document",d=i&&e.kind!=="model-document"?as(i,r):[],l=[],c=[],m=i?i.name==="TreeNodesModel"?[i]:i.children.filter(N=>N.kind==="element"&&N.name==="TreeNodesModel"):[];for(let N of m){let E=ss(N,r,a,u),P=new Map;for(let p of E)fs({node:p,treeNodesModel:l,genericSubTreePorts:c})||(P.has(p.id)?n.push(gs(p)):P.set(p.id,p))}let f=i?us(i,r):[],x=i?(()=>{let N=[];return cr(i,N,r),N})():[],T=i?oe(i,"main_tree_to_execute"):void 0;return{extracted:{publicModel:ps({uri:r,path:t?.path??e.path,isBtXml:o,kind:s,behaviorTrees:d,subtreeReferences:f,blackboardReferences:x,treeNodesModel:l,genericSubTreePorts:c,rootMainTreeToExecute:T?{uri:r,range:T.range,value:T.value}:void 0}),extractedBehaviorTrees:d,extractedTreeNodesModel:l,extractedSubTreeReferences:f,extractedBlackboardReferences:x},diagnostics:n}}function pr(e,t){let{extracted:n,diagnostics:r}=ys(e,t);return{model:n.publicModel,diagnostics:r}}function nn(e,t){return pr(e,t)}var fr=new Set(["ID","name","_name","_autoremap","_failureIf","_successIf","_skipIf","_while","_onSuccess","_onFailure","_onHalted","_post"]),Ss=new Set([...fr,"_autoremap","_description","__shared_blackboard"]),bs=new Map([[".","port names must not contain `.`"],["<","port names must not contain `<`"],[">","port names must not contain `>`"],["&","port names must not contain `&`"],['"','port names must not contain `"`'],["'","port names must not contain `'`"],["/","port names must not contain `/`"],["\\","port names must not contain `\\`"],[":","port names must not contain `:`"],["*","port names must not contain `*`"],["?","port names must not contain `?`"],["|","port names must not contain `|`"]]);function rn(e){return fr.has(e)}function gr(e){return Ss.has(e)}function on(e){if(e.length===0)return"port names must not be empty";if(/^[0-9]/.test(e))return"port names must not start with a digit";if(gr(e))return`\`${e}\` is a reserved attribute name`;for(let t of e){let n=t.charCodeAt(0);if(n<=31||n===127)return"port names must not contain ASCII control characters";if(t===" "||t===" "||t===`
3
+ `||t==="\r")return"port names must not contain whitespace";let r=bs.get(t);if(r)return r}}function yr(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 sn(e,t){return{id:e,kind:t.kind,source:"config",sourceMeta:{sourceKind:"config"},editable:!0,ports:Object.entries(t.ports??{}).map(([n,r])=>yr(n,r))}}var Ts=[{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"]}],Xe=new Map,Sr=new Map;for(let e of Ts){let t={name:e.name,kind:e.kind,canonical:e.name,aliases:e.aliases,compatibleWith:[],source:"builtin"};Sr.set(e.name,t),Xe.set(e.name,e.name);for(let n of e.aliases)Xe.set(n,e.name)}function vs(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 an(e){return Xe.get(e)??e}function Rs(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 $e(e){return Xe.get(e)}function Ae(e=[]){let t=new Map,n=new Map(Xe);for(let r of Sr.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=an(o.canonical??i),u=t.get(s)??vs(i,s,o);u.name=i,u.kind=o.kind,u.canonical=s,u.source="augmentation",u.validate=o.validate??u.validate,u.aliases.add(i),u.aliases.add(s);for(let d of o.aliases??[])u.aliases.add(d);for(let d of o.compatibleWith??[])u.compatibleWith.add(d);t.set(s,u),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)??an(i))),r.compatibleWith.delete(r.canonical);return{entriesByCanonical:new Map([...t.entries()].map(([r,i])=>[r,Rs(i)])),namesToCanonical:n}}function Q(e,t){if(!t)return;let n=e.namesToCanonical.get(t)??an(t),r=e.entriesByCanonical.get(n);return r||{name:t,kind:"opaque",canonical:n,aliases:[],compatibleWith:[],source:"custom"}}function St(e,t){return Q(e,t)?.canonical}function je(e,t,n){let r=Q(e,t),i=Q(e,n);return!r||!i?!1:r.kind==="any"||i.kind==="any"||r.canonical===i.canonical?!0:r.compatibleWith.includes(i.canonical)||i.compatibleWith.includes(r.canonical)}function br(e,t){if(e.length<3)return!1;let n=0,r=e.length-1;for(;n<=r&&e[n]===" ";)n+=1;for(;n<=r&&e[r]===" ";)r-=1;let o=r-n+1>=3&&e[n]==="{"&&e[r]==="}";return o&&t&&(t.current=e.slice(n+1,r)),o}function Tr(e){let t={};return br(e,t)?t.current:void 0}function K(e,t){return t==="{=}"||t==="="?e:Tr(t)}var vr=[{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:[]}],Rr={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 hr=[{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:[]}],xr={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 kr=[{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:[]}],Cr={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 Ir=["4.6.2","4.8.2","4.9.0"],un="4.9.0",Ke={"4.6.2":{models:vr,genericSubTreeModel:Rr},"4.8.2":{models:hr,genericSubTreeModel:xr},"4.9.0":{models:kr,genericSubTreeModel:Cr}};var Dr=Ir.map(e=>`btcpp-v${e}`),ze=["btcpp-v4",...Dr],Er=`btcpp-v${un}`;function Nr(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 hs(e){return e.map(t=>({id:t.id,kind:t.kind,ports:t.ports.map(Nr)}))}function Br(e){if(e)return{id:e.id,kind:e.kind,ports:e.ports.map(Nr)}}function xs(){let e={};for(let[t,n]of Object.entries(Ke))e[`btcpp-v${t}`]=hs(n.models);return e}function ks(){let e={};for(let[t,n]of Object.entries(Ke))e[`btcpp-v${t}`]=Br(n.genericSubTreeModel);return e}var Cs=xs(),Is=ks();function Ds(e){let t=e.replace(/^btcpp-v/,"");return Object.hasOwn(Ke,t)}function wr(e){return e==="btcpp-v4"?Er:e}function Es(e){return e==="btcpp-v4"?un:e.replace(/^btcpp-v/,"")}function Mr(e){if(e&&e!=="btcpp-v4"&&!Ds(e))throw new Error(`unsupported builtin model set: ${e}`)}function dn(e="btcpp-v4"){Mr(e);let t=wr(e);return Cs[t].map(r=>Ar(r))}function ln(e="btcpp-v4"){Mr(e);let t=Is[wr(e)]??Br(Ke[Es(e)].genericSubTreeModel);return t?(t.ports??[]).map(n=>({...n,enum:n.enum?[...n.enum]:void 0})):[]}function Ar(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 We(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 bt(e,t){let n=We(e),r=We(t);return JSON.stringify(n)===JSON.stringify(r)}function cn(e,t){if(bt(e,t))return"none";let n=We(e),r=We(t);if(n.kind!==r.kind)return"kind";if(n.ports.length!==r.ports.length)return"ports";let i=new Map(r.ports.map(a=>[a.name,a])),o=!1,s=!1;for(let a of n.ports){let u=i.get(a.name);if(!u){s=!0;continue}(a.direction!==u.direction||a.type!==u.type||a.required!==u.required)&&(s=!0);let d=a.enum?JSON.stringify(a.enum):"",l=u.enum?JSON.stringify(u.enum):"";d!==l&&(s=!0),a.description!==u.description&&(s=!0),a.defaultValue!==u.defaultValue&&(o=!0)}return s?"ports":o?"port-default":"mixed"}import{z as q}from"zod";var Pr=q.object({direction:q.enum(["input","output","inout"]).optional(),type:q.string().optional(),required:q.boolean().optional(),default:q.string().optional(),description:q.string().optional(),enum:q.array(q.string()).optional()}).strict(),Tt=q.object({kind:q.enum(["Action","Condition","Control","Decorator","SubTree"]),ports:q.record(q.string(),Pr).optional(),description:q.string().optional()}).strict(),Ns=q.object({nodes:q.record(q.string(),Tt)}).strict();import{z as v}from"zod";var _r=v.enum(["off","info","warn","error"]),Lr=v.union([_r,v.tuple([_r,v.record(v.string(),v.unknown())])]),Bs=v.object({include:v.array(v.string()).optional(),ignore:v.array(v.string()).optional(),useGitignore:v.boolean().optional(),followSymlinks:v.boolean().optional(),maxSize:v.number().int().positive().optional()}).strict(),ws=v.string(),Ms=v.object({name:v.string(),attribute:v.string(),base:v.enum(["file","project-root"]).optional()}).strict(),As=v.object({elements:v.array(Ms).optional(),variables:v.record(v.string(),v.string()).optional(),allowOutsideRoot:v.boolean().optional(),maxDepth:v.number().int().min(1).optional(),maxFiles:v.number().int().min(1).optional()}).strict(),Ps=v.object({entrypoints:v.array(ws).optional(),includes:As.optional(),behaviorTreeIds:v.enum(["workspace-unique","file-local-first","allow-ambiguous"]).optional()}).strict(),_s=v.object({builtins:v.array(v.enum(ze)).optional(),files:v.array(v.string()).optional(),augmentations:v.array(v.string()).optional(),definitions:v.array(v.string()).optional(),inline:v.record(v.string(),Tt).optional()}).strict(),Or=v.object({inline:v.enum(["allow","deny"]).optional()}).strict(),Ls=v.object({enabled:v.boolean().optional(),rules:v.record(v.string(),Lr).optional(),baseline:v.string().optional(),suppressions:Or.optional()}).strict(),Os=v.object({rules:v.record(v.string(),Lr).optional(),suppressions:Or.optional()}).strict(),Vr=v.object({indentWidth:v.number().int().min(1).max(8).optional(),xmlDeclaration:v.enum(["always","never","preserve"]).optional(),blankLineBetweenBehaviorTrees:v.boolean().optional(),lineEnding:v.enum(["lf","crlf","auto"]).optional()}).strict(),Vs=v.object({files:v.array(v.string()),linter:Os.optional(),formatter:Vr.optional()}).strict(),qr=v.object({$schema:v.string().optional(),strict:v.boolean().optional(),files:Bs.optional(),resolver:Ps.optional(),models:_s.optional(),linter:Ls.optional(),formatter:Vr.optional(),overrides:v.array(Vs).optional()}).strict();function Xr(e){return e.flatMap(qs)}function qs(e){if(String(e.code)==="unrecognized_keys")return(Array.isArray(e.keys)?e.keys??[]:[]).map(i=>{let o=Ur([...e.path,String(i)]);return{code:"CFG002_UNKNOWN_CONFIG_FIELD",severity:"error",path:o,message:`unknown config field \`${o}\``}});let n=Ur(e.path);return $r(e)?[{code:"CFG003_INVALID_CONFIG_VALUE",severity:"error",path:n,message:n?`invalid config value at \`${n}\``:"invalid config value"}]:[{code:"CFG001_INVALID_CONFIG",severity:"error",path:n,message:n?`invalid config at \`${n}\``:"invalid config"}]}function Ur(e){return e.map(String).join(".")||void 0}function $r(e){let t=String(e.code);if(t==="invalid_value"||t==="invalid_enum_value"||t==="invalid_literal")return!0;if(t!=="invalid_union")return!1;let n=e.errors;if(Array.isArray(n))return n.flat().some(Fr);let r=e.unionErrors;return Array.isArray(r)?r.flatMap(i=>i.issues??[]).some(Fr):!1}function Fr(e){return typeof e=="object"&&e!==null&&$r(e)}function jr(e){let t=qr.safeParse(e);return t.success?{ok:!0,value:t.data,diagnostics:[]}:{ok:!1,diagnostics:Xr(t.error.issues)}}function Us(e){if(!e)return;let t={};return e.indentWidth!==void 0&&(t.indentWidth=e.indentWidth),e.xmlDeclaration!==void 0&&(t.xmlDeclaration=e.xmlDeclaration),e.blankLineBetweenBehaviorTrees!==void 0&&(t.blankLineBetweenBehaviorTrees=e.blankLineBetweenBehaviorTrees),e.lineEnding!==void 0&&(t.lineEnding=e.lineEnding),t}function Fs(e){if(!e)return;let t={};return e.rules!==void 0&&(t.rules=e.rules),e.suppressions!==void 0&&(t.suppressions={},e.suppressions.inline!==void 0&&(t.suppressions.inline=e.suppressions.inline)),t}function Xs(e){return e.map(t=>z(t.code,t.severity==="error"?C.Error:C.Warning,t.message,void 0,"",t.help?{help:t.help}:void 0))}function $s(e){let t=[],n=we(),{$schema:r,strict:i,overrides:o,...s}=e;i&&(n=Fe(n,lr)),n=Fe(n,s),n.overrides=(o??[]).map(u=>({files:u.files,linter:Fs(u.linter),formatter:Us(u.formatter)}));let a=!t.some(u=>u.severity===C.Error);return{config:n,diagnostics:t,ok:a}}function mn(e){let t=jr(e);return t.ok?$s(t.value):{ok:!1,config:we(),diagnostics:Xs(t.diagnostics)}}function js(e){let t="",n=0;for(;n<e.length;)e.slice(n,n+3)==="/**"&&(n+3===e.length||e[n+3]==="/")?n+3===e.length?(t+="(?:/.*)?",n+=3):(t+="(?:/.*)?/",n+=4):n===0&&e.slice(n,n+3)==="**/"?(t+="(?:.*/)?",n+=3):e.slice(n,n+2)==="**"?(t+=".*",n+=2):e[n]==="*"?(t+="[^/]*",n+=1):e[n]==="?"?(t+="[^/]",n+=1):(t+=e[n].replace(/[.+^${}()|[\]\\]/g,"\\$&"),n+=1);return new RegExp(`^${t}$`)}function vt(e,t){let n=e.replace(/\\/g,"/"),r=t.startsWith("!"),i=r?t.slice(1):t,s=js(i).test(n);return r?!s:s}function Kr(e,t){return e.overrides.filter(n=>n.files.some(r=>vt(t,r)))}function Ge(e){return e.replaceAll("\\","/")}function Ks(e){try{return decodeURIComponent(e)}catch{return e}}function Ye(e){if(!e.startsWith("file://"))return e;let t;try{t=new URL(e)}catch{return e}let n=Ks(t.pathname);return/^\/[A-Za-z]:/.test(n)?Ge(n.slice(1)):t.host?Ge(`//${t.host}${n}`):Ge(n)}function Rt(e,t){let n=Ge(t);return e.files.ignore.some(r=>vt(n,r))?!1:e.files.include.some(r=>vt(n,r))}function pn(e,t){return Rt(e,Ye(t))}function ht(e,t){let n=Ge(t),r=Kr(e,n),i=e;for(let o of r)i=Fe(i,{linter:o.linter,formatter:o.formatter});return{files:i.files,resolver:i.resolver,models:i.models,linter:i.linter,formatter:i.formatter}}function fn(e,t){return ht(e,Ye(t))}function ce(e){let t=e.linter.rules["model/no-unknown-port"];return Array.isArray(t)&&t.length>=2&&t[1].subTreePorts==="strict"?{unknownSubTreePorts:"reject"}:{unknownSubTreePorts:"allow"}}function xt(e){if(typeof e=="string")return gt.includes(e)?{severity:e}:null;if(Array.isArray(e)&&e.length>=1&&e.length<=2){let[t,n]=e;if(typeof t=="string"&&gt.includes(t)&&(n===void 0||typeof n=="object"&&n!==null&&!Array.isArray(n))){let r={severity:t};return n!==void 0&&(r.options=n),r}}return null}function zr(e,t){if(t)return St(e,t)}function Wr(e){return e.source==="inline-tree-nodes-model"||e.source==="external-tree-nodes-model",e.source}function Gr(e){let t=e.port?.uri??e.model?.uri??"",n=e.port?.nameRange??e.port?.range??e.model?.idRange??e.model?.range;return z(e.code,C.Error,e.message,n,t,{primaryLabel:e.message,help:e.help,notes:e.notes},e.data)}function zs(e,t,n,r,i){let o=n.effectiveType??n.type,s=n.originalType??n.type,a={...n,originalType:s,effectiveType:o,typeSource:n.typeSource??Wr(n),validate:r.validate??n.validate,required:r.required??n.required,enum:r.enum?[...r.enum]:n.enum,description:r.description??n.description},u=r.typeRefinement;if(!u)return{...a,type:a.effectiveType};let d=zr(e,u.from),l=zr(e,o);return d&&d!==l?(i.push(Gr({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:u.from,to:u.to},notes:o||u.from?[`base type: ${o??"(unspecified)"}`,`requested from: ${u.from??"(unspecified)"}`]:void 0})),{...a,type:a.effectiveType}):{...a,type:u.to,effectiveType:u.to,typeSource:"model-augmentation",typeRefinement:u}}function Ws(e,t,n,r){let i=new Map(t.ports.map(o=>[o.name,o]));for(let[o,s]of Object.entries(n.ports??{})){let a=i.get(o);if(!a){r.push(Gr({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,zs(e,t,a,s,r))}return{...t,ports:t.ports.map(o=>i.get(o.name)??o)}}function Gs(e){let t=e.effectiveType??e.type,n=e.originalType??e.type;return{...e,type:t,effectiveType:t,originalType:n,typeSource:e.typeSource??Wr(e)}}function Yr(e,t,n){let r=[],i=new Map([...e.entries()].map(([o,s])=>[o,{...s,ports:s.ports.map(Gs)}]));for(let o of n)for(let[s,a]of Object.entries(o.augment??{})){let u=i.get(s);if(!u){r.push(z("BT117_AUGMENT_TARGET_NOT_FOUND",C.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,Ws(t,u,a,r))}return{modelsById:i,diagnostics:r}}function Jr(e){return He("builtin",0,!1,e)}function Qr(e){return He("xml-tree-nodes-model",10,!0,e)}function ei(e){return He("external-tree-nodes-model",15,e.some(t=>t.editable!==!1),e)}function ti(e){return He("node-definition-file",20,!0,e)}function ni(e){return He("config-inline",30,!0,e)}function He(e,t,n,r){return{kind:e,precedence:t,editable:n,models:r.map(i=>ri(i,e,n&&i.editable!==!1))}}function Ys(e){return e==="config-inline"?"config":e==="xml-tree-nodes-model"?"inline-tree-nodes-model":e}function ri(e,t,n){let r=Ys(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 Pe(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 Hr(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 Hs(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:Hr(s)});for(let[o,s]of i)r.has(o)||n.push({kind:"port-added",portName:o,sourceIndex:1,port:Hr(s)});for(let[o,s]of r){let a=i.get(o);if(!a)continue;s.direction!==a.direction&&n.push({kind:"port-direction",portName:o,left:s.direction,right:a.direction}),s.type!==a.type&&n.push({kind:"port-type",portName:o,left:s.type,right:a.type}),s.required!==a.required&&n.push({kind:"port-required",portName:o,left:s.required,right:a.required}),s.defaultValue!==a.defaultValue&&n.push({kind:"port-default",portName:o,left:s.defaultValue,right:a.defaultValue});let u=s.enum?JSON.stringify([...s.enum].sort()):"",d=a.enum?JSON.stringify([...a.enum].sort()):"";u!==d&&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 Zr(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(bt(i,r))continue;let o=cn(i,r),s=Hs(i,r),a;if(o==="port-default"){let u=new Map(i.ports.map(m=>[m.name,m])),d=r.ports.find(m=>{let f=u.get(m.name);return f&&f.defaultValue!==m.defaultValue}),l=d?.name??"unknown",c=[Pe(i,0),Pe(r,1)];a={kind:"port-default-conflict",nodeId:r.id,portName:l,sources:[{source:Pe(i,0),value:u.get(l)?.defaultValue},{source:Pe(r,1),value:d?.defaultValue}]},t.push({id:r.id,definitions:[i,r],sources:c,code:"BT107_CONFLICTING_PORT_DEFAULT",message:`conflicting default for port \`${l}\` on node \`${r.id}\``,uri:r.uri,range:r.idRange||r.range,details:{primaryLabel:"the same port has different default values across model definitions",help:`use the same default value in every \`${r.id}\` definition or remove the duplicate model`},data:a,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}else{let u=[Pe(i,0),Pe(r,1)];a={kind:"node-model-conflict",nodeId:r.id,sources:u,differences:s},t.push({id:r.id,definitions:[i,r],sources:u,code:"BT012_CONFLICTING_NODE_MODEL",message:`conflicting node model \`${r.id}\``,uri:r.uri,range:r.idRange||r.range,details:{primaryLabel:"another model with this ID defines a different kind or port shape",help:`make all \`${r.id}\` model definitions agree, or keep only one definition at the same precedence level`},data:a,relatedInformation:i.uri&&i.range?[{uri:i.uri,range:i.range,message:"previous definition"}]:void 0})}}return n}function Zs(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 ii(e){let t=[],n=new Map,r=new Map,i=[...e].sort((a,u)=>a.precedence-u.precedence),o=new Map,s=new Map;for(let a of i){let u=o.get(a.precedence)??[],d=a.models.map(l=>ri(l,a.kind,a.editable&&l.editable!==!1));u.push(...d),o.set(a.precedence,u);for(let l of d)s.set(l.id,a.precedence)}for(let[a,u]of[...o.entries()].sort((d,l)=>d[0]-l[0])){let d=u.filter(f=>s.get(f.id)===a),l=u.filter(f=>s.get(f.id)!==a),c=Zr(l,[]);for(let[f,x]of Zr(d,t))c.set(f,x);let m=new Set(u.map(f=>f.id));for(let f of m)s.get(f)===a&&n.set(f,u.filter(x=>x.id===f));for(let[f,x]of c)r.set(f,Zs(r.get(f),x))}return{nodeModelsById:n,mergedNodeModelsById:r,conflicts:t}}function Js(e){return ze.includes(e)}function Qs(){return{documents:new Map,behaviorTreesById:new Map,nodeModelsById:new Map,mergedNodeModelsById:new Map,modelLayers:[],builtins:new Map,genericSubTreePorts:[],modelConflicts:[],typeRegistry:Ae(),augmentations:[]}}function ea(e,t,n){let r=e.get(t)||[];r.push(n),e.set(t,r)}function ta(e,t,n){for(let r of new Set(n))if(Js(r)){for(let i of dn(r))e.builtins.set(i.id,i),t.push(i);e.genericSubTreePorts.push(...ln(r))}}function na(e,t,n,r,i){for(let o of i){let s=nn(o,{uri:o.uri,path:o.path}),a=s.model;t.push(...s.diagnostics),e.documents.set(o.uri,a);for(let u of a.behaviorTrees)ea(e.behaviorTreesById,u.id,u);o.kind==="model-document"?r.push(...a.treeNodesModel):n.push(...a.treeNodesModel),e.genericSubTreePorts.push(...a.genericSubTreePorts)}}function ra(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 ia(e){let t=new Set,n=[];for(let r of e.genericSubTreePorts){let i=ra(r);t.has(i)||(t.add(i),n.push(r))}e.genericSubTreePorts=n}function oa(e,t,n,r,i){e.modelLayers.push(Jr(t),Qr(n),ei(r)),i.models?.length&&e.modelLayers.push(ti([...i.models])),e.modelLayers.push(...i.additionalModelLayers??[])}function gn(e,t){return sa(e,t)}function sa(e,t){let n=Qs(),r=[],i=[],o=[],s=[];ta(n,i,t.config.models.builtins),n.augmentations=t.augmentations??[],n.typeRegistry=Ae(t.augmentations??[]),na(n,r,o,s,e),ia(n),oa(n,i,o,s,t);let a=t.config.models.inline;if(a){let l=[];for(let[c,m]of Object.entries(a))l.push(sn(c,m));n.modelLayers.push(ni(l))}let u=ii(n.modelLayers),d=Yr(u.mergedNodeModelsById,n.typeRegistry,t.augmentations??[]);return n.nodeModelsById=u.nodeModelsById,n.mergedNodeModelsById=d.modelsById,n.modelConflicts=u.conflicts,r.push(...d.diagnostics),{ok:r.every(l=>l.severity!==C.Error),index:n,diagnostics:r}}var oi={unknownSubTreePorts:"allow"};function si(e){return{...oi,...e}}var aa=["Action","Condition","Control","Decorator"],ua=new Set(aa);var da=new Set(["input_port","output_port","inout_port"]);function Ze(e){return ua.has(e)}function Te(e){return Ze(e)?e:void 0}function kt(e,t){return e.attributes.find(n=>n.name===t)?.value}function yn(e,t){if(e===t)return!0;for(let n of e.children)if(n.kind==="element"&&yn(n,t))return!0;return!1}function ai(e,t){if(!e)return!1;if(e.name==="TreeNodesModel")return yn(e,t);for(let n of e.children)if(!(n.kind!=="element"||n.name!=="TreeNodesModel")&&yn(n,t))return!0;return!1}function Ct(e){return da.has(e.name)}function ui(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":Ze(e.name)?"generic-node":Ct(e)?"unknown-xml":"concrete-node"}function It(e){if(e.name==="SubTree")return kt(e,"ID")||"SubTree";if(Ze(e.name))return kt(e,"ID");if(!(e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"||e.name==="include"||Ct(e)))return e.name}function W(e){return e.typeRegistry}function Y(e,t){return Q(W(e),t)}function me(e,t,n){return je(W(e),t,n)}function Je(e,t){return e.documents.get(t)}function ee(e,t){return e.behaviorTreesById.get(t)??[]}function Sn(e,t){return e.behaviorTreesById.has(t)}function bn(e){return[...e.behaviorTreesById.values()].flat()}function Tn(e,t){return di(e).flatMap(n=>n.subtreeReferences.filter(r=>r.id===t))}function Qe(e){return[...e.behaviorTreesById.keys()]}function di(e){return[...e.documents.values()]}function H(e,t){let n=e;return n.mergedNodeModelsById.get(t)??n.builtins.get(t)}function vn(e,t){return e.modelLayers.flatMap(n=>n.models.filter(r=>r.id===t))}function Dt(e){return[...e.mergedNodeModelsById.values()]}function Rn(e){return e.modelLayers.flatMap(t=>t.models)}function hn(e){return[...e.mergedNodeModelsById.values()]}function xn(e){return[...e.genericSubTreePorts]}function et(e){return[...e.augmentations]}function tt(e){return e.modelConflicts}function nt(e,t){let{id:n,fileLocalUri:r,config:i}=t,o=ee(e,n);if(o.length>0){if((i?.resolver?.behaviorTreeIds==="file-local-first"||i?.resolver?.behaviorTreeIds==="allow-ambiguous")&&r){let d=o.filter(l=>l.uri===r);d.length>0&&(o=d)}let a=H(e,n),u=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(d=>d.id),...u.map(d=>d.id)],behaviorTrees:o,definitions:u}}let s=H(e,n);return s?.kind==="SubTree"?{status:"resolved",kind:"node-model",modelId:s.id,model:s}:{status:"unresolved",id:n}}function kn(e,t){if(!t)return{status:"unresolved",nodeType:t};let n=H(e,t);if(n){let i=tt(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=vn(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 Cn(e){let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);return[...t.values()]}function In(e){let t=xn(e.index);if(e.tagForm==="subtree"){let n=e.model.status==="resolved"?e.model.model.ports:e.subtreeModelPorts??[];return Cn([...n,...t])}return e.model.status==="resolved"?[...e.model.model.ports]:[]}function Dn(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}:rn(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 L(e,t){let n=si(t.policy),r=t.element,i=ui(r),o=ai(t.documentRoot,r);if((t.isModelDefinition||o&&(i==="generic-node"||i==="subtree"))&&(i="model-definition"),o&&Ct(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=It(r);if(i!=="subtree"){let f=kn(e,s),x=In({index:e,tagForm:i,model:f}),T=r.attributes.map(D=>Dn({attribute:D,ports:x,allowsArbitraryAttributes:!1,model:f}));return{element:r,tagName:r.name,tagForm:i,nodeType:s,model:f,ports:x,allowsArbitraryAttributes:!1,portUsages:T}}let a=kt(r,"ID"),u=a?nt(e,{id:a,fileLocalUri:t.uri,config:t.config}):{status:"unresolved",id:void 0},d={status:"unresolved",nodeType:a},l=!1;if(u.status==="resolved"&&u.kind==="node-model")d={status:"resolved",model:u.model};else if(u.status==="resolved"&&u.kind==="behavior-tree"){let f=kn(e,u.treeId);f.status==="resolved"&&f.model.kind==="SubTree"?d=f:l=n.unknownSubTreePorts==="allow"}else u.status==="ambiguous"&&u.definitions.length>0?d=u.definitions.length===1?{status:"resolved",model:u.definitions[0]}:{status:"ambiguous",nodeType:a??"SubTree",candidates:u.definitions}:l=n.unknownSubTreePorts==="allow";let c=In({index:e,tagForm:i,model:d,subtreeModelPorts:u.status==="ambiguous"?Cn(u.definitions.flatMap(f=>f.ports)):void 0}),m=r.attributes.map(f=>Dn({attribute:f,ports:c,allowsArbitraryAttributes:l,model:d,unknownModelPortStatus:!l&&d.status!=="resolved"?"undeclared":void 0}));return{element:r,tagName:r.name,tagForm:i,nodeType:s,model:d,subtree:{id:a,target:u},ports:c,allowsArbitraryAttributes:l,portUsages:m}}function se(e,t){return L(e,t).portUsages.find(r=>r.name===t.attributeName)}function ma(e){return e==="Action"||e==="Condition"||e==="Control"||e==="Decorator"||e==="SubTree"}function pa(e){let t=e.root;return t?t.name==="BehaviorTree"?[t]:t.children.filter(n=>n.kind==="element"&&n.name==="BehaviorTree"):[]}function li(e,t){let n=e.line,r=e.character,i=e.offset;for(let o of t){if(i+=o.length,o===`
4
+ `){n+=1,r=0;continue}r+=o.length}return{line:n,character:r,offset:i}}function fa(e,t,n){let r=li(e,t),i=li(r,n);return{start:r,end:i}}function mi(e,t){let n=t.valueContentRange||t.valueRange,r=e.originalText.slice(n.start.offset,n.end.offset),i=[];for(let o of r.matchAll(/\{([^}]+)\}/g)){let s=o[0],a=o[1],u=o.index??0;i.push({raw:s,key:a,range:fa(n.start,r.slice(0,u),s),syntax:"braced"})}return i.length===0&&(r.includes("{")||r.includes("}"))&&i.push({raw:r,key:r,range:n,syntax:"invalid"}),i}function ga(e,t){return ma(e.name)?e.name:t.model.status==="resolved"?t.model.model.kind:"unknown"}function pi(e){let t=[];for(let n of e)t.push(n),t.push(...pi(n.children));return t}function ya(e){return e.kind==="bt-document"?"bt-xml":e.kind==="model-document"?"model-xml":"unknown"}function Sa(e){let t=new Map(e.map((n,r)=>[n,r]));return n=>`bt:${t.get(n.behaviorTree)??0}/node:${n.path.join(".")}`}function ba(e){return{name:e.name,value:e.value,range:e.range,nameRange:e.nameRange,valueRange:e.valueContentRange||e.valueRange}}function fi(e){return pe(e,"name")?.value}function Ta(e){return fi(e)||pe(e,"ID")?.value||e.name}function va(e){let t=[],n=e;for(;n;){let r=n.path.at(-1)??0;t.unshift(`${r}:${Ta(n.element)}`),n=n.parent}return[e.behaviorTree.id||"<anonymous>",...t].join("/")}function gi(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 yi(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 Ra(e){return e.status==="resolved"?e.port.direction:"unknown"}function ha(e,t){return e===""?"empty":e==="{=}"?"substitution":t.some(n=>n.syntax==="braced")?"blackboard-reference":t.some(n=>n.syntax==="invalid")?"unknown":"literal"}function ci(e,t){return{nodeId:e,portName:t.name,rawValue:t.value,direction:Ra(t.usage),valueKind:ha(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 xa(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 pe(e,t){return e.attributes.find(n=>n.name===t)}function ka(e){return e.root?pe(e.root,"main_tree_to_execute")?.value:void 0}function Ca(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 ve(e,t){let n=t.semantic,r=Ca(e.root),i=pa(e).map(u=>({id:pe(u,"ID")?.value,element:u,rootNode:void 0,nodes:[]})),o=[],s=[],a=(u,d,l,c)=>{let m=L(n,{element:u,uri:e.uri,documentRoot:e.root,config:t?.config,policy:t?.policy,isModelDefinition:r.has(u)}),f=gi(m),x={element:u,path:c,tagName:u.name,kind:ga(u,m),model:f,usage:m,portBindings:[],children:[],parent:l,behaviorTree:d};if(x.portBindings=m.portUsages.filter(T=>T.status!=="reserved-attribute").map(T=>({name:T.name,value:T.value,attribute:T.attribute,declaredPort:yi(T),usage:T,blackboardReferences:mi(e,T.attribute)})),x.children=u.children.filter(T=>T.kind==="element").map((T,D)=>a(T,d,x,[...c,D])),u.name==="SubTree"){let T=pe(u,"ID")?.value;o.push({node:x,id:T,target:m.subtree?.target??{status:"unresolved",id:T},portRemaps:x.portBindings})}return x};for(let u of i){let d=u.element.children.filter(l=>l.kind==="element").map((l,c)=>a(l,u,void 0,[c]));u.rootNode=d[0],u.nodes=pi(d),s.push(...u.nodes)}return{document:e,behaviorTrees:i,subtreeCalls:o,nodes:s}}function Et(e,t,n){let r=ve(e,{semantic:t,config:n?.config,policy:n?.policy}),i=Sa(r.behaviorTrees),o=r.nodes.map(d=>{let l=i(d),c=d.usage,m=c.nodeType??d.tagName,f=fi(d.element),x=pe(d.element,"ID")?.value,T=va(d);return{nodeId:l,path:d.path,instancePath:T,tagName:d.tagName,nodeType:m,name:f,idAttr:x,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(ba),identityCandidates:xa({name:f,idAttr:x,nodeType:m,tagName:d.tagName,instancePath:T,behaviorTreeId:d.behaviorTree.id,nodeId:l}),model:gi(c),usage:c,portBindings:c.portUsages.filter(D=>D.status!=="reserved-attribute").map(D=>ci(l,{name:D.name,value:D.value,attribute:D.attribute,declaredPort:yi(D),usage:D,blackboardReferences:mi(e,D.attribute)}))}}),s=r.behaviorTrees.map(d=>({id:d.id,range:d.element.range,idRange:pe(d.element,"ID")?.valueContentRange,rootNodeId:d.rootNode?i(d.rootNode):void 0,nodeIds:d.nodes.map(i)})),a=r.subtreeCalls.map(d=>({nodeId:i(d.node),callId:d.id,range:d.node.element.range,target:d.target,portBindings:d.portRemaps.map(l=>ci(i(d.node),l))})),u=e.root?pe(e.root,"main_tree_to_execute"):void 0;return{uri:e.uri,kind:ya(e),mainTreeToExecute:ka(e),mainTreeToExecuteRange:u?.valueContentRange||u?.valueRange,behaviorTrees:s,nodes:o,subtreeCalls:a}}function Ia(e,t){let n=e.element.fullRange||e.element.range;return F(n,t)}function Da(e,t){let n=e.element.fullRange||e.element.range,r=t.element.fullRange||t.element.range;return n.end.offset-n.start.offset<r.end.offset-r.start.offset}function Nt(e,t){let n;for(let r of e.nodes)Ia(r,t.offset)&&(!n||Da(r,n))&&(n=r);return n}function _e(e,t){for(let n of e.nodes)for(let r of n.portBindings)if(F(r.attribute.range,t.offset))return r}function Ea(e,t){return F(e.fullRange||e.range,t)}function Na(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 Bt(e,t){let n;for(let r of e.nodes)Ea(r,t.offset)&&(!n||Na(r,n))&&(n=r);return n}function wt(e,t){for(let n of e.nodes)for(let r of n.portBindings)if(F(r.range,t.offset))return r}function Si(e){let{document:t,diagnostics:n,options:r,partial:i}=e,o=n.some(a=>a.severity===C.Error),s="generic-xml";if(o)s="invalid-xml";else if(t.root){let a=t.root,u=a.children.some(m=>m.kind==="element"&&m.name==="BehaviorTree"),d=a.children.some(m=>m.kind==="element"&&m.name==="TreeNodesModel"),l=a.attributes.some(m=>m.name==="BTCPP_format"&&m.value==="4"),c=a.name==="TreeNodesModel"||a.name==="root"&&!u&&d;r.kind==="model-xml"||c?s="model-document":(a.name==="BehaviorTree"||a.name==="root"&&(l||u)||r.kind==="bt-xml")&&(s="bt-document")}return t.kind=s,t.isBtXml=s==="bt-document"||s==="model-document",!o&&!i?{ok:!0,document:t,diagnostics:n,partial:!1}:{ok:!1,document:t,diagnostics:n,partial:i}}function Va(e){if(e.name==="input_port"||e.name==="output_port")return!1;let t=e.children||[],n=t.some(i=>i.kind==="text"&&i.text.trim()!==""),r=t.some(i=>i.kind==="element");return n&&r}function En(e,t){if(e.kind==="element"){Va(e)&&t(e);for(let n of e.children||[])En(n,t)}}function V(e,t){let n=0,r=0;for(let i=0;i<Math.min(t,e.length);i++)e[i]===`
5
+ `?(n++,r=0):r++;return Me(n,r,t)}function Nn(e,t,n,r){for(let i=0;i<e.length;i++){if(e[i]!=="&")continue;let o=e.slice(i+1),s=i;if(o.startsWith("amp;")){i+=4;continue}if(o.startsWith("lt;")){i+=3;continue}if(o.startsWith("gt;")){i+=3;continue}if(o.startsWith("quot;")){i+=5;continue}if(o.startsWith("apos;")){i+=5;continue}if(o.startsWith("#")){let c=1;if(o[c]==="x"||o[c]==="X"){c++;let D="";for(;c<o.length&&/[0-9a-fA-F]/.test(o[c]);)D+=o[c],c++;if(c<o.length&&o[c]===";"){c++;let p=e.slice(s,s+1+c),y=V(n,t+s),b=V(n,t+s+p.length);if(D){let k=Number.parseInt(D,16);if(k>0&&k<=1114111&&(k<55296||k>57343)){i+=c-1;continue}r("XML014_INVALID_NUMERIC_ENTITY",C.Error,`invalid numeric XML entity \`${p}\``,y,b,{primaryLabel:"this numeric entity is outside the valid Unicode range",help:"replace it with a valid Unicode code point or normal text"}),i+=c-1;continue}r("XML001_INVALID_SYNTAX",C.Error,`malformed numeric XML entity \`${p}\``,y,b,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=c-1;continue}let N=e.slice(s,s+1+c),E=V(n,t+s),P=V(n,t+s+N.length);r("XML001_INVALID_SYNTAX",C.Error,`malformed numeric XML entity \`${N}\``,E,P,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=c-1;continue}let m="";for(;c<o.length&&/[0-9]/.test(o[c]);)m+=o[c],c++;if(c<o.length&&o[c]===";"){c++;let D=e.slice(s,s+1+c),N=V(n,t+s),E=V(n,t+s+D.length);if(m){let P=Number.parseInt(m,10);if(P>0&&P<=1114111&&(P<55296||P>57343)){i+=c-1;continue}r("XML014_INVALID_NUMERIC_ENTITY",C.Error,`invalid numeric XML entity \`${D}\``,N,E,{primaryLabel:"this numeric entity is outside the valid Unicode range",help:"replace it with a valid Unicode code point or normal text"}),i+=c-1;continue}r("XML001_INVALID_SYNTAX",C.Error,`malformed numeric XML entity \`${D}\``,N,E,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=c-1;continue}let f=e.slice(s,s+1+c),x=V(n,t+s),T=V(n,t+s+f.length);r("XML001_INVALID_SYNTAX",C.Error,`malformed numeric XML entity \`${f}\``,x,T,{primaryLabel:"this entity is incomplete",help:"use a valid numeric entity such as `&#10;` or escape the ampersand as `&amp;`"}),i+=c-1;continue}let a=o.match(/^[a-zA-Z][a-zA-Z0-9]*;/);if(a){let c=`&${a[0]}`,m=V(n,t+s),f=V(n,t+s+c.length);r("XML013_UNKNOWN_ENTITY",C.Error,`unknown XML entity \`${c}\``,m,f,{primaryLabel:"this entity is not one of XML's predefined entities",help:"use one of `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&apos;`, or a valid numeric entity"}),i+=c.length-1;continue}let u=o.match(/^[a-zA-Z][a-zA-Z0-9]*/);if(u){let c=`&${u[0]}`,m=V(n,t+s),f=V(n,t+s+c.length);r("XML001_INVALID_SYNTAX",C.Error,"bare ampersand in XML content",m,f,{primaryLabel:"escape `&` as `&amp;`",help:"replace `&` with `&amp;` unless this is a valid XML entity"}),i+=c.length-1;continue}let d=V(n,t+s),l=V(n,t+s+1);r("XML001_INVALID_SYNTAX",C.Error,"bare ampersand in XML content",d,l,{primaryLabel:"escape `&` as `&amp;`",help:"replace `&` with `&amp;` unless this is a valid XML entity"})}}function rt(e){return e.replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&").replace(/&#x([0-9a-fA-F]+);/g,(t,n)=>{let r=Number.parseInt(n,16);return r<=0||r>1114111||r>=55296&&r<=57343?t:String.fromCodePoint(r)}).replace(/&#([0-9]+);/g,(t,n)=>{let r=Number.parseInt(n,10);return r<=0||r>1114111||r>=55296&&r<=57343?t:String.fromCodePoint(r)})}function bi(e){let t="",n=[0];for(let r=0;r<e.length;){let i=qa(e,r);if(!i){t+=e[r]??"",r+=1,n.push(r);continue}t+=i.value,r=i.end,n.push(r)}return{value:t,offsets:n}}function qa(e,t){let n=e.slice(t);if(n.startsWith("&quot;")||n.startsWith("&apos;")||n.startsWith("&lt;")||n.startsWith("&gt;")||n.startsWith("&amp;")){let s=n.startsWith("&quot;")?"&quot;":n.startsWith("&apos;")?"&apos;":n.startsWith("&lt;")?"&lt;":n.startsWith("&gt;")?"&gt;":"&amp;";return{value:rt(s),end:t+s.length}}let i=/^&#x([0-9a-fA-F]+);/.exec(n);if(i){let s=i[0];return{value:rt(s),end:t+s.length}}let o=/^&#([0-9]+);/.exec(n);if(o){let s=o[0];return{value:rt(s),end:t+s.length}}}function Ti(e){return Me(e.line,e.character,e.offset)}function Ua(e){return!!e&&/[A-Za-z_:]/.test(e||"")}function Fa(e){return!!e&&/[A-Za-z0-9_.:\-]/.test(e||"")}function Xa(e){return e===" "||e===" "||e===`
6
+ `||e==="\r"}function $a(e){let t=e.codePointAt(0);return t!==void 0&&t<32&&e!==" "&&e!==`
7
+ `&&e!=="\r"}function it(e,t={}){let n=[],r=t.mode==="tolerant",i={uri:t.uri||"",path:t.path,kind:"generic-xml",isBtXml:!1,xmlDeclaration:void 0,root:void 0,nodes:[],diagnostics:n,originalText:e},o=0,s=0,a=0,u=[],d=!1;function l(){return Me(s,a,o)}function c(){return o>=e.length}function m(g=0){return e[o+g]}function f(g=1){for(let B=0;B<g;B+=1)e[o++]===`
8
+ `?(s+=1,a=0):a+=1}function x(){for(;!c()&&Xa(m());)f()}let T=(g,B,M,A,h,j)=>{n.push(z(g,B,M,R(A,h),i.uri,j))};function D(g,B,M,A,h,j){n.push(z(g,B,M,A&&h?R(A,h):void 0,i.uri,j))}function N(){if(!Ua(m()))return"";let g=o;for(f();!c()&&Fa(m());)f();return e.slice(g,o)}function E(){let g=m();if(g!=='"'&&g!=="'")return{value:"",ok:!1};let B=l();f();let M=l(),A=o;for(;!c()&&m()!==g&&m()!=="<";)f();let h=l();if(c()||m()!==g)return{value:e.slice(A,o),ok:!1,valueRange:R(B,h),valueContentRange:R(M,h)};let j=e.slice(A,o);f(),Nn(j,M.offset,e,T);let de=bi(j);return{value:de.value,valueOffsets:de.offsets,ok:!0,valueRange:R(B,l()),valueContentRange:R(M,h)}}function P(){let g=[],B=new Set;for(;;){x();let M=m();if(!M||M===">"||M==="/"&&m(1)===">")break;let A=l(),h=N(),j=l();if(!h)break;x();let de=l();if(m()!=="="){if(T("XML001_INVALID_SYNTAX",C.Error,"invalid attribute syntax",A,j,{primaryLabel:`expected \`=\` after attribute \`${h}\``,help:`write the attribute as \`${h}="..."\``}),d=!0,r)continue;break}f();let Ho=l();x();let Qt=l(),be=E(),Be=l();if(!be.ok&&(T("XML005_INVALID_ATTRIBUTE_VALUE",C.Error,"invalid attribute value",Qt,Be,{primaryLabel:"expected a quoted attribute value",help:`write the value with quotes, for example \`${h}="value"\``}),d=!0,!r)||(B.has(h)?T("XML004_DUPLICATE_ATTRIBUTE",C.Error,`duplicate attribute \`${h}\``,A,Be,{primaryLabel:`attribute \`${h}\` is already defined on this element`,help:`remove one of the duplicate \`${h}\` attributes`}):B.add(h),g.push({name:h,value:be.value,...be.valueOffsets?{valueOffsets:be.valueOffsets}:{},range:R(A,Be),fullRange:R(A,Be),nameRange:R(A,j),equalsRange:R(de,Ho),valueRange:be.valueRange||R(Qt,Be),valueContentRange:be.valueContentRange||R(Qt,Be)}),!be.ok&&r))break}return g}function p(g){u.length>0?u[u.length-1].children.push(g):(i.nodes.push(g),!i.root&&g.kind==="element"&&(i.root=g))}function y(){let g=l(),B=o;for(;!c()&&m()!=="<";)f();let M=e.slice(B,o);if(M.length===0)return;for(let h of M)if($a(h)){T("XML007_INVALID_CHARACTER",C.Error,"invalid XML character",g,l(),{primaryLabel:"this control character is not allowed in XML",help:"remove the character or replace it with valid text"});break}Nn(M,B,e,T);let A={kind:"text",text:rt(M),range:R(g,l()),fullRange:R(g,l())};p(A)}function b(){let g=l();f(4);let B=l(),M=o;for(;!c()&&!(m()==="-"&&m(1)==="-"&&m(2)===">");)f();let A=e.slice(M,o);if(c()){if(T("XML001_INVALID_SYNTAX",C.Error,"unterminated XML comment",g,l(),{primaryLabel:"comment started here but no closing `-->` was found",help:"close the comment with `-->`"}),d=!0,!r)return;let de={kind:"comment",text:A,range:R(g,l()),fullRange:R(g,l()),contentRange:R(B,l())};p(de);return}(A.includes("--")||A.endsWith("-"))&&T("XML001_INVALID_SYNTAX",C.Error,"invalid XML comment",B,l(),{primaryLabel:"XML comments cannot contain `--`",help:"remove `--` from the comment body or split it into separate comments"});let h=l();f(3);let j={kind:"comment",text:A,range:R(g,l()),fullRange:R(g,l()),contentRange:R(B,h)};p(j)}function k(){let g=l();f(5),x();let B=P();x(),m()==="?"&&m(1)===">"?f(2):T("XML001_INVALID_SYNTAX",C.Error,"invalid XML declaration",g,l(),{primaryLabel:"expected `?>` to close the XML declaration",help:'close the declaration as `<?xml version="1.0" encoding="UTF-8"?>`'});let M={range:R(g,l()),attributes:B};for(let A of B)A.name==="version"&&(M.version=A.value),A.name==="encoding"&&(M.encoding=A.value),A.name==="standalone"&&(M.standalone=A.value);i.xmlDeclaration=M}function w(){let g=l();f(2),x();let B=l(),M=N(),A=l();if(x(),m()!==">")for(T("XML001_INVALID_SYNTAX",C.Error,"invalid closing tag syntax",g,l(),{primaryLabel:"expected `>` to close the tag",help:"close the tag with `>`"}),d=!0;!c()&&m()!==">";)f();m()===">"&&f();let h=u.pop();if(!h||h.name!==M){let j=h?h.name:M||"",de=M||"";T("XML006_MISSING_CLOSING_TAG",C.Error,`mismatched closing tag \`</${de}>\``,g,l(),{primaryLabel:`opened as \`<${j}>\` but closed as \`</${de}>\``,help:`change the closing tag to \`</${j}>\` or fix the nesting`});return}h.closeTagRange=R(g,l()),h.endTagRange=R(g,l()),h.nameRange||(h.nameRange=R(B,A)),h.range=R(h.range.start,l()),h.fullRange=R(h.range.start,l())}for(;!c();)if(m()==="<")if(m(1)==="?")if(e.slice(o,o+5).toLowerCase()==="<?xml"&&e.charAt(o+5)===" ")k();else{let g=l();for(;!c()&&!(m()==="?"&&m(1)===">");)f();c()||f(2),T("XML012_UNSUPPORTED_PROCESSING_INSTRUCTION",C.Error,"processing instruction is not supported",g,l(),{primaryLabel:"only the XML declaration is supported",help:"remove this processing instruction"})}else if(m(1)==="!"&&m(2)==="-"&&m(3)==="-")b();else if(m(1)==="!"&&m(2)==="["&&e.slice(o+3,o+9)==="CDATA["){let g=l();for(f(8);!c()&&!(m()==="]"&&m(1)==="]"&&m(2)===">");)f();c()||f(3),T("XML010_UNSUPPORTED_CDATA",C.Error,"CDATA is not supported",g,l(),{primaryLabel:"CDATA sections are not supported by btxml",help:"replace the CDATA section with normal escaped XML text",notes:["escape `<` as `&lt;`, `>` as `&gt;`, and `&` as `&amp;`"]})}else if(m(1)==="!"&&e.slice(o+2,o+9)==="DOCTYPE"){let g=l();for(f(8);!c()&&m()!==">";)f();c()||f(1),T("XML011_UNSUPPORTED_DOCTYPE",C.Error,"DOCTYPE is not supported",g,l(),{primaryLabel:"DOCTYPE declarations are not supported by btxml",help:"remove the DOCTYPE declaration"})}else if(m(1)==="/")w();else{let g=l();f();let B=l(),M=N(),A=l();if(!M){if(T("XML001_INVALID_SYNTAX",C.Error,"invalid XML tag",g,l(),{primaryLabel:"expected an XML element name after `<`",help:"start the tag with a valid XML name such as `<root>` or `<BehaviorTree>`"}),d=!0,r){f();continue}break}let h={kind:"element",name:M,attributes:[],children:[],range:R(g,g),fullRange:R(g,g),openTagRange:R(g,g),startTagRange:R(g,g),nameRange:R(B,A),selfClosing:!1};if(h.attributes=P(),x(),m()==="/"&&m(1)===">"){f(2),h.selfClosing=!0,h.openTagRange=R(g,l()),h.startTagRange=h.openTagRange,h.range=R(g,l()),h.fullRange=R(g,l()),p(h);continue}if(m()!==">"){if(T("XML001_INVALID_SYNTAX",C.Error,"invalid XML tag",g,l(),{primaryLabel:"expected `>` or `/>` to close the start tag",help:"close the start tag with `>` or make it self-closing with `/>`"}),d=!0,r){h.openTagRange=R(g,l()),h.startTagRange=h.openTagRange,h.range=R(g,l()),h.fullRange=R(g,l()),p(h);continue}break}f(),h.openTagRange=R(g,l()),h.startTagRange=h.openTagRange,h.range=R(g,l()),h.fullRange=R(g,l()),p(h),u.push(h)}else y();if(u.length>0){let g=u[u.length-1];if(T("XML006_MISSING_CLOSING_TAG",C.Error,`missing closing tag for \`<${g.name}>\``,g.openTagRange.start,g.openTagRange.end,{primaryLabel:"this tag is not closed",help:`add \`</${g.name}>\` before the end of the file`}),d=!0,r)for(;u.length>0;){let B=u.pop();if(!B)break;B.range=R(B.range.start,l()),B.fullRange=R(B.range.start,l())}}let _=i.nodes.filter(g=>g.kind==="element");_.length===0?D("XML002_MISSING_ROOT",C.Error,"missing root element",void 0,void 0,{help:'add a single root element, usually `<root BTCPP_format="4">...</root>`'}):_.length>1&&D("XML003_MULTIPLE_ROOTS",C.Error,"multiple root elements",void 0,void 0,{primaryLabel:"this document has more than one top-level element",help:'wrap the document content in one `<root BTCPP_format="4">...</root>` element'});let $=i.root;if($)for(let g of i.nodes)g!==$&&g.kind==="text"&&g.text.trim().length>0&&T("XML016_TEXT_OUTSIDE_ROOT",C.Error,"text outside root element",g.range.start,g.range.end,{primaryLabel:"non-whitespace text appears outside the root element",help:"move this text inside `<root>` or remove it"});if(!i.xmlDeclaration)D("XML008_MISSING_DECLARATION",C.Warning,"missing XML declaration",void 0,void 0,{help:'add `<?xml version="1.0" encoding="UTF-8"?>` at the top of the file',notes:["this is a warning because BehaviorTree.CPP can still parse many files without a declaration"]});else if(i.xmlDeclaration.encoding&&i.xmlDeclaration.encoding.toUpperCase()!=="UTF-8"){let g=i.xmlDeclaration.encoding;T("XML009_INVALID_ENCODING",C.Warning,"XML encoding should be UTF-8",i.xmlDeclaration.range.start,i.xmlDeclaration.range.end,{primaryLabel:`declared encoding is \`${g}\``,help:'change the XML declaration to `encoding="UTF-8"`'})}return $&&En($,g=>{T("XML015_UNSUPPORTED_MIXED_CONTENT",C.Warning,"mixed XML content is not supported",Ti(g.range.start),Ti(g.range.end),{primaryLabel:"this element contains both text and child elements",help:"move the text into an attribute or split it into separate elements",notes:["text inside `<input_port>` and `<output_port>` remains allowed"]})}),Si({document:i,diagnostics:n,partial:d,options:t})}var ot={indentWidth:2,xmlDeclaration:"always",blankLineBetweenBehaviorTrees:!0,lineEnding:"lf"};function vi(e){if(!e)return ot;let t=typeof e.indentWidth=="number"?e.indentWidth:ot.indentWidth,n=e.xmlDeclaration==="always"||e.xmlDeclaration==="never"||e.xmlDeclaration==="preserve"?e.xmlDeclaration:ot.xmlDeclaration,r=typeof e.blankLineBetweenBehaviorTrees=="boolean"?e.blankLineBetweenBehaviorTrees:ot.blankLineBetweenBehaviorTrees,i=e.lineEnding==="lf"||e.lineEnding==="crlf"||e.lineEnding==="auto"?e.lineEnding:ot.lineEnding;return{indentWidth:t,xmlDeclaration:n,blankLineBetweenBehaviorTrees:r,lineEnding:i}}function Mt(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function At(e){return Mt(e).replace(/"/g,"&quot;")}function ja(e){return e.filter(t=>!(t.kind==="text"&&t.text.trim()===""))}function Ka(e,t,n){return`${" ".repeat(e*n)}${t}`}function Le(e,t,n,r){let i=" ".repeat(t*r),o=e.attributes||[];if(o.length===0)return[`${i}<${e.name}${n}`];if(o.length===1)return[`${i}<${e.name} ${o[0].name}="${At(o[0].value)}"${n}`];let s=[`${i}<${e.name} ${o[0].name}="${At(o[0].value)}"`],a=" ".repeat(i.length+1+e.name.length+1);for(let u=1;u<o.length;u+=1){let d=o[u],l=u===o.length-1?n:"";s.push(`${a}${d.name}="${At(d.value)}"${l}`)}return s}function Pt(e,t,n,r){let i=" ".repeat(t*n);if(e.kind==="comment")return[`${i}<!--${e.text}-->`];if(e.kind==="text"){let l=e.text.trim();return l?[Ka(t,Mt(l),n)]:[]}let o=ja(e.children||[]),s=e.kind==="element"&&(e.name==="input_port"||e.name==="output_port"),a=(e.children||[]).filter(l=>l.kind==="text").map(l=>l.text).join("").trim(),u=o.some(l=>l.kind==="element"||l.kind==="comment");if(a&&u&&!s&&r.push({code:"XML015_UNSUPPORTED_MIXED_CONTENT",severity:"error",message:"Mixed XML content is not supported by btxml-checker formatter",uri:""}),a&&!u){if((e.attributes||[]).length<=1){let l=(e.attributes||[]).length===0?"":` ${e.attributes[0].name}="${At(e.attributes[0].value)}"`;return[`${i}<${e.name}${l}>${Mt(a)}</${e.name}>`]}return Le(e,t,`>${Mt(a)}</${e.name}>`,n)}if(o.length===0){if(e.selfClosing)return Le(e,t,"/>".slice(0),n);let l=Le(e,t,">",n);return l.push(`${i}</${e.name}>`),l}let d=Le(e,t,">",n);for(let l of e.children||[])l.kind==="text"&&l.text.trim()===""||d.push(...Pt(l,t+1,n,r));return d.push(`${i}</${e.name}>`),d}function za(e){return e.filter(t=>!(t.kind==="text"&&t.text.trim()===""))}function Ri(e,t,n,r){let i=[],o=za(e);for(let s=0;s<o.length;s+=1){let a=o[s],u=o[s-1],d=o[s+1],l=n&&a.kind==="element"&&a.name==="BehaviorTree"&&u&&u.kind==="element"&&u.name==="BehaviorTree",c=a.kind==="element"&&a.name==="TreeNodesModel"&&u!==void 0&&u.kind!=="comment",m=a.kind==="comment"&&d&&d.kind==="element"&&d.name==="TreeNodesModel"&&u!==void 0;(l||c||m)&&i.length>0&&i[i.length-1]!==""&&i.push(""),a.kind==="element"?(i.push(...Pt(a,1,t,r)),a.name==="TreeNodesModel"&&i.push("")):i.push(...Pt(a,1,t,r))}return i}function st(e,t={}){let n=it(e);if(!n.ok||!n.document||!n.document.root)return{ok:!1,skipped:!1,diagnostics:n.diagnostics};if(n.diagnostics.find(T=>["XML010_UNSUPPORTED_CDATA","XML011_UNSUPPORTED_DOCTYPE","XML012_UNSUPPORTED_PROCESSING_INSTRUCTION","XML013_UNKNOWN_ENTITY","XML014_INVALID_NUMERIC_ENTITY","XML001_INVALID_SYNTAX"].includes(T.code)))return{ok:!1,skipped:!1,diagnostics:n.diagnostics};if(n.document.kind==="generic-xml"&&!t.force)return{ok:!0,skipped:!0,diagnostics:[]};let i=n.document.root,o=vi(t),s=o.indentWidth,a=[],u=n.document.xmlDeclaration!==void 0;if((o.xmlDeclaration==="always"||o.xmlDeclaration==="preserve"&&u)&&a.push('<?xml version="1.0" encoding="UTF-8"?>'),a.push(...Le(i,0,">",s)),a.push(...Ri(i.children||[],s,o.blankLineBetweenBehaviorTrees,n.diagnostics)),a.push(`</${i.name}>`),n.diagnostics.some(T=>T.code==="XML015_UNSUPPORTED_MIXED_CONTENT"))return{ok:!1,skipped:!1,diagnostics:n.diagnostics};let d=`
9
+ `;(o.lineEnding==="crlf"||o.lineEnding==="auto"&&e.includes(`\r
10
+ `))&&(d=`\r
11
+ `);let l=a.join(d),c=d.replace(/\\/g,"\\\\").replace(/\r/g,"\\r").replace(/\n/g,"\\n"),m=new RegExp(`(?:${c})+$`,"u"),x=`${l.replace(m,"")}${d}`;return{ok:!0,text:x,changed:x!==e,skipped:!1,diagnostics:n.diagnostics.filter(T=>T.severity!==C.Error)}}function Oe(e,t){if(!(!F(e.range,t)&&!F(e.fullRange,t))){for(let n of e.children){if(n.kind!=="element")continue;let r=Oe(n,t);if(r)return r}return e}}var xi=/^[A-Za-z_:][A-Za-z0-9_.:-]*/,Wa=/([A-Za-z_:][A-Za-z0-9_.:-]*)\s*=\s*("([^"]*)"|'([^']*)')/gs;function Ga(e,t){let n=[],r=0;for(;r<t;){let i=e.indexOf("<",r);if(i<0||i>=t)break;if(e.startsWith("<!--",i)){let d=e.indexOf("-->",i+4);if(d<0||d+3>t)break;r=d+3;continue}if(e.startsWith("<![CDATA[",i)){let d=e.indexOf("]]>",i+9);if(d<0||d+3>t)break;r=d+3;continue}if(e.startsWith("<?",i)){let d=e.indexOf("?>",i+2);if(d<0||d+2>t)break;r=d+2;continue}if(e.startsWith("<!",i)){let d=e.indexOf(">",i+2);if(d<0||d+1>t)break;r=d+1;continue}if(e[i+1]==="/"){let l=e.slice(i+2).match(xi)?.[0];if(l){for(let m=n.length-1;m>=0;m-=1)if(n[m]===l){n.length=m;break}}let c=e.indexOf(">",i+2);if(c<0||c>=t)break;r=c+1;continue}let s=e.slice(i+1).match(/^\s*([A-Za-z_:][A-Za-z0-9_.:-]*)/)?.[1];if(!s){r=i+1;continue}let a=e.indexOf(">",i+1);if(a<0||a>=t)break;e.slice(i+1,a).trimEnd().endsWith("/")||n.push(s),r=a+1}return n.at(-1)}function _t(e,t){let n=e.positionAt(t);return R(n,n)}function Z(e,t,n){return R(e.positionAt(t),e.positionAt(n))}function Lt(e){return{name:e.name,value:e.value,range:Z(e.document,e.nameStart,e.valueEnd),fullRange:Z(e.document,e.nameStart,e.valueEnd),nameRange:Z(e.document,e.nameStart,e.nameEnd),equalsRange:e.equalsStart!==void 0&&e.equalsEnd!==void 0?Z(e.document,e.equalsStart,e.equalsEnd):void 0,valueRange:Z(e.document,e.valueStart,e.valueEnd),valueContentRange:e.valueContentStart!==void 0&&e.valueContentEnd!==void 0?Z(e.document,e.valueContentStart,e.valueContentEnd):void 0}}function Ya(e,t,n){let r=[];for(let i of t.matchAll(Wa)){let o=i.index??0,s=i[1],a=i[2],u=i[3],d=i[4],l=i[0].indexOf(s),c=i[0].indexOf("=",l+s.length),m=i[0].indexOf(a,c+1),f=n+o+m,x=f+a.length;r.push(Lt({document:e,name:s,value:u??d??"",nameStart:n+o+l,nameEnd:n+o+l+s.length,equalsStart:n+o+c,equalsEnd:n+o+c+1,valueStart:f,valueEnd:x,valueContentStart:f+1,valueContentEnd:x-1}))}return r}function Ha(e,t){let n=Math.max(0,t-4e3),r=e.text.slice(n,t),i=r.lastIndexOf("<"),o=r.lastIndexOf(">");if(i<0||i<o||!r.startsWith("</",i))return;let s=n+i,a=r.slice(i+2);if(!/\s/.test(a))return{kind:"closing-tag-name",tagNamePrefix:a,replacementRange:Z(e,s+2,t)}}function hi(e,t){let n=Math.max(0,t-4e3),r=e.text.slice(n,t),i=r.lastIndexOf("<"),o=r.lastIndexOf(">");if(i<0||i<o)return;let s=n+i,a=s+1,u=r.slice(i+1);if(/^\s*[!?/]/.test(u))return;let d=u.match(/^\s*/)?.[0].length??0,l=u.slice(d).match(xi);if(!l)return{kind:"tag-name"};let c=l[0],m=d,f=m+c.length,x=Z(e,a+m,a+f),T={kind:"element",name:c,attributes:Ya(e,u,a),children:[],range:Z(e,s,t),fullRange:Z(e,s,t),openTagRange:Z(e,s,t),startTagRange:Z(e,s,t),nameRange:x,selfClosing:!1};if(u.length<=f&&!/\s/.test(u.slice(f)))return{kind:"tag-name",element:T,replacementRange:x};let D=u.match(/(?:^|\s)([A-Za-z_:][A-Za-z0-9_.:-]*)\s*=\s*(?:(['"])([^"']*)|([^\s>"']*))?$/s);if(D){let P=D[0].indexOf(D[1]),p=(D.index??0)+P,y=p+D[1].length,b=u.indexOf("=",y),k=D[2],w=D[4]??"";if(k){let $=u.indexOf(k,b+1),g=a+$+1,B=Lt({document:e,name:D[1],value:D[3]??"",nameStart:a+p,nameEnd:a+y,equalsStart:a+b,equalsEnd:a+b+1,valueStart:a+$,valueEnd:t,valueContentStart:g,valueContentEnd:t});return{kind:"attribute-value",element:T,attribute:B,valuePrefix:e.text.slice(g,t)}}let _=w.length>0?t-a-w.length:t-a;return{kind:"attribute-value",element:T,attribute:Lt({document:e,name:D[1],value:w,nameStart:a+p,nameEnd:a+y,equalsStart:a+b,equalsEnd:a+b+1,valueStart:a+_,valueEnd:t,valueContentStart:a+_,valueContentEnd:t}),valuePrefix:e.text.slice(a+_,t)}}let N=u.match(/(?:^|\s)([A-Za-z_:][A-Za-z0-9_.:-]*)?$/s);if(N){let E=N[1]??"",P=t-a-E.length;return{kind:"attribute-name",element:T,attribute:Lt({document:e,name:E,value:"",nameStart:a+P,nameEnd:t,valueStart:t,valueEnd:t})}}return{kind:"attribute-name",element:T,attribute:{name:"",value:"",range:_t(e,t),fullRange:_t(e,t),nameRange:_t(e,t),valueRange:_t(e,t)}}}function G(e){let{document:t,parsed:n,position:r}=e,i=r.offset,o=t.text.length>0?{kind:"text"}:{kind:"unknown"},s=Ha(t,i);if(s)return{kind:"closing-tag-name",tagNamePrefix:s.tagNamePrefix,replacementRange:s.replacementRange,tagText:Ga(t.text,i)};if(n?.root){let d=Oe(n.root,i);if(d){for(let l of d.attributes){if(F(l.nameRange,i))return{kind:"attribute-name",element:d,attribute:l};if(F(l.valueRange,i)||F(l.valueContentRange,i))return{kind:"attribute-value",element:d,attribute:l,valuePrefix:l.valueContentRange&&i>=l.valueContentRange.start.offset?t.text.slice(l.valueContentRange.start.offset,i):""}}if(F(d.nameRange||d.openTagRange,i))return{kind:"tag-name",element:d,replacementRange:d.nameRange};if(F(d.openTagRange,i)){let l=hi(t,i);if(l)return l.kind==="tag-name"?{...l,element:l.element??d}:l}o={kind:"element",element:d}}}let a=hi(t,i);if(a)return a;let u=t.text.slice(Math.max(0,i-200),i);return/<!--\s*btxml-disable-next-line\s+[A-Z0-9_]*$/.test(u)?{kind:"comment"}:o}function Ot(e,t){let n=e.valueOffsets;return!n||n.length===0?t:t<=0?0:t>=n.length?n[n.length-1]??0:n[t]??0}function fe(e,t,n){let r=t.valueContentRange??t.valueRange,i=Ot(t,n.start),o=Ot(t,n.end),s=V(e.originalText,r.start.offset+i),a=V(e.originalText,r.start.offset+o);return R(s,a)}function ki(){return{includeIssuesByUri:new Map,suppressionIssuesByUri:new Map}}function Ci(e,t){return e.includeIssuesByUri.get(t)??[]}function Ii(e,t){return e.suppressionIssuesByUri.get(t)??[]}function Di(e){let{document:t,semantic:n,config:r,view:i}=e,o=new Map(i.nodes.map(d=>[d.element,d])),s=new Map(i.subtreeCalls.map(d=>[d.node.element,d])),a=ce(r),u=Za(t.root);return{document:t,view:i,semantic:n,config:r,options:e.options,facts:e.facts,report(d){let l=z(d.code??e.code,e.severity,d.message,d.range,t.uri,d.details,d.data);e.diagnostics.push({...l,rule:e.rule,...d.relatedInformation?{relatedInformation:d.relatedInformation}:{}})},getIncludeIssues(d){let l=Ci(e.facts,t.uri);return d?l.filter(c=>c.kind===d):l},getSuppressionIssues(d){let l=Ii(e.facts,t.uri);return d?l.filter(c=>c.kind===d):l},getNodeUsage(d){return L(n,{element:d,documentRoot:t.root,uri:t.uri,config:r,policy:a,isModelDefinition:u.has(d)})},getPortUsage(d,l){return se(n,{element:d,documentRoot:t.root,attributeName:l,uri:t.uri,config:r,policy:a,isModelDefinition:u.has(d)})},resolveSubTree(d,l){return nt(n,{id:d,fileLocalUri:l,config:r})},getNodeModel(d){return H(n,d)},getBehaviorTrees(d){return ee(n,d)},getTreeNodeView(d){return o.get(d)},getSubTreeCallView(d){return s.get(d)}}}function Za(e){let t=new Set;if(!e)return t;if(e.name==="TreeNodesModel")return Bn(e,t),t;for(let n of e.children)n.kind!=="element"||n.name!=="TreeNodesModel"||Bn(n,t);return t}function Bn(e,t){t.add(e);for(let n of e.children)n.kind==="element"&&Bn(n,t)}function I(e){let t=dr[e.name];return{...e,code:t.code,defaultSeverity:t.defaultSeverity,optionsSchema:t.optionsSchema,meta:e.meta??{description:t.description}}}var Ja={"missing-path":"include/require-path","not-found":"include/no-missing-file",cycle:"include/no-cycle","unresolved-variable":"include/no-unresolved-variable","outside-root":"include/no-outside-root","external-used":"include/report-external-used","depth-exceeded":"include/no-depth-exceeded","too-many-files":"include/no-too-many-files"};function ge(e){return I({name:Ja[e],create(t){return{ProgramExit(){for(let n of t.getIncludeIssues(e))t.report({message:n.message,range:n.range,data:Qa(n)})}}}})}function Qa(e){switch(e.kind){case"missing-path":return;case"unresolved-variable":return{variable:e.variable};case"cycle":return{path:e.path,cycle:e.cycle};default:return{path:e.path}}}var Ei=[ge("missing-path"),ge("not-found"),ge("cycle"),ge("outside-root"),ge("unresolved-variable"),ge("depth-exceeded"),ge("too-many-files"),ge("external-used")];import eu from"ajv";var tu=eu,nu=new tu,ru=["IDLE","RUNNING","SUCCESS","FAILURE","SKIPPED"],iu={int8_t:{min:-128n,max:127n},"std::int8_t":{min:-128n,max:127n},int16_t:{min:-32768n,max:32767n},"std::int16_t":{min:-32768n,max:32767n},int32:{min:-2147483648n,max:2147483647n},int32_t:{min:-2147483648n,max:2147483647n},"std::int32_t":{min:-2147483648n,max:2147483647n},int64_t:{min:-9223372036854775808n,max:9223372036854775807n},int64:{min:-9223372036854775808n,max:9223372036854775807n},"std::int64_t":{min:-9223372036854775808n,max:9223372036854775807n},int:{min:-2147483648n,max:2147483647n},long:{min:-9223372036854775808n,max:9223372036854775807n},short:{min:-32768n,max:32767n},uint8_t:{min:0n,max:255n},"std::uint8_t":{min:0n,max:255n},uint16_t:{min:0n,max:65535n},"std::uint16_t":{min:0n,max:65535n},uint32:{min:0n,max:4294967295n},uint32_t:{min:0n,max:4294967295n},"std::uint32_t":{min:0n,max:4294967295n},uint64_t:{min:0n,max:18446744073709551615n},uint64:{min:0n,max:18446744073709551615n},"std::uint64_t":{min:0n,max:18446744073709551615n},uint:{min:0n,max:4294967295n},unsigned:{min:0n,max:4294967295n},"unsigned int":{min:0n,max:4294967295n},size_t:{min:0n,max:18446744073709551615n},"std::size_t":{min:0n,max:18446744073709551615n}},wn=new Set(["int8_t","int16_t","int32","int32_t","std::int32_t","int64_t","int64","std::int64_t","int","long","short","std::int8_t","std::int16_t"]),Ni=new Set(["uint8_t","uint16_t","uint32","uint32_t","std::uint32_t","uint64_t","uint64","std::uint64_t","uint","unsigned","unsigned int","std::uint8_t","std::uint16_t","size_t","std::size_t"]);function Bi(e){return e.children.filter(t=>t.kind==="element")}function te(e){return e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"}function wi(e){return e.children.some(t=>t.kind==="element")}function qt(e,t){let n=Mi(t);n&&e.report({code:n.code,message:n.message,range:t.range,details:n.details})}function Mi(e){let t=K(e.port.name,e.value);if(e.allowRemap&&t!==void 0)return;if(!e.allowRemap&&t!==void 0||e.port.enum&&!e.port.enum.includes(e.value))return Vt(e.diagnosticCode,e.value,e.portLabel);let n=e.port.validate??e.typeDefinition?.validate;if(n)return du(e.registry,n,e.value)?void 0:Vt(e.diagnosticCode,e.value,e.portLabel);let r=e.typeDefinition?.canonical??e.port.type;if(r&&!Pi(r,e.value))return ou(r)?Vt(e.diagnosticCode,e.value,e.portLabel):{code:e.customLiteralDiagnosticCode,message:`literal value for custom type \`${r}\` requires a validator`,details:{primaryLabel:`literal value requires a validator for custom type \`${r}\``,help:`use a blackboard remap such as \`${e.portLabel}="{${e.port.name}}"\`, or define a validator in btxml.model-augment.json`}}}function Ve(e){return e.effectiveType??e.type}function Ai(e,t){return Q(e,Ve(t))}function Mn(e,t){return K(e,t)}function Vt(e,t,n){return{code:e,message:`invalid value \`${t}\` for port \`${n}\``}}function ou(e){let t=$e(e)??e;return _i(e)!==void 0||lu.has(t.toLowerCase())}function Pi(e,t){let n=_i(e);if(n)return su(n,t);let r=($e(e)??e).toLowerCase();switch(r){case"std::string":case"string":case"bt::any":case"bt::anytypeallowed":case"bt::anytype":case"any":return!0;case"bool":return t==="0"||t==="1"||t==="true"||t==="TRUE"||t==="True"||t==="false"||t==="FALSE"||t==="False";case"float":case"double":return/^-?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/.test(t);case"bt::nodestatus":case"nodestatus":return ru.includes(t);default:return wn.has(r)||Ni.has(r)?Li(r,t):!1}}function _i(e){return/^std::vector<\s*(.+?)\s*>$/.exec(e)?.[1]}function su(e,t){let n=uu(t);return n?n.every(r=>au(e,r)):!1}function au(e,t){if(t.kind==="string")return Pi(e,t.value);let n=($e(e)??e).toLowerCase();switch(n){case"std::string":return typeof t.value=="string";case"bool":return typeof t.value=="boolean";case"float":case"double":return typeof t.value=="number"&&Number.isFinite(t.value);default:return wn.has(n)||Ni.has(n)?typeof t.value=="number"&&Number.isInteger(t.value)&&Li(n,String(t.value)):!1}}function Li(e,t){let n=iu[e];if(!n)return!1;if(wn.has(e)){if(!/^-?\d+$/.test(t))return!1}else if(!/^\d+$/.test(t))return!1;try{let r=BigInt(t);return r>=n.min&&r<=n.max}catch{return!1}}function uu(e){if(e.startsWith("json:"))try{let t=JSON.parse(e.slice(5));return Array.isArray(t)?t.map(n=>({kind:"json",value:n})):void 0}catch{return}return e.split(";").map(t=>({kind:"string",value:t}))}function du(e,t,n){switch(t.kind){case"pattern":return new RegExp(`^(?:${t.pattern})$`).test(n);case"enum":return t.values.includes(n);case"tuple":{let r=n.split(t.separator);return r.length!==t.items.length?!1:r.every((i,o)=>{let s=t.items[o];return s?Mi({port:{name:`tuple[${o}]`,type:s},value:i,registry:e,typeDefinition:Q(e,s),allowRemap:!1,diagnosticCode:"BT103_INVALID_PORT_VALUE_TYPE",customLiteralDiagnosticCode:"BT112_CUSTOM_LITERAL_REQUIRES_VALIDATOR",portLabel:`tuple[${o}]`})===void 0:!1})}case"json-schema":try{let r=JSON.parse(n);return nu.compile(t.schema)(r)===!0}catch{return!1}}}var lu=new Set(["std::string","string","bool","int8_t","std::int8_t","int16_t","std::int16_t","int","int32","int32_t","std::int32_t","int64_t","int64","std::int64_t","long","short","uint8_t","std::uint8_t","uint16_t","std::uint16_t","uint","uint32","uint32_t","std::uint32_t","uint64_t","uint64","std::uint64_t","size_t","std::size_t","unsigned","unsigned int","float","double","bt::nodestatus","nodestatus","bt::any","bt::anytypeallowed","bt::anytype","any"]);var Oi=[I({name:"model/require-port-name",meta:{description:"Port elements require a name attribute."},create(e){return{TreeNodeModel(t){for(let n of t.ports)n.name||e.report({message:"Port must have name attribute",range:n.range||n.nameRange||t.idRange||t.range})}}}}),I({name:"model/no-duplicate-port-name",meta:{description:"Ports with the same name are not allowed."},create(e){return{TreeNodeModel(t){let n=new Set;for(let r of t.ports)r.name&&(n.has(r.name)&&e.report({message:`Duplicate port name "${r.name}" in ${t.id}`,range:r.nameRange||r.range||t.idRange||t.range}),n.add(r.name))}}}}),I({name:"model/valid-port-name",meta:{description:"Port names must be valid XML attribute names for BT nodes."},create(e){return{TreeNodeModel(t){for(let n of t.ports){if(!n.name)continue;let r=on(n.name);r&&e.report({code:S.InvalidPortName,message:`invalid port name \`${n.name}\`: ${r}`,range:n.nameRange||n.range||t.idRange||t.range,details:{primaryLabel:`invalid port name \`${n.name}\``,help:"rename the port to a non-reserved XML attribute name without forbidden characters"}})}}}}}),I({name:"model/no-conflicting-definition",create(e){return{ProgramExit(){for(let t of tt(e.semantic))t.uri&&t.uri!==e.document.uri||cu(e.document,t.id)||e.report({code:t.code,message:t.message,range:t.range,details:t.details,data:t.data,relatedInformation:t.relatedInformation})}}}}),I({name:"model/valid-port-default-value",meta:{description:"TreeNodesModel port defaults must match the declared type."},create(e){return{Element(t){if(!mu(t))return;let n=t.attributes.find(u=>u.name==="default")??t.attributes.find(u=>u.name==="default_value");if(!n)return;let r=t.attributes.find(u=>u.name==="name")?.value;if(!r)return;let o=pu(e.document.root,t)?.attributes.find(u=>u.name==="ID")?.value;if(!o)return;let a=e.getNodeModel(o)?.ports.find(u=>u.name===r);if(a){if(a.direction==="output"){K(a.name,n.value)===void 0&&e.report({code:S.InvalidPortDefaultValue,message:`output port default for \`${a.name}\` must be a blackboard remap`,range:n.range,details:{primaryLabel:`output port default for \`${a.name}\` must be a blackboard remap`,help:`use \`${a.name}="{${a.name}}"\` or \`${a.name}="{=}"\``}});return}qt(e,{port:a,value:n.value,range:n.range,registry:W(e.semantic),typeDefinition:Y(e.semantic,a.type),allowRemap:!0,diagnosticCode:S.InvalidPortDefaultValue,customLiteralDiagnosticCode:S.CustomLiteralRequiresValidator,portLabel:a.name})}}}}}),I({name:"model/no-blackboard-type-mismatch",meta:{description:"Blackboard entries must not mix incompatible resolved port types."},create(e){return{ProgramExit(){let t=W(e.semantic),n=new Map,r=e.options.allowStringEntryCompatibility??!0;for(let i of e.view.nodes)for(let o of i.portBindings){if(o.declaredPort.status!=="resolved")continue;let s=Mn(o.name,o.value);if(!s)continue;let a=Ai(t,o.declaredPort.port);if(!a||a.kind==="any")continue;let u=n.get(s)??[];u.push({key:s,nodeId:yu(i.element),port:o.declaredPort.port,typeDefinition:a,range:o.attribute.range}),n.set(s,u)}for(let[i,o]of n){let s=fu(e.semantic,o,r);if(s.length<2)continue;let a=o.find(u=>u.typeDefinition.canonical===s[0]);e.report({code:S.BlackboardTypeMismatch,message:`blackboard entry \`${i}\` is used with incompatible port types: ${s.map(u=>`\`${u}\``).join(", ")}`,range:a?.range,details:{primaryLabel:`blackboard entry \`${i}\` mixes incompatible port types`,notes:o.filter(u=>s.includes(u.typeDefinition.canonical)).map(u=>`${u.nodeId}.${u.port.name} declares ${gu(u.port,u.typeDefinition)}`),help:"use different blackboard keys, align the port types, or declare compatibility in btxml.model-augment.json"}})}}}}}),I({name:"model/require-output-port-remap",meta:{description:"Resolved output ports must write to a blackboard remap."},create(e){return{Element(t){if(Su(t))return;let n=e.getNodeUsage(t);if(!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of t.attributes){let i=e.getPortUsage(t,r.name);i?.status==="resolved"&&i.port.direction==="output"&&Mn(i.port.name,r.value)===void 0&&e.report({code:S.OutputPortRequiresRemap,message:`output port \`${i.port.name}\` must be remapped to a blackboard entry`,range:r.range,details:{primaryLabel:`output port \`${i.port.name}\` requires a blackboard remap`,help:`use \`${i.port.name}="{${i.port.name}}"\` or \`${i.port.name}="{some_key}"\``}})}}}}})];function cu(e,t){return e.diagnostics.some(n=>n.code===S.DuplicateNodeModelId&&n.message.includes(`\`${t}\``))}function mu(e){return e.name==="input_port"||e.name==="output_port"||e.name==="inout_port"}function pu(e,t){if(!e)return;return n(e,!1,void 0);function n(r,i,o){let s=i||r.name==="TreeNodesModel",a=s&&(r.name==="Action"||r.name==="Condition"||r.name==="Control"||r.name==="Decorator"||r.name==="SubTree")?r:o;if(r===t)return a;for(let u of r.children){if(u.kind!=="element")continue;let d=n(u,s,a);if(d)return d}}}function fu(e,t,n){let r=new Set;for(let i=0;i<t.length;i+=1){let o=t[i];if(o)for(let s=i+1;s<t.length;s+=1){let a=t[s];a&&(n&&(o.typeDefinition.canonical==="std::string"||a.typeDefinition.canonical==="std::string")||me(e,o.typeDefinition.canonical,a.typeDefinition.canonical)||(r.add(o.typeDefinition.canonical),r.add(a.typeDefinition.canonical)))}}return[...r].sort()}function gu(e,t){return Ve(e)??t.canonical}function yu(e){return e.attributes.find(t=>t.name==="name")?.value??e.attributes.find(t=>t.name==="ID")?.value??e.name}function Su(e){return e.name==="root"||e.name==="BehaviorTree"||e.name==="TreeNodesModel"}var bu=new Set(["_failureIf","_successIf","_skipIf","_while"]),Tu=new Set(["_onSuccess","_onFailure","_onHalted","_post"]);function Re(e){if(bu.has(e.attributeName))return{kind:"precondition",expectedResult:"bool-compatible"};if(Tu.has(e.attributeName))return{kind:"postcondition",expectedResult:"ignored"};let t=e.resolvedNodeType??e.elementName;if(e.attributeName==="code"&&t==="Script")return{kind:"script-node-code",expectedResult:"ignored"};if(e.attributeName==="code"&&t==="ScriptCondition")return{kind:"script-condition-code",expectedResult:"bool-compatible"};if(e.attributeName==="if"&&t==="Precondition")return{kind:"precondition-node-if",expectedResult:"bool-compatible"}}var Vi=new Map([["..","DotDot"],["&&","AmpAmp"],["||","PipePipe"],["==","EqualEqual"],["!=","BangEqual"],["<=","LessEqual"],[">=","GreaterEqual"],[":=","ColonEqual"],["+=","PlusEqual"],["-=","MinusEqual"],["*=","StarEqual"],["/=","SlashEqual"]]),qi=new Map([["+","Plus"],["-","Minus"],["*","Star"],["/","Slash"],["&","Ampersand"],["|","Pipe"],["^","Caret"],["~","Tilde"],["!","Bang"],["<","Less"],[">","Greater"],["=","Equal"],["?","Question"],[":","Colon"],["(","LeftParen"],[")","RightParen"],[";","Semicolon"]]);function qe(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(Ui(r)){n++;continue}if(An(r)){let a=n;for(n++;n<e.length&&hu(e[n]);)n++;let u=e.slice(a,n);t.push({type:u==="true"||u==="false"?"Boolean":"Identifier",text:u,start:a,end:n});continue}if(he(r)){let a=Ru(e,n);t.push(a),n=a.end;continue}if(r==="'"){let a=vu(e,n);t.push(a),n=a.end;continue}let i=e.slice(n,n+2),o=Vi.get(i);if(o){t.push({type:o,text:i,start:n,end:n+2}),n+=2;continue}let s=qi.get(r);if(s){t.push({type:s,text:r,start:n,end:n+1}),n+=1;continue}t.push({type:"Error",text:r,start:n,end:n+1}),n+=1}return t.push({type:"EndOfInput",text:"",start:e.length,end:e.length}),t}function vu(e,t){let n=t+1;for(;n<e.length&&e[n]!=="'";)n++;return n>=e.length?{type:"Error",text:e.slice(t),start:t,end:e.length}:{type:"String",text:e.slice(t+1,n),start:t,end:n+1}}function Ru(e,t){let n=t;if(e[n]==="0"&&(e[n+1]==="x"||e[n+1]==="X")){n+=2;let i=n;for(;n<e.length&&xu(e[n]);)n++;return i===n||Cu(e,n)?(n=at(e,n),ut(e,t,n)):{type:"Integer",text:e.slice(t,n),start:t,end:n}}for(;n<e.length&&he(e[n]);)n++;let r="Integer";if(e[n]==="."){if(e[n+1]===".")return{type:r,text:e.slice(t,n),start:t,end:n};if(!he(e[n+1]))return n=at(e,n+1),ut(e,t,n);for(r="Real",n+=1;n<e.length&&he(e[n]);)n++}if(e[n]==="e"||e[n]==="E"){let i=n;n+=1,(e[n]==="+"||e[n]==="-")&&(n+=1);let o=n;for(;n<e.length&&he(e[n]);)n++;if(o===n)return n=at(e,Math.max(n,i+1)),ut(e,t,n);r="Real"}return ku(e,n)?(n=at(e,n),ut(e,t,n)):{type:r,text:e.slice(t,n),start:t,end:n}}function at(e,t){let n=t;for(;n<e.length;){let r=e[n];if(Ui(r)||qi.has(r)||Vi.has(e.slice(n,n+2))||r==="."&&e[n+1]===".")break;n++}return n}function ut(e,t,n){return{type:"Error",text:e.slice(t,n),start:t,end:n}}function Ui(e){return e===" "||e===" "||e===`
12
+ `||e==="\r"}function An(e){return e!==void 0&&/[A-Za-z_@]/.test(e)}function hu(e){return e!==void 0&&/[A-Za-z0-9_]/.test(e)}function he(e){return e!==void 0&&/[0-9]/.test(e)}function xu(e){return e!==void 0&&/[0-9A-Fa-f]/.test(e)}function ku(e,t){let n=e[t];return An(n)||he(n)}function Cu(e,t){let n=e[t];return n==="."||An(n)||he(n)}var Iu=new Map([["ColonEqual",":="],["Equal","="],["PlusEqual","+="],["MinusEqual","-="],["StarEqual","*="],["SlashEqual","/="]]),Du=new Map([["PipePipe","||"],["AmpAmp","&&"],["Pipe","|"],["Caret","^"],["Ampersand","&"],["Plus","+"],["Minus","-"],["DotDot",".."],["Star","*"],["Slash","/"]]),Fi=new Map([["EqualEqual","=="],["BangEqual","!="],["Less","<"],["Greater",">"],["LessEqual","<="],["GreaterEqual",">="]]),J={assignment:2,ternary:4,pipePipe:6,ampAmp:8,comparison:10,pipeCaret:12,ampersand:14,additive:16,multiplicative:18};function ke(e){let t=qe(e),n=t.filter(r=>r.type==="Error");return n.length>0?{ok:!1,errors:n.map(r=>({kind:"invalid-token",message:`invalid token \`${r.text}\``,range:{start:r.start,end:r.end}})),tokens:t}:Xi(t,e)}function Xi(e,t=""){let n=new Pn(e,t),r=[];if(n.peek().type==="EndOfInput")return{ok:!1,errors:[{kind:"empty-script",message:"empty script",range:{start:0,end:0}}],tokens:e};for(;n.peek().type!=="EndOfInput";){let o=n.parseExpression(0);if(!o)return{ok:!1,errors:n.errors,tokens:e};for(r.push(o);n.match("Semicolon"););}if(n.errors.length>0)return{ok:!1,errors:n.errors,tokens:e};let i=Mu(r);return{ok:!0,program:{kind:"Program",statements:r,range:i},tokens:e}}var Pn=class{constructor(t,n,r=0){this.tokens=t;this.source=n;this.index=r}tokens;source;index;errors=[];parseExpression(t){let n=this.parsePrefix();if(n){for(;;){let r=this.peek();if(r.type==="EndOfInput"||r.type==="Semicolon"||r.type==="RightParen"||r.type==="Colon")break;let i=Iu.get(r.type);if(i){if(t>=J.assignment)break;this.consume();let u=this.parseExpression(0);if(!u)return;n={kind:"AssignmentExpression",operator:i,left:n,right:u,range:dt(n.range,u.range)};break}if(r.type==="Question"){if(t>=J.ternary)break;this.consume();let u=this.parseExpression(0);if(!u)return;if(!this.match("Colon")){this.reportError("expected-ternary-colon","expected ':' in ternary expression",this.peek());return}let d=this.parseExpression(J.ternary);if(!d)return;n={kind:"ConditionalExpression",condition:n,thenExpression:u,elseExpression:d,range:dt(n.range,d.range)};break}let o=Fi.get(r.type);if(o){if(t>=J.comparison)break;this.consume();let u=[n],d=[o],l=this.parseExpression(J.comparison);if(!l)return;for(u.push(l);;){let c=Fi.get(this.peek().type);if(!c)break;this.consume();let m=this.parseExpression(J.comparison);if(!m)return;d.push(c),u.push(m)}n={kind:"ComparisonChain",operands:u,operators:d,range:dt(u[0].range,u[u.length-1].range)};continue}let s=Du.get(r.type),a=s?Bu(r.type):void 0;if(s&&a!==void 0){if(t>=a)break;this.consume();let u=this.parseExpression(a);if(!u)return;n={kind:"BinaryExpression",operator:s,left:n,right:u,range:dt(n.range,u.range)};continue}this.reportError("unexpected-token-after-expression",`unexpected token after expression: \`${r.text||r.type}\``,r);return}return n}}parsePrefix(){let t=this.peek();switch(t.type){case"Identifier":return this.consume(),{kind:"Identifier",name:t.text,range:xe(t)};case"Integer":case"Real":case"Boolean":case"String":return this.consume(),Eu(t,this.source);case"Minus":case"Tilde":case"Bang":{this.consume();let n=this.parseExpression(20);return n?{kind:"UnaryExpression",operator:Nu(t.type),argument:n,range:dt(xe(t),n.range)}:void 0}case"LeftParen":{let n=this.consume(),r=this.parseExpression(0);if(!r)return;let i=this.peek();if(i.type!=="RightParen"){this.reportError("expected-right-paren","expected ')'",i);return}return this.consume(),wu(r,{start:n.start,end:i.end})}default:this.reportError("expected-operand","expected operand",t);return}}peek(){return this.tokens[this.index]??this.tokens[this.tokens.length-1]}consume(){let t=this.peek();return this.index+=1,t}match(t){return this.peek().type!==t?!1:(this.consume(),!0)}reportError(t,n,r){this.errors.push({kind:t,message:n,range:xe(r)})}};function Eu(e,t){switch(e.type){case"Integer":return{kind:"Literal",valueKind:"integer",raw:t.slice(e.start,e.end),value:e.text.startsWith("0x")||e.text.startsWith("0X")?Number(e.text):Number.parseInt(e.text,10),range:xe(e)};case"Real":return{kind:"Literal",valueKind:"real",raw:t.slice(e.start,e.end),value:Number(e.text),range:xe(e)};case"Boolean":return{kind:"Literal",valueKind:"boolean",raw:t.slice(e.start,e.end),value:e.text==="true",range:xe(e)};case"String":return{kind:"Literal",valueKind:"string",raw:t.slice(e.start,e.end),value:e.text,range:xe(e)};default:throw new Error(`unsupported literal token ${e.type}`)}}function Nu(e){switch(e){case"Minus":return"-";case"Tilde":return"~";case"Bang":return"!";default:throw new Error(`unsupported unary token ${e}`)}}function Bu(e){switch(e){case"PipePipe":return J.pipePipe;case"AmpAmp":return J.ampAmp;case"Pipe":case"Caret":return J.pipeCaret;case"Ampersand":return J.ampersand;case"Plus":case"Minus":case"DotDot":return J.additive;case"Star":case"Slash":return J.multiplicative;default:return}}function xe(e){return{start:e.start,end:e.end}}function dt(e,t){return{start:e.start,end:t.end}}function wu(e,t){return{...e,range:t}}function Mu(e){return{start:e[0]?.range.start??0,end:e[e.length-1]?.range.end??0}}var Au=new Set(["int8_t","std::int8_t","int16_t","std::int16_t","int32","int32_t","std::int32_t","int64","int64_t","std::int64_t","int","long","short","uint8_t","std::uint8_t","uint16_t","std::uint16_t","uint32","uint32_t","std::uint32_t","uint64","uint64_t","std::uint64_t","uint","unsigned","unsigned int","size_t","std::size_t","float","double"]);function lt(e={}){let t=Ae(e.augmentations??[]),n=e.areTypesCompatible??((o,s)=>je(t,o,s)),r=new Map,i={symbols:new Map,enums:Pu(e.enums,e.augmentations??[])};for(let o of e.symbols??[])_u(i,r,o,n);return i}function ae(e){return{symbols:new Map([...e?.symbols.entries()??[]].map(([t,n])=>[t,{...n}])),enums:new Map(e?.enums??[])}}function ct(e){let t=ae(e.baseEnvironment),n=[];for(let r of e.entries){let i=ae(t),o=r.parseResult??ke(r.source),s=ae(i),a;o.ok&&(a=De({program:o.program,environment:i,attributeName:r.attributeName,originId:r.originId??String(r.id)}),s=ae(a.environment)),n.push({id:r.id,parseResult:o,environmentBefore:i,environmentAfter:s,...a?{analysis:a}:{}}),t.symbols.clear(),t.enums.clear();for(let[u,d]of s.symbols)t.symbols.set(u,{...d});for(let[u,d]of s.enums)t.enums.set(u,d)}return n}function $i(e){let t=new Map;for(let n of e)for(let[r,i]of Object.entries(n.script?.enums??{}))t.set(r,i);return t}function Ce(e,t){let n=Q(e,t);return ji(t,n)}function ji(e,t){if(!e||!t)return{kind:"unknown"};if(t.kind==="any")return{kind:"any"};let n=t.canonical.toLowerCase();return n==="bool"?{kind:"bool"}:n==="std::string"||n==="string"?{kind:"string"}:Au.has(n)?{kind:"number"}:{kind:"custom",name:t.name??e,canonical:t.canonical}}function Ki(e,t){return e.kind==="any"||t.kind==="any"||e.kind==="unknown"||t.kind==="unknown"||e.kind==="error"||t.kind==="error"?!0:e.kind==="custom"&&t.kind==="custom"?e.canonical===t.canonical:e.kind===t.kind}function Ut(e,t){return e.kind==="any"||t.kind==="any"||e.kind==="unknown"||t.kind==="unknown"||e.kind==="error"||t.kind==="error"?!0:e.kind==="custom"||t.kind==="custom"?e.kind==="custom"&&t.kind==="custom"?e.canonical===t.canonical:!1:e.kind==="bool"&&t.kind==="number"?!0:e.kind===t.kind}function Ie(e){return e.kind==="bool"||e.kind==="number"||e.kind==="unknown"||e.kind==="any"||e.kind==="error"}function _n(e,t){return e.kind==="error"||t.kind==="error"?{kind:"error"}:e.kind==="unknown"||t.kind==="unknown"?{kind:"unknown"}:e.kind==="any"||t.kind==="any"?e.kind===t.kind?e:{kind:"unknown"}:e.kind==="custom"||t.kind==="custom"?e.kind==="custom"&&t.kind==="custom"&&e.canonical===t.canonical?e:void 0:e.kind===t.kind?e:void 0}function Pu(e,t){if(e instanceof Map)return new Map(e);let n=$i(t??[]);for(let[r,i]of Object.entries(e??{}))n.set(r,i);return n}function _u(e,t,n,r){let i=e.symbols.get(n.name);if(!i){e.symbols.set(n.name,{name:n.name,type:n.type,source:n.source,writable:n.writable,readable:n.readable}),t.set(n.name,n.compatibilityKey);return}let o=t.get(n.name),s=i.conflict===!0||o!==void 0&&n.compatibilityKey!==void 0&&!r(o,n.compatibilityKey)||!Ki(i.type,n.type);e.symbols.set(n.name,{...i,readable:i.readable||n.readable,writable:i.writable||n.writable,conflict:s}),o===void 0&&t.set(n.name,n.compatibilityKey)}var Ee={kind:"number"},Xt={kind:"string"},Ft={kind:"bool"},le={kind:"unknown"},X={kind:"error"};function De(e){let t=ae(e.environment),n=[],r=[],i=[],o=[],s=[],a=[];return e.program.statements.forEach((u,d)=>{a.push(ue({expression:u,statementIndex:d,environment:t,identifiers:n,resolvedIdentifiers:r,unknownIdentifiers:i,introducedSymbols:o,diagnostics:s,attributeName:e.attributeName??"code",originId:e.originId}))}),{environment:t,identifiers:n,resolvedIdentifiers:r,unknownIdentifiers:i,introducedSymbols:o,diagnostics:s,statementTypes:a,finalType:a.at(-1)}}function ue(e){let{expression:t}=e;switch(t.kind){case"Literal":return t.valueKind==="integer"||t.valueKind==="real"?Ee:t.valueKind==="string"?Xt:t.valueKind==="boolean"?Ft:le;case"Identifier":return Ou(e,t.name,t.range);case"UnaryExpression":{let n=ue({...e,expression:t.argument});return t.operator==="!"?Ie(n)?Ft:(ne(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires a bool-compatible operand`,`operand for \`${t.operator}\` is not bool-compatible`,"use a boolean, number, or unknown-compatible expression here"),X):n.kind==="number"?Ee:n.kind==="unknown"||n.kind==="any"||n.kind==="error"?n.kind==="any"?n:n.kind==="error"?X:le:(ne(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires a numeric operand`,`operand for \`${t.operator}\` is not numeric`,"use a number expression here"),X)}case"BinaryExpression":{let n=ue({...e,expression:t.left}),r=ue({...e,expression:t.right});switch(t.operator){case"&&":case"||":return zi(n)||zi(r)?(ne(e,"invalid-operand-type",t.range,`operator \`${t.operator}\` requires bool-compatible operands`,`operands for \`${t.operator}\` are not bool-compatible`,"use boolean or numeric expressions here"),X):Ft;case"+":return n.kind==="string"&&r.kind==="string"?Xt:n.kind==="number"&&r.kind==="number"?Ee:Ln(n,r)?le:(On(e,t.range,t.operator),X);case"-":case"*":case"/":case"&":case"|":case"^":return n.kind==="number"&&r.kind==="number"?Ee:Ln(n,r)?le:(On(e,t.range,t.operator),X);case"..":return n.kind==="string"&&(r.kind==="string"||r.kind==="number")||r.kind==="string"&&(n.kind==="string"||n.kind==="number")?Xt:Ln(n,r)?le:(On(e,t.range,t.operator),X)}return le}case"ComparisonChain":{let n=t.operands.map(r=>ue({...e,expression:r}));for(let r=0;r<t.operators.length;r+=1){let i=t.operators[r],o=n[r],s=n[r+1];if(!qu(i,o,s))return ne(e,"invalid-operand-type",{start:t.operands[r]?.range.start??t.range.start,end:t.operands[r+1]?.range.end??t.range.end},`operator \`${i}\` cannot compare these operand types`,`comparison operands for \`${i}\` are not compatible`,"compare values of the same primitive type, or use == / != for matching custom types"),X}return Ft}case"ConditionalExpression":{let n=ue({...e,expression:t.condition});Ie(n)||ne(e,"invalid-operand-type",t.condition.range,"ternary condition must be bool-compatible","ternary condition is not bool-compatible","use a boolean or numeric condition expression here");let r=ue({...e,expression:t.thenExpression}),i=ue({...e,expression:t.elseExpression}),o=_n(r,i);return o||(ne(e,"invalid-operand-type",t.range,"ternary branches must produce compatible types","then and else branches have incompatible types","return the same type from both ternary branches"),X)}case"AssignmentExpression":return Lu(e)}}function Lu(e){let{environment:t,attributeName:n,identifiers:r,introducedSymbols:i}=e,o=e.expression,s=ue({...e,expression:o.right});if(o.left.kind!=="Identifier")return ue({...e,expression:o.left}),ne(e,"invalid-operand-type",o.left.range,"assignment target must be an identifier","this assignment target is not writable","assign to a variable name instead of an expression"),X;let a=o.left,u=o.operator===":="?"declare":o.operator==="="?"write":"readwrite",d={name:a.name,kind:u,range:a.range,identifier:a,statementIndex:e.statementIndex};r.push(d);let l=t.symbols.get(a.name);if(o.operator===":="&&!l){let m={name:a.name,type:s,source:{kind:"script-assignment",attributeName:n,range:a.range,originId:e.originId},readable:!0,writable:!0};return t.symbols.set(a.name,m),e.resolvedIdentifiers.push({access:d,resolution:{kind:"symbol",symbol:m}}),i.push(m),s}if(!l)return e.resolvedIdentifiers.push({access:d,resolution:{kind:"unknown"}}),ne(e,"assignment-to-unknown-variable",a.range,`assignment target \`${a.name}\` is not defined`,`\`${a.name}\` must already exist before this assignment`,"introduce the variable earlier with `:=` or add a matching blackboard remap"),X;if(e.resolvedIdentifiers.push({access:d,resolution:{kind:"symbol",symbol:l}}),o.operator==="=")return Ut(l.type,s)?(Vn(l,s),s):(Wi(e,a,l.type,s),X);if(o.operator===":=")return Ut(l.type,s)?(Vn(l,s),s):(Wi(e,a,l.type,s),X);let c=Vu(l.type,s,o.operator);return c?(Vn(l,c),c):(ne(e,"invalid-compound-assignment",o.range,`operator \`${o.operator}\` is not valid for these operand types`,`compound assignment \`${o.operator}\` is not allowed here`,o.operator==="+="?"use number += number or string += string":"use numeric operands for this compound assignment"),X)}function Ou(e,t,n){let r={name:t,kind:"read",range:n,identifier:e.expression,statementIndex:e.statementIndex};e.identifiers.push(r);let i=e.environment.enums.get(t);if(i!==void 0)return e.resolvedIdentifiers.push({access:r,resolution:{kind:"enum",name:t,value:i}}),Ee;let o=e.environment.symbols.get(t);return o?(e.resolvedIdentifiers.push({access:r,resolution:{kind:"symbol",symbol:o}}),o.type):(e.resolvedIdentifiers.push({access:r,resolution:{kind:"unknown"}}),e.unknownIdentifiers.push(r),le)}function Vu(e,t,n){return e.kind==="error"||t.kind==="error"?X:e.kind==="unknown"||t.kind==="unknown"||e.kind==="any"||t.kind==="any"?le:n==="+="?e.kind==="number"&&t.kind==="number"?Ee:e.kind==="string"&&t.kind==="string"?Xt:void 0:e.kind==="number"&&t.kind==="number"?Ee:void 0}function Ln(e,t){return $t(e)||$t(t)}function $t(e){return e.kind==="unknown"||e.kind==="any"||e.kind==="error"}function zi(e){return!Ie(e)}function qu(e,t,n){return $t(t)||$t(n)?!0:e==="=="||e==="!="?t.kind==="custom"||n.kind==="custom"?t.kind==="custom"&&n.kind==="custom"&&t.canonical===n.canonical:t.kind===n.kind:t.kind==="custom"||n.kind==="custom"?!1:t.kind==="number"&&n.kind==="number"||t.kind==="string"&&n.kind==="string"}function On(e,t,n){ne(e,"invalid-operand-type",t,`operator \`${n}\` cannot be applied to these operand types`,`operands for \`${n}\` are not compatible`,"use operands with the types required by this operator")}function Wi(e,t,n,r){ne(e,"variable-type-mismatch",t.range,`cannot assign ${qn(r)} to variable \`${t.name}\` of type ${qn(n)}`,`\`${t.name}\` expects ${qn(n)} here`,"assign a compatible value or change the variable's source type")}function Vn(e,t){e.source.kind==="script-assignment"&&(e.type.kind!=="unknown"&&e.type.kind!=="error"||t.kind==="unknown"||t.kind==="any"||t.kind==="error"||(e.type=t))}function ne(e,t,n,r,i,o){e.diagnostics.push({code:t,range:n,message:r,details:{primaryLabel:i,help:o}})}function qn(e){return e.kind==="custom"?e.name:e.kind}var Gi=new Set(["Identifier","Integer","Real","String","Boolean","RightParen"]),Uu=new Set(["LeftParen","Semicolon","Question","Colon","Plus","Minus","Star","Slash","DotDot","Ampersand","Pipe","Caret","Tilde","AmpAmp","PipePipe","Bang","EqualEqual","BangEqual","Less","Greater","LessEqual","GreaterEqual","ColonEqual","Equal","PlusEqual","MinusEqual","StarEqual","SlashEqual"]),Fu=["==","!=","<",">","<=",">=","&&","||","+","-","*","/","..","?",":"],Xu=[":=","=","+=","-=","*=","/="],Yi=new Set(["!","<",">","=",":","+","-","*","/","&","|","^","?","."]);function Un(e){let t=e.source,n=Zi(t,e.cursorOffset),r=Kt({source:t,cursorOffset:n}),i=[];return r.kind==="identifier"&&(i.push(...$u(e,r)),Hu(e.attributeInfo,t,n)&&i.push(...zu(r.range))),(r.kind==="operator"||r.kind==="after-assignment-lhs")&&i.push(...ju(r.range,r.prefix)),r.kind==="after-assignment-lhs"&&i.push(...Ku(r.range,r.prefix)),Qu(i)}function Kt(e){let t=e.source,n=Zi(t,e.cursorOffset),r=qe(t).filter(u=>u.type!=="EndOfInput"),i=r.find(u=>u.start<=n&&n<=u.end);if(i?.type==="Identifier")return{kind:"identifier",prefix:i.text.slice(0,Math.max(0,n-i.start)),range:{start:i.start,end:i.end}};if(i&&(i.type==="Integer"||i.type==="Real"||i.type==="String"||i.type==="Boolean"))return{kind:"literal",range:{start:i.start,end:i.end}};let o=Zu(t,n),s=jt(r,o.start);if(o.start<o.end&&s&&Gi.has(s.type))return{kind:s.type==="Identifier"&&Hi(r,s)?"after-assignment-lhs":"operator",prefix:t.slice(o.start,n),range:o};let a=jt(r,n);return a&&Gi.has(a.type)&&a.end<=n?{kind:a.type==="Identifier"&&Hi(r,a)?"after-assignment-lhs":"operator",prefix:"",range:{start:n,end:n}}:!a||Uu.has(a.type)?{kind:"identifier",prefix:"",range:{start:n,end:n}}:{kind:"unknown",range:{start:n,end:n}}}function $u(e,t){let n=Wu(e),r=t.prefix.toLowerCase(),i=[];for(let[o,s]of n.enums)mt(o,r)&&i.push({label:o,kind:"enum",detail:`enum value ${s}`,replaceRange:t.range,sortText:`0-${o}`});for(let o of n.symbols.values())o.conflict||o.readable&&mt(o.name,r)&&i.push({label:o.name,kind:"identifier",detail:Gu(o),replaceRange:t.range,sortText:o.source.kind==="script-assignment"?`1-${o.name}`:`2-${o.name}`});for(let o of["true","false"])mt(o,r)&&i.push({label:o,kind:"value",detail:"bool",replaceRange:t.range,sortText:`3-${o}`});return i}function ju(e,t){return Fu.filter(n=>mt(n,t)).map(n=>({label:n,kind:"operator",detail:"script operator",replaceRange:e,sortText:`4-${n}`}))}function Ku(e,t){return Xu.filter(n=>mt(n,t)).map(n=>({label:n,kind:"operator",detail:"assignment operator",replaceRange:e,sortText:`5-${n}`}))}function zu(e){return[{label:"name := value",kind:"snippet",detail:"Declare local script variable",replaceRange:e,insertText:"${1:name} := ${2:value}",insertTextFormat:"snippet",sortText:"6-name := value"},{label:"name = value",kind:"snippet",detail:"Assign existing variable",replaceRange:e,insertText:"${1:name} = ${2:value}",insertTextFormat:"snippet",sortText:"6-name = value"}]}function Wu(e){let t=ae(e.environment),n=qe(e.source),r=ke(e.source);if(r.ok){let i=De({program:r.program,environment:t,attributeName:e.attributeName}),o=ae(e.environment);for(let s of i.introducedSymbols)s.source.kind==="script-assignment"&&(s.source.range.end>e.cursorOffset||o.symbols.set(s.name,s));return o}for(let i of n){if(i.type!=="Identifier")continue;if(i.end>e.cursorOffset)break;let o=Ju(n,i.end);o?.type==="ColonEqual"&&(o.end>e.cursorOffset||t.symbols.has(i.text)||t.symbols.set(i.text,{name:i.text,type:{kind:"unknown"},source:{kind:"script-assignment",attributeName:e.attributeName??"code",range:{start:i.start,end:i.end}},readable:!0,writable:!0}))}return t}function Gu(e){let t=Yu(e.type);switch(e.source.kind){case"port-remap":return`${t} from ${e.source.nodeType??"node"}.${e.source.portName}`;case"subtree-port":return`${t} from ${e.source.nodeType??"SubTree"}.${e.source.portName}`;case"script-assignment":return`${t} from earlier ${e.source.attributeName} declaration`;case"augmentation":return`${t} from augmentation`;case"enum":return`${t} enum`}}function Yu(e){switch(e.kind){case"number":case"string":case"bool":case"any":case"unknown":case"error":return e.kind;case"custom":return e.name}}function Hu(e,t,n){if(e?.expectedResult!=="ignored")return!1;let r=qe(t).filter(o=>o.type!=="EndOfInput"),i=jt(r,n);return!i||i.type==="Semicolon"}function Zu(e,t){let n=t;for(;n>0&&Yi.has(e[n-1]??"");)n-=1;let r=t;for(;r<e.length&&Yi.has(e[r]??"");)r+=1;return{start:n,end:r}}function jt(e,t){for(let n=e.length-1;n>=0;n-=1){let r=e[n];if(r.end<=t)return r}}function Hi(e,t){if(t.type!=="Identifier")return!1;let n=jt(e,t.start);return!n||n.type==="Semicolon"}function Ju(e,t){return e.find(n=>n.start>=t&&n.type!=="EndOfInput")}function mt(e,t){return t.length===0||e.toLowerCase().startsWith(t.toLowerCase())}function Zi(e,t){return Math.max(0,Math.min(e.length,t))}function Qu(e){let t=new Set;return e.filter(n=>{let r=`${n.kind}:${n.label}:${n.insertText??""}`;return t.has(r)?!1:(t.add(r),!0)})}var Ji=new WeakMap;function zt(e,t){let n=e.getNodeUsage(t),r=n.model.status==="resolved"?n.model.model.id:n.nodeType;return t.attributes.flatMap(i=>{let o=Re({elementName:t.name,attributeName:i.name,resolvedNodeType:r});return o?[{attribute:i,info:o,parseResult:ke(i.value)}]:[]})}function re(e,t,n){return fe(e.document,t,n)}function Qi(e){return{start:0,end:e.value.length}}function ye(e,t){let n=e.getTreeNodeView(t),r=n?.behaviorTree;return!n||!r?zt(e,t).map(i=>{let o=eo(e,[]);return{...i,environment:o,analysis:i.parseResult.ok?De({program:i.parseResult.program,environment:o,attributeName:i.attribute.name}):void 0}}):ed(e,r).filter(i=>i.node.element===t).map(i=>({...i.candidate,environment:i.environmentBefore,analysis:i.analysis}))}function ed(e,t){let n=Ji.get(e.view);n||(n=new WeakMap,Ji.set(e.view,n));let r=n.get(t);if(r)return r;let i=t.nodes.flatMap(s=>zt(e,s.element).map((a,u)=>({id:`${s.path.join(".")}:${a.attribute.name}:${u}`,node:s,candidate:a}))),o=ct({baseEnvironment:eo(e,t.nodes),entries:i.map(s=>({id:s.id,source:s.candidate.attribute.value,attributeName:s.candidate.attribute.name,originId:s.id,parseResult:s.candidate.parseResult}))}).flatMap((s,a)=>{let u=i[a];return u?[{...s,node:u.node,candidate:u.candidate}]:[]});return n.set(t,o),o}function eo(e,t){let n=W(e.semantic),r=[],i=t[0]?.behaviorTree.id;if(i){let o=e.getNodeModel(i);if(o?.kind==="SubTree")for(let s of o.ports){let a=Ve(s),d=Y(e.semantic,a)?.canonical??a;r.push({name:s.name,type:Ce(n,a),source:{kind:"subtree-port",nodeType:i,portName:s.name,direction:s.direction},readable:!0,writable:s.direction==="output"||s.direction==="inout",compatibilityKey:d})}}for(let o of t){let s=o.usage.model.status==="resolved"?o.usage.model.model.id:o.usage.nodeType;for(let a of o.portBindings){if(a.usage.status!=="resolved")continue;let u=K(a.usage.port.name,a.usage.value);if(!u)continue;let d=Ve(a.usage.port),c=Y(e.semantic,d)?.canonical??d,m=a.usage.port.direction;r.push({name:u,type:Ce(n,d),source:{kind:"port-remap",nodeType:s,portName:a.usage.port.name,direction:m},readable:m==="input"||m==="output"||m==="inout",writable:m==="output"||m==="inout",compatibilityKey:c})}}return lt({symbols:r,augmentations:et(e.semantic),areTypesCompatible:(o,s)=>o&&s?me(e.semantic,o,s):!0})}var to=I({name:"script/no-unknown-variable",create(e){return{Element(t){for(let n of ye(e,t))if(n.analysis)for(let r of n.analysis.unknownIdentifiers)e.report({code:S.UnknownScriptVariable,message:`unknown script variable \`${r.name}\``,range:re(e,n.attribute,r.range),details:{primaryLabel:`\`${r.name}\` is not defined in the script environment`,help:"introduce it earlier with `:=`, add a matching blackboard remap, or define a script enum in btxml.model-augment.json"}})}}}});var no=I({name:"script/valid-assignment",create(e){return{Element(t){for(let n of ye(e,t))if(n.analysis)for(let r of n.analysis.diagnostics){let i=r.code==="assignment-to-unknown-variable"?S.AssignmentToUnknownVariable:r.code==="invalid-compound-assignment"?S.InvalidCompoundAssignment:r.code==="variable-type-mismatch"?S.ScriptVariableTypeMismatch:void 0;i&&e.report({code:i,message:r.message,range:re(e,n.attribute,r.range),details:r.details})}}}}});var ro=I({name:"script/valid-expression-type",create(e){return{Element(t){for(let n of ye(e,t))if(n.analysis)for(let r of n.analysis.diagnostics)r.code==="invalid-operand-type"&&e.report({code:S.InvalidScriptOperandType,message:r.message,range:re(e,n.attribute,r.range),details:r.details})}}}});var io=I({name:"script/valid-result-type",create(e){return{Element(t){for(let n of ye(e,t)){if(n.info.expectedResult!=="bool-compatible"||!n.parseResult.ok||!n.analysis)continue;let r=n.parseResult.program.statements.at(-1),i=n.analysis.finalType;!r||!i||Ie(i)||e.report({code:S.ScriptResultNotBoolCompatible,message:`script result for \`${n.attribute.name}\` is not bool-compatible`,range:re(e,n.attribute,r.range),details:{primaryLabel:"script result is not bool-compatible here",help:"return a boolean or numeric expression, or move side effects into a postcondition/script node"}})}}}}});var oo=I({name:"script/valid-syntax",create(e){return{Element(t){for(let n of zt(e,t))if(!n.parseResult.ok)for(let r of n.parseResult.errors){let i=r.kind==="empty-script"?S.EmptyScript:r.kind==="invalid-token"?S.InvalidScriptToken:S.InvalidScriptSyntax;e.report({code:i,message:r.message,range:r.kind==="empty-script"?n.attribute.valueContentRange??n.attribute.valueRange??re(e,n.attribute,Qi(n.attribute)):re(e,n.attribute,r.range),details:{primaryLabel:`invalid script in \`${n.attribute.name}\``}})}}}}});var so=[oo,to,no,ro,io];var td={unused:"suppression/no-unused","missing-reason":"suppression/require-reason"};function ao(e){return I({name:td[e],create(t){return{ProgramExit(){for(let n of t.getSuppressionIssues(e))t.report({message:n.message,range:n.range,data:nd(n)})}}}})}function nd(e){return e.code?{code:e.code}:void 0}var uo=[ao("unused"),ao("missing-reason")];function Wt(e,t){return e.attributes.find(n=>n.name===t)}var lo=[I({name:"tree/require-id",create(e){return{Element(t){t.name!=="BehaviorTree"||Wt(t,"ID")||e.report({message:"BehaviorTree must have ID attribute",range:t.range})}}}}),I({name:"tree/no-duplicate-id-in-file",create(e){let t=new Set;return{ProgramExit(){let n=Je(e.semantic,e.document.uri);for(let r of n?.behaviorTrees??[])r.idRange&&(t.has(r.id)&&e.report({message:`Duplicate BehaviorTree ID: ${r.id}`,range:r.idRange}),t.add(r.id))}}}}),I({name:"tree/no-duplicate-id",create(e){return{ProgramExit(){if(e.config.resolver.behaviorTreeIds!=="allow-ambiguous")for(let t of Qe(e.semantic)){let n=ee(e.semantic,t);if(n.length<=1||new Set(n.map(o=>o.uri)).size<=1)continue;let i=n.filter(o=>o.uri===e.document.uri);i.length>0&&e.report({message:`Duplicate BehaviorTree ID: ${t}`,range:i[0]?.idRange})}}}}}),I({name:"tree/no-unknown-main-tree",create(e){return{Document(){let t=e.document.root;if(e.document.kind!=="bt-document"||!t)return;let n=Wt(t,"main_tree_to_execute");!n?.value||Sn(e.semantic,n.value)||e.report({message:`main_tree_to_execute references unknown BehaviorTree: ${n.value}`,range:n.range})}}}}),I({name:"tree/no-unknown-subtree",create(e){return{Element(t){if(t.name!=="SubTree")return;let n=e.getSubTreeCallView(t),r=n?.node.element.attributes.find(o=>o.name==="ID")??Wt(t,"ID");!r||n?.target.status==="resolved"||e.resolveSubTree(r.value,e.document.uri).status!=="unresolved"||e.report({message:`unknown subtree \`${r.value}\``,range:r.valueContentRange||r.valueRange})}}}}),I({name:"tree/no-ambiguous-subtree",create(e){return{Element(t){if(t.name!=="SubTree")return;let n=Wt(t,"ID");if(!n||e.getSubTreeCallView(t)?.target.status==="resolved")return;let i=e.resolveSubTree(n.value,e.document.uri);i.status!=="ambiguous"||i.behaviorTrees.length<=1||e.report({message:`ambiguous subtree \`${n.value}\``,range:n.valueContentRange||n.valueRange})}}}}),I({name:"tree/no-duplicate-node-model-id",meta:{description:"TreeNodesModel elements must have unique IDs within the same model block."},create(){return{}}})];var rd=new Map([["IfThenElse",{min:2,max:3}],["WhileDoElse",{min:2,max:3}]]);function id(e,t){return e===t?String(e):`${e}\u2013${t}`}var co=I({name:"model/valid-child-count",create(e){return{Element(t){if(te(t))return;let n=e.getNodeUsage(t);n.model.status==="resolved"&&od(e,t,n.model.model.id,n.model.model.kind)}}}});function od(e,t,n,r){let i=Bi(t).length,o=rd.get(n);if(o){if(i<o.min||i>o.max){let s=id(o.min,o.max);e.report({message:`\`${n}\` requires ${s} child node(s), but has ${i}.`,range:t.range})}return}if(r==="Action"||r==="Condition"){i>0&&e.report({message:`${r} node \`${n}\` must not have child nodes, but has ${i}.`,range:t.range});return}if(r==="Decorator"){i!==1&&e.report({message:`Decorator node \`${n}\` must have exactly 1 child node, but has ${i}.`,range:t.range});return}if(r==="Control"){i<1&&e.report({message:`Control node \`${n}\` must have at least 1 child node.`,range:t.range});return}r==="SubTree"&&i>0&&e.report({message:`SubTree node \`${n}\` must not have child nodes, but has ${i}.`,range:t.range})}var mo=I({name:"model/valid-port-value",create(e){return{Element(t){if(te(t))return;let n=e.getNodeUsage(t);if(!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of t.attributes){let i=e.getPortUsage(t,r.name);i?.status==="resolved"&&qt(e,{port:i.port,value:r.value,range:r.range,registry:W(e.semantic),typeDefinition:Y(e.semantic,i.port.type),allowRemap:!0,diagnosticCode:S.InvalidPortValueType,customLiteralDiagnosticCode:S.CustomLiteralRequiresValidator,portLabel:r.name})}}}}});var po=I({name:"model/require-port",create(e){return{Element(t){if(te(t))return;let n=e.getNodeUsage(t);if(!(n.tagForm==="subtree"&&n.allowsArbitraryAttributes)&&!(n.model.status!=="resolved"&&n.tagForm!=="subtree"))for(let r of n.ports)!r.required||n.portUsages.some(o=>o.name===r.name&&o.status==="resolved")||e.report({message:`missing required port \`${r.name}\``,range:t.range,details:n.tagForm==="subtree"?{primaryLabel:n.model.status==="resolved"?`node \`${n.model.model.id}\` requires port \`${r.name}\``:`SubTree requires port \`${r.name}\``,help:`add \`${r.name}="..."\` or provide a blackboard reference such as \`${r.name}="{value}"\``}:void 0})}}}});var fo=[I({name:"model/no-childless-control-shape-mismatch",create(e){return{Element(t){if(te(t)||!t.selfClosing)return;let n=e.getTreeNodeView(t);if(n?.model.status!=="resolved")return;let r=n.model.model.kind;r!=="Control"&&r!=="Decorator"||e.report({message:`${r} node \`${n.model.model.id}\` normally expects child nodes.`,range:t.range})}}}}),I({name:"model/no-leaf-block-shape",create(e){return{Element(t){if(te(t)||t.selfClosing||wi(t))return;let n=e.getTreeNodeView(t);if(n?.model.status!=="resolved")return;let r=n.model.model.kind;r!=="Action"&&r!=="Condition"&&r!=="SubTree"||e.report({message:`${r} node \`${n.model.model.id}\` should be self-closing or have no children.`,range:t.range})}}}})];var go=I({name:"model/no-unknown-node",create(e){return{Element(t){let n=e.getNodeUsage(t);if(n.tagForm==="root"||n.tagForm==="behavior-tree"||n.tagForm==="tree-nodes-model"||n.tagForm==="include"||n.tagForm==="model-definition"||n.tagForm==="subtree"||n.tagForm==="unknown-xml"||n.model.status==="resolved"||n.model.status==="ambiguous")return;let r=t.attributes.find(i=>i.name==="ID");e.report({message:`unknown node \`${n.nodeType??n.tagName}\``,range:r?.valueContentRange??r?.valueRange??t.range})}}}});var yo=I({name:"model/no-unknown-port",create(e){return{Element(t){if(te(t))return;let n=e.getNodeUsage(t);for(let r of n.portUsages){if(r.status!=="undeclared")continue;let i=n.ports.map(s=>s.name).sort(),o=i.length>=1&&i.length<=8?[`note: defined ports: ${i.map(s=>`\`${s}\``).join(", ")}`]:void 0;e.report({message:`unknown port \`${r.name}\``,range:r.attribute.range,details:n.tagForm==="subtree"?{primaryLabel:n.model.status==="resolved"?`node \`${n.model.model.id}\` does not define this port`:"SubTree does not define this port in strict mode",help:n.model.status==="resolved"?`remove \`${r.name}\` or add it to the \`${n.model.model.id}\` SubTree model`:`remove \`${r.name}\`, add it to a SubTree model, or set the \`model/no-unknown-port\` rule option \`subTreePorts\` to \`loose\``,notes:o}:void 0})}}}}});var So=[go,yo,po,mo,...fo,co];function sd(e,t){return e.attributes.find(n=>n.name===t)}function ad(e){let t=e.resolver.includes.elements;return new Set(["BehaviorTree","TreeNodesModel",...t.map(n=>n.name)])}var bo=[I({name:"xml/valid-root",create(e){return{Document(){let t=e.document.root;e.document.kind!=="bt-document"||!t||t.name==="root"||e.report({message:"Root element must be <root>",range:t.range})}}}}),{name:"xml/require-btcpp-format",code:S.MissingBTCPPFormat,defaultSeverity:"error",meta:{description:'Root element must declare BTCPP_format="4".'},create(e){return{Document(){let t=e.document.root;e.document.kind!=="bt-document"||!t||sd(t,"BTCPP_format")?.value==="4"||e.report({message:'Root element must have BTCPP_format="4"',range:t.range})}}}},I({name:"xml/no-unknown-top-level-element",meta:{description:"Top-level elements must be BehaviorTree, TreeNodesModel, or configured include elements."},create(e){return{Element(t){let n=e.document.root;e.document.kind!=="bt-document"||!n||t===n||!n.children.includes(t)||ad(e.config).has(t.name)||e.report({message:`Unknown top-level element: ${t.name}`,range:t.range})}}}})];var Fn=[...bo,...so,...lo,...Oi,...So,...Ei,...uo],dg=new Map(Fn.map(e=>[e.name,e]));function To(e){if(e!=="off")return e==="info"?C.Info:e==="warn"?C.Warning:C.Error}function vo(e,t){return xt(e.linter.rules[t])?.options??{}}function Ro(e){let t=xt(e.config.linter.rules[e.rule]);return To(t?t.severity:e.defaultSeverity)}function ho(e){let t=[],n=e.facts??ki(),r=e.rules?new Set(e.rules):void 0,i=[];for(let s of Fn){if(r&&!r.has(s.name))continue;let a=Ro({config:e.config,rule:s.name,defaultSeverity:s.defaultSeverity});if(!a)continue;let u=vo(e.config,s.name),d=s.optionsSchema?.safeParse(u),l=d?.success?d.data:u,c=Di({document:e.document,view:e.view,semantic:e.semantic,config:e.config,options:l,diagnostics:t,rule:s.name,code:s.code,severity:a,facts:n});i.push(s.create(c))}for(let s of i)s.Document?.();e.document.root&&xo(e.document.root,i);let o=Je(e.semantic,e.document.uri);for(let s of o?.treeNodesModel??[])for(let a of i)a.TreeNodeModel?.(s);for(let s of i)s.ProgramExit?.();return t.map((s,a)=>({diag:s,index:a})).sort((s,a)=>ud(s.diag,a.diag)||s.index-a.index).map(s=>s.diag)}function xo(e,t){for(let n of t)n.Element?.(e);for(let n of e.children)n.kind==="element"&&xo(n,t)}function ud(e,t){let n=e.range,r=t.range;return!n&&!r?0:n?r?n.start.line-r.start.line||n.start.character-r.start.character||n.end.line-r.end.line||n.end.character-r.end.character:-1:1}function Xn(e,t,n){if(e.kind==="invalid-xml"||e.kind==="generic-xml")return[...e.diagnostics];let r=[...e.diagnostics],i=n.documentView??ve(e,{semantic:t,config:n.config,policy:ce(n.config)});return r.push(...ho({document:e,view:i,semantic:t,config:n.config})),r}function ko(e){return e?.documents??[]}function dd(e,t){if(t.uri===e.uri)return!0;if(e.uri.startsWith("file://"))try{let n=new URL(e.uri).pathname;if(t.uri.startsWith("file://")&&new URL(t.uri).pathname===n||t.path&&(t.path.startsWith("file://")?new URL(t.path).pathname:t.path)===n)return!0}catch{return!1}return!1}function ld(e){let t=we();return e?{files:e.files??t.files,resolver:e.resolver??t.resolver,models:e.models??t.models,linter:e.linter??t.linter,formatter:e.formatter??t.formatter}:t}function ie(e,t){let n=it(e.document.text,{kind:e.document.languageId==="btcpp-xml"?"bt-xml":void 0,uri:e.document.uri,mode:"mode"in e?e.mode??"tolerant":"tolerant"}),r="workspace"in e?e.workspace:void 0,i=n.document?[n.document,...ko(r).filter(l=>!dd(e.document,l))]:ko(r),o=ld(e.config||t.config),s=ce(o),a=r?.nodeDefinitionModels??[],u=gn(i,{config:o,models:a,augmentations:t.augmentations}).index,d=n.document?ve(n.document,{semantic:u,config:o,policy:s}):void 0;return{document:e.document,parsed:n.document,documentView:d,diagnostics:n.document?Xn(n.document,u,{config:o,documentView:d}):n.diagnostics,partial:n.partial===!0,semantic:u,config:o,nodeUsagePolicy:s,workspace:r}}function Co(e,t,n){let r=e.positionAt(e.offsetAt({line:t,character:0}));return{range:R(r,r),newText:n}}function Io(e,t){let r=(t.fullRange?.start||t.range.start).offset;for(;r>0&&/[ \t]/.test(e.text[r-1]||"");)r-=1;return{range:R(e.positionAt(r),e.positionAt(t.range.end.offset)),newText:""}}function Do(e,t,n){let r=Math.max(t.openTagRange.end.offset-(t.selfClosing?2:1),t.openTagRange.start.offset),i=e.positionAt(r);return{range:R(i,i),newText:` ${n}=""`}}function Gt(e){return R(e.positionAt(0),e.positionAt(e.text.length))}function $n(e,t){let n=t.diagnostics||e.diagnostics,r=[],i=st(t.document.text,e.config.formatter);i.ok&&!i.skipped&&i.text!==t.document.text&&r.push({title:"Format document",kind:"source.format",edits:[{range:Gt(t.document),newText:i.text}]});for(let o of n){if(!o.range)continue;let s=G({document:t.document,parsed:e.parsed,position:o.range.start});if(o.code==="BT101_MISSING_REQUIRED_PORT"){let a=Math.min(o.range.start.offset+1,o.range.end.offset),u=e.parsed?.root&&Oe(e.parsed.root,a)||("element"in s?s.element:void 0);if(!u)continue;let d=L(e.semantic,{element:u,documentRoot:e.parsed?.root,uri:t.document.uri,config:e.config,policy:e.nodeUsagePolicy}),l=d.ports.find(c=>c.required&&!d.portUsages.some(m=>m.status==="resolved"&&m.name===c.name));l&&r.push({title:`Add missing port ${l.name}`,kind:"quickfix",diagnostics:[o],edits:[Do(t.document,u,l.name)]})}if(o.code==="BT102_UNKNOWN_PORT"&&"attribute"in s&&"element"in s&&s.attribute){let u=(s.element?L(e.semantic,{element:s.element,documentRoot:e.parsed?.root,uri:t.document.uri,config:e.config,policy:e.nodeUsagePolicy}):void 0)?.portUsages.find(l=>l.status==="undeclared"&&l.attribute===s.attribute),d=u?Io(t.document,s.attribute):void 0;d&&u&&r.push({title:`Remove unknown port ${s.attribute.name}`,kind:"quickfix",diagnostics:[o],edits:[d]})}if(o.code==="BT002_MISSING_BTCPP_FORMAT"&&e.parsed?.root){let a=t.document.positionAt(e.parsed.root.nameRange?.end.offset||e.parsed.root.openTagRange.end.offset-1);r.push({title:'Add BTCPP_format="4" to <root>',kind:"quickfix",diagnostics:[o],edits:[{range:R(a,a),newText:' BTCPP_format="4"'}]})}r.push({title:`Suppress ${o.code} for next line`,kind:"quickfix",diagnostics:[o],edits:[Co(t.document,o.range.start.line,`<!-- btxml-disable-next-line ${o.code} reason: TODO -->
13
+ `)]})}return{actions:r}}function O(e,t,n,r,i){return{label:e,kind:t,detail:n,textEdit:r,insertText:e,sortText:e,...i}}function U(e,t){return e?{range:e,newText:t}:void 0}function Se(e){let t=new Set;return e.filter(n=>{let r=`${n.kind}:${n.label}:${n.insertText||""}`;return t.has(r)?!1:(t.add(r),!0)})}var cd=/^[A-Za-z_][A-Za-z0-9_./:-]*$/;function md(e){let t=e?.trim();if(t&&!(t.includes("{")||t.includes("}")))return cd.test(t)?t:void 0}function pd(e){let t=e?.trim();if(!t)return;let n=t.startsWith("{")&&t.endsWith("}")?t.slice(1,-1).trim():t;return md(n)}function Eo(e){return`{${e}}`}function Ne(e){return e?.trim().replace(/^const\s+/,"").replace(/[&*]\s*$/,"").replace(/\s+/g," ").toLowerCase()}function No(e,t){return!e||!t?!1:Ne(e)===Ne(t)}function Bo(e){let t=new Map;for(let n of e.documentView?.nodes??[])for(let r of n.portBindings){if(r.declaredPort.status!=="resolved")continue;let i=r.declaredPort.port;for(let o of r.blackboardReferences){let s=pd(o.key);if(!s)continue;let a={key:s,type:i.type,direction:i.direction,nodeType:n.usage.nodeType||n.tagName,portName:i.name},u=t.get(s);if(!u){t.set(s,a);continue}let d=Ne(u.type),l=Ne(a.type);if(d&&l&&d!==l){t.set(s,{...u,conflict:!0});continue}!d&&l&&t.set(s,{...u,type:a.type})}}return[...t.values()]}function fd(e,t,n){return R(e.positionAt(t),e.positionAt(n))}function gd(e,t,n){let r=t.valueContentRange;if(!r)return;let i=r.start.offset,o=r.end.offset,s=e.text.slice(i,o),a=s.startsWith("{"),u=s.endsWith("}");if(a&&n>i){let d=i+1,l=u?o-1:o;return{replacementRange:fd(e,d,Math.max(d,l)),wrapsReference:!1}}return{insertText:t.value,replacementRange:r,wrapsReference:!0}}function jn(e){let{document:t,attribute:n,cursorOffset:r,symbol:i,detail:o}=e,s=gd(t,n,r),a=Eo(i.key),u=s?.wrapsReference?a:i.key;return O(a,"Reference",o,s?{range:s.replacementRange,newText:u}:void 0,{filterText:`${i.key} ${a}`,insertText:u})}var wo=new WeakMap;function Ue(e,t){let n=e.parsed?G({document:e.document,parsed:e.parsed,position:t}):void 0;if(!n||n.kind!=="attribute-value")return;let r=Gn(e,n.element,n.attribute);if(!r)return;let i=r.attribute.valueContentRange??r.attribute.valueRange,o=t.offset-i.start.offset,s=Yn(r.attribute,o),a=Kt({source:r.source,cursorOffset:s});if(a.kind!=="identifier"||s<a.range.start||s>a.range.end)return;let u=Lo(e,r),d=u.analysis?.resolvedIdentifiers.find(c=>c.access.range.start===a.range.start&&c.access.range.end===a.range.end&&c.resolution.kind!=="unknown");if(!d||d.resolution.kind==="unknown")return;let l=d.resolution.kind==="symbol"?{kind:"symbol",symbol:d.resolution.symbol}:d.resolution;return{attributeContext:r,range:Kn(e,r,a.range),reference:l,flowState:u,occurrence:{attributeContext:r,identifier:d.access,reference:l,documentRange:Kn(e,r,d.access.range)}}}function Mo(e,t){return Wn(e,t.attributeContext.behaviorTree).flatMap(r=>Sd(e,r).filter(i=>t.reference.kind==="enum"?i.reference.kind==="enum"&&i.reference.name===t.reference.name:bd(t.reference.symbol,i.reference)))}function Ao(e,t){return Wn(e,t)}function Po(e,t,n){let r=Gn(e,t,n);if(r)return Lo(e,r).environmentBefore}function _o(e){let t=zn(e.type);switch(e.source.kind){case"port-remap":return`${t} from ${e.source.nodeType??"node"}.${e.source.portName}`;case"subtree-port":return`${t} from ${e.source.nodeType??"SubTree"}.${e.source.portName}`;case"script-assignment":return`${t} from earlier ${e.source.attributeName} declaration`;case"augmentation":return`${t} from augmentation`;case"enum":return`${t} enum`}}function zn(e){return e.kind==="custom"?e.name:e.kind}function Lo(e,t){let r=Wn(e,t.behaviorTree).find(i=>i.id===t.id);if(!r)throw new Error(`missing script flow state for ${t.id}`);return r}function Wn(e,t){let n=wo.get(e);n||(n=new WeakMap,wo.set(e,n));let r=n.get(t);if(r)return r;let i=t.nodes.flatMap(a=>a.element.attributes.flatMap(u=>{let d=Gn(e,a.element,u);return d?[d]:[]})),o=i.map(a=>({id:a.id,source:a.source,attributeName:a.attribute.name,originId:a.id})),s=ct({baseEnvironment:yd(e,t.nodes),entries:o}).flatMap((a,u)=>{let d=i[u];return d?[{...a,context:d}]:[]});return n.set(t,s),s}function Gn(e,t,n){let r=e.documentView?.nodes.find(a=>a.element===t);if(!r)return;let i=r.usage.model.status==="resolved"?r.usage.model.model.id:r.usage.nodeType;if(!Re({elementName:t.name,attributeName:n.name,resolvedNodeType:i}))return;let s=t.attributes.indexOf(n);return{id:`${r.path.join(".")}:${n.name}:${s}`,node:r,element:t,attribute:n,source:n.value,behaviorTree:r.behaviorTree}}function yd(e,t){let n=W(e.semantic),r=[],i=t[0]?.behaviorTree.id;if(i){let o=H(e.semantic,i);if(o?.kind==="SubTree")for(let s of o.ports){let a=s.effectiveType??s.type,d=Y(e.semantic,a)?.canonical??a;r.push({name:s.name,type:Ce(n,a),source:{kind:"subtree-port",nodeType:i,portName:s.name,direction:s.direction},readable:!0,writable:s.direction==="output"||s.direction==="inout",compatibilityKey:d})}}for(let o of t){let s=o.usage.model.status==="resolved"?o.usage.model.model.id:o.usage.nodeType;for(let a of o.portBindings){if(a.declaredPort.status!=="resolved")continue;let u=Td(a);if(!u)continue;let d=a.declaredPort.port.type,c=Y(e.semantic,d)?.canonical??d,m=a.declaredPort.port.direction;r.push({name:u,type:Ce(n,d),source:{kind:"port-remap",nodeType:s,portName:a.declaredPort.port.name,direction:m},readable:m==="input"||m==="output"||m==="inout",writable:m==="output"||m==="inout",compatibilityKey:c})}}return lt({symbols:r,augmentations:et(e.semantic),areTypesCompatible:(o,s)=>o&&s?me(e.semantic,o,s):!0})}function Sd(e,t){return t.analysis?t.analysis.resolvedIdentifiers.flatMap(n=>{if(n.resolution.kind==="unknown")return[];let r=n.resolution.kind==="symbol"?{kind:"symbol",symbol:n.resolution.symbol}:n.resolution;return[{attributeContext:t.context,identifier:n.access,reference:r,documentRange:Kn(e,t.context,n.access.range)}]}):[]}function bd(e,t){if(t.kind!=="symbol")return!1;let n=t.symbol;return e.source.kind==="script-assignment"||n.source.kind==="script-assignment"?e.source.kind==="script-assignment"&&n.source.kind==="script-assignment"&&e.name===n.name&&e.source.originId===n.source.originId&&e.source.range.start===n.source.range.start&&e.source.range.end===n.source.range.end:(e.source.kind==="port-remap"||e.source.kind==="subtree-port")&&e.source.kind===n.source.kind?e.name===n.name&&e.source.portName===n.source.portName&&e.source.nodeType===n.source.nodeType:e.name===n.name&&e.source.kind===n.source.kind}function Kn(e,t,n){return fe(e.parsed??{originalText:e.document.text},t.attribute,n)}function Yn(e,t){let n=e.valueOffsets;if(!n||n.length===0)return t;if(t<=0)return 0;for(let r=1;r<n.length;r+=1){let i=n[r];if(i!==void 0&&i>=t){let o=n[r-1]??0;return t<=o?r-1:r}}return Math.max(0,n.length-1)}function Oo(e,t,n){let r=e.parsed??{originalText:e.document.text};return fe(r,t,n)}function Td(e){if(e.declaredPort.status==="resolved")return K(e.declaredPort.port.name,e.value)}function vd(e,t,n){let r=e.documentView?.nodes.find(o=>o.element===t)?.usage,i=r?.model.status==="resolved"?r.model.model.id:r?.nodeType;return Re({elementName:t.name,attributeName:n.name,resolvedNodeType:i})}function Vo(e,t,n,r){let i=vd(e,n,r);if(!i)return;let o=r.valueContentRange??r.valueRange,s=Po(e,n,r),a=Math.max(0,t.position.offset-o.start.offset);return Un({source:r.value,cursorOffset:Yn(r,a),environment:s,attributeName:r.name,attributeInfo:i}).map(d=>Rd(e,r,d))}function Rd(e,t,n){return O(n.label,hd(n.kind),n.detail,{range:Oo(e,t,n.replaceRange),newText:n.insertText??n.label},{insertText:n.insertText??n.label,insertTextFormat:n.insertTextFormat,filterText:n.filterText,sortText:n.sortText})}function hd(e){switch(e){case"identifier":return"Variable";case"enum":return"Enum";case"value":return"Value";case"operator":return"Keyword";case"snippet":return"Snippet"}}var Yt={enumLiteral:"0",boolLiteral:"1",matchingKey:"2",unknownKey:"3"};function qo(e){return!!(e?.valueContentRange&&e.valueRange&&(e.valueContentRange.start.offset!==e.valueRange.start.offset||e.valueContentRange.end.offset!==e.valueRange.end.offset))}function Uo(e,t){if(!e)return;let n=qo(e)?e.valueContentRange:e.valueRange;if(n)return U(n,qo(e)?t:`"${t}"`)}function Fo(e,t,n,r){let i=[],o=[];for(let s of Qe(e)){let a=ee(e,s),u=O(s,"Value","BehaviorTree ID",r?Uo(r,s):U(n,s));a.some(d=>d.uri===t)?i.push({...u,sortText:`0-${s}`}):o.push({...u,sortText:`1-${s}`})}return[...i,...o]}function xd(e){return O("SubTree","Class","Built-in subtree tag",U(e,"SubTree"),{sortText:"0-SubTree"})}function kd(e){if(e.kind!=="closing-tag-name")return[];let t=e.tagText;if(!t)return[];let n=e.tagNamePrefix||"";return t.toLowerCase().startsWith(n.toLowerCase())?[O(`${t}>`,"Value","Close current parent tag",U(e.replacementRange,`${t}>`))]:[]}function Cd(e,t){let n=[...["BehaviorTree","TreeNodesModel","include"].map(i=>O(i,"Class",void 0,U(t,i))),...["Action","Condition","Control","Decorator"].map(i=>O(i,"Class",void 0,U(t,i))),xd(t)],r=new Set;for(let i of Dt(e))i.id!=="SubTree"&&(r.has(i.id)||(r.add(i.id),n.push(O(i.id,"Class",void 0,U(t,i.id)))));return Se(n)}function Ht(e,t,n){return L(e.semantic,{element:n,documentRoot:e.parsed?.root,uri:t.document.uri,config:e.config,policy:e.nodeUsagePolicy})}function Hn(e,t){let n=new Set(e.element.attributes.map(r=>r.name));return e.ports.filter(r=>!n.has(r.name)).map(r=>O(r.name,"Property",`${r.direction}${r.type?` ${r.type}`:""}`,U(t,r.name)))}function Id(e,t,n){let r=[O("ID","Property",void 0,U(n,"ID"))];return r.push(...Hn(t,n)),r.filter(i=>!e.attributes.some(o=>o.name===i.label))}function Dd(e,t,n,r){if(!e)return[];if(Te(e.name)){let o=[];e.attributes.some(a=>a.name==="ID")||o.push(O("ID","Property",void 0,U(r,"ID")));let s=Ht(n,t,e);return o.push(...Hn(s,r)),o}return e.name==="SubTree"?Id(e,Ht(n,t,e),r):e.name==="include"?[O("path","Property",void 0,U(r,"path"))]:Hn(Ht(n,t,e),r)}function Ed(e,t,n,r){return Fo(t.semantic,e.document.uri,n,r)}function Nd(e,t,n,r){let i=[],o=new Set;for(let s of Dt(e))s.kind===t&&(o.has(s.id)||(o.add(s.id),i.push(O(s.id,"Value",`${t} node ID`,r?Uo(r,s.id):U(n,s.id)))));return i}function Bd(e,t,n){if(t.kind!=="attribute-value")return[];let{attribute:r,element:i}=t;if(!r||!i)return[];let o=Te(i.name);if(o&&r.name==="ID")return Nd(n.semantic,o,r.valueContentRange||r.valueRange,r);if(i.name==="SubTree"&&r.name==="ID")return Ed(e,n,r.valueContentRange||r.valueRange,r);if(i.name==="root"&&r.name==="main_tree_to_execute")return Fo(n.semantic,e.document.uri,r.valueContentRange||r.valueRange,r);if(i.name==="include"&&r.name==="path")return(n.workspace?n.workspace.documents.map(P=>P.path||P.uri).filter(P=>P.endsWith(".xml")):[]).map(P=>O(P,"File","XML file",U(r.valueContentRange||r.valueRange,P)));let s=Vo(n,e,i,r);if(s)return s;let a=Ht(n,e,i);if(o&&a.model.status!=="resolved")return[];let u=se(n.semantic,{element:i,documentRoot:n.parsed?.root,attributeName:r.name,uri:e.document.uri,config:n.config,policy:n.nodeUsagePolicy});if(u?.status!=="resolved")return[];let d=u.port,l=r.valueContentRange||r.valueRange,c=[];d.enum?.length&&c.push(...d.enum.map(E=>O(E,"Enum",d.type,U(l,E),{sortText:`${Yt.enumLiteral}-${E}`}))),(d.type||"").toLowerCase()==="bool"&&c.push(...["true","false"].map(E=>O(E,"Value","bool",U(l,E),{sortText:`${Yt.boolLiteral}-${E}`})));let m=Bo(n),f=Ne(d.type),x=m.filter(E=>!E.conflict&&No(d.type,E.type)),T=m.filter(E=>!E.conflict&&!Ne(E.type)&&f),D=x.map(E=>({...jn({document:e.document,attribute:r,cursorOffset:e.position.offset,symbol:E,detail:`${E.type||"unknown"} blackboard key from ${E.nodeType}.${E.portName}`}),sortText:`${Yt.matchingKey}-${E.key}`})),N=T.map(E=>({...jn({document:e.document,attribute:r,cursorOffset:e.position.offset,symbol:E,detail:`unknown-type blackboard key from ${E.nodeType}.${E.portName}`}),sortText:`${Yt.unknownKey}-${E.key}`}));return c.push(...D),c.push(...N),c.length>0?Se(c):(t.valuePrefix||"").includes("{")?Se(c):c}function Zn(e,t){let n=G({document:t.document,parsed:e.parsed,position:t.position});return n.kind==="comment"?{items:en.map(r=>O(r,"Reference","Diagnostic rule code"))}:n.kind==="attribute-value"?{items:Se(Bd(t,n,e))}:n.kind==="attribute-name"?{items:Se(Dd(n.element,t,e,n.attribute?.nameRange))}:n.kind==="tag-name"?{items:Se(Cd(e.semantic,n.element?.nameRange))}:n.kind==="closing-tag-name"?{items:Se(kd(n))}:{items:[]}}function Zt(e,t,n,r,i,o,s){if(!e)return[];let a=G({document:{uri:e.uri,languageId:"xml",version:0,text:e.originalText,positionAt:()=>n,offsetAt:()=>n.offset,getText:()=>e.originalText},parsed:e,position:n}),u="element"in a?a.element:void 0,d="attribute"in a?a.attribute:void 0,l=u?L(r,{element:u,documentRoot:e.root,uri:e.uri,config:i,policy:o}):void 0;if(u?.name==="SubTree"&&d?.name==="ID"){let c=l?.subtree?.target;if(c?.status==="resolved"&&c.kind==="behavior-tree"){let m=c.behaviorTree;if(m.idRange)return[{uri:m.uri,range:m.idRange}]}return c?.status==="ambiguous"?[...c.behaviorTrees,...c.definitions].map(m=>m.idRange?{uri:m.uri||e.uri,range:m.idRange}:m.range?{uri:m.uri||e.uri,range:m.range}:void 0).filter(m=>!!m):c?.status==="resolved"&&c.kind==="node-model"&&c.model.idRange?[{uri:c.model.uri||e.uri,range:c.model.idRange}]:[]}if(u?.name==="root"&&d?.name==="main_tree_to_execute")return ee(r,d.value).map(c=>c.idRange?{uri:c.uri,range:c.idRange}:void 0).filter(c=>!!c);if(u?.name==="include"&&d?.name==="path"&&s){let c=s.find(m=>m.uri===d.value||m.path===d.value||(m.path?m.path.endsWith(`/${d.value}`):!1));if(c?.root?.range)return[{uri:c.uri,range:c.root.range}]}if(d&&u){let c=t?_e(t,n):void 0;if(c?.declaredPort.status==="resolved"){let m=c.declaredPort.port;if(m.nameRange)return[{uri:m.uri||e.uri,range:m.nameRange}]}}if(a.kind==="tag-name"&&u&&l?.model.status==="resolved"){let c=l.model.model;if(c.idRange)return[{uri:c.uri||e.uri,range:c.idRange}];if(c.range)return[{uri:c.uri||e.uri,range:c.range}]}if(d?.name==="ID"&&l?.tagForm==="generic-node"&&l.model.status==="resolved"){let c=l.model.model;if(c.idRange)return[{uri:c.uri||e.uri,range:c.idRange}];if(c.range)return[{uri:c.uri||e.uri,range:c.range}]}return[]}function Jn(e,t){let n=Ue(e,t.position);if(n?.reference.kind==="symbol"){let r=n.reference.symbol;if(r.source.kind==="script-assignment"){let i=r.source,s=Ao(e,n.attributeContext.behaviorTree).find(a=>a.id===i.originId)?.context??n.attributeContext;return{locations:[{uri:e.document.uri,range:fe(e.parsed??{originalText:e.document.text},s.attribute,i.range)}]}}if(r.source.kind==="port-remap"){let i=r.source,o=e.documentView?.nodes.filter(a=>a.behaviorTree===n.attributeContext.behaviorTree).flatMap(a=>a.portBindings).filter(a=>a.declaredPort.status==="resolved").find(a=>a.declaredPort.port.name===i.portName&&a.declaredPort.port.direction===i.direction&&K(a.declaredPort.port.name,a.value)===r.name),s=o?.declaredPort.port.nameRange;if(s)return{locations:[{uri:o.declaredPort.port.uri||e.document.uri,range:s}]}}if(r.source.kind==="subtree-port"){let i=r.source,s=(i.nodeType?H(e.semantic,i.nodeType):void 0)?.ports.find(a=>a.name===i.portName&&a.direction===i.direction);if(s?.nameRange)return{locations:[{uri:s.uri||e.document.uri,range:s.nameRange}]}}}return{locations:Zt(e.parsed,e.documentView,t.position,e.semantic,e.config,e.nodeUsagePolicy,e.workspace?.documents)}}function Qn(e,t){return{diagnostics:e.diagnostics,document:e.parsed,partial:e.partial}}function Xo(e,t){let n=st(e.document.text,{indentWidth:t?.indentWidth,xmlDeclaration:t?.xmlDeclaration,blankLineBetweenBehaviorTrees:t?.blankLineBetweenBehaviorTrees,lineEnding:t?.lineEnding});return!n.ok||n.skipped?{edits:[],diagnostics:n.diagnostics}:n.text===e.document.text?{edits:[],diagnostics:[]}:{edits:[{range:Gt(e.document),newText:n.text}],diagnostics:[]}}function er(e,t){return Xo(t,e.config.formatter)}function $o(e){return[`**Port** \`${e.name}\``,"",`Direction: ${e.direction} `,`Type: \`${e.type||"unknown"}\` `,`Required: ${e.required?"yes":"no"}${e.description?`
14
+ Description: ${e.description}`:""}`].join(`
15
+ `)}function jo(e){let t=e.source==="builtin"?`${e.kind.toLowerCase()} node`:`${e.kind} node`;return`**${t[0].toUpperCase()}${t.slice(1)}** \`${e.id}\`${e.ports.length?`
16
+
17
+ Ports: ${e.ports.map(n=>`\`${n.name}\``).join(", ")}`:""}`}function wd(e,t){return`**SubTree** \`${e}\`
18
+
19
+ Resolves ambiguously across ${t.length} candidates:
20
+ ${t.map(n=>`- \`${n}\``).join(`
21
+ `)}`}function Md(e,t){return e.map(n=>{let r=n.uri||t,i=n.idRange?.start.offset??-1;return`${r}:${i}`})}function tr(e,t){let n=Ue(e,t.position);if(n){if(n.reference.kind==="enum")return{range:n.range,contents:`**Enum** \`${n.reference.name}\`
22
+
23
+ Value: \`${n.reference.value}\``};let u=n.reference.symbol;return{range:n.range,contents:[`**Script Symbol** \`${u.name}\``,"",`Type: \`${zn(u.type)}\``,`Source: ${_o(u)}`].join(`
24
+ `)}}let r=G({document:t.document,parsed:e.parsed,position:t.position}),i="element"in r?r.element:void 0,o="attribute"in r?r.attribute:void 0,s=i?L(e.semantic,{element:i,documentRoot:e.parsed?.root,uri:t.document.uri,config:e.config,policy:e.nodeUsagePolicy}):void 0;if(i?.name==="SubTree"&&o?.name==="ID"){let u=s?.subtree?.target;if(u?.status==="resolved"&&u.kind==="behavior-tree"){let d=u.behaviorTree;return{range:o.valueContentRange||o.valueRange,contents:`**SubTree** \`${o.value}\`
25
+
26
+ Resolves to \`BehaviorTree ID="${o.value}"\` in \`${d.uri}\`.`}}if(u?.status==="ambiguous"){let d=e.parsed?.uri||"workspace",l=Md([...u.behaviorTrees,...u.definitions],d);return{range:o.valueContentRange||o.valueRange,contents:wd(o.value,l)}}if(u?.status==="resolved"&&u.kind==="node-model")return{range:o.valueContentRange||o.valueRange,contents:`**SubTree** \`${o.value}\`
27
+
28
+ Resolves to SubTree model in \`${u.model.uri||e.parsed?.uri||"workspace"}\`.`}}if(o&&i){let u=e.documentView?_e(e.documentView,t.position):void 0;if(u?.declaredPort.status==="resolved")return{range:o.nameRange,contents:$o(u.declaredPort.port)};let d=se(e.semantic,{element:i,documentRoot:e.parsed?.root,attributeName:o.name,uri:t.document.uri,config:e.config,policy:e.nodeUsagePolicy});if(d?.status==="resolved")return{range:o.nameRange,contents:$o(d.port)}}let a=e.documentView?Nt(e.documentView,t.position):void 0;if(a&&a.usage.model.status==="resolved"){let u=a.usage.model.model;return{range:a.element.nameRange||a.element.openTagRange,contents:jo(u)}}return i&&s?.model.status==="resolved"?{range:i.nameRange||i.openTagRange,contents:jo(s.model.model)}:{}}function nr(e,t){return Tn(e.semantic,t).filter(n=>n.parentBehaviorTreeId&&n.idRange).map(n=>({uri:n.uri,range:n.idRange})).filter(n=>!!n.range)}function Ko(e){let t=new Set,n=[];for(let r of e){let i=`${r.uri}:${r.range.start.offset}:${r.range.end.offset}`;t.has(i)||(t.add(i),n.push(r))}return n}function Ad(e,t){let n=new Set;for(let r of t){let i=bn(e.semantic).find(s=>rr(r,{uri:s.uri,range:s.idRange}));i&&n.add(i.id);let o=Rn(e.semantic).find(s=>s.kind==="SubTree"&&(rr(r,{uri:s.uri,range:s.idRange})||rr(r,{uri:s.uri,range:s.range})));o&&n.add(o.id)}return[...n]}function rr(e,t){return t.uri===e.uri&&t.range?.start.offset===e.range.start.offset&&t.range?.end.offset===e.range.end.offset}function ir(e,t){let n=Ue(e,t.position);if(n)return{locations:Ko(Mo(e,n).map(u=>({uri:e.document.uri,range:u.documentRange})))};let r=e.parsed?G({document:t.document,parsed:e.parsed,position:t.position}):void 0,i=r&&"element"in r?r.element:void 0,o=r&&"attribute"in r?r.attribute:void 0;if(i?.name==="BehaviorTree"&&o?.name==="ID")return{locations:nr(e,o.value)};if(i&&o?.name==="ID"&&L(e.semantic,{element:i,documentRoot:e.parsed?.root,uri:t.document.uri,config:e.config,policy:e.nodeUsagePolicy}).tagForm==="model-definition"&&i.name==="SubTree")return{locations:nr(e,o.value)};let s=Zt(e.parsed,e.documentView,t.position,e.semantic,e.config,e.nodeUsagePolicy,e.workspace?.documents);if(s.length===0)return{locations:[]};let a=Ad(e,s);return a.length>0?{locations:Ko(a.flatMap(u=>nr(e,u)))}:{locations:[]}}function Pd(e,t){return e.attributes.find(n=>n.name===t)}function or(e){let t=e.name==="BehaviorTree"?Pd(e,"ID")?.value||"BehaviorTree":e.name,n=e.name==="BehaviorTree"?"Class":e.name==="TreeNodesModel"?"Namespace":e.name==="include"?"File":e.name==="SubTree"?"Reference":["input_port","output_port"].includes(e.name)?"Property":"Function",r=e.children.filter(i=>i.kind==="element").map(i=>or(i));return{name:t,detail:e.name,kind:n,range:e.range,selectionRange:e.nameRange||e.openTagRange,children:r.length>0?r:void 0}}function sr(e,t){return e.parsed?.root?{symbols:[or(e.parsed.root)]}:{symbols:[]}}function _d(e){return{diagnostics:e.diagnostics,partial:e.partial||void 0}}function Jt(e={}){return{getDiagnostics(t){return _d(Qn(ie(t,e),t))},getCompletions(t){return Zn(ie(t,e),t)},getHover(t){return tr(ie(t,e),t)},getDefinition(t){return Jn(ie(t,e),t)},getReferences(t){return ir(ie(t,e),t)},getDocumentSymbols(t){return sr(ie(t,e),t)},getCodeActions(t){return $n(ie(t,e),t)},getFormattingEdits(t){return er(ie(t,e),t)}}}var zo={line:0,character:0,offset:0},pt={start:zo,end:zo};function Ld(e){return e?Object.entries(e).filter(([,t])=>t!==void 0).map(([t,n])=>({name:t,value:n??"",range:pt,nameRange:pt,valueRange:pt})):[]}function Od(e,t){return{kind:"element",name:e,attributes:Ld(t),children:[],range:pt,openTagRange:pt,selfClosing:!0}}function Vd(e){return{capable:e==="Control"||e==="Decorator",reason:"model-kind",kind:e}}function ar(e){return e===null?"null":e===void 0?"undefined":typeof e=="string"?JSON.stringify(e):typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)?`[${e.map(t=>ar(t)).join(",")}]`:typeof e=="object"?`{${Object.entries(e).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${ar(r)}`).join(",")}}`:JSON.stringify(String(e))}function qd(e){return ar(e)}function Ud(e,t,n,r,i){let o=ie({document:e,workspace:t,config:r,mode:"tolerant"},{});return{document:e,documentVersion:e.version,workspace:t,workspaceVersion:n,configFingerprint:i,diagnostics:{diagnostics:o.diagnostics,partial:o.partial},parsed:o.parsed,semantic:o.semantic,config:o.config,nodeUsagePolicy:o.nodeUsagePolicy}}function Wo(e){let t=e?.root;if(!t)return!1;if(t.name==="BehaviorTree"||t.name==="TreeNodesModel")return!0;let n=t.children.some(o=>o.kind==="element"&&o.name==="BehaviorTree"),r=t.children.some(o=>o.kind==="element"&&o.name==="TreeNodesModel"),i=t.attributes.some(o=>o.name==="BTCPP_format"&&o.value==="4");return t.name==="root"&&(i||n||r)}function Go(e){return e.replaceAll("\\","/").replace(/\/$/,"")}function Yo(e,t){if(!t.startsWith("file://"))return;let n=Go(e),r=Go(Ye(t));if(r===n)return"";if(r.startsWith(`${n}/`))return r.slice(n.length+1)}function ur(e={}){let t=e,n=new Map,r=new Map,i=Jt(),o=[],s=e.config?mn(e.config).config:void 0;function a(){return t.getRuntimeState?.()}function u(){return a()?.workspace}function d(){return a()?.version??0}function l(p,y){let b=u(),k=d(),w=qd(y),_=r.get(p.uri);if(_&&_.documentVersion===p.version&&_.workspaceVersion===k&&_.document===p&&_.workspace===b&&_.configFingerprint===w)return _;let $=Ud(p,b,k,y,w);return r.set(p.uri,$),$}function c(p){if(p.parsed)return p.view||(p.view=Et(p.parsed,p.semantic,{config:p.config,policy:p.nodeUsagePolicy})),p.view}function m(p){return p.models||(p.models=hn(p.semantic)),p.models}function f(p){let y=u();return y?y.documents.some(b=>b.isBtXml&&b.uri===p):!1}function x(p){let y=P.getResolvedConfig();if(!y)return!1;let b=u()?.rootDir??e.configBasePath,k=b?Yo(b,p):void 0;return k!==void 0?Rt(y,k):pn(y,p)}function T(p,y){return p.languageId==="btcpp-xml"||y.parsed?.isBtXml===!0||Wo(y.parsed)||x(p.uri)||f(p.uri)}function D(p,y){return p.languageId==="btcpp-xml"||y.parsed?.isBtXml===!0||Wo(y.parsed)||f(p.uri)}function N(p){let y=n.get(p);if(!y)return;let b=P.getEffectiveConfigForDocument(y.uri),k=l(y,b);if(T(y,k))return{document:y,effectiveConfig:b,snapshot:k,emitDiagnostics:D(y,k)}}function E(p,y){let b=n.get(p);if(!b)return{diagnostics:[]};let k=l(b,y),w=c(k);return w?{view:w,diagnostics:k.diagnostics.diagnostics,partial:k.diagnostics.partial}:{diagnostics:k.diagnostics.diagnostics,partial:k.diagnostics.partial}}let P={openDocument(p,y,b=0,k="xml"){n.set(p,yt(p,y,b,k)),r.delete(p)},updateDocument(p,y,b=0,k="xml"){n.set(p,yt(p,y,b,k)),r.delete(p)},closeDocument(p){n.delete(p),r.delete(p)},getResolvedConfig(){return a()?.resolvedConfig??s},getEffectiveConfigForDocument(p){let y=this.getResolvedConfig();if(!y)return;let b=u()?.rootDir??e.configBasePath,k=b?Yo(b,p):void 0;return k!==void 0?ht(y,k):fn(y,p)},getDocument(p){return n.get(p)},getDiagnostics(p){let y=N(p);if(!y||!y.emitDiagnostics)return{diagnostics:[]};let b={diagnostics:y.snapshot.diagnostics.diagnostics};return y.snapshot.diagnostics.partial&&(b.partial=!0),b},getWorkspaceDiagnostics(){return{diagnostics:[...a()?.diagnostics??o]}},getSemanticDocumentView(p){let y=N(p);return y?E(p,y.effectiveConfig):{diagnostics:[]}},getNodeCatalog(p){let y=N(p);return y?{models:m(y.snapshot)}:{models:[]}},getSemanticNode(p,y){let b=N(p);return b?{node:E(p,b.effectiveConfig).view?.nodes.find(w=>w.nodeId===y)}:{}},getNodeUsageAt(p,y){let b=N(p);if(!b)return{};let k=c(b.snapshot);if(!b.snapshot.parsed||!k)return{};let w=Bt(k,y);return w?{node:w,usage:w.usage}:{}},getNodeModelById(p,y){let b=y??n.keys().next().value;return b?{model:this.getNodeCatalog(b).models.find(w=>w.id===p)}:{}},getChildCapability(p,y,b){if(y==="BehaviorTree")return{capable:!0,reason:"behavior-tree"};let k=Te(y);if(k==="Control")return{capable:!0,reason:"generic-control"};if(k==="Decorator")return{capable:!0,reason:"generic-decorator"};if(k==="Action"||k==="Condition")return{capable:!1,reason:"generic-leaf"};let w=N(p);if(!w)return{capable:!1,reason:"unknown-model"};let _=L(w.snapshot.semantic,{element:Od(y,b),documentRoot:w.snapshot.parsed?.root,uri:p,config:w.snapshot.config,policy:w.snapshot.nodeUsagePolicy});return _.model.status!=="resolved"?{capable:!1,reason:"unknown-model",modelId:_.nodeType}:{...Vd(_.model.model.kind),modelId:_.model.model.id}},getPortInfoAt(p,y){let b=N(p);if(!b)return{};let k=c(b.snapshot);if(!b.snapshot.parsed||!k)return{};let w=wt(k,y),_=this.getNodeUsageAt(p,y),$=_.node,g=w&&$?se(b.snapshot.semantic,{element:$.usage.element,documentRoot:b.snapshot.parsed.root,attributeName:w.portName,uri:p,config:b.snapshot.config,policy:b.snapshot.nodeUsagePolicy}):void 0;return{node:$,binding:w,port:w?.resolution.status==="resolved"?w.resolution.port:void 0,usage:g,nodeUsage:_.usage}},getFormattingEdits(p){let y=N(p);return y?i.getFormattingEdits({document:y.document,config:y.effectiveConfig}):{edits:[],diagnostics:[]}},getCompletions(p,y,b){let k=N(p);return k?i.getCompletions({document:k.document,position:y,workspace:u(),triggerCharacter:b,config:k.effectiveConfig}):{items:[]}},getHover(p,y){let b=N(p);return b?i.getHover({document:b.document,position:y,workspace:u(),config:b.effectiveConfig}):{}},getDefinition(p,y){let b=N(p);return b?i.getDefinition({document:b.document,position:y,workspace:u(),config:b.effectiveConfig}):{locations:[]}},getReferences(p,y){let b=N(p);return b?i.getReferences({document:b.document,position:y,workspace:u(),config:b.effectiveConfig}):{locations:[]}},getDocumentSymbols(p){let y=N(p);return y?i.getDocumentSymbols({document:y.document,workspace:u(),config:y.effectiveConfig}):{symbols:[]}},getCodeActions(p,y,b){let k=N(p);return k?i.getCodeActions({document:k.document,range:y,diagnostics:b,workspace:u(),config:k.effectiveConfig}):{actions:[]}},getLanguageService(){return i},dispose(){n.clear(),r.clear(),o.length=0}};return P}function iS(e={}){return ur(e)}export{iS as createBtEditorService,Jt as createLanguageService};
@@ -0,0 +1,12 @@
1
+ import { d as ConfigNormalizeResult, e as ConfigParseResult, a as RawBtxmlConfig, R as ResolvedBtxmlConfig, E as EffectiveFileConfig } from './types-BgqDzlJ8.js';
2
+
3
+ declare function normalizeBtxmlConfig(raw: unknown): ConfigNormalizeResult;
4
+
5
+ declare function parseBtxmlConfig(raw: unknown): ConfigParseResult;
6
+
7
+ declare function createInitConfig(): RawBtxmlConfig;
8
+
9
+ declare function getEffectiveConfigForFile(config: ResolvedBtxmlConfig, filePath: string): EffectiveFileConfig;
10
+ declare function getEffectiveConfigForUri(config: ResolvedBtxmlConfig, uri: string): EffectiveFileConfig;
11
+
12
+ export { getEffectiveConfigForUri as a, createInitConfig as c, getEffectiveConfigForFile as g, normalizeBtxmlConfig as n, parseBtxmlConfig as p };