{"_id":"@abco20/btxml-checker","_rev":"6-c796c8f5f7086d58af5036a9a9e02ddc","name":"@abco20/btxml-checker","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@abco20/btxml-checker","version":"0.1.0","keywords":["behaviortree","behaviortree.cpp","btcpp","groot","xml","formatter","linter","vscode"],"license":"MIT","_id":"@abco20/btxml-checker@0.1.0","maintainers":[{"name":"abco20","email":"meijizifuyong@gmail.com"}],"homepage":"https://github.com/abco20/btxml-checker#readme","bugs":{"url":"https://github.com/abco20/btxml-checker/issues"},"bin":{"btxmlc":"dist/cli.js"},"dist":{"shasum":"1b8b3edcd3eb0243281cfe9ffe7f0c5bce924d15","tarball":"https://registry.npmjs.org/@abco20/btxml-checker/-/btxml-checker-0.1.0.tgz","fileCount":36,"integrity":"sha512-AKqV59WpWG4pNNYjwVF2i8hbsh28F9+ktLjCtZ8vDD2VsDVmdOVrXRoqkDkAqBCFZh15lu6zF8tz74fwVDZ3GQ==","signatures":[{"sig":"MEYCIQCBgaxfd0Dxx5yiqyfZdeWom7JatjaMBBfjRXNtkcN8XAIhAMb0vQcECNhjn6NPhCsPINAW481j/Px3liorJa5H7wlI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5911976},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./model":{"types":"./dist/model.d.ts","import":"./dist/model.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./editor":{"types":"./dist/editor.d.ts","import":"./dist/editor.js"},"./syntax":{"types":"./dist/syntax.d.ts","import":"./dist/syntax.js"},"./semantic":{"types":"./dist/semantic.d.ts","import":"./dist/semantic.js"},"./editor/node":{"types":"./dist/editor-node.d.ts","import":"./dist/editor-node.js"},"./schemas/btxml.nodes.schema.json":"./schemas/btxml.nodes.schema.json","./schemas/btxml.config.schema.json":"./schemas/btxml.config.schema.json"},"gitHead":"6a896848d3c7e82288c7fc2c04ec2bc6fed969dc","scripts":{"build":"tsup && node ../../scripts/copy-schemas.mjs --target schemas && node ../../scripts/copy-lsp-runtime.mjs --target dist"},"_npmUser":{"name":"abco20","email":"meijizifuyong@gmail.com"},"repository":{"url":"git+https://github.com/abco20/btxml-checker.git","type":"git","directory":"packages/btxml"},"_npmVersion":"11.6.2","description":"BehaviorTree.CPP XML checker and formatter.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"ajv":"^8.0.0","zod":"^4.0.0","yargs":"^18.0.0","ignore":"^7.0.5","picocolors":"^1.1.1","jsonc-parser":"^3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@btxml/core":"workspace:*","@btxml/model":"workspace:*","@btxml/config":"workspace:*","@btxml/syntax":"workspace:*","@btxml/project":"workspace:*","@btxml/analyzer":"workspace:*","@btxml/semantic":"workspace:*","@btxml/foundation":"workspace:*","@btxml/language-service":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/btxml-checker_0.1.0_1779380930112_0.73934503052589","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@abco20/btxml-checker","version":"0.1.1","keywords":["behaviortree","behaviortree.cpp","btcpp","groot","xml","formatter","linter","vscode"],"license":"MIT","_id":"@abco20/btxml-checker@0.1.1","maintainers":[{"name":"abco20","email":"meijizifuyong@gmail.com"}],"homepage":"https://github.com/abco20/btxml-checker#readme","bugs":{"url":"https://github.com/abco20/btxml-checker/issues"},"bin":{"btxmlc":"dist/cli.js"},"dist":{"shasum":"2380188a38247afbc7bfa8f150b6fc66f6799b17","tarball":"https://registry.npmjs.org/@abco20/btxml-checker/-/btxml-checker-0.1.1.tgz","fileCount":36,"integrity":"sha512-1evWGL4xB4Ofb+QS61OHoSJ7VQcpPyDt8eXu1rzRT5xDz7Rux98TQNJl7pJNvJHXDlJ2va2iIfzcqSRkp0MA9g==","signatures":[{"sig":"MEYCIQCn2qMAuxCgQ+xZkVVWlnyoAeTWi4rW6YmuRY41GUQ0fwIhAJjUqIKrPPcZBxBdwNcdO9wEeKYbxQ3tgYSS3T2W8xZo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abco20%2fbtxml-checker@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5925253},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./model":{"types":"./dist/model.d.ts","import":"./dist/model.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./editor":{"types":"./dist/editor.d.ts","import":"./dist/editor.js"},"./syntax":{"types":"./dist/syntax.d.ts","import":"./dist/syntax.js"},"./semantic":{"types":"./dist/semantic.d.ts","import":"./dist/semantic.js"},"./editor/node":{"types":"./dist/editor-node.d.ts","import":"./dist/editor-node.js"},"./schemas/btxml.nodes.schema.json":"./schemas/btxml.nodes.schema.json","./schemas/btxml.config.schema.json":"./schemas/btxml.config.schema.json"},"gitHead":"252b87d215212b2595051efd67d5d332d1a4a112","scripts":{"build":"tsup && node ../../scripts/copy-schemas.mjs --target schemas && node ../../scripts/copy-lsp-runtime.mjs --target dist"},"_npmUser":{"name":"abco20","email":"meijizifuyong@gmail.com"},"repository":{"url":"git+https://github.com/abco20/btxml-checker.git","type":"git","directory":"packages/btxml"},"_npmVersion":"10.9.8","description":"BehaviorTree.CPP XML checker and formatter.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.0.0","zod":"^4.0.0","yargs":"^18.0.0","ignore":"^7.0.5","picocolors":"^1.1.1","jsonc-parser":"^3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@btxml/core":"workspace:*","@btxml/model":"workspace:*","@btxml/config":"workspace:*","@btxml/syntax":"workspace:*","@btxml/project":"workspace:*","@btxml/analyzer":"workspace:*","@btxml/semantic":"workspace:*","@btxml/foundation":"workspace:*","@btxml/language-service":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/btxml-checker_0.1.1_1779415149237_0.4626547143524762","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@abco20/btxml-checker","version":"0.1.2","keywords":["behaviortree","behaviortree.cpp","btcpp","groot","xml","formatter","linter","vscode"],"license":"MIT","_id":"@abco20/btxml-checker@0.1.2","maintainers":[{"name":"abco20","email":"meijizifuyong@gmail.com"}],"homepage":"https://github.com/abco20/btxml-checker#readme","bugs":{"url":"https://github.com/abco20/btxml-checker/issues"},"bin":{"btxmlc":"dist/cli.js"},"dist":{"shasum":"2d34b7ae3b7a64a5042d28bf559fad540ec58b60","tarball":"https://registry.npmjs.org/@abco20/btxml-checker/-/btxml-checker-0.1.2.tgz","fileCount":36,"integrity":"sha512-Tchzej+dsU8rPekB74Yj0ZZaeJgXGuGfz4McQKfbV3+Fy8XUYac6hsRbxLuF4u2QsIRaO0ooC8zjQnHxxW3m4A==","signatures":[{"sig":"MEYCIQC903EFxlQgsExbkpmuQr+af/VBzxutOrsdsPBHrlogBQIhAP3ujkZkFOzojhTHTf3XqhXU+WeS72Hmz91aH6MNIqYu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abco20%2fbtxml-checker@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6060170},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./model":{"types":"./dist/model.d.ts","import":"./dist/model.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./editor":{"types":"./dist/editor.d.ts","import":"./dist/editor.js"},"./syntax":{"types":"./dist/syntax.d.ts","import":"./dist/syntax.js"},"./semantic":{"types":"./dist/semantic.d.ts","import":"./dist/semantic.js"},"./editor/node":{"types":"./dist/editor-node.d.ts","import":"./dist/editor-node.js"},"./schemas/btxml.nodes.schema.json":"./schemas/btxml.nodes.schema.json","./schemas/btxml.config.schema.json":"./schemas/btxml.config.schema.json"},"gitHead":"f538f2a0f2e44702790bec841ba299116c5565c3","scripts":{"build":"tsup && node ../../scripts/copy-schemas.mjs --target schemas && node ../../scripts/copy-lsp-runtime.mjs --target dist"},"_npmUser":{"name":"abco20","email":"meijizifuyong@gmail.com"},"repository":{"url":"git+https://github.com/abco20/btxml-checker.git","type":"git","directory":"packages/btxml"},"_npmVersion":"10.9.8","description":"BehaviorTree.CPP XML checker and formatter.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.0.0","zod":"^4.0.0","yargs":"^18.0.0","ignore":"^7.0.5","picocolors":"^1.1.1","jsonc-parser":"^3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@btxml/core":"workspace:*","@btxml/model":"workspace:*","@btxml/config":"workspace:*","@btxml/syntax":"workspace:*","@btxml/project":"workspace:*","@btxml/analyzer":"workspace:*","@btxml/semantic":"workspace:*","@btxml/foundation":"workspace:*","@btxml/language-service":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/btxml-checker_0.1.2_1779443532710_0.20543263135363388","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@abco20/btxml-checker","version":"0.1.3","keywords":["behaviortree","behaviortree.cpp","btcpp","groot","xml","formatter","linter","vscode"],"license":"MIT","_id":"@abco20/btxml-checker@0.1.3","maintainers":[{"name":"abco20","email":"meijizifuyong@gmail.com"}],"homepage":"https://github.com/abco20/btxml-checker#readme","bugs":{"url":"https://github.com/abco20/btxml-checker/issues"},"bin":{"btxmlc":"dist/cli.js"},"dist":{"shasum":"1c40c4ca14db1d7629261a696b48076626bca402","tarball":"https://registry.npmjs.org/@abco20/btxml-checker/-/btxml-checker-0.1.3.tgz","fileCount":36,"integrity":"sha512-xi6F5mb4O53sDg+QUHmkQ3CR63tn9ZR93Agdauf8x0ZoxR+pNkGRBHowQD/4tXw22brp1kUKmOn1VviVAW8/3Q==","signatures":[{"sig":"MEUCIQCHwG9tuOQqewypn0ImlismrAWd+1qcpsgGk4QJdVF3qwIgOKtr1aIHQ5RJU31qkzzIQdPY59QRyrCIEWyWWncSzFs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abco20%2fbtxml-checker@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6117882},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./model":{"types":"./dist/model.d.ts","import":"./dist/model.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./editor":{"types":"./dist/editor.d.ts","import":"./dist/editor.js"},"./syntax":{"types":"./dist/syntax.d.ts","import":"./dist/syntax.js"},"./semantic":{"types":"./dist/semantic.d.ts","import":"./dist/semantic.js"},"./editor/node":{"types":"./dist/editor-node.d.ts","import":"./dist/editor-node.js"},"./schemas/btxml.nodes.schema.json":"./schemas/btxml.nodes.schema.json","./schemas/btxml.config.schema.json":"./schemas/btxml.config.schema.json"},"gitHead":"bf212ad39f19e29a49b43ddfb08f6c874075b512","scripts":{"build":"tsup && node ../../scripts/copy-schemas.mjs --target schemas && node ../../scripts/copy-lsp-runtime.mjs --target dist"},"_npmUser":{"name":"abco20","email":"meijizifuyong@gmail.com"},"repository":{"url":"git+https://github.com/abco20/btxml-checker.git","type":"git","directory":"packages/btxml"},"_npmVersion":"10.9.8","description":"BehaviorTree.CPP XML checker and formatter.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.0.0","zod":"^4.0.0","yargs":"^18.0.0","ignore":"^7.0.5","picocolors":"^1.1.1","jsonc-parser":"^3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@btxml/core":"workspace:*","@btxml/model":"workspace:*","@btxml/config":"workspace:*","@btxml/syntax":"workspace:*","@btxml/project":"workspace:*","@btxml/analyzer":"workspace:*","@btxml/semantic":"workspace:*","@btxml/foundation":"workspace:*","@btxml/language-service":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/btxml-checker_0.1.3_1779447549257_0.596872587056019","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@abco20/btxml-checker","version":"0.1.4","keywords":["behaviortree","behaviortree.cpp","btcpp","groot","xml","formatter","linter","vscode"],"license":"MIT","_id":"@abco20/btxml-checker@0.1.4","maintainers":[{"name":"abco20","email":"meijizifuyong@gmail.com"}],"homepage":"https://github.com/abco20/btxml-checker#readme","bugs":{"url":"https://github.com/abco20/btxml-checker/issues"},"bin":{"btxmlc":"dist/cli.js"},"dist":{"shasum":"f766803b1948c49076893f2ffcc955708dfa960e","tarball":"https://registry.npmjs.org/@abco20/btxml-checker/-/btxml-checker-0.1.4.tgz","fileCount":36,"integrity":"sha512-hNq4HOAZ2MH1+gBDh+Cm6+BHyFNQZtHa+CzZz6RNthwud4LS7xNVhOMIs3PQT2l0mOnTHxseW6+tQs3tdm+Qbg==","signatures":[{"sig":"MEUCIE+U1pWWbaCM6ExqVJWiCCkwSxAJxznKfUVCj3I9Wj+yAiEA56o/dHVWNO7eI0jcg09Io126Lk6tbTRWZIpJro4T/hQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abco20%2fbtxml-checker@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6118209},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./model":{"types":"./dist/model.d.ts","import":"./dist/model.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./editor":{"types":"./dist/editor.d.ts","import":"./dist/editor.js"},"./syntax":{"types":"./dist/syntax.d.ts","import":"./dist/syntax.js"},"./semantic":{"types":"./dist/semantic.d.ts","import":"./dist/semantic.js"},"./editor/node":{"types":"./dist/editor-node.d.ts","import":"./dist/editor-node.js"},"./schemas/btxml.nodes.schema.json":"./schemas/btxml.nodes.schema.json","./schemas/btxml.config.schema.json":"./schemas/btxml.config.schema.json"},"gitHead":"3bd1743e0007b64127c3617a033ebdb404fad271","scripts":{"build":"tsup && node ../../scripts/copy-schemas.mjs --target schemas && node ../../scripts/copy-lsp-runtime.mjs --target dist"},"_npmUser":{"name":"abco20","email":"meijizifuyong@gmail.com"},"repository":{"url":"git+https://github.com/abco20/btxml-checker.git","type":"git","directory":"packages/btxml"},"_npmVersion":"10.9.8","description":"BehaviorTree.CPP XML checker and formatter.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ajv":"^8.0.0","zod":"^4.0.0","yargs":"^18.0.0","ignore":"^7.0.5","picocolors":"^1.1.1","jsonc-parser":"^3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@btxml/core":"workspace:*","@btxml/model":"workspace:*","@btxml/config":"workspace:*","@btxml/syntax":"workspace:*","@btxml/project":"workspace:*","@btxml/analyzer":"workspace:*","@btxml/semantic":"workspace:*","@btxml/foundation":"workspace:*","@btxml/language-service":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/btxml-checker_0.1.4_1779450084082_0.22050563042197435","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@abco20/btxml-checker","version":"0.1.5","type":"module","license":"MIT","repository":{"type":"git","url":"git+https://github.com/abco20/btxml-checker.git","directory":"packages/btxml"},"homepage":"https://github.com/abco20/btxml-checker#readme","bugs":{"url":"https://github.com/abco20/btxml-checker/issues"},"keywords":["behaviortree","behaviortree.cpp","btcpp","groot","xml","formatter","linter","vscode"],"publishConfig":{"access":"public"},"engines":{"node":">=20"},"scripts":{"build":"tsup && node ../../scripts/copy-schemas.mjs --target schemas && node ../../scripts/copy-lsp-runtime.mjs --target dist"},"bin":{"btxmlc":"dist/cli.js"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./editor":{"types":"./dist/editor.d.ts","import":"./dist/editor.js"},"./editor/node":{"types":"./dist/editor-node.d.ts","import":"./dist/editor-node.js"},"./semantic":{"types":"./dist/semantic.d.ts","import":"./dist/semantic.js"},"./syntax":{"types":"./dist/syntax.d.ts","import":"./dist/syntax.js"},"./model":{"types":"./dist/model.d.ts","import":"./dist/model.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./rules":{"types":"./dist/rules.d.ts","import":"./dist/rules.js"},"./schemas/btxml.config.schema.json":"./schemas/btxml.config.schema.json","./schemas/btxml.nodes.schema.json":"./schemas/btxml.nodes.schema.json"},"dependencies":{"ajv":"^8.0.0","ignore":"^7.0.5","jsonc-parser":"^3.3.1","picocolors":"^1.1.1","yargs":"^18.0.0","zod":"^4.0.0"},"devDependencies":{"@btxml/analyzer":"workspace:*","@btxml/config":"workspace:*","@btxml/core":"workspace:*","@btxml/foundation":"workspace:*","@btxml/language-service":"workspace:*","@btxml/model":"workspace:*","@btxml/project":"workspace:*","@btxml/semantic":"workspace:*","@btxml/syntax":"workspace:*"},"_id":"@abco20/btxml-checker@0.1.5","gitHead":"de6b17477754af98b24dbc8a5211d3807d3d7424","description":"BehaviorTree.CPP XML checker and formatter.","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-KXfUwzaHkZIp2P8VvBCoEBfVx7qcj8lH4Uwqp0uPuYiGyidmx9MTFccF7Jg0s8LyT5n811HxbVShczU3M2XAzw==","shasum":"521443a87d8f2f8ef4425486fec23b36487cec80","tarball":"https://registry.npmjs.org/@abco20/btxml-checker/-/btxml-checker-0.1.5.tgz","fileCount":36,"unpackedSize":6169770,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abco20%2fbtxml-checker@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG7VBv+TNOFVXku4uozeOyjcgLdCfqrRP2Pv5JKM+gRNAiA6bhCo9bKNa4AKaGjJ5G1qVG1q2Wd1WCB0dqUT61T2CQ=="}]},"_npmUser":{"name":"abco20","email":"meijizifuyong@gmail.com"},"directories":{},"maintainers":[{"name":"abco20","email":"meijizifuyong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/btxml-checker_0.1.5_1779505015924_0.8105684082588671"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-21T16:28:49.887Z","modified":"2026-05-23T02:56:56.384Z","0.1.0":"2026-05-21T16:28:50.298Z","0.1.1":"2026-05-22T01:59:09.514Z","0.1.2":"2026-05-22T09:52:12.878Z","0.1.3":"2026-05-22T10:59:09.441Z","0.1.4":"2026-05-22T11:41:24.289Z","0.1.5":"2026-05-23T02:56:56.082Z"},"bugs":{"url":"https://github.com/abco20/btxml-checker/issues"},"license":"MIT","homepage":"https://github.com/abco20/btxml-checker#readme","keywords":["behaviortree","behaviortree.cpp","btcpp","groot","xml","formatter","linter","vscode"],"repository":{"type":"git","url":"git+https://github.com/abco20/btxml-checker.git","directory":"packages/btxml"},"description":"BehaviorTree.CPP XML checker and formatter.","maintainers":[{"name":"abco20","email":"meijizifuyong@gmail.com"}],"readme":"# btxml-checker\n\nBehaviorTree.CPP XML checker and formatter.\n\n## Installation\n\nInstall in a project:\n\n```bash\nnpm install --save-dev @abco20/btxml-checker\nnpx btxmlc check \"behavior_trees/**/*.xml\"\n```\n\nUse once without installing first:\n\n```bash\nnpx @abco20/btxml-checker check \"behavior_trees/**/*.xml\"\n```\n\n## CLI Usage\n\nCommands:\n\n- `btxmlc format` rewrites XML into Groot-compatible layout.\n- `btxmlc format --check` only reports whether formatting differs.\n- `btxmlc lint` checks XML syntax and BT rules.\n- `btxmlc lint --fix` applies safe, deterministic lint fixes.\n- `btxmlc check` runs format check and lint together.\n- `btxmlc repair` interactively resolves conflicting node model definitions.\n- `btxmlc init` creates a starter `btxml.config.json`.\n- `btxmlc explain <code>` shows documentation for a rule code.\n- `btxmlc doctor` diagnoses workspace health.\n\nBy default, `btxmlc format` formats only BehaviorTree.CPP XML files. Generic XML files such as `package.xml` are skipped unless `--force` is specified.\n\nUse `lint --fix` for safe automatic fixes:\n\n```bash\nnpx btxmlc lint --fix\n```\n\nUse `repair` for node model conflicts that require a choice:\n\n```bash\nnpx btxmlc repair\nnpx btxmlc repair --write\n```\n\n`btxmlc check` and `btxmlc lint` support `--output human` and `--output json`.\n\n```bash\nnpx btxmlc check --output json\nnpx btxmlc lint --output json\n```\n\n## Configuration\n\nPlace `btxml.config.json` in the root of your project.\n\nMinimal config:\n\n```json\n{\n  \"$schema\": \"https://unpkg.com/@abco20/btxml-checker/schemas/btxml.config.schema.json\"\n}\n```\n\nCommon project config:\n\n```json\n{\n  \"$schema\": \"https://unpkg.com/@abco20/btxml-checker/schemas/btxml.config.schema.json\",\n  \"files\": {\n    \"include\": [\"behavior_trees/**/*.xml\"]\n  },\n  \"resolver\": {\n    \"entrypoints\": [\"behavior_trees/main.xml\"]\n  },\n  \"models\": {\n    \"files\": [\"behavior_trees/models/**/*.xml\"],\n    \"definitions\": [\"behavior_trees/nodes.json\"]\n  },\n  \"linter\": {\n    \"rules\": {\n      \"model/no-unknown-port\": \"error\"\n    }\n  },\n  \"formatter\": {\n    \"indentWidth\": 2,\n    \"xmlDeclaration\": \"always\",\n    \"blankLineBetweenBehaviorTrees\": true,\n    \"lineEnding\": \"lf\"\n  }\n}\n```\n\nDisable bundled BT.CPP built-in node models if your project provides its own definitions:\n\n```json\n{\n  \"models\": {\n    \"builtins\": []\n  }\n}\n```\n\n## TypeScript API\n\nUse the public package exports only:\n\n```ts\nimport { checkBtWorkspace, formatBtXml, normalizeBtxmlConfig } from \"@abco20/btxml-checker\";\nimport { createBtEditorService, type BtEditorService } from \"@abco20/btxml-checker/editor\";\nimport { getNodeTypeFromElement, isGenericNodeTag } from \"@abco20/btxml-checker/semantic\";\n\nconst { config, ok, diagnostics } = normalizeBtxmlConfig({\n  strict: true,\n});\n\nif (!ok) {\n  throw new Error(diagnostics.map((diag) => diag.message).join(\"\\n\"));\n}\n\nconst result = await checkBtWorkspace(\n  {\n    inputs: [\n      {\n        uri: \"file:///workspace/behavior_trees/main.xml\",\n        path: \"behavior_trees/main.xml\",\n        kind: \"bt-xml\",\n        text: `<?xml version=\"1.0\"?>\\n<root BTCPP_format=\"4\"><BehaviorTree ID=\"Main\"/></root>`,\n      },\n    ],\n    config,\n  },\n);\n\nconsole.log(result.ok, result.summary.errors);\n\nconst service: BtEditorService = createBtEditorService();\nservice.openDocument(\"memory:///tree.xml\", `<root BTCPP_format=\"4\"><BehaviorTree ID=\"Main\"/></root>`);\n\nconst semantic = service.getSemanticDocumentView(\"memory:///tree.xml\");\nconst firstNode = semantic.view?.nodes[0];\nif (firstNode) {\n  console.log(getNodeTypeFromElement(firstNode.usage.element));\n  console.log(isGenericNodeTag(firstNode.tagName));\n}\n\nconsole.log(formatBtXml(`<root BTCPP_format=\"4\"><BehaviorTree ID=\"Main\"/></root>`));\n```\n\nAvoid importing internal modules or internal-only types such as parser internals, semantic indexes, or project index structures.\n\n## Limitations\n\nCDATA, DOCTYPE, non-declaration processing instructions, and unknown XML entities are unsupported in v0.1.\n\nSee the repository README and docs for the full configuration and rule reference.\n","readmeFilename":"README.md"}