{"_id":"@barbozaa/archguard","_rev":"9-0b33b1092784b034669f4c6a3afb67df","name":"@barbozaa/archguard","dist-tags":{"latest":"1.5.0"},"versions":{"1.0.0":{"name":"@barbozaa/archguard","version":"1.0.0","keywords":["static-analysis","architecture","code-quality","cli","typescript","linter","architecture-analysis","dependency-graph","circular-dependencies","code-analysis"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.0.0","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"bin/cli.js"},"dist":{"shasum":"1ac6a5f247e68f1e33a6af6adbb2f4950055be96","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.0.0.tgz","fileCount":4,"integrity":"sha512-VvU8bCfI6Vm46bvF9eUGko0Z71QtcRUEpVWW202U7DV0JC0WWCwTJL1hXex/cG8rLF4WnmKjQ1S1MXyDh7zpgA==","signatures":[{"sig":"MEUCIGHTGKoWLYyWXWwba6lZCbZXlYIvjmwjrLXsR+N2tvNTAiEAtprQcb+SqiZ3hPGlmsYg/vcbXLFiaMvUoRMhxBNEkIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161440},"type":"module","engines":{"node":">=18"},"gitHead":"26c2c74377715a71a1164a888028693cd46cf07a","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.6.2","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.0.0_1770252673814_0.3248959622480161","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@barbozaa/archguard","version":"1.0.1","keywords":["static-analysis","architecture","code-quality","cli","typescript","linter","architecture-analysis","dependency-graph","circular-dependencies","code-analysis"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.0.1","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"bin/cli.js"},"dist":{"shasum":"cdf6ef14e94767551f13776d41deff946a7e8420","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.0.1.tgz","fileCount":4,"integrity":"sha512-Vff/0X0XNQR5RqLdNlY5JQ2bZO7zMBgcduoiCfpLqgtD1Y0t6ijnXoJpVSF/IJHLCLqxJ0oZN2tKKV0Hgb/gRg==","signatures":[{"sig":"MEUCICQiPU7I5vgz6/lwpEDEvQ0wIzqdv5h1TxyYz/zLGK3wAiEA3qFLx1P4HWZ2wJzP7p1YtrzzUnYxbT1/tQeTdKuK7wg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161510},"type":"module","engines":{"node":">=18"},"gitHead":"fe64f582cc2f0556f22120b84b6954c6308c52e3","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.6.2","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.0.1_1770252878224_0.7548349725793981","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@barbozaa/archguard","version":"1.1.0","keywords":["static-analysis","architecture","code-quality","cli","typescript","linter","architecture-analysis","dependency-graph","circular-dependencies","code-analysis"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.1.0","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"bin/cli.js"},"dist":{"shasum":"6d08a1139aa6e715fe5a41c57642e7438b6ebdcb","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.1.0.tgz","fileCount":4,"integrity":"sha512-2wjLBOP8zHEiSJ0aQoOES+1EagsBqnBLPzBPhzwHzL4d6Bo1upkOmxSgP9ANrHHSSVCCH958lbxG5bk9Jj2/FA==","signatures":[{"sig":"MEUCIQCgbjo9j3uC/uKzaHHChjl3KuTqUOMbP38mbSzxVdgNTgIgPWiXds437MY3YHFN4tZD/MWKkiyrNzgLXzTa9sM5pKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209124},"type":"module","engines":{"node":">=18"},"gitHead":"79e6b9836223bd7fec12e3959834e42803b2e6ac","scripts":{"dev":"tsup --watch","test":"vitest run","build":"npm run typecheck && tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.6.2","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.1.0_1770354460831_0.465601119686359","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@barbozaa/archguard","version":"1.1.1","keywords":["static-analysis","architecture","code-quality","cli","typescript","linter","architecture-analysis","dependency-graph","circular-dependencies","code-analysis"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.1.1","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"bin/cli.js"},"dist":{"shasum":"11842e3468173599a707187527c4ce79399b8994","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.1.1.tgz","fileCount":4,"integrity":"sha512-kOYu/0Pr7cOtXrsMo+P2ogo+NW++mLgCKsPaxbSyrieq6wiYpPjPCCaePoyJ4IBL69RylY/xi3e6KnU+lZq2cA==","signatures":[{"sig":"MEQCIDNgPb06iTad+Ul29cH+UuNhCAc8wi3mqfSztkm0h2T5AiARejOpqtavrvZCDr5Ad5yY4eA8XTrZRMcavfPibMANUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209121},"type":"module","engines":{"node":">=18"},"gitHead":"79e6b9836223bd7fec12e3959834e42803b2e6ac","scripts":{"dev":"tsup --watch","test":"vitest run","build":"npm run typecheck && tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.6.2","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.1.1_1770354605501_0.16753582817138413","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@barbozaa/archguard","version":"1.3.0","keywords":["static-analysis","architecture","code-quality","cli","typescript","linter","architecture-analysis","dependency-graph","circular-dependencies","code-analysis"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.3.0","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"dist/cli.js"},"dist":{"shasum":"3fa0ec1251811ff4285404625f333dfe80544c39","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.3.0.tgz","fileCount":4,"integrity":"sha512-sbYVC9uMruTBzngzKkYZg4ODTDCSJhDRu/S+Ejlw8bNKMK5dR1Kb5lTdVgA4X8RHyxFaZy3wW6rmmJ+s9kMKNQ==","signatures":[{"sig":"MEUCIQCmD4pySVTlw4fSdmKbTRAw6zi5CYJsxT/Nzm5wxvSf4gIgP76sUB7FmnnoXOJKvCxYj51iCJO9zOV3fJ4O8bfyOfA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144350},"type":"module","engines":{"node":">=18"},"gitHead":"14ebe2936fa53aa7feb86f76cf01bd0e2ade6225","scripts":{"dev":"tsup --watch","test":"vitest run","build":"npm run typecheck && tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.12.1","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.3.0_1776305997336_0.4296206619594505","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@barbozaa/archguard","version":"1.3.1","keywords":["static-analysis","architecture","code-quality","cli","typescript","linter","architecture-analysis","dependency-graph","circular-dependencies","code-analysis"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.3.1","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"dist/cli.js"},"dist":{"shasum":"346b5809e2e5b424c86e82b1fbd7b9c0d9fdf0a8","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.3.1.tgz","fileCount":4,"integrity":"sha512-xYHi5z+fRX4Ji2GwEwQiZg+hNYEF8VJxiAxJtfFPpDa0Rl+8dh5zSiYCDcJgIJNEBLLJBtUI8wRu41lh7mCenQ==","signatures":[{"sig":"MEYCIQC5j485DTtFPpOYwqZ1XNVnaYFt9pHBMV/J6EKlGon40QIhAORHtrxBwNpoPbSonAEZDOfoSn7N3VnOVblrCatX3mVv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101086},"type":"module","engines":{"node":">=18"},"gitHead":"beda33e7cf13f0543f969bc14e63e6256f4c9a5b","scripts":{"dev":"tsup --watch","test":"vitest run","build":"npm run typecheck && tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.12.1","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.3.1_1776306460399_0.7103998872550557","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@barbozaa/archguard","version":"1.4.0","keywords":["static-analysis","architecture","code-quality","cli","typescript","architecture-analysis","dependency-graph","code-analysis","mcp","model-context-protocol","llm-tools"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.4.0","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"dist/cli.js","archguard-mcp":"dist/mcp-server.js"},"dist":{"shasum":"13b72788755ea08f0033bc775e5bcc5cd90bc157","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.4.0.tgz","fileCount":6,"integrity":"sha512-lOzpEb3kmwnVJW70AYRprA976A7qIxTYeIjIEFrZ8+NK8J1o4j8kMUGJCUENO4PdH3v57FADkN4xIOtlvjpqZw==","signatures":[{"sig":"MEUCID4g1JChQ1cIXuvKU9gFRcQY10m/osnr3Q09Az3bn/CBAiEAx27DueZVyjB6Z/RGCGI3GIX4oogG9419Em9ZJ+xHdIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127005},"type":"module","engines":{"node":">=18"},"gitHead":"c222c56482d8d1f7006585f03e994d060f70af0c","scripts":{"dev":"tsup --watch","test":"vitest run","build":"npm run typecheck && tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.12.1","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.4.0_1776309680893_0.735327171927532","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@barbozaa/archguard","version":"1.4.1","keywords":["static-analysis","architecture","code-quality","cli","typescript","architecture-analysis","dependency-graph","code-analysis","mcp","model-context-protocol","llm-tools"],"author":{"name":"barbozaa"},"license":"MIT","_id":"@barbozaa/archguard@1.4.1","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"homepage":"https://github.com/barbozaa/archguard#readme","bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"bin":{"archguard":"dist/cli.js","archguard-mcp":"dist/mcp-server.js"},"dist":{"shasum":"1c58feca45eea403c4b20ccf6d69ce003c5ea88e","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.4.1.tgz","fileCount":6,"integrity":"sha512-8GkNyMuWFozrqQdQqhTubTynQdDqGB7hda/aT9wmlolFZmfhfMkYqa3j3ynje2KjfyeMPnTMMC16uGg93jbTGQ==","signatures":[{"sig":"MEUCIBEamuvmYvrcKQ5JpRQZej2OP8vzTtRcB823o/CYeUB9AiEA7cW65syb5roQoq5shz6NcJC+oyLalc5NYtr8QTXDFwM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127174},"type":"module","engines":{"node":">=18"},"gitHead":"17b39f686579fe6fd192b99a689754e9fcef2994","scripts":{"dev":"tsup --watch","test":"vitest run","build":"npm run typecheck && tsup","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"repository":{"url":"git+https://github.com/barbozaa/archguard.git","type":"git"},"_npmVersion":"11.12.1","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cac":"^6.7.14","zod":"^3.22.4","ts-morph":"^21.0.1","cli-table3":"^0.6.3","picocolors":"^1.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1"},"_npmOperationalInternal":{"tmp":"tmp/archguard_1.4.1_1776310224576_0.6463468564570103","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@barbozaa/archguard","version":"1.5.0","description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","type":"module","bin":{"archguard":"dist/cli.js","archguard-mcp":"dist/mcp-server.js"},"scripts":{"build":"npm run typecheck && tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["static-analysis","architecture","code-quality","cli","typescript","architecture-analysis","dependency-graph","code-analysis","mcp","model-context-protocol","llm-tools"],"author":{"name":"barbozaa"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/barbozaa/archguard.git"},"bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"homepage":"https://github.com/barbozaa/archguard#readme","dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","cac":"^6.7.14","cli-table3":"^0.6.3","picocolors":"^1.0.0","ts-morph":"^21.0.1","zod":"^3.22.4"},"devDependencies":{"@types/node":"^20.11.5","@vitest/coverage-v8":"^1.6.1","tsup":"^8.0.1","typescript":"^5.3.3","vitest":"^1.2.0"},"engines":{"node":">=18"},"gitHead":"17b39f686579fe6fd192b99a689754e9fcef2994","_id":"@barbozaa/archguard@1.5.0","_nodeVersion":"24.14.1","_npmVersion":"11.12.1","dist":{"integrity":"sha512-8ElZb7xxTk34n0N5CHzj+IhI9Tyh3P2h7EEStALVYTF+3Gzjy246/k20m7nEFHHa7Lq5FtsIseexlfYKRF7OHA==","shasum":"be7599231ed5e613d7a68541fea4549ec2233978","tarball":"https://registry.npmjs.org/@barbozaa/archguard/-/archguard-1.5.0.tgz","fileCount":6,"unpackedSize":144584,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDavMJtTQpUbaj/jOiGyJwBOe2WUEM9/kUqNx05pevDXQIhANRRlUGxAOMrQn3X6fuBQPc3NDfl1YY02EZ3GrOMEWK4"}]},"_npmUser":{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"},"directories":{},"maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/archguard_1.5.0_1777599842570_0.8724668832214078"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-05T00:51:13.647Z","modified":"2026-05-01T01:44:02.867Z","1.0.0":"2026-02-05T00:51:14.002Z","1.0.1":"2026-02-05T00:54:38.408Z","1.1.0":"2026-02-06T05:07:40.993Z","1.1.1":"2026-02-06T05:10:05.649Z","1.3.0":"2026-04-16T02:19:57.486Z","1.3.1":"2026-04-16T02:27:40.546Z","1.4.0":"2026-04-16T03:21:21.053Z","1.4.1":"2026-04-16T03:30:24.715Z","1.5.0":"2026-05-01T01:44:02.763Z"},"bugs":{"url":"https://github.com/barbozaa/archguard/issues"},"author":{"name":"barbozaa"},"license":"MIT","homepage":"https://github.com/barbozaa/archguard#readme","keywords":["static-analysis","architecture","code-quality","cli","typescript","architecture-analysis","dependency-graph","code-analysis","mcp","model-context-protocol","llm-tools"],"repository":{"type":"git","url":"git+https://github.com/barbozaa/archguard.git"},"description":"Production-grade architecture analysis CLI that detects structural risks and assigns health scores","maintainers":[{"name":"barbozaa","email":"armando.barboza.ojeda@gmail.com"}],"readme":"# ArchGuard\n\n> **Architecture Intelligence Platform** for TypeScript/JavaScript projects.  \n> Detect structural decay, quantify coupling risk, and prevent architectural erosion before it becomes expensive.\n\n[![npm version](https://img.shields.io/npm/v/@barbozaa/archguard)](https://www.npmjs.com/package/@barbozaa/archguard)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](package.json)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue)](https://www.typescriptlang.org/)\n\n---\n\n## 🎯 What is ArchGuard?\n\n**ArchGuard is NOT a linter.** Use ESLint for code style. Use Prettier for formatting.\n\nArchGuard detects **architectural and design problems** that ESLint cannot — cross-file coupling, layer violations, parameter group smells, and code duplication patterns. It focuses exclusively on issues that require whole-project analysis.\n\n### Who is this for?\n\n**👨‍💼 Engineering Managers & Tech Leads**\n- Objective metrics on architecture quality and coupling risk\n- Data-driven decisions about refactoring priorities\n- Executive summary format for non-technical stakeholders\n\n**👨‍💻 Senior Engineers & Architects**\n- Enforce architectural boundaries automatically\n- Identify coupling hotspots and design smells\n- Guide refactoring with concrete, prioritized findings\n\n**👥 Development Teams**\n- Catch architectural issues before code review\n- Learn from actionable, specific feedback\n- CI/CD integration to block regressions\n\n---\n\n## 🚀 Quick Start\n\n```bash\n# Run instantly (no installation needed)\nnpx @barbozaa/archguard .\n\n# Install globally\nnpm install -g @barbozaa/archguard\n\n# Add as dev dependency\nnpm install --save-dev @barbozaa/archguard\n```\n\n```bash\n# Standard terminal report\narchguard .\n\n# Executive summary (great for planning sessions)\narchguard . --format executive\n\n# JSON output for CI/CD pipelines\narchguard . --format json\n\n# Fail CI if any violations found\narchguard . --fail-on-error\n\n# Use custom config file\narchguard . --config ./archguard.config.json\n\n# Compare architecture between branches (CI killer feature)\narchguard . --diff main\n\n# JSON diff for CI pipelines\narchguard . --diff main --format json --fail-on-error\n```\n\n---\n\n## 📋 Architecture Rules\n\nArchGuard analyzes your codebase with **6 specialized rules** in 3 categories. Every rule requires whole-project analysis — things ESLint cannot do.\n\n| Category | Rules | Multiplier |\n|----------|-------|-----------|\n| 🏗️ **Structural** | Layer Violations · Feature Boundaries | **1.2×** |\n| 🎨 **Design** | Too Many Imports · Shotgun Surgery · Data Clumps | **1.0×** |\n| 🧹 **Hygiene** | Duplicate Code | **0.5×** |\n\n---\n\n### 🏗️ Layer Violation — `critical`\n\nDetects imports that violate configured architectural layer boundaries.\n\n**Why it matters:** A UI file importing directly from infrastructure bypasses your application layer, creates tight coupling to implementation details, and makes the layer boundary meaningless.\n\n```typescript\n// ❌ BAD: Presentation layer importing Infrastructure directly\n// src/presentation/UserProfile.tsx\nimport { database } from '../../infrastructure/database/client';\n\n// ✅ GOOD: Go through Application layer\n// src/presentation/UserProfile.tsx\nimport { getUserById } from '../../application/user/queries';\n```\n\n**Configuration:**\n```json\n{\n  \"rules\": {\n    \"layerRules\": {\n      \"presentation\": [\"application\", \"domain\"],\n      \"application\": [\"domain\"],\n      \"domain\": [],\n      \"infrastructure\": [\"domain\"]\n    }\n  }\n}\n```\n\n> Layer detection is path-based. Layer names must match a directory segment (`presentation`, `application`, `domain`, `infrastructure`, `infra`, `ui`).\n\n---\n\n### 🏗️ Feature Boundary — `critical`\n\nEnforces horizontal isolation between feature modules. Prevents `features/auth` from importing `features/payments` unless explicitly allowed.\n\n**Why it matters:** Without feature boundaries, business features become entangled — making independent deployment, team ownership, and future extraction into separate packages impossible.\n\n```typescript\n// ❌ BAD: Auth feature importing directly from payments\n// src/features/auth/login.ts\nimport { validateCard } from '../../features/payments/validator';\n\n// ✅ GOOD: Use shared module or event-driven communication\n// src/features/auth/login.ts\nimport { notify } from '../../features/shared/events';\n```\n\n**Configuration:**\n```json\n{\n  \"boundaryRules\": {\n    \"enforce\": true,\n    \"boundaries\": [\n      { \"feature\": \"features/auth\",     \"allowImportsFrom\": [\"features/shared\"] },\n      { \"feature\": \"features/payments\",  \"allowImportsFrom\": [\"features/shared\", \"features/auth\"] },\n      { \"feature\": \"features/shared\",    \"allowImportsFrom\": [] }\n    ]\n  }\n}\n```\n\n> Feature matching uses path prefixes. A file at `features/auth/login.ts` belongs to the `features/auth` boundary.\n\n---\n\n### 🎨 Too Many Imports — `warning`\n\nDetects files with excessive import statements (default: >15).\n\n**Why it matters:** High import count is a reliable signal that a file has too many responsibilities and is tightly coupled to the rest of the codebase.\n\n| Count | Severity |\n|-------|----------|\n| > 25 | `critical` |\n| > 15 | `warning` |\n\n**Configuration:**\n```json\n{\n  \"rules\": {\n    \"too-many-imports\": {\n      \"maxImports\": 15\n    }\n  }\n}\n```\n\n---\n\n### 🎨 Shotgun Surgery — `info` / `warning`\n\nDetects exported symbols (classes, functions) used across many files (default: ≥5).\n\n**Why it matters:** When a single symbol is imported in dozens of files, any change to it forces modifications across the codebase — high blast radius, high regression risk.\n\n```typescript\n// ❌ BAD: OrderConfig used directly in 12 files\n// Changing it requires touching 12 files\n\n// ✅ GOOD: Introduce a facade or service\nexport class OrderService {\n  // Centralizes access — downstream files are insulated from changes\n}\n```\n\n| File count | Severity |\n|------------|----------|\n| ≥ 10 | `warning` |\n| ≥ 5 | `info` |\n\n**Configuration:**\n```json\n{\n  \"rules\": {\n    \"shotgun-surgery\": {\n      \"minFiles\": 5\n    }\n  }\n}\n```\n\n> Interfaces, type aliases, and enums are excluded (type-only symbols don't cause runtime coupling). Utility modules (`/utils/`, `/helpers/`, `/shared/`) are also excluded.\n\n---\n\n### 🎨 Data Clumps — `warning`\n\nDetects the same group of 3+ parameters appearing together in multiple functions (default: ≥3 occurrences).\n\n**Why it matters:** Repeating parameter groups signal a missing abstraction — those parameters belong together in a type or class.\n\n```typescript\n// ❌ BAD: Same 3 params in 5 functions\nfunction createReport(userId: string, startDate: Date, format: string) {}\nfunction validateReport(userId: string, startDate: Date, format: string) {}\nfunction sendReport(userId: string, startDate: Date, format: string) {}\n\n// ✅ GOOD: Extract into a type\ninterface ReportRequest { userId: string; startDate: Date; format: string; }\nfunction createReport(request: ReportRequest) {}\n```\n\n**Configuration:**\n```json\n{\n  \"rules\": {\n    \"data-clumps\": {\n      \"minOccurrences\": 3\n    }\n  }\n}\n```\n\n---\n\n### 🧹 Duplicate Code — `info` / `warning` / `critical`\n\nDetects identical code blocks (≥5 lines) appearing in multiple files.\n\n**Why it matters:** Duplicated logic means bugs must be fixed in multiple places and behavior drifts over time.\n\n| Files with duplicate | Severity |\n|----------------------|----------|\n| ≥ 5 files | `critical` |\n| ≥ 3 files | `warning` |\n| 2 files | `info` |\n\n**Configuration:**\n```json\n{\n  \"rules\": {\n    \"duplicate-code\": {\n      \"minLines\": 5\n    }\n  }\n}\n```\n\n> Test files are excluded from duplicate detection. Boilerplate patterns (closing braces + return statements) are filtered out to reduce false positives.\n\n---\n\n## ⚙️ Configuration\n\nCreate `archguard.config.json` in your project root:\n\n```json\n{\n  \"srcDirectory\": \"./src\",\n  \"rules\": {\n    \"too-many-imports\": { \"maxImports\": 15 },\n    \"shotgun-surgery\": { \"minFiles\": 5 },\n    \"data-clumps\": { \"minOccurrences\": 3 },\n    \"duplicate-code\": { \"minLines\": 5 },\n    \"layerRules\": {\n      \"presentation\": [\"application\", \"domain\"],\n      \"application\": [\"domain\"],\n      \"domain\": [],\n      \"infrastructure\": [\"domain\"]\n    }\n  },\n  \"boundaryRules\": {\n    \"enforce\": true,\n    \"boundaries\": [\n      { \"feature\": \"features/auth\",    \"allowImportsFrom\": [\"features/shared\"] },\n      { \"feature\": \"features/payments\", \"allowImportsFrom\": [\"features/shared\"] },\n      { \"feature\": \"features/shared\",   \"allowImportsFrom\": [] }\n    ]\n  }\n}\n```\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `srcDirectory` | `\".\"` | Directory to analyze |\n| `too-many-imports.maxImports` | `15` | Max import statements per file |\n| `shotgun-surgery.minFiles` | `5` | Min files for a symbol to flag |\n| `data-clumps.minOccurrences` | `3` | Min occurrences for a parameter group to flag |\n| `duplicate-code.minLines` | `5` | Min lines for a duplicate block |\n| `layerRules` | `{}` | Layer dependency rules |\n| `boundaryRules` | disabled | Feature isolation boundaries |\n\n---\n\n## 📈 Scoring System\n\nArchGuard calculates an **Architecture Health Score (0–100)**.\n\n### Formula\n\n```\narchitecturePenalty = structural.penalty × 0.50 + design.penalty × 0.35\narchitectureScore   = 100 − normalize(architecturePenalty)\n\nhygienePenalty      = hygiene.penalty\nhygieneScore        = 100 − normalize(hygienePenalty)\n\nscore               = architectureScore × 0.8 + hygieneScore × 0.2\n```\n\n### Normalization by project size\n\nPenalties are scaled down for larger projects to account for the fact that more code means proportionally more surface area for issues.\n\n| Project size | Normalization |\n|-------------|---------------|\n| ≤ 5,000 LOC | None (penalty applied as-is) |\n| 5k – 50k LOC | `penalty × (5000 / LOC)^0.3` |\n| 50k – 200k LOC | `penalty × (5000 / LOC)^0.4` |\n| > 200k LOC | `penalty × (5000 / LOC)^0.5` |\n\n### Status thresholds\n\n| Score | Status |\n|-------|--------|\n| 90–100 | ✨ Excellent |\n| 75–89 | 💚 Healthy |\n| 60–74 | ⚠️ Needs Attention |\n| 0–59 | 🚨 Critical |\n\n### Coupling metrics (informational)\n\nIn addition to the score, ArchGuard reports **Ca/Ce/Instability** (Robert Martin's package metrics):\n\n- **Ca (Afferent Coupling)** — how many modules depend on this module\n- **Ce (Efferent Coupling)** — how many modules this module depends on  \n- **Instability I = Ce/(Ca+Ce)** — 0 = stable, 1 = unstable\n- **Blast Radius** — top 5 modules by number of dependents\n\n---\n\n## 📊 Output Formats\n\n### Terminal (default)\n\nFull technical report for developers. Shows violation details, file locations, suggested fixes, and the full score breakdown.\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  ARCHGUARD — Analyzing my-project\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n📊 EXECUTIVE SUMMARY\n\n  Architecture Score: 82 / 100  ████████░░\n  Health Status:      💚 Healthy\n  Risk Level:         LOW\n  Primary Concern:    Too Many Imports — 3 issues\n\n  Category Breakdown:\n    ℹ️  Structural:  0 issues    0 pts      LOW\n    ⚠️  Design:      3 issues    -15.3 pts  MEDIUM\n    ℹ️  Hygiene:     2 issues    -4.1 pts   LOW\n```\n\n### Executive (`--format executive`)\n\nCondensed high-level view. Best for sprint planning, leadership updates, and refactoring prioritization.\n\n### JSON (`--format json`)\n\nMachine-readable structured output for CI/CD pipelines, custom tooling, and trend tracking.\n\n```bash\narchguard . --format json > architecture-report.json\n```\n\n---\n\n## 🔀 Architecture Diffing\n\nCompare architecture health between git branches — the killer feature for CI.\n\n```bash\n# Compare current branch against main\narchguard . --diff main\n```\n\n```\n  Architecture Diff Report\n  ────────────────────────────────────────────────────────────\n  Base branch:  main\n  Head branch:  feature/new-module\n  ────────────────────────────────────────────────────────────\n  Score:  95 → 92  (-3)\n  Violations:  2 → 5\n\n  ✗ 3 New Violations\n    • [warning] Too Many Imports: File has 18 imports (max: 15)\n      src/features/checkout/service.ts:1\n    ...\n\n  ✓ Resolved Violations\n    (none)\n\n  ↓ Verdict: Architecture DEGRADED\n```\n\nUse `--format json` for machine-readable output and `--fail-on-error` to block PRs that introduce new violations.\n\n---\n\n## 🤖 MCP Server (AI Integration)\n\nArchGuard includes a Model Context Protocol server, allowing LLMs (Cursor, Claude, etc.) to analyze your architecture directly.\n\n```bash\n# Run the MCP server from npm package\nnpm exec --yes --package=@barbozaa/archguard --call \"archguard-mcp\"\n```\n\n**Available tools:**\n\n| Tool | Description |\n|------|-------------|\n| `analyze_architecture` | Full analysis with score, violations, coupling metrics |\n| `get_violations` | Filtered violations by rule, severity, or file path |\n| `get_coupling_risk` | Ca/Ce/Instability metrics, hub detection, blast radius |\n| `explain_violation` | Detailed explanation of any rule (what, why, fix) |\n| `compare_branches` | Architecture diff between two git branches |\n\n**Cursor MCP config** (`~/.cursor/mcp.json`):\n```json\n{\n  \"mcpServers\": {\n    \"archguard\": {\n      \"command\": \"npm\",\n      \"args\": [\n        \"exec\",\n        \"--yes\",\n        \"--package=@barbozaa/archguard\",\n        \"--call\",\n        \"archguard-mcp\"\n      ]\n    }\n  }\n}\n```\n\n---\n\n## 🔌 CI/CD Integration\n\n### GitHub Actions\n\n```yaml\nname: Architecture Check\non: [pull_request]\n\njobs:\n  architecture:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n      - run: npx @barbozaa/archguard . --diff origin/main --fail-on-error\n```\n\n> `fetch-depth: 0` is required so git worktree can access the base branch.\n\n### Fail on critical only\n\n```bash\n# Only fail CI on critical violations (ignore info/warning)\nnpx @barbozaa/archguard . --format json | node -e \"\n  const r = require('fs').readFileSync('/dev/stdin','utf8');\n  const data = JSON.parse(r);\n  process.exit(data.violations.some(v => v.severity === 'critical') ? 1 : 0);\n\"\n```\n\n---\n\n## 🤝 Contributing\n\n```bash\ngit clone https://github.com/barbozaa/archguard.git\ncd archguard\nnpm install\nnpm test\nnpm run build\nnode dist/cli.js .\n```\n\nPull requests welcome. Please ensure `npm test` passes and `node dist/cli.js .` returns 100/100 before submitting.\n\n---\n\n## 📝 License\n\nMIT © barbozaa\n\n---\n\nBuilt with [ts-morph](https://github.com/dsherret/ts-morph) · [MCP SDK](https://github.com/modelcontextprotocol/typescript-sdk) · [cac](https://github.com/cacjs/cac) · [picocolors](https://github.com/alexeyraspopov/picocolors)\n","readmeFilename":"README.md"}