#
tokens: 129903/50000 1/526 files (page 357/358)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 357 of 358. Use http://codebase.md/tosin2013/mcp-adr-analysis-server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .commitlintrc.json
├── .editorconfig
├── .eslintrc.json
├── .github
│   ├── AUTO-RELEASE-GUIDE.md
│   ├── auto-release.config.json
│   ├── dependabot.yml
│   ├── release-drafter.yml
│   └── workflows
│       ├── ai-release-notes.yml
│       ├── auto-release-on-merge.yml
│       ├── build.yml
│       ├── codeql-analysis.yml
│       ├── dependabot-auto-release.yml
│       ├── dependencies.yml
│       ├── deploy-docusaurus.yml
│       ├── lint.yml
│       ├── publish.yml
│       ├── release-drafter.yml
│       ├── security-scanning.yml
│       ├── test.yml
│       └── update-dashboard.yml
├── .gitignore
├── .gitleaks.toml
├── .husky
│   ├── pre-commit
│   └── pre-push
├── .npm-cache
│   ├── _cacache
│   │   ├── content-v2
│   │   │   └── sha512
│   │   │       ├── 03
│   │   │       │   └── aa
│   │   │       │       └── 7fa6effa7f205c0354d1cff1aa5983d58a996b7ed716da0642f6aefd9e0342280791fd7de070475740797828d5d5fb7c20209d423e4250dc81ccea572cc8
│   │   │       ├── 04
│   │   │       │   └── 72
│   │   │       │       └── 7f10aaee348a897ff41a86fc704195caca0390db9ea6c9e37f130f931dc01ae6af8f8f24d330c78d402e03670e40c1fbde96c52b03a07aecd28ca970dbcd
│   │   │       ├── 05
│   │   │       │   └── 1e
│   │   │       │       └── 43b4d472f80b30589102c80d7baa1503bebac267acd73827e4418e734a66fde815546e9540bf4dd6a5c8dcc2d0b088b6c800dc7781e6c739c5d89f5107a3
│   │   │       ├── 06
│   │   │       │   ├── 36
│   │   │       │   │   └── ac5238b13c5752f8d2a4ca9732c8de4f9a0f373a5b2dd3e73abc6a2fd1d8b04c4a3a9a076a551ea1c5c12016e87842b02ced173ef4ab8627d4d50a3d19ce
│   │   │       │   └── ce
│   │   │       │       └── 31fb3fed118c646f6e00945cceb9a34fecdd5adcad388f7f5669a78f520f94152c7b9705050d2b75271ad435ef9a02ef0076d755fb4a971560ee12af01aa
│   │   │       ├── 07
│   │   │       │   └── 9c
│   │   │       │       └── 64367edfde90cc006ec5f3bb7de4729249d8a6109e6623a81d91a3352eae9898510906396501c4ade6c1218f61a2a89bbd181585d158fc7f4821631e91b3
│   │   │       ├── 0a
│   │   │       │   └── e5
│   │   │       │       └── 1eac2045db1c8aebb0151acc0ca1816a3be8edf3c55498ca5db667c882c91dcdb2d06b3275d5f2f7b2d3a899ac30a2eda148d0b6de8a8b7bab545b939c25
│   │   │       ├── 0c
│   │   │       │   ├── 4b
│   │   │       │   │   └── d5d99176af6ffadd5fad2bc850beb4766469f5d2cac76d7be24e572fecaa73c3c8d688d4ea6d58233b7218f11c6bace505f153cc410172b18618bf4619c7
│   │   │       │   └── f7
│   │   │       │       └── b9a5515a02c8a749a57a42343a81d89e7560dc4426d4ba241f41adb099657bfb10bd6c6ba5188f3e4dd466a059003da05793c0ab01b9e56362129e2278ed
│   │   │       ├── 0d
│   │   │       │   ├── 45
│   │   │       │   │   └── 89af7f942e9e335e6a25fd266415fdc91ac4bdfd222ff98dd1b7ddff5233e90e99250797f57abe0edcf3886d4b9427715782ab5ed90ed2ad4eb302ac24f3
│   │   │       │   ├── 6b
│   │   │       │   │   └── 4980e8d959c39aa171daa68623bfec5c3d968e5d78a0d9d2773930f4d67dd7e0916e81dbf5740ca364b6e316d1866355a0a728d2f4ab857acfe89a0fbc3d
│   │   │       │   ├── a8
│   │   │       │   │   └── 60c4a2eb1b2e30279d36798085e5e115a314910a1d1d21efb968601a78bfac7b2cca627390009fa368b3d36ef75f0f53bb7ab05a745704f5440c96bb70e2
│   │   │       │   └── c4
│   │   │       │       └── 630c2ba32bf90293f7147bc5f3f194a99bc992de634da6d6be8c6080e944840df92d94dbe6d7e22e67d7937036cd938d411f0a471de5be37594a0b3e333b
│   │   │       ├── 0e
│   │   │       │   └── 84
│   │   │       │       └── ba988a9e094e474eedc514f9cc47bab77688bad0caf4ecd3b9661705bc3adc6f0a83799741b7753ef2ac98f307f4b80126e8caa67cdd487afd1facf842d5
│   │   │       ├── 11
│   │   │       │   └── 3c
│   │   │       │       └── d5f5465209faebee25f63e9010bca5a554329ecb0d2da692e3f85001c26a19be9576bd25986d6d89965521d8cf21826a95862f6846645a97866ddaebc8f7
│   │   │       ├── 13
│   │   │       │   └── fe
│   │   │       │       └── 41ffc9210c7229cb80999a03c1c4ea99e9c57b3bad67b57950b352fd0d5e2c8599a3dac95f26e215279550e4c24123b4bf4164476ce6d5eea9277a2ce45e
│   │   │       ├── 14
│   │   │       │   └── 98
│   │   │       │       └── 584680da89ab5f12450af072a589c9aeff7486143e75ab78ad2831a8493cac4090677ce7315391b19e113513ab2807be8c6d3d0c06d9ca26e5f2031fbde9
│   │   │       ├── 15
│   │   │       │   ├── d5
│   │   │       │   │   └── 9bc5ffd5b08ba922af15c5bede73eff1e4e91ea1fe37ecfd69c1b77566679c911d4211fb42c58b3967095cd58dcbc24f20436f4130241e1de1468365610d
│   │   │       │   ├── e7
│   │   │       │   │   └── 70d1a66f921ca7a0f625039597acc080326fa7496759b7a973250ece93c4ba43e56c1e61e94569dd55127c05ed196e47cf7392d1607fb95ebcd770478b45
│   │   │       │   └── f2
│   │   │       │       └── a8e7b707e5e9518303c730748c6ee0a0140aac2c0c1c360e3a7e09c3973c78a2d38f23929df83daee2fe7aea3568f9a19705d2f5ce53d3a701c0498f3264
│   │   │       ├── 16
│   │   │       │   ├── 1f
│   │   │       │   │   └── 6b18dd0ca08e191543727c554d538cbd2d4cfddeef7fd0afb22e00366f04688f133c254d43cafbcc05a6e764f060316444009bd4da38d5ceaf8bac552097
│   │   │       │   ├── 40
│   │   │       │   │   └── 4cc03faa6c641e32ed5c3879ee181eb1e32ccf8e1a3c6a9e56b5b109dbaba6860a955db85e90a5103be85910bd6f53dd9adf01f0769d0701ca80505e620e
│   │   │       │   ├── 76
│   │   │       │   │   └── 62b03e9b3ac2ad016d1c2e26de5d25f280e9f820e5333eb411c7320ad87d8fd403b83797bb1f53c0ae988397e083c5a2c30338d5f551502047d079ad6620
│   │   │       │   └── 90
│   │   │       │       └── c3f63e1e16b74a41b3552260bcd4e17f30731bcbc70d5170b5b885b1514c6949190b345113994f940dd20289e16008cca66d9f36df967a08025e6ddc15d7
│   │   │       ├── 17
│   │   │       │   ├── a7
│   │   │       │   │   └── a82deef4e79206e8790cdfaf87f07ccfde91a8387651bafd6d2097ee237b48abea1f9d4c29dbfbf95578912441b579fa6312bc2cf178543fe8a663fecb7e
│   │   │       │   └── e3
│   │   │       │       └── 35b4b84efa695068e5aca44f16b2d83ecfa3f0c7045df2843c21771e5b3f7691f0266a54d17f4123ae8b907a8ed0b2c10f7c29f4e41e0886cd4af5643fef
│   │   │       ├── 18
│   │   │       │   ├── 17
│   │   │       │   │   └── 2c6f66933d8224db098964aaebb84a14c275ad10bda78ae0d6066b062e3f676c3acc3457d01605912d328043e2b8af2affafa904fb4205724e71d0189edd
│   │   │       │   └── cc
│   │   │       │       └── 46c566c580d2b56df24eb14f496c62d30cc42ea9879071b0028c9404d1cca53c7f27e7b05b92922605872b322b7e9109391143c39757ff9cee0c5ee96bd4
│   │   │       ├── 1c
│   │   │       │   └── fc
│   │   │       │       └── 29188ce4976f265b266a1b9da38aa0c9d76c1a3f5d4f6b5946a22c9490812e30b04fd2878afc2f3d7ac6d7af1b24cb9c1eedd7ddf14e7c9e6d128005a957
│   │   │       ├── 1d
│   │   │       │   └── 38
│   │   │       │       └── 605604f39c56109b865b34b66e0bfeb2f6b04d676074fbc378d1983d84cf2c58603121897c729da17ba39321fc7831535a0670947ab1bc2b11455a98dbc8
│   │   │       ├── 1e
│   │   │       │   └── 93
│   │   │       │       └── 21f3ea1a86621d3ae4b968528a63a3f2a20f8535a655fd7c893aaedbe18170b051dee7261f75b21a948e24def5369d20ea97b62c92652c787b11ac9a883c
│   │   │       ├── 1f
│   │   │       │   └── 1b
│   │   │       │       └── e177266c2b98bff3d459b4e608fa2437800ac9b4dd6e69f1b8cde4c8435319f627ca5417a0c62131c11ab8ddab308c01bbcdded77501b31478037d52a2c4
│   │   │       ├── 20
│   │   │       │   └── de
│   │   │       │       └── b0e0f4f8d27d6a4f04764ae0520cf3dd978c855f06065f84e0e7591f6e4fb14688f083a26c0ab279d66799273bce2f96abdf74c0a9d6db9b290a7443aaa6
│   │   │       ├── 21
│   │   │       │   └── c8
│   │   │       │       └── 4d7fa74de2d1e8305227ffb384f0b599d7d63aabfebb0667fabe719112ff1149b0556fd2cf27111c9f0adcc17ea2c52bda886a2898052fbb8612c57ad583
│   │   │       ├── 22
│   │   │       │   ├── 5d
│   │   │       │   │   └── 3e6e813bc3f5de6d41f2063ae813e0db072391191f4a2a6213cdb47b3324386a4a4e4583ff6666e102bd031bb466981aa83a765dcb6425bda8c9d90039f6
│   │   │       │   └── df
│   │   │       │       └── bd43e119bfcdc65fadc88ec5d0e51220fc5160d3683f632fbe344309e1ee65344c0125a61caa86902199070998d5fa2046a296ce310a76bda954f2ab7ecc
│   │   │       ├── 23
│   │   │       │   └── 7d
│   │   │       │       └── 11c9d3be6e79f63d0cedbe8db9b6cc0f1fec050637a1546b666a0914efcc8c7704f055fd76c2700e17e01e3fc4b637cc43fb950f6c686451f3f2bd3fa6c1
│   │   │       ├── 24
│   │   │       │   ├── 6e
│   │   │       │   │   └── 701d2dbef953d94fc775ac26e8374d60c74e5e221e452dab052146a41e5b65eaa638e4bba6b2be1ff23951e04fd0d7e3481dc3290517fc4f227d48d0063f
│   │   │       │   └── 91
│   │   │       │       └── 3565ad4d45f0f351efc14f7d18e388db111fd7528201d413f939472e5a090b71720982f2cd78636067b5fdb154787e13b0198bd5a97b086d7db432edb8c0
│   │   │       ├── 25
│   │   │       │   └── 31
│   │   │       │       └── 7df54ffa5c88c2068d30aa4539b0ad7482561edbb31146c7f0a22ab9cf338464b1d4dc0dca08c6b95ff6b37a4611089d0797023472b0174bfe5d1074f30e
│   │   │       ├── 27
│   │   │       │   ├── ba
│   │   │       │   │   └── 7ade1462023c35343130c355bb8b7efe07222b3963b95d0400cd9dd539c2f43cdc9bc297e657f374e73140cf043d512c84717eaddd43be2b96aa0503881f
│   │   │       │   └── cc
│   │   │       │       └── 7ff9f02546d7f9b76029a3c43c960234a1c7afcecf2b1219560c52a7796787359a0657587250b34bf3167b668259f47ba5b7bc63a8c09f7e808103fc5901
│   │   │       ├── 28
│   │   │       │   ├── 5a
│   │   │       │   │   └── 94f127c3ab2e4cf2543dcf54148bba1a2436a0fdb2befabecbbdd43c121d33494a8b14a0f401b1362d03d6063c01f93a0b7c5039ddfe45671cbbd31e006c
│   │   │       │   └── 86
│   │   │       │       └── 0b08226085f1d9c6a8d8044eeb132d0e06e4dde710874bbb47560bc22e4c7b4ad2286b1c0d5b784200b80452315f79193e306fd0c66a7fbed113105ded44
│   │   │       ├── 29
│   │   │       │   ├── af
│   │   │       │   │   └── bd4ebbadbfb1bc33a593e927a2456cfbf762b9a84a881841b35ca84013ac4e58063aa4f1fc53ef48637a0232fea4a9398bb2fed787fdb0d918a091e3ccb2
│   │   │       │   └── b9
│   │   │       │       └── b63de994402dfb4aa2bebf8c8c4e7f85ef10a2d1432f36a3fcc355a9b86f1d6c7a1d23df0f9cf31de30cf4450d8a753e0592af3c5c5d2740953da44fad5d
│   │   │       ├── 2b
│   │   │       │   └── c4
│   │   │       │       └── 318a283459760f3737be2a0420bf3bd97864683ea1b7d5e3552be33ccd92d13186a76151c06c0426cd1a9b440c2310ccbe2812d7bdd5a1189a3054915f04
│   │   │       ├── 2f
│   │   │       │   └── 43
│   │   │       │       └── aba62f2a1a9446fff35df87f74bc507ede21e7b9ed734921a634e38287518b27bad4295c15d87be28e9846412d949a15197b04bd560bf1608760afe7c6d4
│   │   │       ├── 32
│   │   │       │   ├── 42
│   │   │       │   │   └── 82c319574e0cfa085a09c77a42c27d3b18aa77ebe699caefeed8b9f656b0390dc7720999004840c14ddf31e708534102f90a261fe29ad728b72041dbf6f6
│   │   │       │   ├── 50
│   │   │       │   │   └── a0bf72bb8f50802b1bc27dcdcbb2b57cdcfc7bbb7a08fd31f5b0c86082afbed10fa778ad4970f5dd0917df0c0680c1f9ddcf6af8948357afa9178ccbe6c4
│   │   │       │   ├── 95
│   │   │       │   │   └── 043763a876d533c6f29097bd9c505ed14391221ec1af4ac546d226bd73945b5862f6088e02ec4a4f4bc513048a659e5cd988db95e7ac3e16e371cb7b72d9
│   │   │       │   └── fe
│   │   │       │       └── d03dc4f0f2db74f9cdcce912a7b1e396ece6a35e14ecbb79361548bf368e5efa879c26b1794557b4796dc917d1ce9eead2d58df006ed72fa7db186976806
│   │   │       ├── 35
│   │   │       │   └── 64
│   │   │       │       └── 36ff779dce8c7028d4aa782f582b6ea57d5f3314ae9c284778255b682c3024b33a7516328f5df85e55ab35fa0239880111b0ea824e974922956f42a65f18
│   │   │       ├── 36
│   │   │       │   └── a7
│   │   │       │       └── 29fade5c4c1f018a71646605e23099e2407d0fb14b76939d455216dd7de2af738002706dae427898ffcfa1d58bfa2b36b843b943ecf415d33d2889c13432
│   │   │       ├── 37
│   │   │       │   └── e3
│   │   │       │       └── 1e5d8a2aaf7a4e827f317f244f44437b8076a42d88e1b07856193ddf58088be08900b74883c35e108a2126d9b137d1ce575f9ab416d000dc22b97fdfc152
│   │   │       ├── 38
│   │   │       │   └── e7
│   │   │       │       └── 210e087817609c84e5fde1c455aa1bf2edbdc015bfbfad05f2b309b39866a445f90c8285958df9cb5a4462adf2c47ee0f8cac556d7a797cf0b778c723328
│   │   │       ├── 39
│   │   │       │   └── b9
│   │   │       │       └── a7205e215cd83506a8671e681b0c44c5f1d2cf0a08195818e441f859a5bb3366762eaf90d49634dc0878a2e4b0b7279134c9e3bfd4b20cc87f94bc7420cb
│   │   │       ├── 3a
│   │   │       │   └── a9
│   │   │       │       └── 4b2189b9033e8e0452f291bf1628d8a260a95c48549720363efa716f86c7a0b0ce583f321496abdf76a10a5ae3c37b4b158a6ae3b60487d43a3f2dc91979
│   │   │       ├── 3c
│   │   │       │   └── 42
│   │   │       │       └── 06098e6d4a552de7472ac8c5df0b35fea0e3ea374bee1aa5b36dc276c6f9e4ce4ab8ea83a9cfb7506930c175f2026f8375e3e1804540f0d97576378b6fce
│   │   │       ├── 3d
│   │   │       │   ├── 70
│   │   │       │   │   └── 9e407e6f3f59d8bf9189580edf77bce75b0d73d1eaae1ea7f0c20e364f8f0fa94d555a9a24e394123b4417de5981f73d033b4512e2756c93bb197a62d026
│   │   │       │   └── f1
│   │   │       │       └── 792d00bfabe4a782198843daef29cf196e00d6be6021d201339cc4dff8375656be6fd60ee482860da519ccbdda237852e681b925604272bb81d8d6f4257c
│   │   │       ├── 3f
│   │   │       │   └── e5
│   │   │       │       └── 6ed6a5dfcde7628ab987382df1286018799b4f715f60efa5fec60d850f8b58811ef57b0300df9637b02cf7ce188dfddc1e7d1a495f4c81720c22d5f5cd40
│   │   │       ├── 40
│   │   │       │   └── 6c
│   │   │       │       └── 5d5813cf17bfca0a5e9bc1958f2a9dcb625db6c63d171adcb4846a4f33b0a08a831263cdf57fbfa19f97a06866a6aedab04b56eee9f213f453da1fe24f3c
│   │   │       ├── 41
│   │   │       │   └── 36
│   │   │       │       └── 2e0deb12d15b6e1cd36f321f828e5289e0b26272408c500aa3944dfe8fcc3e465469c325f76a91102861736d919da3b5cd1b5b576be6d0a8813b1c85d3db
│   │   │       ├── 42
│   │   │       │   └── 9f
│   │   │       │       └── 166d93817be6e5829b944fe970db185e2cff2ad286ad73d5299a27a61080b11af14b6261e6f50a30559187b499466d2e80eb227789589a77fd9c5639ce88
│   │   │       ├── 43
│   │   │       │   └── 46
│   │   │       │       └── b3719a32898bc593e5539cc01a560fbb1f2e869f334b88933568e90365a6817382299f68b60d5533d4631c22fb0bb778f3473fea6ca5e4a0fa752e1a66ba
│   │   │       ├── 45
│   │   │       │   └── b2
│   │   │       │       └── 514b85164059331d34f057298c4d4bfc12a6213a9f1d38ebe22e3dae82d4e25d1691412ec62c6c594cb2f58d684c7a84827f9ce671992a4e5f488987d771
│   │   │       ├── 47
│   │   │       │   └── 96
│   │   │       │       └── 71f6670946a78202c3ff887c52b9e731adf421cb47d1a5282140115de89f3a26448a89769a3059920fa60903de08c132f78ce0990db0b1eb376340ad1d6d
│   │   │       ├── 4b
│   │   │       │   └── b3
│   │   │       │       └── 88f6f6507f3628937e2977e64b60c8827c40969944b9fc4872e672a4c1f1af2c8c5088ebc1c912b8d3b98ae381869d5b789210d4c5ce3976fc52e02c6f36
│   │   │       ├── 4c
│   │   │       │   └── 28
│   │   │       │       └── 25551b7395f7d137144c132477e831812c9a5ebac15c80c543f4f644cc02a752cd65282817e6ef41982d9883e2cbf4c8190ee80516cd5597e269e2dfcf1b
│   │   │       ├── 50
│   │   │       │   └── e4
│   │   │       │       └── a1b0fc33ecdacc52a851eadd215a315dbaf3b36edbfbb680c7d7f848adf44d2030679c159dd02c094c6bd3a67815966c0609d3fdfd997fb55ac3a9cb98cd
│   │   │       ├── 51
│   │   │       │   └── c5
│   │   │       │       └── 5f55f68ae127389bb5f77544a81e8a3340604415e0c2fb3568d3ab7df317bc0b31d265905e90d5c7fadbb435a947a25709fd0006a92e3a1de7fb41704833
│   │   │       ├── 52
│   │   │       │   └── a9
│   │   │       │       └── 3e82c7f2c883d4ae09b0914cd26570a6eb14a5630f94eaff12e10cd6a445b42447a99e88451a3ec2585462a33a0df5de21124cecadbcace20fc819ef6f24
│   │   │       ├── 53
│   │   │       │   ├── 1e
│   │   │       │   │   └── 328065acbb673b8ac1567bc62ed5896e266a95871a8ad9c2d735003901c0b741f6c636933b7eed18f1bff3d7aa572e7171658bd685dddf84163d0cb982e9
│   │   │       │   └── 67
│   │   │       │       └── 3524cf804eb4a5a184fd2a5cb1c74ff43800a3b0b150bff1e03d9b5c17b20da7ccc388c7b4370b9f56d1a4fb68322457012d332d0f98728b420a950195db
│   │   │       ├── 54
│   │   │       │   └── 76
│   │   │       │       └── f38d9361ee93db65ec9e436476815c59fa45ad7ba18f8d2784b84e42a140d509f482d9bd8985073bcb5e2dd7695ae91e0d118e2b5d51c1f9a50dfa4209c5
│   │   │       ├── 56
│   │   │       │   └── cb
│   │   │       │       └── fb9056979bea6d1c3319ee2cda46c3fbd0682b5bd341346b30b7d39969504b944d123690eaf1ebbf5465f217dafb3346b32b75b2ece9585ecbb260b1731e
│   │   │       ├── 58
│   │   │       │   └── 42
│   │   │       │       └── e747c96d01e41476955b36960cdedd5179094ccd826e3c32a65468132a18f093f6db9655401ad49693f38cdbc20d31d5f978e8a69476ddea6b767c28d38e
│   │   │       ├── 59
│   │   │       │   ├── 01
│   │   │       │   │   └── 3c1d8e5428225103af34c913eae58ea0145d6932ee45bbf5014bef3d76912a96fcfe1006fa88d749cc57d159304cb378a7d177c01699fdac050cb048ff74
│   │   │       │   └── 8f
│   │   │       │       └── f74d4304d31dca3d875147110926f5d11d5e0fc8fa14b31b596bbf25c08b7045044785dd94f713ac71a4ff6137fcb825c8023789385055121ffb16d0fc5e
│   │   │       ├── 5f
│   │   │       │   └── 11
│   │   │       │       └── 407da4bcd54592ed39c7394f97f3b2fb205152456ead1fd34f89b2645e365d41703af669ef2540da0d08c99e450563440dac5d917f71eae214069883e9b1
│   │   │       ├── 61
│   │   │       │   └── 3d
│   │   │       │       └── 46a8f48bf24267db47637a5317eff713469fd8f70e48647bdfc504d51eb3aa6b6c8c97b8bf51f32a29153957b984c8a4eb5158095e13503d5086f0f04ba1
│   │   │       ├── 62
│   │   │       │   ├── 00
│   │   │       │   │   └── 697491cfc90d94139c7e8654977277a3cc0bc3d1bdb65363ae00ffbc3a79494fe3e358fc6d8261aa28a73e4604cceb753d80dd18ceb61cef5476593fe14c
│   │   │       │   └── 5c
│   │   │       │       └── 559b200fce09df6b6d7d026e684db52cfed15974235f7ee9b98206b82334f452e29f9e014f64e554b3aa61020003ec3bc31df28911e4b58c3e60efce4577
│   │   │       ├── 64
│   │   │       │   └── 19
│   │   │       │       └── a11350bd2dc3e81fd5d949dc223ed6cf1d944ec009cccbe90815056b9cc0b16380ae765cf78013a9ce29607348ce8116a24f7b0859fa4ca265b66abda8ad
│   │   │       ├── 68
│   │   │       │   ├── 64
│   │   │       │   │   └── f16e96e0f3f6f925f5351d74ab6c7df05d9b8b3c970d11c65014cc4bb37a12ce0b55bba9c53e46db18652f05c523295d98c81f56c7169ba3e1c41fdb5c45
│   │   │       │   └── c5
│   │   │       │       └── 933533de497fc54cbd70cd6feb0b322bac19a5400a287def6dcf6da202936e4d5adebd8d659df4e6ff66c732eb11074d53cd8357ae000135570a67d2f1b7
│   │   │       ├── 69
│   │   │       │   └── e3
│   │   │       │       └── 661e70716e2d92b746aee950550bb25716584b94e9ef20895e3cd9e2c943400a5ce6b4050463cfe90622b78878ee7ce97003e736d3ff239e0a3bc5cae0f0
│   │   │       ├── 6a
│   │   │       │   ├── 61
│   │   │       │   │   └── 84cabafdddcaf7f155acaf643b8e274cf2b3b0f6d4e3f2b3966012d50d977b74abcf00e70cd30d7e604cffd62539a3825d5075b7190dda35e960c0c092ff
│   │   │       │   └── 6a
│   │   │       │       └── 5357458344d33ab7d8a6c73b040d35996b0669cdf7100c5a0f6f2b6eb79633dccea6546372802233aecff1d2f8fb786751c173855c3e057ddcc36f9471da
│   │   │       ├── 6c
│   │   │       │   └── 1c
│   │   │       │       └── b3af5f9ea75ce4e15b9b784555895e7ddafbb69471360596393a7cde859a8e3a0a2037cd3e98db42a8f9219f6824949a8ea715a03e86134a78410aaa4e5d
│   │   │       ├── 6e
│   │   │       │   ├── 92
│   │   │       │   │   └── 31bead3789fe943705d9f874caef524b87800fbe75e7b4373a5ce5fc515ab85d039597b970a24d00bc897e6fcce00b0ddf49a55364ca403cf6a05db2a61d
│   │   │       │   └── e7
│   │   │       │       └── b01f332f60bdbd8dd7904d520b79c49a64a9edfd12568e8642179396eb467aeff1a648b06438533baa1d4f237cc536d25b6992f9790bb5bcb7daccec23e2
│   │   │       ├── 6f
│   │   │       │   └── a8
│   │   │       │       └── d2bf1bd59f2a6d0222e36e458b13f94e9d1e257d3b43025f9e502ed1672f9041673ac11cc8576084eb106e3260f1736a888a1b430990f934f38597b7d105
│   │   │       ├── 70
│   │   │       │   └── f1
│   │   │       │       └── 8d93b90989f0ea548b6fee279cc7109402a57c6d1c0466f79c2f19c2e8f4579e1a83507bf35f7ef365bc35cbc4d80a80ec4f9c3b0613e85884fcee89f2fe
│   │   │       ├── 72
│   │   │       │   └── a7
│   │   │       │       └── 9fb91b21d76a56c86b08a0128903d96e16ede6471080f8e459bc0e24b4b4b322e094b56571188b978a01303b9ff2c1614c67640418a5af9191b5cc33136a
│   │   │       ├── 74
│   │   │       │   └── d0
│   │   │       │       └── 2fb0045ff1cb4285d2d1716050b44ab3155593ae35372fabc4d5ad65d2240e88fa417fbf25e754d5f01cce0b1b10b94de1db3ae6db536dec534b31fe7771
│   │   │       ├── 75
│   │   │       │   ├── 10
│   │   │       │   │   └── 7bf2cacdfe5ea0a96ba56a1f52af17989f179d7481b7d3e18ea8affd3a52d5c8b8371cf9ebe92a8e59358e5ca4700b6786602919e7d34db9282f4aba6038
│   │   │       │   ├── a3
│   │   │       │   │   └── a3f7440c563aba907ae0516c81759a218da2b906da1989ec63393ec9b20606733d03c27756cf1662a0525a68327d5efde0804d2937381f608cfcc872f800
│   │   │       │   └── c2
│   │   │       │       └── 855f78e7d0ca486978e2b2846f7b12095442b36aaef3dab64ac5ff8c4abf5391d9879ac5389b695c2e88eb8ff14797c9a4e55c4c99803e7ed4643ffde829
│   │   │       ├── 76
│   │   │       │   └── 12
│   │   │       │       └── 9ff74dd4fcf41963a6e834db4019d59b1bce5601b8d3ff5c58a19202ec5018d3259aa4e05056c56b0e5e7c5bcebffded55a4c341b5157831a5df74cc9214
│   │   │       ├── 77
│   │   │       │   ├── 62
│   │   │       │   │   └── 562c28af999613488a207bd32c805099aede7bd418a47161989230b59219656d3783946a99d83f2f0fc13f9496bc58659b6fb3e59bcfd725857b2091d967
│   │   │       │   └── 97
│   │   │       │       └── 4b4ed1a5c47e3b8cfe73cd5529ab55029854420395ff865b9735647a32741aa3ff3502cd830ba2df80b1bdee0aa454c8bb96de2db8f016f005b47b479357
│   │   │       ├── 78
│   │   │       │   └── c0
│   │   │       │       └── 6b11b047b69af1116cdc8c7416a1601f7402d3acda0d1bbbde0aa3dec9b8a3e7e9e626c78a8e7787d83316de4dc12ccd9b73053f7beb7a485de0d521975b
│   │   │       ├── 79
│   │   │       │   ├── 7d
│   │   │       │   │   └── b6e1fca9606766d0dde9da715c03323e25af187d1cfbcf8495257703bdb476d278f0aae4bbc55483ad6db2767f1381b31619e334c12071e1d137366b7b2e
│   │   │       │   └── 89
│   │   │       │       └── b441606d52b0566561b4777f3a386030d7a67df793e2395a3607b6e35926c779d1a5e5ed1959aabae6438681448d7ac1080e407d2126d383f24af5d84264
│   │   │       ├── 7a
│   │   │       │   └── 58
│   │   │       │       └── dc8040e5127b3fec05c5a2c0792bfda708ce0fec540f90673f0d62f2e6b985116bd96b21ab8a4d5df7f4086399c9e1ff58b15bc1900ea42691e7f6b21275
│   │   │       ├── 7b
│   │   │       │   ├── 0a
│   │   │       │   │   └── d74434c0a805e5925eadfdf91758d021157f48f8290a970eb38c4c24f3a4523cac19af7c69051b28eb9e5aa9869fc2d9dba472e3eada05ce677ac5d569b5
│   │   │       │   └── 82
│   │   │       │       └── 092aa37cb3662a311779faa568fb5378b34db475209553248505bbac1d4bffff9f78e6a241a159fde805f205a1d1a978290d0783e32a55f8cf71a357e93f
│   │   │       ├── 7c
│   │   │       │   └── 95
│   │   │       │       └── e3148786596741652419f62b7050f594580fe637e4bd092b38980d4dd6846c59e026e8229584e8b17770b35ad310916bed3729e9d0fc0db589153a3e0b29
│   │   │       ├── 7d
│   │   │       │   ├── 3a
│   │   │       │   │   └── fed3ed3b4eb6ed9e6214fac0edb28d53c3f3a08072b0fbb5f07feb16409c5e200137afaff9f0ab664666d2288c52c18936c0f3f1be80ece3d7bab2b1ae1e
│   │   │       │   └── ea
│   │   │       │       └── bdbede422630fa52908016aa17d4f671f25457aa01d2536ea80bfb35a8e4181420bdef7176655b118af4cf701de6cabce22e2129e1876139552b6a053339
│   │   │       ├── 7e
│   │   │       │   └── c7
│   │   │       │       └── eb3b433157ae199e8cbcfe5d6f5488e31dadbd499cb2a8f8100708620dc696f3025cd96dd7595386c78337a09067bffcdd519208a75803792f7c1b33fc36
│   │   │       ├── 7f
│   │   │       │   ├── 24
│   │   │       │   │   └── 088460e1cdf73da4ada41fa3e5f5ce010c919f3243ea932220603b61c8d628360df0561a0930c875f564b8529ff528c3c556936c4f6ab75a65e7d8dd66ea
│   │   │       │   ├── 41
│   │   │       │   │   └── 45a4875c1e09fccdc3d26dfd5d45ebf0b74e3b60c9da889337bb6c3645ec2b07e7e86ffcde3d972b3b24282cc30eeda04875d2dc40810ae5d62390b9c6ad
│   │   │       │   └── 72
│   │   │       │       └── 9d5113edc958d59fe45617ba62bafb6c0cfc8e074e5fd0fd94df0768ab589726b5d3dcbf315addd14f7e6f4fd37eb139796bf15d7b27a9d3fb25c6f152bb
│   │   │       ├── 80
│   │   │       │   ├── 13
│   │   │       │   │   └── b20a2571ad76a461bb0810cfc3ee5ab35d5d27837b68b7ebba141ab227d0aebc3009ab0f979b11f9f2919bfa1980466cecf60f5319d18e8c6672ee5ce16e
│   │   │       │   └── e2
│   │   │       │       └── 879241f4307f0e5a82afac4d57ac9a294e7152edd7234c37cce8e9991e85f545996c735b8d146092668b171ca3639638f4b661454f0a895195085cf04fde
│   │   │       ├── 81
│   │   │       │   └── 34
│   │   │       │       └── 2159872524c81acd6fe2bfecfa09ae0309057356f3cd16746072e23309de6079f18391e5b666a924ddbd1848ec65924e38b515318909593644389af6a8f2
│   │   │       ├── 82
│   │   │       │   └── 06
│   │   │       │       └── 35fc6a4769192719292c0abf2b072d271c2aff9c6977daed1b00ca945ca4350ec4f88cd6d5c213ac83647a105b42f59605fcd1826144b5ee690a06d17cc6
│   │   │       ├── 84
│   │   │       │   ├── 79
│   │   │       │   │   └── 4d3a41a02d827d4087dcd49a2f9328190acc7549f0033f7d81c2886e36003dbaa4254da63c5adca84d9b69b4fdcc27aaa8ed08d91be06ec61f2855ed6a8b
│   │   │       │   └── b1
│   │   │       │       └── c971ecc90c5fac945891d7d8677fa7178bf6fccc23b853378d0d5209bb8150d0c7e968a5095df5ad6049e82a07d6bdc52cd310f81f211930b9c3e66c742a
│   │   │       ├── 87
│   │   │       │   ├── 51
│   │   │       │   │   └── c8274b42245cfba0f50963b50f4e0c1822647ef67eac0b1f19aef5f2be17651e402f82b24cde8aeddfb34c58b02a07ba6605fbc37f987cd1a4c706c553ed
│   │   │       │   └── 71
│   │   │       │       └── 5b8ac6b69ca18fc42a66f3d1e4df79412ec9da181bdcb50a2968148e5bfb88b3a1537b5013c809ca149af356cf6fa4676c4deef7585dd5e2522c93819a73
│   │   │       ├── 89
│   │   │       │   └── 83
│   │   │       │       └── 4ecc75316bff72be6a6ff571991467ee0999b790cdc344e13b9b699401301382e6f36f484e96b62191c8600c9ef62a15d3f2f7c2800e1b6ffef0db64cf8e
│   │   │       ├── 8a
│   │   │       │   ├── 4d
│   │   │       │   │   └── d9802f5d63f95855533ef8e212b1a6037a0d6d6f456d3f9b8bde8ba1d64a0639a50c0cfa5b1487a2e099058a659414f9fdd2c6cc34c5d000854e96760a24
│   │   │       │   └── 97
│   │   │       │       └── 1f9c6fe9e382d2b35525df2f2f42927626596f77609512fff85ab306c45b554a1645809137769b0f9d225c5dd00ecbfb1208bb9417a6fe6eed3f8ee575d8
│   │   │       ├── 8b
│   │   │       │   └── 24
│   │   │       │       └── 57649cc4cc2d8bfaf6bf56dd7d3ee5000820cbdc9b7a9a8699063ff5b0cc59d283f106057e573a80b237c49f1f7316aad99a7fa500c3467d74720661b904
│   │   │       ├── 8c
│   │   │       │   └── 28
│   │   │       │       └── bf40a50cdabd49bb96b727ae131f60394a9280821d0ba649f2a9d4389ba0c2574c49d871b5c40451c0d18f41f8b548b74b599d4e273e85e0e30104d88624
│   │   │       ├── 8d
│   │   │       │   └── 02
│   │   │       │       └── f79519e871a16dbb7574d094e8633ff8424356b30c628c368254d6518914cedc74032ec76ed59b66214bd5e323e9fabbd69b98f4cb44c6fd2eb572e8a34e
│   │   │       ├── 8f
│   │   │       │   ├── 45
│   │   │       │   │   └── bda0c24c37e625fa1587c9283016b66e926b7cd38cd4f86790f318b07d951687a9f63eb43e5f07d589e09df82b387ee6d19016db83ecd7126329377eef45
│   │   │       │   └── 77
│   │   │       │       └── d52e0bd3a39dbb6a7c98c893864d825b1bebe79d062f1349b99a691cd532be9f1029a6408b3082f4699e1d6e55423681928619be933138654ca4068320e2
│   │   │       ├── 90
│   │   │       │   ├── 0e
│   │   │       │   │   └── 56428355a38b7d94dc769103450b129e065e486db48d065d4cfed2e4c3d5829fe871341016e5087c81d86ceb70899e18c9db3416168a8f24fdac2b5015e4
│   │   │       │   └── 69
│   │   │       │       └── 067a0608750b0e6f85e3b1f33deeb5ec887681c1ca3e84523aea83b8b3d2d4f8f2c00b9a09ee485d395171921b2695ba54a8302f5f0d750a5b973fe8e41e
│   │   │       ├── 91
│   │   │       │   └── 11
│   │   │       │       └── 91670ddb2e5148483060c13480d5330114de89e865837ae6e60c4dc017edfec972fc8535aff2be6b90b6ea6176384633e4fc4cc79c2948df341fd5c1661c
│   │   │       ├── 92
│   │   │       │   └── bd
│   │   │       │       └── 17dbee98cbfbc9ccb60950f09911cf127d071ffb508e16802a6ae266ef8ba6421b5af4cee53491cfed0412def92f7062d051b5a9333c2b5d8c2b633b4728
│   │   │       ├── 94
│   │   │       │   └── 6e
│   │   │       │       └── ccd41785b69a3cbe6733bab9c3cb8311092f5d44d32d9d86157b712c156f3dc877209bed0d1511c6d366687506a1b17ccd1f1fb86fac924ce266825906fe
│   │   │       ├── 95
│   │   │       │   ├── 88
│   │   │       │   │   └── 86f66880d649a434abc280f67605abbb47711d06bfdea32cea11a9429704d0564033bbe4f9d5c883412b9525389f7f29fc9865f553762c9f263680b74248
│   │   │       │   └── cf
│   │   │       │       └── da6a19feb78fd2595fea726ba6623ca62ec59f37710b869995b9416382c391aeeb993d54b0010af2abe1c71af3bf488d8a557dba6f1f849fece133c83c85
│   │   │       ├── 97
│   │   │       │   ├── 2b
│   │   │       │   │   └── b13c6aff59f86b95e9b608bfd472751cd7372a280226043cee918ed8e45ff242235d928ebe7d12debe5c351e03324b0edfeb5d54218e34f04b71452a0add
│   │   │       │   └── 9b
│   │   │       │       └── 930ca6e7be7018e79ca9e2f88256e0094e45700f6042e4f4b7be887dc897ddb413ed3d5f1c7cab977e75d565d9d5a36a2335aab01309f3246a780e66ba06
│   │   │       ├── 98
│   │   │       │   ├── 9a
│   │   │       │   │   └── 68e84545cf186953b6927c75871a5e5f661d07ef805b585fa7c3a0c5be109626fd58145345d8bb858e94e1b66b59937dc1c3d4eb628c1c660dea5c352de7
│   │   │       │   └── ac
│   │   │       │       └── 864ad4b45e218c1f4de4d9f3b6c472c17387abd03684f2342e86b2ad5e72f68852c8c6e8ecce321554dbbecfb4675963f590d69a590ed55a1a6caef56aed
│   │   │       ├── 99
│   │   │       │   └── 98
│   │   │       │       └── 448f12378f9292ce130fc418d98bbf63a156f6d27e8eed850861153c0edcb5e811bad603432cc61b4f94549f2d43e8c48367de701b7ae30eca763af6018a
│   │   │       ├── 9b
│   │   │       │   ├── 3e
│   │   │       │   │   └── f67c86d00bc662f0c2cbed99d6642875488172be12158566b611303af794512f2efbf85a10234e59382d58b563f336d50407396c650a1f409d4af467e88e
│   │   │       │   ├── d6
│   │   │       │   │   └── 15ca4945a64c3bf495423b7131b87e3a97bee25d335e002733b2994ad038333639a7227df838fbdbb1c2c77dc3c1de199a53731445c081b4fd0c6973eade
│   │   │       │   └── d8
│   │   │       │       └── 13c11921cb696f08f7ba409a787771b54d81141e7fc5cc952dabd3231f8e9a9f5c0953e19da060b954ba1ff115fc16dfc3969b21029921b300cb6731c871
│   │   │       ├── a0
│   │   │       │   └── a9
│   │   │       │       └── db845c91217a54b9ecfc881326c846b89db8f820e432ba173fc32f6463bfd654f73020ef5503aebc3eef1190eefed06efa48b44e7b2c3d0a9434eb58b898
│   │   │       ├── a1
│   │   │       │   └── 16
│   │   │       │       └── 42c6790ed2f6bb0d8a2fa3d42ec39ae52b1f8c51fd99266c3eb50ad3f93da11c955666ddd334a871eb7e5d32df2d95fe4b411dc952edc2ec440075d2e4c7
│   │   │       ├── a2
│   │   │       │   └── 81
│   │   │       │       └── e7e49fbe8656a387fddebf50395ed76f90be5bde0d8da3e071dbaffa84d3fe80032b33ce9dc72a6feccd310b2b6c0ff2cb4e3b96afa5f64be198029a2977
│   │   │       ├── a3
│   │   │       │   └── 07
│   │   │       │       └── a03949db85191d4909f468f63cea33e3f1165e5851039ea92a6fdfe71c1a212684a0e979a2c59001a5d077f9627e64ac9808c3c23101d3e903dd678b2360
│   │   │       ├── a4
│   │   │       │   ├── c8
│   │   │       │   │   └── 4e7c50cf8aff6de638c85e41e8b169a44b241bbec80454d933d044476ee2e1d93ffb8f832aaa9cf9db715ef0c558f3d282e9287f41f4b6b0cf928e014373
│   │   │       │   └── d8
│   │   │       │       └── d31dae18a09757cdcfbf9ddfbba4eb2ced665dbc390b2319d6d3458cfe3931794c1bd7d09c8fd0990c0a836ac2b52e4c7a32da40824f2c2e9ad2828e9633
│   │   │       ├── a5
│   │   │       │   └── d9
│   │   │       │       └── d16d0e1c40b653ae71d75bbe980854d13737e87032bb5a41cab0335e2c19e80fdd1b630c2916090388deafd50c7901422926898f1dc9ee2272e2f790c246
│   │   │       ├── a6
│   │   │       │   ├── 45
│   │   │       │   │   └── 2e8a52ed9bc6f424126dd4d7da19cb119632aed03ca6dd744311f5edcc3b07a99242b1ac823c861dbc4ccb33ef1cc3f1b4a158438644851d2e6cc467b931
│   │   │       │   └── 5b
│   │   │       │       └── f44a23e04004f4fcb8c2d0c986b28a3fb1da52e95e13a4e500c4ee09dc39ef9cb2da2279cd87d8625354a51a00a3b11bf49cdf53bd7f69591a959d91fd93
│   │   │       ├── a7
│   │   │       │   ├── 32
│   │   │       │   │   └── 6ad76b4469a221aa36f3a42baffceca9258fc13dabcea1f9be75b69bf8c1cb6a3cb6efbfb594b9ba245706805e5eb2427a9aab868ab857636183ffcbbc52
│   │   │       │   ├── 7f
│   │   │       │   │   └── 3b7e7150102a863fe3f0c7edf01b5ebed441e1c485f1b97a3ac58ab37da80e535b9cde6231a3b7f09c4b2f1b566035d0610bfe0557ac9ae62216f1c01a50
│   │   │       │   └── d8
│   │   │       │       └── ff298663e8ee2d918a19a0a00435a7537ce757a337e6dd8597e213c9e56d4ce61b5be30c4b719c5054fed981c51f78a88f5389a1922dab4dcf5248e83c4c
│   │   │       ├── aa
│   │   │       │   └── 90
│   │   │       │       └── 80bd197db2db8e1ef78ab27ec79dc251befe74d6a21a70acd094effe2f0c5cf7ed2adb02f2bf80dfbedf34fc33e7da9a8e06c25d0e2a205c647df8ebf047
│   │   │       ├── ab
│   │   │       │   ├── 20
│   │   │       │   │   └── 87e36d5840f4b65850f10e37ed7dcd5947958a433573aaca789fd3369108553a8fc1c9a845a143497e5e7c90e70419f43fffbc1e1530e19beb2cf0473183
│   │   │       │   └── 90
│   │   │       │       └── a0dc68efd52e822d9d3b85754d0fdfcbf354308c8deba163bd0d9a25aa2ff3ffa91a4f516c78729887b3f82207b16c569db31b0fcfda64172e02808adf01
│   │   │       ├── ac
│   │   │       │   ├── 1c
│   │   │       │   │   └── 7865a5ac22a0bb027fcfbce2f71d4397d8847e951d782302ffd6e7dc65b329403a8408bddfe2410655ebc3a9e60ba4322b2930e6d32a039078654b548e94
│   │   │       │   ├── 51
│   │   │       │   │   └── e187fe9d41cda368bfed295f36e4ae7ad00117f4fd4cabc1ae41877ea3efc3cb5e620033fcab4d2b81c9906697165c165c9eb06d09c3f255e6bb627c3839
│   │   │       │   └── d5
│   │   │       │       └── 1ada8215399d75d02c07b0f09d6312f36af582cf44d1c5602926e26a7c8ec08371d2d44f9d457f4118c891f13f54ee29cc1f09f193c8a7148fddf9901d61
│   │   │       ├── ad
│   │   │       │   └── 48
│   │   │       │       └── d0a32ede8194fd5d855704ad637bd724067369eeacd164e84b431e51704a767421a55e8fa6bfabdfec09b82e29847050492086734867e04ea73d402acf4b
│   │   │       ├── af
│   │   │       │   └── 39
│   │   │       │       └── 5d2143741ba08238f96ddff36759c58c63b72cb2ace9b9d61da859fad9b26bb3996e4ff4755f8d512979dae21b107a1b67fbf120fa53187890dd08590d35
│   │   │       ├── b0
│   │   │       │   ├── 69
│   │   │       │   │   └── ef6f9766ac968a119f8b0c8a60baf757ddb0e5125966bf8fc2950f5ac1c98266b971e63432c8c58533990123e13234e0830e22a4f22974cdeb97dd9960ff
│   │   │       │   ├── c0
│   │   │       │   │   └── 6287fba94763d8f3bc9319dc82b1dcedef258efaf60c010e7ed197574d26380855104a640b6e1789895d846c1f52d4eb20267e7c0f1fc6687bdb0502bf99
│   │   │       │   ├── c4
│   │   │       │   │   └── 86eae8813cc26b7dfb5c095299e8d9b392c4d3b26e95a0736a0e93e14e5a532b33da47ecb9f8c6756f22a21ea62399d17e15f3c3819ecaa7043faa2e8914
│   │   │       │   └── da
│   │   │       │       └── 8dedbdab711791e11403743c443259923b3cfd3c763ac2b6dac038489319c7af46f4e0247e6e42be79aea56dc8e06bb9181ea26bdf8bfe4ff5e3ceb61c32
│   │   │       ├── b3
│   │   │       │   ├── 1a
│   │   │       │   │   └── 7f56449634bc6e62aad466db2af6562e57fda7258e005182788e3cd7642e657eb8cc865a4aaa3e607779c9076547a315a3328ee124b9c3d889af9f2a814b
│   │   │       │   ├── dc
│   │   │       │   │   └── 2c7145ba3c560a768d1533825be8d86c4f0afbf5ab6f4e664f0cd18f995a035188194d8495b01f2313f3cfdabbe528a40ef97c4127901e9e647b28e19f5a
│   │   │       │   └── eb
│   │   │       │       └── 39f998983a92db61bac89488a0adce33ed82cc1956815b337a97ee86515ad142f4d3d45ad1e332c7c5713591623b4b4017b0fd21eaaabe2843c2c69fbeb9
│   │   │       ├── b4
│   │   │       │   └── fb
│   │   │       │       └── 863930d065d0bb76f5651b3768e84387f4152d72303c3bd9761825cfa8c81d4e2c9c938025b8679f319c4b8d611f9626ba4d029f8475dc6ff586fe5979fd
│   │   │       ├── b5
│   │   │       │   ├── 37
│   │   │       │   │   └── cf317838766ab773d9617270de8511dd367bf7467f2b2288457a4bda388fdd00f3b1dc6a77e57848299423f08c9195f61ce16ae9d89f77798b9bc8cc57dd
│   │   │       │   └── 8e
│   │   │       │       └── ec56dd722fda33231be66ed379aad987da4ad770109f8c488280a18baae9c91ef82f646d8f725da843791b7190116f50461077642f371818ef329d59627a
│   │   │       ├── b6
│   │   │       │   ├── 3c
│   │   │       │   │   └── 0ce5ec4c83a046448fa43664e7b4db2f7594b55fc045612ead9c9da1747d2457133afde559db1cbe16a4ad496bd89ad7c53032c8c6eae8ac7c0329f0f3e5
│   │   │       │   └── 47
│   │   │       │       └── c51185189afee296af509cd342d0b1db64f8e4429ebd9b6a73eb6e59d67b5aa459b73c785beab5152061562876c7b4f09cfd2d913c0d1fa4e78814d23d63
│   │   │       ├── b7
│   │   │       │   ├── 63
│   │   │       │   │   └── 839645c14329fb8e497a4cd6b0fccb55115bc819e9490c21b8d4e92afcac14b090704385d566c1c055490ae2606fddec22012dcf1ae516b98d81a0ae1953
│   │   │       │   └── 85
│   │   │       │       └── 3df3088c6764797e7a179e32a80030fa7cbf022fef63c8c7f3ec5a65aa06d7ca593d705bde0d7b806cf0f7f944fdb66541229b42fe8d10525f7d39c896ce
│   │   │       ├── b8
│   │   │       │   └── 24
│   │   │       │       └── 3c28a65d120aeac2fb2d4de11c5f6593118bb868cbc14a7c4c3c8c10a707a0d9b55ff09e592f29a2f3f2075cf6d3db5a2a9d1edbf4e9dce27ae4e5b903a1
│   │   │       ├── b9
│   │   │       │   └── e1
│   │   │       │       └── 1ea67ba3a6a79eda8e5a2189ef1d4e82d00e3630d76c2037aacb907276b92e0b947566e5059e6dbb11e1491a8107250827dee95e46f9935da2607d76ede2
│   │   │       ├── bb
│   │   │       │   └── cc
│   │   │       │       └── 7c0db6fc0e8b37e0cecdf29e1ee0017ef818b50fe96af9d9110af2e2e50b9bfdd23be59ed84c85c17b30382db2084a5cbe11c9f4e5f7687f3670ab23afa6
│   │   │       ├── bc
│   │   │       │   └── 5b
│   │   │       │       └── f1455b099cabb9d8a6727135517bc28c43a223700d02c2cea588290de796c471d64d7cc6c97b7b6483d75b3fc88fedce342dbef7bafbcd492b7596a3134a
│   │   │       ├── be
│   │   │       │   └── 60
│   │   │       │       └── c3d7e8b035532cd971773988d125be5d9f3a7a698705b0a413fd08f7a91ae9efbbfab450561406f519cbe50fd85e2505f8be0a06dad1cc9e82b0c5a61a1e
│   │   │       ├── bf
│   │   │       │   └── 18
│   │   │       │       └── 54cb827c9727b28a71fb033975a5d778dc6261647fed3f6c1e37c4e7b506e5398f80d176d3f03264d7fa023ee38eca0fc96bbe7bac6d028077160bc39f30
│   │   │       ├── c0
│   │   │       │   ├── 0c
│   │   │       │   │   └── 6be3097ad962bee4229c4963415041ba3e48c57906c8c41a44937e26387be6882937d0d4ecc066ddbb4d152f7b2470c4b1448494dbb0a965e9876f6159f1
│   │   │       │   ├── 16
│   │   │       │   │   └── e9bfe3507ed1c3746f3a41cd292325e4e48477b4cf157749d62ca0dc5fc9cd9f89d714e170b0abaac36a2403fd43fe6a5a0249aeca776b3c94d80cd66d17
│   │   │       │   └── 1f
│   │   │       │       └── 0e75de3b862a4efcce4709d870b00fe43a864938289e23df5d43fe767ff3b8e2581e0eaa4feccf7d226fea861e9fa9f59a0e0470e42d2929412aaca5ae8a
│   │   │       ├── c1
│   │   │       │   ├── 2f
│   │   │       │   │   └── a1020252851d0a844bcf240adfb8f54dd7e1f3d6dd18ea7e632eb1906e46f8bab80f13fd11bdefb590c075bffa16807826e1621c57e8bb176a53563fb689
│   │   │       │   └── ae
│   │   │       │       └── d88f25067cd667808fefb4ad141c037e9600c2c413c2ca55571a9d33bb9f45cf96a21ad3576aadc3848a2fd3adcca2b07e55fb9f2e1dc9945d8a7532b7c6
│   │   │       ├── c5
│   │   │       │   ├── 23
│   │   │       │   │   └── 32519743bdedde63440ebffface305fc949686914dfcc2075cb850df6d2d7e4880f9d2c802eb2a8dc6d157eb74cb4442d5b2280cc8b486369e7e83e7d1bc
│   │   │       │   └── b6
│   │   │       │       └── c21f9742614e53f0b704861ba1ec727cf075ee5b7aac237634cce64529f6441dca5688753f271ce4eb6f41aec69bfe63221d0b62f7030ffbce3944f7b756
│   │   │       ├── c6
│   │   │       │   └── 4a
│   │   │       │       └── 67867eda208dceb36587eb399998dfd962207f9a25345a6c58e4d905c66c7330b2808b28d74afa4d79e91cf4d17769eb04d23d57f905b347b51db9143e02
│   │   │       ├── c7
│   │   │       │   ├── 94
│   │   │       │   │   └── 4bf58da9e7e4a1dc3dfc161f62fe243964af9ee31b9745dfe919b3380f5ded828fcc1b06edb5493c7a6cad72bd58633058b3e6a99d49e00431587e98cfb9
│   │   │       │   └── 9c
│   │   │       │       └── 4fab30e96ea730f3dd6b17884ae570f6a995a64029b6f853539b45c9fb64aa09540c15d496b4035a767b9b922f6c61c05ad88cba5a2e82f1cfa0a26c605a
│   │   │       ├── c9
│   │   │       │   ├── 0f
│   │   │       │   │   └── 42a371464ab760d591f588236bbdb498921141ee5849b2f5dfe4ce0e73fcdf4490c75edbfc83d0ca321b2b502c8ec705d8e66dc9414c5792531d550ebe2d
│   │   │       │   └── b0
│   │   │       │       └── 7244d7a1418095d97556fee24a89d1a3715b1b33d5845c4d53389f9dbcc6f9de8e2f983971f95732a5a2b90f1bd0d170d34359cf7dd294eb7a72f30a3002
│   │   │       ├── ca
│   │   │       │   ├── 87
│   │   │       │   │   └── 4a20524d4b42f751277b655d217ceeb1056a3c4319403050c7c8ff0667257b3a951e95ddd1ce7934cf7d1593e4af44057aa38fdfc44c54b3b33453189c66
│   │   │       │   ├── 97
│   │   │       │   │   └── 66254fd36c16f2d83c626eebfb64b5b706cd5012633b9c78c400d7e88492ef1345d5ba38ac9f5a8f25c67183ea83b9cb2bf9b3fa7cb0f5acf4b702127b11
│   │   │       │   ├── c4
│   │   │       │   │   └── fc9a1762c562ba1f0de2d55d80791a99e567d78351b8de6aa86253369dceb7f3c16ae63717cabe6646ca9588bc7f18961da0bd1b7d70fc9e617e667fc8a3
│   │   │       │   ├── d4
│   │   │       │   │   └── 080544005e733d3410ee04a580ae76e113c7c96cf6c46ef911e81db70436e4c5e31aeee0c4390aa643707d5df971f8f640d2b3cbbe2d6ba72d998a391b9d
│   │   │       │   └── ee
│   │   │       │       └── 294450a70a4b84bf3b89e152404c8f083f74a4ba786211b0155a743137bbf8eae432a8c53c73d6901f31714e573a3eade2972c4440e3a31bf1c8e3cbd1eb
│   │   │       ├── cb
│   │   │       │   └── 86
│   │   │       │       └── 2d309376a857f6fcfc38277e510b28f343876db7c89627103f93c9e61d4b32837103654fad9dfc59b28e3c41256aa36b70d43f5ca9e1d686c000cb8d04f3
│   │   │       ├── cd
│   │   │       │   └── b0
│   │   │       │       └── 7dac22404f5adb8e25436f686a2851cd60bc60b64f0d511c59dc86700f717a36dc5b5d94029e74a2d4b931f880e885d3e5169db6db05402c885e64941212
│   │   │       ├── cf
│   │   │       │   └── 87
│   │   │       │       └── aa26f7e236714c1c822f5cfdc2639ef2d9626ce60dafdd7d339bd984264ae436fe2b0f1bbeb20f4987c1245f27aa06407b48e71ba28f5d315aa1cab00222
│   │   │       ├── d0
│   │   │       │   └── d2
│   │   │       │       └── 50e0b14552e5a413b3b17f486d04a4baccb9248c11fe84cd6e93b360ef4e51791f26fee7a576ecb50c1a343f20573ca567040e9806553de0c0465eb4810b
│   │   │       ├── d1
│   │   │       │   └── 1f
│   │   │       │       └── 629116faebc1c1ed00f14f5be4a6e501b6a739dd8c80c0cc0679414a4688d8fcd58abdd67ef5462d45f1a686a35b4644d256931b9b28578a9145bf671bfc
│   │   │       ├── d2
│   │   │       │   └── b1
│   │   │       │       └── 60fd18f643ad8d0a6eb68d9c34417edadeccfa402414d0ba5974dac95fc6f2446686553a9bad6f630282001f2310aac369799f356204a2cceb79597ab43f
│   │   │       ├── d3
│   │   │       │   └── 40
│   │   │       │       └── 2ad23a9449077c89d8b4bbd6bf341d1ea1cf3711c191c9e4bb1f529d607c1f16c85709b8afcbcf0beb01181c36cd694b424413bfb590016508a7b4c3b0d2
│   │   │       ├── d5
│   │   │       │   └── 41
│   │   │       │       └── 16457ea39ce036cb81f959ccd9e3880e3a34c49a5aafd6e356e0600910ee7e6dab82061bfcb2763ae48c39fd5392fe084a37d82bd8a8e72cac6bb2fa0c57
│   │   │       ├── d9
│   │   │       │   └── d1
│   │   │       │       └── df4e80a3fe9cdc6b60a4ef6e0e6792f4115aebdde1d136c1bf6f7c5024b036859a55092f7d6cb017fa19b52075c3127cd4e9bcb9cffe4c218efde3f6bc35
│   │   │       ├── dc
│   │   │       │   ├── 17
│   │   │       │   │   └── a5b7ab5d73c6cf800b5b72676d349962ad5a139846f97b6802f783e7930116f6323a0801d47a81bce6d8d63f95aabaa7dabe832d330886e0ff76e9928ab9
│   │   │       │   ├── d6
│   │   │       │   │   └── 84b678e2efff1539dd12f7425ef76630d3778113ad0ec39e45589e122824507d3a7094f30c0542a0834a23f485fdd982d6bb91213f5ace9f249af4b49c6c
│   │   │       │   └── e4
│   │   │       │       └── b3dd369c516cb85ad397577f03820c31a2a24ae3e78390d325e59fcc2596a850f68fe3ff657fcd715cc7b523645e4c0a6dbdead95296cf638c16c16c8be6
│   │   │       ├── df
│   │   │       │   └── b6
│   │   │       │       └── 709849a279c02c19b1b4bdb6a81743d23ca14c40b8bdadcd835424e4c0b6afdfccc3f9421aa8be1837a5e111d4d5533ded5d7cf3f22830beb9a31bd60bfd
│   │   │       ├── e0
│   │   │       │   ├── 95
│   │   │       │   │   └── faac46ad404be59a053cd30672abd453f7a1d925af3cabc869d2905df8badccde0c8e28eae03633ebafc678151e8e0886bf2e89b5f11fafbbd3384016b57
│   │   │       │   └── a5
│   │   │       │       └── adbacd54192a2fe66c7b8f4ab78998b920ad0f70a69c47dd0de48302d7e4d32f017f420d92a8080765b0e0ed11759d04da6c85f6e30d6f992c8e0ff3a427
│   │   │       ├── e1
│   │   │       │   └── 71
│   │   │       │       └── f77479e68534ec1a2b93d8fc47c7a1399a534f50e98fda4e5c47d2d7210a51a869c271f2732f74df3aba4c3cbc0a5e2d47cc03390b056afb8d95767b0a3c
│   │   │       ├── e2
│   │   │       │   └── c4
│   │   │       │       └── e4fe3527435943bfd91bc759cde394aca00a43c56f218ca2ca7079c787d9df45510df525beca552336f5420cfef8c523690fcbf9a7a349c955ad6587cf58
│   │   │       ├── e6
│   │   │       │   ├── 31
│   │   │       │   │   └── c208522e3a132e9adde8101848478efcfdbd9d9dedef1a3498f8528e2e3bd63e9b03c11b1b689f80ef79cc3007e9d8113692b75d99b6cc8fd4fc524f3f15
│   │   │       │   └── 6e
│   │   │       │       └── 2740aa7ead945bd3d2cd1f9f463380714e1f76e75ff295b2886e97bb4e91b17c9fbd92fe812e42c15c88e3b296e06e720136a948db7b519d3593d2c9d423
│   │   │       ├── e7
│   │   │       │   ├── c4
│   │   │       │   │   └── bd403a86d17c76ed8c0f4adf5f2718af8d8978df6602c1f0cc7d9fbbd5102a52b65e7fb2eb2906772c72cec024b814b341a653f9df7671f3de5278e087bc
│   │   │       │   └── c9
│   │   │       │       └── 66c4a480e013722f3f871cc53394e129834f4557e7afe9931edef262860771ce073067c5681043e600b0991bd2e6a9f56834c30aa6db48613546eae0d8ec
│   │   │       ├── ea
│   │   │       │   └── 6a
│   │   │       │       └── e08b4fd9ee6e6504f13f3cdc682341d990770d134d9cb9eea062db05dbdeedec59beac621234d04aec080e7ecc761a0cb5ba6fb176d12a4c594e1affe34d
│   │   │       ├── eb
│   │   │       │   └── fb
│   │   │       │       └── f002c3c2e7371e2c96b7c632a51ed57545731aaaf1d2a2f7e4e81436dbbe703688886d65cad4a0e67a70677a5dd18e30f11710b5405773110be17ec09295
│   │   │       ├── ec
│   │   │       │   └── 0e
│   │   │       │       └── 92f634a09bf4beecc76d34349bf8853ce7dbd0a89fd002d71841c7c50ba5bc452e08c4864395d2d1d31a82159e830b2ad02e32cfb31b5335c8798d503894
│   │   │       ├── ee
│   │   │       │   └── 49
│   │   │       │       └── 3ab8e198f724a0085b11b91a655b3be3884c2e946f3bea97e78d0c6a681240714969dcdd72aceb7b61030166cc6fa29f911b0e7421e8623ee1acfbba21fb
│   │   │       ├── ef
│   │   │       │   ├── 17
│   │   │       │   │   └── 5c6ad83bfd4fbbf94772a23db3a1db48f47fc8228a6aa3e60e21c64eab59c9c1758167da7cc62bb99655e57a40db66471aefd6bf7e8cc46105c8038b16e8
│   │   │       │   └── 20
│   │   │       │       └── 10a43d94309ccb8b50eabfba856273db68fc7b65f14ae8f888c50e0f7e418fc8dca5d94831f9afee994a2798aaa384ce039df6ccbdd5faa2d5eaf37b2841
│   │   │       ├── f0
│   │   │       │   └── e4
│   │   │       │       └── a5493e3c7cf613ac0c16fb8ab8e0f240eec72decd3f67282dbb7528a041e4f509299294bd218553aa13f8255c4410e359acc0da417ab748ddb7f9e84870c
│   │   │       ├── f3
│   │   │       │   └── 3f
│   │   │       │       └── 5f545883735913820f7b9388c4bb8f5506d3a5342991621e9eb2d29c70ead7e24ed11fd239488463723f922bd375fd8cb1aeaf5d0118c7475cb516a11090
│   │   │       ├── f5
│   │   │       │   └── 3f
│   │   │       │       └── 548d6debd145b973543b193c25969b57c21bd8984cc587331f67d1fb1505adfae65e3e364f8c13ff5b5644c99d6dc065a89b9ff9e9317894f72a8e70c772
│   │   │       ├── f6
│   │   │       │   └── bf
│   │   │       │       └── b28bdfa6814df700a723e886d3f684423bbf16ae24a3eadfdc17c0d605927d68e18f393103bdd503cf51702a29bb4175b0987aad7479d125f840c441b8e9
│   │   │       ├── f8
│   │   │       │   └── 6d
│   │   │       │       └── ad94b9e6993772c5d9a05196731ca28aab1cec43bc63c70e16720eeb8905183896317bf54f03b08ead598d1c8574e8fd07f97f2344e801d4d99bb9997ac1
│   │   │       ├── fb
│   │   │       │   └── 07
│   │   │       │       └── 5b4f51db21cf13bb2531a41b5bb56490f2bdef064219525582fbc6edb0ace29922fb8613e7bf811cccabea9bf8bf817f3504b3cad598254fc5d28abfb7e4
│   │   │       ├── fc
│   │   │       │   └── cc
│   │   │       │       └── 2b4a058cdaf75b3dad8ffb7f2072d0d69160ad6b6cdddabfd348d4defb96799baa61adc2ad9c254944e9c3286516534e61c34ffd2bc242537aa40b056d5a
│   │   │       ├── fe
│   │   │       │   ├── 32
│   │   │       │   │   └── 99a0ca70d05f06470978fde2d138f03771f717b4b0293f44332e6513fc7b8f0995b207b218f59acc78ac363bf9c522a3d00773d533d6989b4177d760170d
│   │   │       │   ├── 37
│   │   │       │   │   └── c4c0d0dd41504236f8e41a2b7887aa4c3b3abc6c7928a6ae39f1d3edda5323c7e781414a2164d1bd03b0ed3bf3b9ba449bc6e68d1973231e2720c32eab41
│   │   │       │   └── b1
│   │   │       │       └── 5e0a934941b852663195c0ef51155df13ea6e71114bc326210cc2b43ff397a82926e57f6cc2ee37dda81b717b77ca031071d1aee8d25cd52bf1fa639ed2b
│   │   │       └── ff
│   │   │           └── 2e
│   │   │               └── ed24a00b559d653f3799641f636279adacbeddd0ddb3928ae28b96bbafb7611e4588b8b4f36696733092cad5d9984605ff34273889aad33b717b052d9cfc
│   │   └── index-v5
│   │       ├── 00
│   │       │   ├── b0
│   │       │   │   └── a5285b1dd41927c25a437d6e06e180ad401616f52c278cd64474969fb3e1
│   │       │   └── df
│   │       │       └── 216782e75230fb7e8d7057093e134da919f2d56aa9db5f6f7258b3b537d3
│   │       ├── 01
│   │       │   ├── 3c
│   │       │   │   └── 9305c09d5789a41fefc7aa0cd3a8a3813243d247f506487c2f66e9ff5971
│   │       │   ├── 85
│   │       │   │   └── ac002ce9e68821cd39a876c92f3e1be8caeddcf6419d6bc324f70d32b4e9
│   │       │   └── a9
│   │       │       └── b0d0d67beda769e84926f207549943c0bc17abbf66bc20099aaa1bb51736
│   │       ├── 02
│   │       │   └── 3d
│   │       │       └── 7ff49953c213d0e9070efaadaaf3c5ec6740893a6f3704b4f14e805bcfa2
│   │       ├── 03
│   │       │   └── 48
│   │       │       └── 75977735688016c583178c5e6055c5d811bf783ee09da9fe4b1137891c98
│   │       ├── 04
│   │       │   └── bb
│   │       │       └── e70e70e0cbc9b00841927b0c23c58d97f21063208f3e872c3e04db58c13b
│   │       ├── 06
│   │       │   ├── 5a
│   │       │   │   └── 98f8c4232b39b6ac68023a0bc186c128dffdec812a144648c26dac71f91a
│   │       │   └── 5e
│   │       │       └── 2009163f0b101c063269056e566eec4bbc4ec9c8e69f769867337a8ed57b
│   │       ├── 07
│   │       │   └── 2f
│   │       │       └── c26409f0f3f5f0a9723c9865acfaf682ce8a5f593e491d912d58f53f9ae7
│   │       ├── 08
│   │       │   └── b9
│   │       │       └── 8c0c17709bc08fb63e5f0c39c65b93c80c9663f548e949eb55cb434a357a
│   │       ├── 09
│   │       │   └── 8b
│   │       │       └── 0ac0d0ead7b0eee61d826bc69cca1c7d40e187e8282c876253d740b9e9f0
│   │       ├── 0a
│   │       │   ├── 08
│   │       │   │   └── 7555feef8088d2832129af7ce022f6637283712a9ecd731e4a9ef4932c14
│   │       │   ├── 2c
│   │       │   │   └── 10ae97cc0ddca9e23bc5e1c1a10c38f60b99fa734eb5749276bb78987586
│   │       │   └── a2
│   │       │       └── 6a45098c63203072b3c3abfd9346c85ac9bc463e9506bc2bdf17478905a3
│   │       ├── 0d
│   │       │   └── b3
│   │       │       └── 097d1aa2272aa0a4559d84bc3e8aa1b5438104f60d0a303dd8cf4a4919e2
│   │       ├── 0f
│   │       │   └── f7
│   │       │       └── ef3ad5111001a610f814d854d1ce9853e9d6d710a41430d086d07a0986cb
│   │       ├── 10
│   │       │   └── 17
│   │       │       └── fba3d249f38fffb6e9b99fc904d81622ca3edbd864d546795aece3329bb4
│   │       ├── 11
│   │       │   ├── 42
│   │       │   │   └── 63f22fbcf0c21b1e268e7098ba936a48f7ddd6c06761a6c5b4a5fe434ebf
│   │       │   └── d4
│   │       │       └── 2f9f9df8a204a306e5baed8f658a43e437792315d561c5eb0315c7a97d50
│   │       ├── 16
│   │       │   └── cb
│   │       │       └── 5a69d7ce799d5fc7d26a2056473c94a7bb373b72395bb56a9b740dffd152
│   │       ├── 1c
│   │       │   └── 65
│   │       │       └── 74c26755259935f238329c24af2f3305f57b1107f720cc0082e513d83ebb
│   │       ├── 1d
│   │       │   └── 59
│   │       │       └── c56cdb49f40694dc6b984bd43ff53d96f6ea1dbb06ee467a00e4a697e664
│   │       ├── 1f
│   │       │   └── 85
│   │       │       └── 3e0b21cc5deb10a0dc51ed6dace9f5ae0f08f66b5c064b262517165cfa2f
│   │       ├── 27
│   │       │   └── ef
│   │       │       └── 452a94b385f28d524a6fd9178863fe32cc70bc3d94033a3dda9c91b2e128
│   │       ├── 2b
│   │       │   ├── 0f
│   │       │   │   └── b8787add1f0675f7298f5d4e498f1c0091c7438fd73df02d649bbcc9c1ce
│   │       │   └── 2e
│   │       │       └── aa61c0bc2734278e23d60eeeab1fd752744ea5536b3ba08b35b3a667d229
│   │       ├── 2d
│   │       │   ├── 80
│   │       │   │   └── b5e9ca2e40744e7fa089861626d2a29c62363c01729964f4cf0c3e8ee632
│   │       │   └── f4
│   │       │       └── 9196d70f82f15d107105ed433fd462721c91b1594984d87b54d57730cb20
│   │       ├── 2e
│   │       │   └── 5e
│   │       │       └── 52bb770674006416c55571d38721a1575036bc260e9debd40db850bc0b20
│   │       ├── 2f
│   │       │   └── 2c
│   │       │       └── 2a12420aab34889ed2c64b80f9b722e2e90e139a130f13e34a1c7a0e1e29
│   │       ├── 31
│   │       │   ├── 7a
│   │       │   │   └── 9c96d52885c2170f2365ba2c1bb1035008b9daa92b20f4c5e52f16b85113
│   │       │   └── ca
│   │       │       └── a8c3ab0670811a3887ede187dcd3856d14272349a18f6844f7c8007cc05e
│   │       ├── 33
│   │       │   ├── 19
│   │       │   │   └── a311e591a2b51610ed276fe9968065a74c2f19efd7f917616967040ce127
│   │       │   └── f9
│   │       │       └── 071d7d949ade71febc395082397753f9a225031462df3ac9c8ff4104bbad
│   │       ├── 34
│   │       │   ├── 05
│   │       │   │   └── 127f37b0ff3cd9c76b1497b5838d265a8a2b7ef495b7f9841f5d4665ba67
│   │       │   └── 9e
│   │       │       └── 35f5913aa7a542b3357025e12a2a126c13ab15a9bfbb40721b56f89ecb48
│   │       ├── 35
│   │       │   ├── 45
│   │       │   │   └── acc6960018d880bf033f23b050a6c442be8b02eb6cd96e01c7ef7b61b640
│   │       │   └── fd
│   │       │       └── 45154839db33174def1653b1ca377b1d2a65a4c4e56564fe11d85b67a96e
│   │       ├── 38
│   │       │   ├── 04
│   │       │   │   └── a49ce7d19c6d98ec2d5f259e71f17a5727961200c4cf22a88e33ff7bbe5c
│   │       │   └── 36
│   │       │       └── 08fcd3ee98bd9b00bb28cc7d417209f374feb4bb23f9093fdab5ff57857b
│   │       ├── 3a
│   │       │   ├── 10
│   │       │   │   └── 33ebb16ca229c4cbdad65ac0947fbeb3765befe98674faa960578851637f
│   │       │   ├── 21
│   │       │   │   └── 946df9356ae372c19a7700e322d8d0276a406143c7375ce22124fad7dfcd
│   │       │   └── 46
│   │       │       └── 4a802da9ee2134f8f76df15df8ddd2d0f2b05e7de9b1d7e01669c4278824
│   │       ├── 3c
│   │       │   └── f6
│   │       │       └── 26a7f7dccb969c764b8bdecb3667023c64bc1159e674fbeeca633c54964c
│   │       ├── 3d
│   │       │   └── 2f
│   │       │       └── f8441bbef005e18fb70c8e8654894abf17ac44b2140cfd60f172246d894f
│   │       ├── 3e
│   │       │   └── 49
│   │       │       └── fc9a5a5b33508297834c9a4acf4d4de5b46348df8093fa7d0a6f82aba3d5
│   │       ├── 3f
│   │       │   ├── 3a
│   │       │   │   └── 2f0714110028b8f228c7c95100ea873c5a00ea03a97ed1d1f555cd404e1f
│   │       │   └── 55
│   │       │       └── a551d4620944369d858a04648adf3994a33934840d738144392e51784ac1
│   │       ├── 40
│   │       │   ├── 17
│   │       │   │   └── 8828f1bc3c004a75e5f93ab594b7418ca18ac8660a28916cc6e51643994d
│   │       │   └── 1e
│   │       │       └── 89f0b89d2ca92cd54ff481086fdd599c67170ea69eb9b22d37e34638d25e
│   │       ├── 42
│   │       │   └── 8b
│   │       │       └── c02d827ace565a38508b184eec46432a592ba2550cdb1930cd90b866d766
│   │       ├── 43
│   │       │   ├── 5f
│   │       │   │   └── 110819c5903563df1824b2214749ef7781289e80d4a600347e3901aac1c4
│   │       │   └── b0
│   │       │       └── 1da35d6e384e0146648258aa5ea61333fd10d6d00300adf4aac974f6d1e2
│   │       ├── 44
│   │       │   └── 10
│   │       │       └── 7cf4f1b3974687000c3e81a7b9d017adb6b8416e32f27309b764b12b8be5
│   │       ├── 45
│   │       │   └── 2e
│   │       │       └── 93eac58d3d5aa3f5721ac09fa7c3b814ccb98bc5000550243f4497f78a67
│   │       ├── 46
│   │       │   └── 98
│   │       │       └── 3144eac06844196da14c933cccc766b529c8917a7efc1c6c79bba5651a6e
│   │       ├── 47
│   │       │   └── 12
│   │       │       └── 2b0123c780f4536fbd0b803d54bb573a256230046b95fd342da9df92dc8d
│   │       ├── 48
│   │       │   ├── 7f
│   │       │   │   └── 4f4a841cc66ee33998620da1f4f341e422d9ebb37bb00178f3707927db1b
│   │       │   ├── ae
│   │       │   │   ├── 1499701156e55c38f37c319e42d8ee632f62ee16e676fb96bf268dc03e39
│   │       │   │   └── f6dae96ac72c3518cd54e6a1cf5ac3bc59c80cfdc62d65a101a0cb67304a
│   │       │   └── dd
│   │       │       └── 8c8b3dd9e0048fc9974197e48fdfa5ceb084560780473574323b9bfdebd4
│   │       ├── 4e
│   │       │   ├── 45
│   │       │   │   └── 17bdb2bc7c0f1b72ba954a40424fb4a9ef5929f88e922704c80b3d264ccc
│   │       │   └── be
│   │       │       └── da18b216664b1e58df4ffd6782d77f3c28a3f61355544535ff7704cc1b2d
│   │       ├── 50
│   │       │   ├── 85
│   │       │   │   └── a29f2ec233233dedaf6d110ada83bf22af3e52848fda04a91b64f889f53a
│   │       │   └── bb
│   │       │       └── 1a5b513e51544ef3ffcb8dade26b2fd155f2f50104e8ac073030a9d119ee
│   │       ├── 51
│   │       │   └── 89
│   │       │       └── 3d02d342de41905761accac02260bce79c49652be9e6066da254d77ba04d
│   │       ├── 52
│   │       │   ├── 20
│   │       │   │   └── 702ec5d12a1e111e2534ce89eb0f33f79fe3ffee0e80a428299cdaa0d007
│   │       │   ├── a2
│   │       │   │   └── ba77c6a126c66982a48c1fb49ac1ca7f841619a89a1f0fc5de3512a4b7f0
│   │       │   └── bd
│   │       │       └── 1b45d5168ed8296f6d5d5167fe2f8076e2cd5e5d67d2766935784d3e798d
│   │       ├── 53
│   │       │   └── e1
│   │       │       └── 0dc9829fd62522b01d70c6eff1025e862877619ba63ab3f1445df0451b8c
│   │       ├── 56
│   │       │   ├── 4b
│   │       │   │   └── 859813b09e1e5020654bf65fb2f19970c51f08f788d3c4f2ea5137051e1e
│   │       │   ├── 71
│   │       │   │   └── fa4fe23b6bc134c60d26da3033c87003fb50204af907f8ec32c9a7c9e48c
│   │       │   └── 9b
│   │       │       └── 5bc545281ee1f49775ff8b0f2921a08251d503d559ff3f999be9886f1712
│   │       ├── 57
│   │       │   └── b7
│   │       │       └── 2772f8c4daa4b31074e03545f8e473b547e88ef3141501fe2a54e1abdfc4
│   │       ├── 58
│   │       │   ├── 92
│   │       │   │   └── 5799a11997482f78a71307f2134a84b508b74d7faa3535d40d26c6261638
│   │       │   └── f0
│   │       │       └── 4fe556f104b09be642895a82afa463fe560d9a0dc8f507efeef825a6905e
│   │       ├── 5b
│   │       │   └── 42
│   │       │       └── b4487d788874a06f49235360174f1ba8832e8f6a83cb8533883b8fa09f4b
│   │       ├── 5d
│   │       │   ├── 58
│   │       │   │   └── 39fdc57612a04067ef7ec1c141646752e6563b84430cd56ba1df2434de91
│   │       │   └── ad
│   │       │       └── 1cb61ae613816d5f049cd87dd24009e364126f73726b1f8eab2350fec505
│   │       ├── 60
│   │       │   └── df
│   │       │       └── 89f1345cb5849d888a2cce2e6d6ddc0014eb3d6722956a06241f6e7f3d58
│   │       ├── 63
│   │       │   └── d3
│   │       │       └── bb861348e4b5fc53b62454cd498b01af8a51c93c0ebb3f9ca712ca253566
│   │       ├── 69
│   │       │   ├── 33
│   │       │   │   └── b968e19e42cda755b43c4bd1e354056b2be0e8ff44896e82e4bc9fdb6322
│   │       │   ├── 7f
│   │       │   │   └── ee4d73554ca4b3320cb01b422b9a9d45f388513d8fd2ccf4df9187578ce1
│   │       │   └── 97
│   │       │       └── dc07bc0d29ed2880b0e39905e8bc8a24a0344155c90a7ca65c8093d51295
│   │       ├── 6a
│   │       │   ├── 86
│   │       │   │   └── 14653864a77b7c8644710834018401ea9fd5653744bbbea2201a6af48a9f
│   │       │   └── a7
│   │       │       └── 23f89bea37ae703ce622e7188ccb889113f1d355f754c11544a1caec4cc6
│   │       ├── 6d
│   │       │   ├── 40
│   │       │   │   └── 0b02ee474cc305b6d0da00248cfa61780731440b4f237c6251314258b9bd
│   │       │   ├── 61
│   │       │   │   └── c9e7e8446341cea439547eb023fbf47c954ba932e6944a3fd50413c1e861
│   │       │   └── 65
│   │       │       └── 05c74d488e52e860b9de3668e482a62f5796264d2bf9f2700cf9423add5e
│   │       ├── 6e
│   │       │   └── 9e
│   │       │       └── 2004cc0984629401a6a3d3fa16900d49ac70112df7a8c515ec028b34c59d
│   │       ├── 6f
│   │       │   └── 9f
│   │       │       └── 4244544732d3e784c8fd360e0ea256a943488c53a834da3d0ddf3e83af9b
│   │       ├── 73
│   │       │   ├── c1
│   │       │   │   └── d8bbb109a8fa2903d912518bf54776b7794c8f6f0a759234283c3c2eefab
│   │       │   └── e2
│   │       │       └── 434e6cce71a37629e1945f6d35d5e52c1e34aa88ef24d1915846c72775f1
│   │       ├── 77
│   │       │   ├── 59
│   │       │   │   └── 986079464467eb2c4f1c178bf1c9fa9179b3c8384bd1eff68534419250ea
│   │       │   └── d8
│   │       │       └── 4c73393b4c86b064a434ecae7c4c202784cc49493fdc99469a7dc797494b
│   │       ├── 79
│   │       │   └── 0e
│   │       │       └── e6e294a39cc9407b6358b7284df63feda5d4f96e51519630d06219175167
│   │       ├── 7a
│   │       │   ├── 05
│   │       │   │   └── 8c39e8b9b5af7db5ea9983334f3ee2532aae9b7973de1dbb581781947ed3
│   │       │   ├── 1d
│   │       │   │   └── aa5b15d3f974ebd32c44778518e0984265598aa1e2dddc4ded4feb2a11b1
│   │       │   └── 23
│   │       │       └── df8deeb6de869825106ce68786ba9e16686f20a8b4f1c626c9635a5bc8da
│   │       ├── 7b
│   │       │   └── 1d
│   │       │       └── 314b6515b77b62a66c8a2ac140ac4a6926135c5866837fddded37acb1acf
│   │       ├── 7c
│   │       │   ├── 20
│   │       │   │   └── cba9852dc5e0811d9e6e24e74108bf7727a0c2730516ec8f41a08f13116b
│   │       │   └── 9a
│   │       │       └── 13a1f5cfe2738ebf2558b3fc8173e47bffd478a46c35ee5e0fc6e72e511d
│   │       ├── 7d
│   │       │   └── e8
│   │       │       └── 5446c5cdae0493e4ad3b10347b77c8df4b17b5fbe14834f5c6b06faa9f95
│   │       ├── 7f
│   │       │   ├── d5
│   │       │   │   └── 36068d8df17b31ccdbeedbb62ae94e354f6d768324e0dd6578917b8ecc16
│   │       │   └── f6
│   │       │       └── 5e3925b158405271b2f44be4d1ecbb5c60b3b7da87819ce03956b759b051
│   │       ├── 83
│   │       │   └── ef
│   │       │       └── aff47278d7ef72e864717a2bb5e09eca947c1b761d2a3f590af1b5f1b379
│   │       ├── 85
│   │       │   ├── 20
│   │       │   │   └── 71a0d0584d5ae3631b6b48b18785908616327f10115d683585b05072ca1b
│   │       │   ├── d3
│   │       │   │   └── 1b45f9b1e17b38c211d236888c737ca95cd5b9ca0e42c51cff12aece643f
│   │       │   └── d8
│   │       │       └── 7da2d1eaa517a5e80f7a1a8d7dee184babfd49523097c7b2ea907d755944
│   │       ├── 86
│   │       │   └── df
│   │       │       └── f30ac40daf6afa3c806cd525ffbf33eaad06c5f38e08f7ce9428a303241e
│   │       ├── 87
│   │       │   └── eb
│   │       │       └── ab402da37b8ea447b0cac7c54cf3452aae056ac8c63514cb6730629409a8
│   │       ├── 89
│   │       │   ├── 0b
│   │       │   │   └── e2ba88ed525834b932f3ddb5624a540e279742a3c6851ec4ee466890a5ed
│   │       │   ├── 0c
│   │       │   │   └── 98d70e9e25b9a23c255f11b8acd5d9ebed836d0004871577846f3bc3f03f
│   │       │   ├── 39
│   │       │   │   └── d7518a088b510f892a8355a21e2971328f68a8ef26d1962bbcfc70c84725
│   │       │   └── 58
│   │       │       └── 62a9a2b49fd26f8d788adbe5cc377e776463c3a01839945896d96fa48d4f
│   │       ├── 8a
│   │       │   ├── e9
│   │       │   │   └── f78a927b119d27ece8b731dfde1470b48159f26c89ce35d5fe0fc80122ed
│   │       │   └── ea
│   │       │       └── a9d2d6ff75cba71d63171f51aa258a77d99513740280af3884c1dea1f7cd
│   │       ├── 8b
│   │       │   ├── 4c
│   │       │   │   └── 6c0c483d470762dc61c704d8d07e1edd6421400f274c32ea22f543bfdb16
│   │       │   ├── d9
│   │       │   │   └── 617f84454e0342f885f6cbdd2661990c9060f183e29553e39e0506dbd847
│   │       │   └── ee
│   │       │       └── c2ea22c4bf9c5ddcd0333850e543442de3364478847c7ebc382b1ff3a70d
│   │       ├── 8c
│   │       │   └── 9a
│   │       │       └── e014072a08e7ba0b90a6897c5737bc438be37650b0470bfd7c0b83e18e23
│   │       ├── 8e
│   │       │   ├── 58
│   │       │   │   └── 1ce1355f39c75fa063f8dc1c958c11d57446438253b206afc18efb9f28c9
│   │       │   └── ff
│   │       │       └── fc9a834a298aa364d38f286bfc395217fe0559c9b322231ff5f6265ba504
│   │       ├── 91
│   │       │   └── 08
│   │       │       └── 56fc6b8aa67287e6e60a90a5e8bd6500ef9e97a317a38b324cca616a7d25
│   │       ├── 93
│   │       │   └── 31
│   │       │       └── 9f96e29572a9b3bd880f19dde2e443b99ec81a4258f3e56ce1c4fff64852
│   │       ├── 94
│   │       │   ├── 07
│   │       │   │   └── a7c22ba183764c0c27f706d74812444c27c14a97fc43669b7dd7c32a717f
│   │       │   └── 49
│   │       │       └── 0c8e6bfaa289aa93424dc1f6f28b3decc9f59cb08be977c3040f7d244ac3
│   │       ├── 96
│   │       │   ├── 7c
│   │       │   │   └── 454eb1ff3ec3546d35165170f771ff1c65f055203c5ab9f907e6af7067a8
│   │       │   └── c5
│   │       │       └── cfd4f290453cd7201716a3217433fe76e994d06ad3a598a6ab5772d5280f
│   │       ├── 98
│   │       │   └── fe
│   │       │       └── c68a85433f7c743aa9b9427fb21be6fd8c25f9e7893bd5cf65537496008d
│   │       ├── 9a
│   │       │   ├── 76
│   │       │   │   └── 06192603daebdeebec6ad6e070357bb297b864354a3998c359fa50ad570b
│   │       │   └── bc
│   │       │       └── 143ae50ba22ddec235347ed6a62762b673eddb52cb1939aea401679de36b
│   │       ├── 9d
│   │       │   └── 0d
│   │       │       └── cb301e666cb1b3f23405c9a023a97e35e0b646458b0dc07d4e4c45f072d2
│   │       ├── 9e
│   │       │   └── 24
│   │       │       └── 74490f75d8dec7ba5051c2fb1e3119fa15abb79366ea7664e5fbb2977153
│   │       ├── 9f
│   │       │   └── 43
│   │       │       └── 3636172cbc03abf2262c921f9f71572e6b049aa3db8c65d166bcfe5aca5f
│   │       ├── a1
│   │       │   └── 78
│   │       │       └── ee48142ac207e21a1a2eac9ca7111587ce699eebdc565abb3dfe976abf96
│   │       ├── a2
│   │       │   ├── 60
│   │       │   │   └── ea4e9555df962e8a55d27858ec6e935db7b0356b46d10718029046780c27
│   │       │   ├── 68
│   │       │   │   └── b7b4c1f69b4b4ff6c19e7de1b75dfa3eefbab3d36b6ce4ef15d6f64afb9c
│   │       │   └── b5
│   │       │       └── f2c35332a5ab256ee9271034e3b3b301ece6931e6e92531ca0bd8c08fe9a
│   │       ├── a3
│   │       │   └── 50
│   │       │       └── b739b1f6f936987c26973cec93f36482ed240ab90158c0d04899bab0de13
│   │       ├── a4
│   │       │   └── b7
│   │       │       └── a7cebac941d6c47ac2f6fde93c17edf93f4ae4aa6b051499d8f2ffeab614
│   │       ├── a5
│   │       │   ├── 87
│   │       │   │   └── bc838260e09216f01f45e48f0f96cb7691d978001a792540928b1153baa5
│   │       │   └── b8
│   │       │       └── 454c882933ab15d532e2493b0bd7ce7019f1caca2abb46f076ca0855330b
│   │       ├── a6
│   │       │   └── 54
│   │       │       └── c1733144b73a0422b1daf6390b4562d52ec887d209b643d8b0b789a2e4b1
│   │       ├── a7
│   │       │   └── 04
│   │       │       └── d0646f5e87aed79d9f0ad28e40eff59b4872fd92336c436b29f7280a9d3a
│   │       ├── a9
│   │       │   ├── 92
│   │       │   │   └── c230215c94371d341f1b38927e5f481994a870132101fd50efb0449f27c2
│   │       │   └── f7
│   │       │       └── 4c2a9fe6575921726a5579be73ddb2a3e8a7abbbb66a28c50ca8deaeccc5
│   │       ├── aa
│   │       │   └── cb
│   │       │       └── eb7e78deaaf4e5eba36039b514bbe6541a5e440f56bda5447a6a0c81f2aa
│   │       ├── ab
│   │       │   └── f0
│   │       │       └── 041961d523d853b40e4e55be33fe676651a97b630d01af1b06b28abc5697
│   │       ├── ac
│   │       │   ├── 5d
│   │       │   │   └── bac3965880e0e18bc7d1e21519c9073430f53c69821d54a4aeb5c313357f
│   │       │   └── 86
│   │       │       └── c0732592365d753d382502d91754a3c88f8b20e22cc25a0327beb9429687
│   │       ├── ad
│   │       │   ├── 5c
│   │       │   │   └── 217f4a9502eed2896935b005b187e4713d93ba3dc76eff284b00a1a8b92a
│   │       │   └── 7c
│   │       │       └── cc598261aa7c1f089fdcd0478664f8f5c80f8f02f241f08e3be264a9e616
│   │       ├── ae
│   │       │   └── 78
│   │       │       └── cedd14d309b153583ec33b511626642a5b2cecfae082a664e1e6a368bc97
│   │       ├── af
│   │       │   └── 8a
│   │       │       └── d90cfcd33a9895fbbb880406407aee65cd5b37556b94baafb95ba5cb93dd
│   │       ├── b0
│   │       │   └── 4a
│   │       │       └── c18a99a2710b49b5a3a1121226be4940f623f8ba056f8108a634ed347da9
│   │       ├── b1
│   │       │   ├── 4a
│   │       │   │   └── 6796e751962cdc0f1d356f7c34ae7e66a41858d769156329b5bd4379d591
│   │       │   └── 8f
│   │       │       └── 5767f914aa664f32503df614481bac973784e2bcd2b8af02e84faabe168d
│   │       ├── b2
│   │       │   └── 53
│   │       │       └── a51760f3239bd143eb2f11ec8f083702e47b0ca67ac04a9a45e7336f6cde
│   │       ├── b3
│   │       │   └── 63
│   │       │       └── f693e1cbbd8c651339dc83ea677e236d61935b81de6396cb4847fd5b08e4
│   │       ├── b4
│   │       │   └── d4
│   │       │       └── aa802aaebfa5cce97b6f2e688062d965ef9940c20866c45eb34a72b47d05
│   │       ├── b7
│   │       │   ├── 38
│   │       │   │   └── 992d3e6c01fc9098d137f7dbccfcaa5f5124ba9c487e582e6e0d83f99d30
│   │       │   └── fe
│   │       │       └── e66fb9a38a1ef7da481d041bc0dd117c0c2bddfa61bcf516da1e1486c290
│   │       ├── bd
│   │       │   └── e8
│   │       │       └── 7741857e809594830141a639d3d54110945a88bb85691de2f9dc97402c84
│   │       ├── be
│   │       │   ├── a3
│   │       │   │   └── c0779c8e0be92c748c91a7dad4e6f0fe57ba0158b6bb1bcfddd8fc56c934
│   │       │   └── f0
│   │       │       └── 1030b67d1c2d501a0e14ff9aea82addbf8b2e760ef58a5be510d7b4bad3c
│   │       ├── bf
│   │       │   ├── 03
│   │       │   │   └── d5dd5fa44593b3e2d24e270c89a4ebe5809a69837946acbe11b5f9ab29d0
│   │       │   └── 7c
│   │       │       └── 375aec77f76404d91225e72006a0105b2a6ec04bb02cfa365ebcd4a0232b
│   │       ├── c0
│   │       │   └── 83
│   │       │       └── 1295af917239a2fbe94404f49d472949b2a2519701a35e8dc9841f02ae34
│   │       ├── c1
│   │       │   ├── 3e
│   │       │   │   └── 4c4d082623156529b4fa73601a4ac92e33a6b20f963f1096cee31b6d9010
│   │       │   └── 8c
│   │       │       └── e4e9afe177a9d6771d71fe96d51887f262a8fede9d9d3e06ca7ddcf20990
│   │       ├── c2
│   │       │   └── d9
│   │       │       └── 7fb959fc2a833b8e68b8306a1b7d4cd5f15c8b4e0c9d6b46a6765796482e
│   │       ├── c3
│   │       │   └── c6
│   │       │       └── be9e8d92e3e1f8898fedbe33cae4e67f0352de1b0d48fee9cb29ecc1d6ab
│   │       ├── c4
│   │       │   ├── 11
│   │       │   │   └── bf2dd5bf2d9b9006f82aeedaffc7f69ad64358a9a08afe81cbcdca1766f2
│   │       │   ├── 68
│   │       │   │   └── b71baf5025326649162df1bd325b5637dd1e72f59a32177b49318d5efeac
│   │       │   ├── ac
│   │       │   │   └── 4511be3eecea50ee9cadc09a612f9be8598d7b29d5c8b1253c75fa283cc5
│   │       │   └── ca
│   │       │       └── df46b5b6c6148487b1afb20084da52f2838a08143f9b0ebd217d2a229e9a
│   │       ├── ca
│   │       │   ├── 98
│   │       │   │   └── 29ae16b7b413d7a609c6beba2ab22ac51a8f88aa3c3a36759292907ce3ac
│   │       │   └── f8
│   │       │       └── 5fdf8973f1896e77c07a4919f6166c6a04ef8354c5efb0156670a06d24e3
│   │       ├── cb
│   │       │   └── c7
│   │       │       └── 8dc870ee1a760dfda5ed1c13aec5056dae100cec5c9af892474d802a65b0
│   │       ├── cc
│   │       │   ├── 25
│   │       │   │   └── 0a0ad2d0308b6807a70e488194992de068d68b749910eee4847c38629984
│   │       │   ├── 60
│   │       │   │   └── ca5eb4c028e64ab99a3a71e5e6cff685d49a0052a23f473310db7d984f23
│   │       │   └── fb
│   │       │       └── 96cd6e2c34dfd1fc2a68d5b85c353ec81fec75a8e0856070c12777141d13
│   │       ├── d0
│   │       │   ├── 12
│   │       │   │   └── 0e893a332c0e07c4e6ad382322604cf61f86ba7822a3e02b24d4105846cb
│   │       │   ├── 39
│   │       │   │   └── f3ea46b7a48d1b108681523c9e802f48f2779894068bc9b984863ca18939
│   │       │   ├── 57
│   │       │   │   └── 3aa5d94761ad382e1a1acc61203736494009e20422bce1dd1433666dd012
│   │       │   └── f3
│   │       │       └── 570007f66e0a594c21201eb3e8f15d7a4d92bcb97b59246e5b7194b3b290
│   │       ├── d1
│   │       │   ├── 34
│   │       │   │   └── dd11aca2ddd3aeb854849cd81cab78174fc5ea935c0fd552de94684f90a8
│   │       │   ├── 3b
│   │       │   │   └── 5d145862c809774efedb998cae0b11c4062b94265112f8db93a55edb929e
│   │       │   └── 91
│   │       │       └── 1ea8e1c5735aa7333775abaea09cba50e98296556053fba7d4dd227c6732
│   │       ├── d2
│   │       │   ├── 3c
│   │       │   │   └── 9b2e81a9ef349bd31c3c94f1c2d4040643ee96b8128c972db597415d555c
│   │       │   └── 53
│   │       │       └── 0423c306fc66318eb336eeb4033781a7b495f0aa3ba92eec00f34069f13e
│   │       ├── d4
│   │       │   ├── 42
│   │       │   │   └── dcecd9ea33544599eb1e71ac0fd23e843f4caf0dd35ae634e5a1e2bca450
│   │       │   ├── 8f
│   │       │   │   └── 715a86aa779da41ab634b8f3191069d4b2966a3c5b47cb739ab6a9b93aec
│   │       │   └── a2
│   │       │       └── 61ef4c73c2a4a1a021b2b9d9d54cd0acbea9f5e44cebff230278f27bd92a
│   │       ├── d5
│   │       │   └── f4
│   │       │       └── 0913a74f5e223a4fe6108493dd3b03c2d47259df459926160659513c9ad3
│   │       ├── d6
│   │       │   ├── 3c
│   │       │   │   └── 3fd6a899c59ae533d9a5bb44570ada1eddb5802483d3e7812df2c207a7e1
│   │       │   ├── 47
│   │       │   │   └── 2d4e4b363564f0b3d6e59012bb07573fb947a866841f5259a96439aa3964
│   │       │   └── 4d
│   │       │       └── 95351bd7b1c4630fa6590049d83b56ced950f5f2fd281f27e28527249cee
│   │       ├── d7
│   │       │   └── 98
│   │       │       └── 895bffa858148e74eb0bae5ede536d11e4eb6ba643223069874bea4f6498
│   │       ├── d8
│   │       │   ├── 62
│   │       │   │   └── fa9d7982c1af34cc1664c1504cdcf5728bee5cbfba341507a5c033098737
│   │       │   └── f2
│   │       │       └── dfd78c09b8752f2fd7100ea4a9f64cec29a053d57d72983420eb853b3e6a
│   │       ├── dc
│   │       │   ├── 47
│   │       │   │   └── 9e3985de44e70129e4e28c25bdc69a204acabcbdd5962cf5109db4ca7aa5
│   │       │   └── 8a
│   │       │       └── 4dc2a1bdf5b195e99648a945ce742de5f6d0b1aac410a6fe3e7155933cc7
│   │       ├── e1
│   │       │   └── 53
│   │       │       └── 4da55a553f57b5ef4eb84d567d8d4fbd67732c8c090da290c199e0ac2ed4
│   │       ├── e3
│   │       │   └── c5
│   │       │       └── ad2fd86fe0c1b9f233d92c25e56b1a582b8425b52db4767f8d72410c021f
│   │       ├── e4
│   │       │   └── f2
│   │       │       └── 0b57f65571788559ed93ba6d26cacaac21da8e4adfe374787669e431e875
│   │       ├── e6
│   │       │   ├── 37
│   │       │   │   └── c9e69f5074e9a22c766ffcc622280d4e580d2ee0238f670f28199487dd44
│   │       │   └── f1
│   │       │       └── aa87087a727f6fb26b60b78c06c2b830f509c809c7b1752ab1bcab0a15af
│   │       ├── e7
│   │       │   ├── 40
│   │       │   │   └── 70186a6ceaad19b6b11ac1bccf00fa5e038b8151d455127f9868f0051d57
│   │       │   ├── 6f
│   │       │   │   └── 6df2d13a4e315af18cce3e1c8a09c911262fc54f57e6fc47d361ddcf408d
│   │       │   ├── 9e
│   │       │   │   └── 9df988403d9266b9610bf520678520e200090b726c2ea164a0fe727500ba
│   │       │   ├── a3
│   │       │   │   └── 60cfc8947cb925b4deffc13cf15258a667e1653daa12cf0001b2e0083bfb
│   │       │   └── e9
│   │       │       └── d2369beb18730dc4f30e1c9dcdf5bf16ac9bd28dec641b81ff8e8616e7fc
│   │       ├── e9
│   │       │   ├── 6e
│   │       │   │   └── ba29811d787f0fd92ce7f4bc3a6827dc6d66c47153d50683c80d6e7a9a6f
│   │       │   ├── 9a
│   │       │   │   └── b309e8b758264ef32fd578a2928ad1ac4a3241e8c570a5c275e121dd7ee1
│   │       │   ├── bf
│   │       │   │   └── 0bfc4abc982e4aecac42d77dbded146ef0ce46649865b55d62144af5a96d
│   │       │   ├── cb
│   │       │   │   └── b6d58aac267a95803951157a42d29db6c17ef57c66eb59c48684c280e4e8
│   │       │   └── df
│   │       │       └── 500f6d65c0cf35c0f7c0635f953b37393168aa27cb55c7b0ce3399c0d7f2
│   │       ├── ec
│   │       │   ├── 87
│   │       │   │   └── d81e1e7b2d776e609dbfaa2175a5825c0a63a9bcc70fdb5694b81e7f4fc3
│   │       │   └── 8e
│   │       │       └── 97eeecddd26637708519813d42ee2a5ec256bd4831ffa02269e8993e19b7
│   │       ├── ed
│   │       │   └── 40
│   │       │       └── e67da4ad085eef0344d8e253e4455423e0efc042d3898be0a399d1a76b79
│   │       ├── ee
│   │       │   ├── 3d
│   │       │   │   └── 1ab77d088759d13cd44eab2a2f7764233b7908340d97282d9765e014f29c
│   │       │   ├── 60
│   │       │   │   └── 850558038dbacbcba5202b181a0a0c4f947405cf3682df3e1c20dec79137
│   │       │   └── 7a
│   │       │       └── ee0e1b8bea3f05c1b42f1fe4a17fdc2aa37be14405f4e293de10bd30eb80
│   │       ├── f1
│   │       │   ├── 53
│   │       │   │   └── 8aee994a2b5c701755cdc5660748a90199cf48437f5f93fdd0572344f2f1
│   │       │   └── a1
│   │       │       └── 1de8ff1c9230508fdf1c71b3faa1a9d2aade80a7e0b0d4daa6f4040d8ba2
│   │       ├── f3
│   │       │   ├── 2c
│   │       │   │   └── 80267cf9b394a43404ccabe3e574f5fd89b769b43be625b75ff9b1b4a2ee
│   │       │   ├── 8b
│   │       │   │   └── 4a6b7b0714b6f1c94fff48ad31ee18cb6aa93ed63612067b4de30efd43f8
│   │       │   └── f5
│   │       │       └── d11839881d6df2061b642074ebfaf84ce0d4b1d8e227ad335d364cf6a913
│   │       ├── f4
│   │       │   └── 47
│   │       │       └── 8cb011f7e5de40eae9588617e8f3bce662a0ba2d60796b559a420b44783a
│   │       ├── f6
│   │       │   └── c7
│   │       │       └── c2aee6453a94a772577d770a438f34805af27cbf0c7a776b19d6850307b5
│   │       ├── f9
│   │       │   └── 82
│   │       │       └── 228120d240455dd412cb68cbe2007319fbf91d96bb998e7f24c45faadc0b
│   │       ├── fa
│   │       │   ├── 88
│   │       │   │   └── 31cbd6ca584e75edf3642c6f8b079c1f2b5eca1d7b2780ce2e86c24f1e84
│   │       │   └── a1
│   │       │       └── dd9e9a25a0a13875f496dfc7b415ddc641f6b30648050accc001be4635ee
│   │       ├── fb
│   │       │   └── fc
│   │       │       └── 6282476d454ca3b17e0ba6cf70a4b6a87142bd8f3139517d572b2f9911a4
│   │       ├── fc
│   │       │   └── ee
│   │       │       └── fc3e1dd6706bd557d2840d92ff10cdd6928b92fb8c46d2195dfbd8d4b2be
│   │       ├── fd
│   │       │   └── 60
│   │       │       └── 528c5445a438483b66270e6a4dddfa6e9bdcceb2b998cb6f7580d23ceb1b
│   │       └── ff
│   │           ├── 9f
│   │           │   └── 48b5354df0d5feb3420245101c38efe5fb13f171ce2093c16eeb4ba41c7e
│   │           └── d6
│   │               └── 9ea5f7eac400baceca422723dd933d7c505c100130f066f787943d1ac679
│   └── _update-notifier-last-checked
├── .pre-commit-config.yaml
├── .pre-commit-setup.md
├── .prettierrc.json
├── .tmp
│   └── temp-1758247471070.ts
├── archive
│   └── ebook
│       └── enterprise_architecture_mcp_ebook.pdf
├── async-fix-verification-summary.md
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── custom
│   ├── dir
│   │   └── adr-0001-complete-decision.md
│   └── research
│       ├── dir
│       │   └── perform_research_test_research_001.md
│       └── README.md
├── debug_test.js
├── docker-compose.docs.yml
├── docs
│   ├── .dockerignore
│   ├── .gitignore
│   ├── .vitepress
│   │   └── config.js
│   ├── adrs
│   │   ├── adr-0001-integration-test-decision.md
│   │   ├── adr-0001-test-decision.md
│   │   ├── adr-001-mcp-protocol-implementation-strategy.md
│   │   ├── adr-002-ai-integration-and-advanced-prompting-strategy.md
│   │   ├── adr-003-memory-centric-architecture.md
│   │   ├── adr-004-security-and-content-masking-strategy.md
│   │   ├── adr-005-testing-and-quality-assurance-strategy.md
│   │   ├── adr-006-tree-sitter-integration-strategy.md
│   │   ├── adr-007-cicd-pipeline-strategy.md
│   │   ├── adr-008-development-workflow-strategy.md
│   │   ├── adr-009-package-distribution-strategy.md
│   │   └── README.md
│   ├── api-styles.css
│   ├── CODE_OF_CONDUCT.md
│   ├── community
│   │   ├── .github
│   │   │   ├── ISSUE_TEMPLATE
│   │   │   │   ├── bug_report.yml
│   │   │   │   └── feature_request.yml
│   │   │   └── PULL_REQUEST_TEMPLATE.md
│   │   ├── CODE_OF_CONDUCT.md
│   │   ├── CONTRIBUTING.md
│   │   ├── README-library.md
│   │   └── SECURITY.md
│   ├── configuration.md
│   ├── CONTRIBUTING.md
│   ├── CONVERSION_CHECKLIST.md
│   ├── DEPENDABOT.md
│   ├── DEPLOYMENT_GUIDE.md
│   ├── development.md
│   ├── diataxis-index.md
│   ├── DOCKER_SETUP.md
│   ├── DOCKER_TEST_SUCCESS.txt
│   ├── docker-compose.yml
│   ├── Dockerfile
│   ├── DOCUMENTATION_IMPROVEMENT_PLAN.md
│   ├── DOCUMENTATION-UPDATE-PLAN.md
│   ├── DOCUSAURUS_MIGRATION.md
│   ├── DOCUSAURUS_QUICKSTART.md
│   ├── docusaurus.config.js
│   ├── explanation
│   │   ├── adr-philosophy.md
│   │   ├── ai-architecture-concepts.md
│   │   ├── ai-workflow-concepts.md
│   │   ├── ape-framework-design.md
│   │   ├── architecture-overview.md
│   │   ├── context-file-tool-coverage.md
│   │   ├── index.md
│   │   ├── knowledge-generation-framework-design.md
│   │   ├── knowledge-graph.md
│   │   ├── mcp-architecture-flow.md
│   │   ├── mcp-concepts.md
│   │   ├── performance-design.md
│   │   ├── prompt-engineering.md
│   │   ├── reflexion-framework-design.md
│   │   ├── security-philosophy.md
│   │   ├── self-learning-architecture.md
│   │   ├── server-architecture.md
│   │   └── tool-design.md
│   ├── how-to
│   │   ├── deploy-to-production.md
│   │   └── index.md
│   ├── how-to-guides
│   │   ├── ape-implementation-strategy.md
│   │   ├── ape-usage-guide.md
│   │   ├── bootstrap-architecture-docs.md
│   │   ├── cicd-integration.md
│   │   ├── contribute.md
│   │   ├── custom-rules.md
│   │   ├── deploy-your-own-server.md
│   │   ├── deployment-readiness.md
│   │   ├── firecrawl-setup.md
│   │   ├── generate-adrs-from-prd.md
│   │   ├── getting-started-workflow-guidance.md
│   │   ├── installation-guide.md
│   │   ├── interactive-adr-planning.md
│   │   ├── knowledge-generation-usage-guide.md
│   │   ├── large-team-scaling.md
│   │   ├── llm-context-file-configuration.md
│   │   ├── mcp-client-compatibility.md
│   │   ├── migrate-existing-adrs.md
│   │   ├── performance-testing.md
│   │   ├── prd-to-adrs.md
│   │   ├── progress-tracking.md
│   │   ├── prompting-guide.md
│   │   ├── reflexion-implementation-strategy.md
│   │   ├── reflexion-usage-guide.md
│   │   ├── research-integration.md
│   │   ├── security-analysis.md
│   │   ├── server-context-file.md
│   │   ├── testing-guide.md
│   │   ├── tool-development.md
│   │   ├── troubleshooting.md
│   │   └── work-with-existing-adrs.md
│   ├── ide-rules
│   │   ├── additional-workflows.md
│   │   ├── command-structure.md
│   │   ├── environment-validation-workflow.md
│   │   ├── ide-specific
│   │   │   ├── cursor
│   │   │   │   └── cursor-rules-template.md
│   │   │   ├── jetbrains
│   │   │   │   └── jetbrains-rules-template.md
│   │   │   ├── vscode
│   │   │   │   └── vscode-rules-template.md
│   │   │   └── windsurf
│   │   │       └── windsurf-rules-template.md
│   │   ├── quickstart-guide.md
│   │   ├── README.md
│   │   ├── standalone-usage.md
│   │   └── universal-workflows.md
│   ├── index.md
│   ├── LOGO_DESIGN_PROMPT.md
│   ├── Makefile
│   ├── mcp-planning-tool-usage.md
│   ├── MIGRATION_GUIDE.md
│   ├── nginx.conf
│   ├── notes
│   │   ├── DEVELOPER_GUIDANCE.md
│   │   ├── knowledge-graph.md
│   │   ├── media
│   │   │   ├── 01-first-steps.md
│   │   │   ├── diataxis-index.md
│   │   │   ├── install-rhel.sh
│   │   │   ├── LICENSE
│   │   │   ├── mcp-client-config.md
│   │   │   ├── mcp-concepts.md
│   │   │   ├── performance-design.md
│   │   │   ├── security-philosophy.md
│   │   │   └── troubleshooting.md
│   │   ├── performance-design.md
│   │   ├── prompt-engineering.md
│   │   ├── README.md
│   │   ├── RESEARCH-DRIVEN-ARCHITECTURE.md
│   │   ├── RESEARCH-DRIVEN-INTEGRATION-ANALYSIS.md
│   │   ├── research-driven-workflow.md
│   │   ├── research-integration.md
│   │   ├── technical-debt
│   │   │   └── LINT_CLEANUP_PLAN.md
│   │   ├── tool-design.md
│   │   └── USER_GUIDANCE.md
│   ├── package-lock.json
│   ├── package.json
│   ├── public
│   │   └── logo.png
│   ├── QUICK_START.md
│   ├── README_SCRIPTS.md
│   ├── README-library.md
│   ├── README.md
│   ├── reference
│   │   ├── analysis-tools.md
│   │   ├── api-documentation.md
│   │   ├── api-reference-updated.md
│   │   ├── api-reference.md
│   │   ├── comprehensive-api-reference.md
│   │   ├── environment-config.md
│   │   ├── generation-tools.md
│   │   ├── index.md
│   │   ├── mcp-client-config.md
│   │   ├── security-tools.md
│   │   ├── usage-examples.md
│   │   └── validation-tools.md
│   ├── release-dashboard.md
│   ├── research
│   │   ├── perform_research_research_000.md
│   │   ├── perform_research_research_001.md
│   │   ├── perform_research_research_002.md
│   │   ├── perform_research_research_003.md
│   │   ├── perform_research_research_004.md
│   │   ├── perform_research_research_005.md
│   │   ├── perform_research_research_006.md
│   │   ├── perform_research_research_007.md
│   │   ├── perform_research_research_008.md
│   │   ├── perform_research_research_009.md
│   │   ├── perform_research_research_010.md
│   │   ├── perform_research_research_011.md
│   │   ├── perform_research_research_012.md
│   │   ├── perform_research_research_013.md
│   │   ├── perform_research_research_014.md
│   │   ├── perform_research_research_015.md
│   │   ├── perform_research_research_016.md
│   │   ├── perform_research_research_017.md
│   │   ├── perform_research_research_018.md
│   │   ├── perform_research_research_019.md
│   │   ├── perform_research_research_020.md
│   │   ├── perform_research_research_021.md
│   │   ├── perform_research_research_022.md
│   │   ├── perform_research_research_023.md
│   │   ├── perform_research_research_024.md
│   │   ├── perform_research_research_025.md
│   │   ├── perform_research_research_026.md
│   │   ├── perform_research_research_027.md
│   │   ├── perform_research_research_028.md
│   │   ├── perform_research_research_029.md
│   │   ├── perform_research_research_030.md
│   │   ├── perform_research_research_031.md
│   │   ├── perform_research_research_032.md
│   │   ├── perform_research_research_033.md
│   │   ├── perform_research_research_034.md
│   │   ├── perform_research_research_035.md
│   │   ├── perform_research_research_036.md
│   │   ├── perform_research_research_037.md
│   │   ├── perform_research_research_038.md
│   │   ├── perform_research_research_039.md
│   │   ├── perform_research_research_040.md
│   │   ├── perform_research_research_041.md
│   │   ├── perform_research_research_042.md
│   │   ├── perform_research_research_043.md
│   │   ├── perform_research_research_044.md
│   │   ├── perform_research_research_045.md
│   │   ├── perform_research_research_046.md
│   │   ├── perform_research_research_047.md
│   │   ├── perform_research_research_048.md
│   │   ├── perform_research_research_049.md
│   │   ├── perform_research_test_research__________001.md
│   │   ├── perform_research_test_research_001.md
│   │   ├── perform_research_test_research_002.md
│   │   ├── perform_research_test_unicode.md
│   │   └── README.md
│   ├── SECURITY.md
│   ├── setup-docusaurus.sh
│   ├── setup-website.sh
│   ├── sidebars.js
│   ├── sitemap.xml
│   ├── src
│   │   └── css
│   │       └── custom.css
│   ├── static
│   │   └── img
│   │       ├── logo.png
│   │       └── og-image.png
│   ├── technical.md
│   ├── TESTING_GUIDE.md
│   ├── TODO_MANAGEMENT_FIX.md
│   ├── tsconfig.json
│   ├── tutorials
│   │   ├── 01-first-steps.md
│   │   ├── 02-existing-projects.md
│   │   ├── 03-advanced-analysis.md
│   │   ├── index.md
│   │   ├── security-focused-workflow.md
│   │   └── team-collaboration.md
│   ├── VERSION_MANAGEMENT.md
│   └── WEBSITE_SETUP.md
├── eslint.config.js
├── jest.config.js
├── LICENSE
├── LLM_CONTEXT.md
├── Makefile
├── mcp-inspector-config.json
├── mcp-test-results.json
├── package-lock.json
├── package.json
├── README.md
├── RELEASE_NOTES_v2.0.22.md
├── reports
│   ├── comprehensive-validation_20251003_185155.json
│   ├── link-summary_20251003_185121.json
│   ├── link-validation_20250922_151241.txt
│   ├── link-validation_20250922_151242.txt
│   ├── link-validation_20251003_184136.txt
│   ├── link-validation_20251003_184141.txt
│   ├── link-validation_20251003_184945.txt
│   ├── link-validation_20251003_185000.txt
│   ├── link-validation_20251003_185121.txt
│   └── markdown-validation_20251003_185155.txt
├── sample-project
│   ├── docs
│   │   └── adrs
│   │       ├── 001-database-architecture.md
│   │       ├── 002-api-authentication.md
│   │       └── 003-legacy-data-migration.md
│   └── README.md
├── scripts
│   ├── ai-release-notes.ts
│   ├── check-docs-links.sh
│   ├── check-duplicate-links.ts
│   ├── cleanup-template-docs.sh
│   ├── docs-workflow.sh
│   ├── fix-broken-links.py
│   ├── fix-docs-accuracy.sh
│   ├── fix-docs-content-accuracy.sh
│   ├── install-rhel.sh
│   ├── pre-commit-check.sh
│   ├── pre-commit-checklist.sh
│   ├── remove-duplicate-docs.sh
│   ├── sync-tags-to-npm.sh
│   ├── test-advanced-prompting.sh
│   ├── test-infrastructure.sh
│   ├── test-mcp-functionality.sh
│   ├── test-mcp-logging.ts
│   ├── test-mcp-server.sh
│   ├── test-node-compatibility.js
│   ├── test-npm-package.sh
│   ├── test-release-integration.sh
│   ├── validate-build.js
│   ├── validate-docs.sh
│   └── validate-links-with-sitemap.ts
├── SECURITY.md
├── src
│   ├── config
│   │   └── ai-config.ts
│   ├── index.ts
│   ├── prompts
│   │   ├── adr-suggestion-prompts.ts
│   │   ├── analysis-prompts.ts
│   │   ├── deployment-analysis-prompts.ts
│   │   ├── environment-analysis-prompts.ts
│   │   ├── index.ts
│   │   ├── research-integration-prompts.ts
│   │   ├── research-question-prompts.ts
│   │   ├── rule-generation-prompts.ts
│   │   └── security-prompts.ts
│   ├── resources
│   │   ├── adr-by-id-resource.ts
│   │   ├── code-quality-resource.ts
│   │   ├── deployment-history-resource.ts
│   │   ├── deployment-status-resource.ts
│   │   ├── environment-analysis-resource.ts
│   │   ├── index.ts
│   │   ├── memory-snapshots-resource.ts
│   │   ├── pattern-by-name-resource.ts
│   │   ├── project-metrics-resource.ts
│   │   ├── project-status-resource.ts
│   │   ├── research-by-topic-resource.ts
│   │   ├── research-index-resource.ts
│   │   ├── resource-cache.ts
│   │   ├── resource-router.ts
│   │   ├── rule-by-id-resource.ts
│   │   ├── rule-catalog-resource.ts
│   │   ├── rule-generation-resource.ts
│   │   ├── technology-by-name-resource.ts
│   │   ├── todo-by-id-resource.ts
│   │   └── todo-list-resource.ts
│   ├── templates
│   │   └── domain-knowledge-templates.ts
│   ├── tools
│   │   ├── adr-bootstrap-validation-tool.ts
│   │   ├── adr-suggestion-tool.ts
│   │   ├── adr-validation-tool.ts
│   │   ├── bootstrap-validation-loop-tool.ts
│   │   ├── content-masking-tool.ts
│   │   ├── conversation-memory-tool.ts
│   │   ├── deployment-analysis-tool.ts
│   │   ├── deployment-guidance-tool.ts
│   │   ├── deployment-readiness-tool.ts
│   │   ├── environment-analysis-tool.ts
│   │   ├── expand-analysis-tool.ts
│   │   ├── get-server-context-tool.ts
│   │   ├── interactive-adr-planning-tool.ts
│   │   ├── llm-cloud-management-tool.ts
│   │   ├── llm-database-management-tool.ts
│   │   ├── llm-web-search-tool.ts
│   │   ├── mcp-planning-tool.ts
│   │   ├── memory-loading-tool.ts
│   │   ├── perform-research-tool.ts
│   │   ├── research-integration-tool.ts
│   │   ├── research-question-tool.ts
│   │   ├── review-existing-adrs-tool.ts
│   │   ├── rule-generation-tool.ts
│   │   ├── smart-git-push-tool-v2.ts
│   │   ├── smart-git-push-tool.ts
│   │   ├── tool-chain-orchestrator.ts
│   │   └── troubleshoot-guided-workflow-tool.ts
│   ├── types
│   │   ├── ape-framework.ts
│   │   ├── conversation-context.ts
│   │   ├── conversation-memory.ts
│   │   ├── enhanced-errors.ts
│   │   ├── index.ts
│   │   ├── knowledge-generation.ts
│   │   ├── knowledge-graph-schemas.ts
│   │   ├── memory-entities.ts
│   │   ├── reflexion-framework.ts
│   │   ├── state-reinforcement.ts
│   │   ├── tiered-response.ts
│   │   ├── tool-arguments.ts
│   │   └── tool-context.ts
│   └── utils
│       ├── actual-file-operations.ts
│       ├── adr-discovery.ts
│       ├── adr-knowledge-initializer.ts
│       ├── adr-suggestions.ts
│       ├── ai-executor.ts
│       ├── apply-cot-enhancement.ts
│       ├── automatic-prompt-engineering.ts
│       ├── cache.ts
│       ├── chain-of-thought-template.ts
│       ├── conditional-request.ts
│       ├── config.ts
│       ├── content-masking.ts
│       ├── conversation-memory-manager.ts
│       ├── deployment-analysis.ts
│       ├── deployment-type-registry.ts
│       ├── directory-compat.ts
│       ├── dynamic-deployment-intelligence.ts
│       ├── enhanced-logging.ts
│       ├── environment-analysis.ts
│       ├── environment-capability-registry.ts
│       ├── file-system.ts
│       ├── file-system.ts.backup
│       ├── gitleaks-detector.ts
│       ├── index.ts
│       ├── interactive-approval.ts
│       ├── json-safe.ts
│       ├── knowledge-generation.ts
│       ├── knowledge-graph-manager.ts
│       ├── llm-artifact-detector.ts
│       ├── location-filter.ts
│       ├── mcp-response-validator.ts
│       ├── memory-entity-manager.ts
│       ├── memory-health-scoring.ts
│       ├── memory-migration-manager.ts
│       ├── memory-relationship-mapper.ts
│       ├── memory-rollback-manager.ts
│       ├── memory-transformation.ts
│       ├── monitoring.ts
│       ├── output-masking.ts
│       ├── prompt-composition.ts
│       ├── prompt-execution.ts
│       ├── reflexion.ts
│       ├── release-readiness-detector.ts
│       ├── research-documentation.ts
│       ├── research-integration.ts
│       ├── research-orchestrator.ts
│       ├── research-questions.ts
│       ├── resource-versioning.ts
│       ├── ripgrep-wrapper.ts
│       ├── root-manager.ts
│       ├── rule-format.ts
│       ├── rule-generation.ts
│       ├── server-context-generator.ts
│       ├── state-reinforcement-manager.ts
│       ├── tiered-response-manager.ts
│       └── tree-sitter-analyzer.ts
├── test-results
│   └── junit.xml
├── tests
│   ├── __mocks__
│   │   ├── @tree-sitter-grammars
│   │   │   └── tree-sitter-hcl.ts
│   │   ├── tree-sitter-bash.ts
│   │   ├── tree-sitter-dockerfile.ts
│   │   ├── tree-sitter-javascript.ts
│   │   ├── tree-sitter-json.ts
│   │   ├── tree-sitter-python.ts
│   │   ├── tree-sitter-typescript.ts
│   │   ├── tree-sitter-yaml.ts
│   │   └── tree-sitter.ts
│   ├── ape.test.ts
│   ├── cache-architecture-analysis.md
│   ├── cache.test.ts
│   ├── config
│   │   └── ai-config.test.ts
│   ├── config.test.ts
│   ├── index.test.ts
│   ├── integration
│   │   ├── memory-migration-integration.test.ts
│   │   ├── memory-migration-simple.test.ts
│   │   ├── memory-system-integration.test.ts
│   │   └── smart-code-linking.test.ts
│   ├── knowledge-generation.test.ts
│   ├── mcp-server.test.ts
│   ├── performance
│   │   └── memory-performance.test.ts
│   ├── performance-effectiveness.test.ts
│   ├── prompts
│   │   ├── deployment-analysis-prompts.test.ts
│   │   ├── environment-analysis-prompts.test.ts
│   │   ├── research-integration-prompts.test.ts
│   │   ├── research-question-prompts.test.ts
│   │   ├── rule-generation-prompts.test.ts
│   │   └── security-prompts.test.ts
│   ├── README.md
│   ├── reflexion.test.ts
│   ├── research-integration-tool.test.ts
│   ├── research-question-tool.test.ts
│   ├── resources
│   │   ├── code-quality-resource.test.ts
│   │   └── deployment-history-resource.test.ts
│   ├── setup.ts
│   ├── smart-git-push-release-readiness.test.ts
│   ├── smart-git-push-v2.test.ts
│   ├── smart-git-push.test.ts
│   ├── smoke.test.ts
│   ├── templates
│   │   └── domain-knowledge-templates.test.ts
│   ├── tools
│   │   ├── adr-bootstrap-validation-tool.test.ts
│   │   ├── adr-suggestion-tool.test.ts
│   │   ├── adr-validation-tool.test.ts
│   │   ├── content-masking-tool.test.ts
│   │   ├── deployment-analysis-tool.test.ts
│   │   ├── deployment-guidance-tool.test.ts
│   │   ├── deployment-readiness-tool.test.ts
│   │   ├── environment-analysis-tool.test.ts
│   │   ├── interactive-adr-planning-tool.test.ts
│   │   ├── mcp-planning-tool.test.ts
│   │   ├── memory-loading-tool.test.ts
│   │   ├── perform-research-tool.test.ts
│   │   ├── perform-research-tool.test.ts.backup
│   │   ├── research-integration-tool.test.ts
│   │   ├── review-existing-adrs-tool.test.ts
│   │   ├── rule-generation-tool.test.ts
│   │   ├── smart-git-push-tool-v2.test.ts
│   │   ├── smart-git-push-tool.test.ts
│   │   ├── tool-chain-orchestrator.test.ts
│   │   └── troubleshoot-guided-workflow-tool.test.ts
│   ├── types
│   │   └── conversation-context.test.ts
│   ├── types.test.ts
│   ├── utils
│   │   ├── adr-knowledge-initializer.test.ts
│   │   ├── advanced-prompting-test-utils.ts
│   │   ├── ai-executor.test.ts
│   │   ├── conditional-request.test.ts
│   │   ├── deployment-analysis.test.ts
│   │   ├── environment-capability-registry.test.ts
│   │   ├── file-system.test.ts
│   │   ├── find-related-code.test.ts
│   │   ├── gitleaks-detector.test.ts
│   │   ├── interactive-approval.test.ts
│   │   ├── llm-artifact-detector.test.ts
│   │   ├── location-filter.test.ts
│   │   ├── mcp-response-validator.test.ts
│   │   ├── memory-entity-manager.test.ts
│   │   ├── memory-relationship-mapper.test.ts
│   │   ├── memory-rollback-manager.test.ts
│   │   ├── memory-transformation.test.ts
│   │   ├── monitoring-smoke.test.ts
│   │   ├── monitoring.test.ts
│   │   ├── output-masking.test.ts
│   │   ├── prompt-composition.test.ts
│   │   ├── prompt-execution.test.ts
│   │   ├── release-readiness-detector.test.ts
│   │   ├── research-documentation.test.ts
│   │   ├── research-integration.test.ts
│   │   ├── research-orchestrator.test.ts
│   │   ├── research-questions.test.ts
│   │   ├── resource-versioning.test.ts
│   │   ├── rule-format.test.ts
│   │   ├── rule-generation.test.ts
│   │   ├── test-config.ts
│   │   ├── test-helpers.test.ts
│   │   ├── test-helpers.ts
│   │   ├── test-infrastructure.test.ts
│   │   ├── test-infrastructure.ts
│   │   ├── tree-sitter-analyzer.test.ts
│   │   └── tree-sitter-jest-integration.test.ts
│   └── version.test.ts
├── tsconfig.json
└── typedoc.json
```

# Files

--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------

```typescript
   1 | #!/usr/bin/env node
   2 | 
   3 | /**
   4 |  * MCP ADR Analysis Server
   5 |  * Main entry point for the Model Context Protocol server
   6 |  *
   7 |  * This server provides Tools, Resources, and Prompts for analyzing
   8 |  * Architectural Decision Records and project architecture.
   9 |  */
  10 | 
  11 | import { Server } from '@modelcontextprotocol/sdk/server/index.js';
  12 | import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
  13 | import {
  14 |   CallToolRequestSchema,
  15 |   ListToolsRequestSchema,
  16 |   ListResourcesRequestSchema,
  17 |   ReadResourceRequestSchema,
  18 |   ListPromptsRequestSchema,
  19 |   GetPromptRequestSchema,
  20 |   type CallToolResult,
  21 | } from '@modelcontextprotocol/sdk/types.js';
  22 | 
  23 | import { readFileSync } from 'fs';
  24 | import { join } from 'path';
  25 | import { getCurrentDirCompat } from './utils/directory-compat.js';
  26 | import { McpAdrError } from './types/index.js';
  27 | import { CONVERSATION_CONTEXT_SCHEMA } from './types/conversation-context.js';
  28 | import {
  29 |   maskMcpResponse,
  30 |   createMaskingConfig,
  31 |   type MaskingConfig,
  32 | } from './utils/output-masking.js';
  33 | import {
  34 |   loadConfig,
  35 |   validateProjectPath,
  36 |   createLogger,
  37 |   printConfigSummary,
  38 |   type ServerConfig,
  39 | } from './utils/config.js';
  40 | import { KnowledgeGraphManager } from './utils/knowledge-graph-manager.js';
  41 | import { StateReinforcementManager } from './utils/state-reinforcement-manager.js';
  42 | import { ConversationMemoryManager } from './utils/conversation-memory-manager.js';
  43 | import { MemoryEntityManager } from './utils/memory-entity-manager.js';
  44 | import { RootManager } from './utils/root-manager.js';
  45 | import { ServerContextGenerator } from './utils/server-context-generator.js';
  46 | import { type ToolContext, createNoOpContext } from './types/tool-context.js';
  47 | import {
  48 |   type GetWorkflowGuidanceArgs,
  49 |   type GetArchitecturalContextArgs,
  50 |   type GetDevelopmentGuidanceArgs,
  51 |   type GenerateAdrFromDecisionArgs,
  52 |   type ValidateRulesArgs,
  53 |   type CreateRuleSetArgs,
  54 |   type ToolChainOrchestratorArgs,
  55 |   type ReadFileArgs,
  56 |   type WriteFileArgs,
  57 |   type AnalyzeProjectEcosystemArgs,
  58 |   type ArchitecturalDomain,
  59 |   type AnalyzeContentSecurityArgs,
  60 |   type GenerateContentMaskingArgs,
  61 |   type ConfigureCustomPatternsArgs,
  62 |   type ApplyBasicContentMaskingArgs,
  63 |   type ValidateContentMaskingArgs,
  64 |   type ActionArgs,
  65 |   type TodoManagementV2Args,
  66 |   type GenerateArchitecturalKnowledgeFunction,
  67 |   type ExecuteWithReflexionFunction,
  68 |   type RetrieveRelevantMemoriesFunction,
  69 |   type CreateToolReflexionConfigFunction,
  70 | } from './types/tool-arguments.js';
  71 | 
  72 | /**
  73 |  * Get version from package.json
  74 |  */
  75 | function getPackageVersion(): string {
  76 |   try {
  77 |     // Handle both Jest environment and normal execution
  78 |     const currentDir = getCurrentDirCompat();
  79 | 
  80 |     // Strategy 1: Try multiple possible locations for package.json
  81 |     const possiblePaths = [
  82 |       join(currentDir, 'package.json'),
  83 |       join(currentDir, '..', 'package.json'),
  84 |       join(currentDir, '..', '..', 'package.json'),
  85 |       join(process.cwd(), 'package.json'),
  86 |     ];
  87 | 
  88 |     for (const packageJsonPath of possiblePaths) {
  89 |       try {
  90 |         const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
  91 |         if (packageJson.name === 'mcp-adr-analysis-server') {
  92 |           return packageJson.version;
  93 |         }
  94 |       } catch {
  95 |         // Try next path
  96 |       }
  97 |     }
  98 | 
  99 |     // Strategy 2: Use process.env.npm_package_version if available (during npm scripts)
 100 |     if (process.env['npm_package_version']) {
 101 |       return process.env['npm_package_version'];
 102 |     }
 103 | 
 104 |     // Final fallback: Use generic version instead of hardcoded specific version
 105 |     // This prevents the need to update this code when version changes
 106 |     return 'unknown'; // Generic fallback - no longer tied to specific version
 107 |   } catch (error) {
 108 |     console.error('Error reading package.json:', error);
 109 |     return 'unknown'; // Generic fallback - no longer tied to specific version
 110 |   }
 111 | }
 112 | 
 113 | /**
 114 |  * Server configuration
 115 |  */
 116 | const SERVER_INFO = {
 117 |   name: 'mcp-adr-analysis-server',
 118 |   version: getPackageVersion(),
 119 |   description: 'MCP server for analyzing Architectural Decision Records and project architecture',
 120 | };
 121 | 
 122 | /**
 123 |  * Main server class
 124 |  */
 125 | export class McpAdrAnalysisServer {
 126 |   private server: Server;
 127 |   private maskingConfig: MaskingConfig;
 128 |   private config: ServerConfig;
 129 |   private logger: ReturnType<typeof createLogger>;
 130 |   private kgManager: KnowledgeGraphManager;
 131 |   private stateReinforcementManager: StateReinforcementManager;
 132 |   private conversationMemoryManager: ConversationMemoryManager;
 133 |   private memoryEntityManager: MemoryEntityManager;
 134 |   private rootManager: RootManager;
 135 |   private contextGenerator: ServerContextGenerator;
 136 | 
 137 |   constructor() {
 138 |     // Load and validate configuration
 139 |     this.config = loadConfig();
 140 |     this.logger = createLogger(this.config);
 141 |     this.kgManager = new KnowledgeGraphManager();
 142 |     this.stateReinforcementManager = new StateReinforcementManager(this.kgManager);
 143 |     this.conversationMemoryManager = new ConversationMemoryManager(this.kgManager);
 144 |     this.memoryEntityManager = new MemoryEntityManager();
 145 | 
 146 |     // Initialize root manager for file access control
 147 |     this.rootManager = new RootManager(this.config.projectPath, this.config.adrDirectory);
 148 | 
 149 |     // Initialize server context generator
 150 |     this.contextGenerator = new ServerContextGenerator();
 151 | 
 152 |     // Print configuration summary
 153 |     printConfigSummary(this.config);
 154 | 
 155 |     // Note: Validation will be done during startup
 156 | 
 157 |     this.server = new Server(SERVER_INFO, {
 158 |       capabilities: {
 159 |         tools: {},
 160 |         resources: {},
 161 |         prompts: {},
 162 |       },
 163 |     });
 164 | 
 165 |     this.maskingConfig = createMaskingConfig();
 166 |     this.setupHandlers();
 167 |   }
 168 | 
 169 |   /**
 170 |    * Validate configuration and project setup
 171 |    */
 172 |   private async validateConfiguration(): Promise<void> {
 173 |     try {
 174 |       await validateProjectPath(this.config.projectPath);
 175 |       this.logger.info(`Project path validated: ${this.config.projectPath}`);
 176 |     } catch (error: unknown) {
 177 |       const errorMessage = error instanceof Error ? error.message : String(error);
 178 |       this.logger.error(`Configuration validation failed: ${errorMessage}`);
 179 |       throw error;
 180 |     }
 181 |   }
 182 | 
 183 |   /**
 184 |    * Public health check method for testing
 185 |    */
 186 |   async healthCheck(): Promise<void> {
 187 |     await this.validateConfiguration();
 188 |     this.logger.info('Health check completed successfully');
 189 |   }
 190 | 
 191 |   /**
 192 |    * Setup MCP protocol handlers
 193 |    *
 194 |    * @description Configures all Model Context Protocol request handlers for the ADR Analysis Server.
 195 |    * Implements the complete MCP specification including tools, resources, and prompts.
 196 |    *
 197 |    * @private
 198 |    * @since 2.0.0
 199 |    * @category MCP Protocol
 200 |    */
 201 |   private setupHandlers(): void {
 202 |     /**
 203 |      * List Tools Handler - MCP Protocol Endpoint
 204 |      *
 205 |      * @description Returns the complete catalog of available tools for ADR analysis,
 206 |      * research, validation, and deployment operations. Each tool includes comprehensive
 207 |      * input schemas and descriptions for client integration.
 208 |      *
 209 |      * @returns {Promise<{tools: Array}>} Complete tool catalog with schemas
 210 |      *
 211 |      * @example
 212 |      * ```typescript
 213 |      * // MCP Client usage
 214 |      * const tools = await mcpClient.listTools();
 215 |      * console.log(tools.tools.length); // 20+ available tools
 216 |      *
 217 |      * // Find specific tool
 218 |      * const researchTool = tools.tools.find(t => t.name === 'perform_research');
 219 |      * console.log(researchTool.description); // Tool description
 220 |      * ```
 221 |      *
 222 |      * @mcp-endpoint
 223 |      * @category Tools
 224 |      */
 225 |     this.server.setRequestHandler(ListToolsRequestSchema, async () => {
 226 |       return {
 227 |         tools: [
 228 |           {
 229 |             name: 'analyze_project_ecosystem',
 230 |             description:
 231 |               'Comprehensive recursive project ecosystem analysis with advanced prompting techniques (Knowledge Generation + Reflexion)',
 232 |             inputSchema: {
 233 |               type: 'object',
 234 |               properties: {
 235 |                 projectPath: {
 236 |                   type: 'string',
 237 |                   description:
 238 |                     'Path to the project directory to analyze (optional, uses configured PROJECT_PATH if not provided)',
 239 |                 },
 240 |                 includePatterns: {
 241 |                   type: 'array',
 242 |                   items: { type: 'string' },
 243 |                   description: 'File patterns to include in analysis',
 244 |                 },
 245 |                 enhancedMode: {
 246 |                   type: 'boolean',
 247 |                   description:
 248 |                     'Enable advanced prompting features (Knowledge Generation + Reflexion)',
 249 |                   default: true,
 250 |                 },
 251 |                 knowledgeEnhancement: {
 252 |                   type: 'boolean',
 253 |                   description: 'Enable Knowledge Generation for technology-specific insights',
 254 |                   default: true,
 255 |                 },
 256 |                 learningEnabled: {
 257 |                   type: 'boolean',
 258 |                   description: 'Enable Reflexion learning from past analysis outcomes',
 259 |                   default: true,
 260 |                 },
 261 |                 technologyFocus: {
 262 |                   type: 'array',
 263 |                   items: { type: 'string' },
 264 |                   description:
 265 |                     'Specific technologies to focus analysis on (auto-detected if not provided)',
 266 |                 },
 267 |                 analysisDepth: {
 268 |                   type: 'string',
 269 |                   enum: ['basic', 'detailed', 'comprehensive'],
 270 |                   description: 'Depth of ecosystem analysis',
 271 |                   default: 'comprehensive',
 272 |                 },
 273 |                 includeEnvironment: {
 274 |                   type: 'boolean',
 275 |                   description:
 276 |                     'Automatically include comprehensive environment analysis (default: true)',
 277 |                   default: true,
 278 |                 },
 279 |                 recursiveDepth: {
 280 |                   type: 'string',
 281 |                   description: 'Depth of recursive project analysis',
 282 |                   enum: ['shallow', 'moderate', 'deep', 'comprehensive'],
 283 |                   default: 'comprehensive',
 284 |                 },
 285 |                 analysisScope: {
 286 |                   type: 'array',
 287 |                   items: { type: 'string' },
 288 |                   description:
 289 |                     'Specific analysis areas to focus on (e.g., ["security", "performance", "architecture", "dependencies"])',
 290 |                 },
 291 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
 292 |               },
 293 |               required: [],
 294 |             },
 295 |           },
 296 |           {
 297 |             name: 'get_architectural_context',
 298 |             description:
 299 |               'Get detailed architectural context for specific files or the entire project, automatically sets up ADR infrastructure if missing, and provides outcome-focused workflow for project success',
 300 |             inputSchema: {
 301 |               type: 'object',
 302 |               properties: {
 303 |                 filePath: {
 304 |                   type: 'string',
 305 |                   description:
 306 |                     'Specific file path to analyze (optional, analyzes entire project if not provided)',
 307 |                 },
 308 |                 includeCompliance: {
 309 |                   type: 'boolean',
 310 |                   description: 'Include compliance checks in the analysis',
 311 |                   default: true,
 312 |                 },
 313 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
 314 |               },
 315 |             },
 316 |           },
 317 |           {
 318 |             name: 'generate_adrs_from_prd',
 319 |             description:
 320 |               'Generate Architectural Decision Records from a Product Requirements Document with advanced prompting techniques (APE + Knowledge Generation)',
 321 |             inputSchema: {
 322 |               type: 'object',
 323 |               properties: {
 324 |                 prdPath: {
 325 |                   type: 'string',
 326 |                   description: 'Path to the PRD.md file',
 327 |                 },
 328 |                 outputDirectory: {
 329 |                   type: 'string',
 330 |                   description:
 331 |                     'Directory to output generated ADRs (optional, uses configured ADR_DIRECTORY if not provided)',
 332 |                 },
 333 |                 enhancedMode: {
 334 |                   type: 'boolean',
 335 |                   description: 'Enable advanced prompting features (APE + Knowledge Generation)',
 336 |                   default: true,
 337 |                 },
 338 |                 promptOptimization: {
 339 |                   type: 'boolean',
 340 |                   description: 'Enable Automatic Prompt Engineering for optimized ADR generation',
 341 |                   default: true,
 342 |                 },
 343 |                 knowledgeEnhancement: {
 344 |                   type: 'boolean',
 345 |                   description: 'Enable Knowledge Generation for domain-specific insights',
 346 |                   default: true,
 347 |                 },
 348 |                 prdType: {
 349 |                   type: 'string',
 350 |                   enum: [
 351 |                     'web-application',
 352 |                     'mobile-app',
 353 |                     'microservices',
 354 |                     'data-platform',
 355 |                     'api-service',
 356 |                     'general',
 357 |                   ],
 358 |                   description: 'Type of PRD for optimized knowledge generation',
 359 |                   default: 'general',
 360 |                 },
 361 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
 362 |               },
 363 |               required: ['prdPath'],
 364 |             },
 365 |           },
 366 |           {
 367 |             name: 'compare_adr_progress',
 368 |             description:
 369 |               'Compare TODO.md progress against ADRs and current environment to validate implementation status',
 370 |             inputSchema: {
 371 |               type: 'object',
 372 |               properties: {
 373 |                 todoPath: {
 374 |                   type: 'string',
 375 |                   description: 'Path to TODO.md file to analyze',
 376 |                   default: 'TODO.md',
 377 |                 },
 378 |                 adrDirectory: {
 379 |                   type: 'string',
 380 |                   description: 'Directory containing ADR files',
 381 |                   default: 'docs/adrs',
 382 |                 },
 383 |                 projectPath: {
 384 |                   type: 'string',
 385 |                   description: 'Path to project root for environment analysis',
 386 |                   default: '.',
 387 |                 },
 388 |                 environment: {
 389 |                   type: 'string',
 390 |                   enum: ['development', 'staging', 'production', 'testing', 'auto-detect'],
 391 |                   description:
 392 |                     'Target environment context for validation (auto-detect will infer from project structure)',
 393 |                   default: 'auto-detect',
 394 |                 },
 395 |                 environmentConfig: {
 396 |                   type: 'object',
 397 |                   description: 'Environment-specific configuration and requirements',
 398 |                   properties: {
 399 |                     requiredFiles: {
 400 |                       type: 'array',
 401 |                       items: { type: 'string' },
 402 |                       description: 'Files required for this environment',
 403 |                     },
 404 |                     requiredServices: {
 405 |                       type: 'array',
 406 |                       items: { type: 'string' },
 407 |                       description: 'Services that must be implemented for this environment',
 408 |                     },
 409 |                     securityLevel: {
 410 |                       type: 'string',
 411 |                       enum: ['low', 'medium', 'high', 'critical'],
 412 |                       description: 'Required security level for this environment',
 413 |                     },
 414 |                     performanceRequirements: {
 415 |                       type: 'object',
 416 |                       description: 'Performance requirements for this environment',
 417 |                     },
 418 |                   },
 419 |                 },
 420 |                 validationType: {
 421 |                   type: 'string',
 422 |                   enum: ['full', 'todo-only', 'adr-only', 'environment-only'],
 423 |                   description: 'Type of validation to perform',
 424 |                   default: 'full',
 425 |                 },
 426 |                 includeFileChecks: {
 427 |                   type: 'boolean',
 428 |                   description: 'Include file existence and implementation checks',
 429 |                   default: true,
 430 |                 },
 431 |                 includeRuleValidation: {
 432 |                   type: 'boolean',
 433 |                   description: 'Include architectural rule compliance validation',
 434 |                   default: true,
 435 |                 },
 436 |                 deepCodeAnalysis: {
 437 |                   type: 'boolean',
 438 |                   description:
 439 |                     'Perform deep code analysis to distinguish mock from production implementations',
 440 |                   default: true,
 441 |                 },
 442 |                 functionalValidation: {
 443 |                   type: 'boolean',
 444 |                   description:
 445 |                     'Validate that code actually functions according to ADR goals, not just exists',
 446 |                   default: true,
 447 |                 },
 448 |                 strictMode: {
 449 |                   type: 'boolean',
 450 |                   description:
 451 |                     'Enable strict validation mode with reality-check mechanisms against overconfident assessments',
 452 |                   default: true,
 453 |                 },
 454 |                 environmentValidation: {
 455 |                   type: 'boolean',
 456 |                   description: 'Enable environment-specific validation rules and checks',
 457 |                   default: true,
 458 |                 },
 459 |               },
 460 |             },
 461 |           },
 462 |           {
 463 |             name: 'analyze_content_security',
 464 |             description:
 465 |               'Analyze content for sensitive information using AI-powered detection with optional memory integration for security pattern learning',
 466 |             inputSchema: {
 467 |               type: 'object',
 468 |               properties: {
 469 |                 content: {
 470 |                   type: 'string',
 471 |                   description: 'Content to analyze for sensitive information',
 472 |                 },
 473 |                 contentType: {
 474 |                   type: 'string',
 475 |                   enum: ['code', 'documentation', 'configuration', 'logs', 'general'],
 476 |                   description: 'Type of content being analyzed',
 477 |                   default: 'general',
 478 |                 },
 479 |                 userDefinedPatterns: {
 480 |                   type: 'array',
 481 |                   items: { type: 'string' },
 482 |                   description: 'User-defined sensitive patterns to detect',
 483 |                 },
 484 |                 enableMemoryIntegration: {
 485 |                   type: 'boolean',
 486 |                   description:
 487 |                     'Enable memory entity storage for security pattern learning and institutional knowledge building',
 488 |                   default: true,
 489 |                 },
 490 |                 knowledgeEnhancement: {
 491 |                   type: 'boolean',
 492 |                   description:
 493 |                     'Enable Generated Knowledge Prompting for security and privacy expertise',
 494 |                   default: true,
 495 |                 },
 496 |                 enhancedMode: {
 497 |                   type: 'boolean',
 498 |                   description: 'Enable advanced prompting features',
 499 |                   default: true,
 500 |                 },
 501 |               },
 502 |               required: ['content'],
 503 |             },
 504 |           },
 505 |           {
 506 |             name: 'generate_content_masking',
 507 |             description: 'Generate masking instructions for detected sensitive content',
 508 |             inputSchema: {
 509 |               type: 'object',
 510 |               properties: {
 511 |                 content: {
 512 |                   type: 'string',
 513 |                   description: 'Content to mask',
 514 |                 },
 515 |                 detectedItems: {
 516 |                   type: 'array',
 517 |                   items: {
 518 |                     type: 'object',
 519 |                     properties: {
 520 |                       type: { type: 'string' },
 521 |                       content: { type: 'string' },
 522 |                       startPosition: { type: 'number' },
 523 |                       endPosition: { type: 'number' },
 524 |                       severity: { type: 'string' },
 525 |                     },
 526 |                   },
 527 |                   description: 'Detected sensitive items to mask',
 528 |                 },
 529 |                 maskingStrategy: {
 530 |                   type: 'string',
 531 |                   enum: ['full', 'partial', 'placeholder', 'environment'],
 532 |                   description: 'Strategy for masking content',
 533 |                   default: 'full',
 534 |                 },
 535 |               },
 536 |               required: ['content', 'detectedItems'],
 537 |             },
 538 |           },
 539 |           {
 540 |             name: 'configure_custom_patterns',
 541 |             description: 'Configure custom sensitive patterns for a project',
 542 |             inputSchema: {
 543 |               type: 'object',
 544 |               properties: {
 545 |                 projectPath: {
 546 |                   type: 'string',
 547 |                   description: 'Path to the project directory',
 548 |                 },
 549 |                 existingPatterns: {
 550 |                   type: 'array',
 551 |                   items: { type: 'string' },
 552 |                   description: 'Existing patterns to consider',
 553 |                 },
 554 |               },
 555 |               required: ['projectPath'],
 556 |             },
 557 |           },
 558 |           {
 559 |             name: 'apply_basic_content_masking',
 560 |             description: 'Apply basic content masking (fallback when AI is not available)',
 561 |             inputSchema: {
 562 |               type: 'object',
 563 |               properties: {
 564 |                 content: {
 565 |                   type: 'string',
 566 |                   description: 'Content to mask',
 567 |                 },
 568 |                 maskingStrategy: {
 569 |                   type: 'string',
 570 |                   enum: ['full', 'partial', 'placeholder'],
 571 |                   description: 'Strategy for masking content',
 572 |                   default: 'full',
 573 |                 },
 574 |               },
 575 |               required: ['content'],
 576 |             },
 577 |           },
 578 |           {
 579 |             name: 'validate_content_masking',
 580 |             description: 'Validate that content masking was applied correctly',
 581 |             inputSchema: {
 582 |               type: 'object',
 583 |               properties: {
 584 |                 originalContent: {
 585 |                   type: 'string',
 586 |                   description: 'Original content before masking',
 587 |                 },
 588 |                 maskedContent: {
 589 |                   type: 'string',
 590 |                   description: 'Content after masking',
 591 |                 },
 592 |               },
 593 |               required: ['originalContent', 'maskedContent'],
 594 |             },
 595 |           },
 596 |           {
 597 |             name: 'manage_cache',
 598 |             description: 'Manage MCP resource cache (clear, stats, cleanup)',
 599 |             inputSchema: {
 600 |               type: 'object',
 601 |               properties: {
 602 |                 action: {
 603 |                   type: 'string',
 604 |                   enum: ['clear', 'stats', 'cleanup', 'invalidate'],
 605 |                   description: 'Cache management action to perform',
 606 |                 },
 607 |                 key: {
 608 |                   type: 'string',
 609 |                   description: 'Specific cache key to invalidate (for invalidate action)',
 610 |                 },
 611 |               },
 612 |               required: ['action'],
 613 |             },
 614 |           },
 615 |           {
 616 |             name: 'configure_output_masking',
 617 |             description: 'Configure content masking for all MCP outputs',
 618 |             inputSchema: {
 619 |               type: 'object',
 620 |               properties: {
 621 |                 enabled: {
 622 |                   type: 'boolean',
 623 |                   description: 'Enable or disable output masking',
 624 |                 },
 625 |                 strategy: {
 626 |                   type: 'string',
 627 |                   enum: ['full', 'partial', 'placeholder', 'environment'],
 628 |                   description: 'Masking strategy to use',
 629 |                 },
 630 |                 customPatterns: {
 631 |                   type: 'array',
 632 |                   items: { type: 'string' },
 633 |                   description: 'Custom patterns to mask',
 634 |                 },
 635 |                 action: {
 636 |                   type: 'string',
 637 |                   enum: ['get', 'set', 'reset'],
 638 |                   description: 'Configuration action',
 639 |                   default: 'get',
 640 |                 },
 641 |               },
 642 |             },
 643 |           },
 644 |           {
 645 |             name: 'suggest_adrs',
 646 |             description:
 647 |               'Suggest architectural decisions with advanced prompting techniques (Knowledge Generation + Reflexion). TIP: Read @.mcp-server-context.md first for project history, patterns, and previous ADRs to ensure consistency.',
 648 |             inputSchema: {
 649 |               type: 'object',
 650 |               properties: {
 651 |                 projectPath: {
 652 |                   type: 'string',
 653 |                   description: 'Path to the project directory',
 654 |                   default: '.',
 655 |                 },
 656 |                 analysisType: {
 657 |                   type: 'string',
 658 |                   enum: ['implicit_decisions', 'code_changes', 'comprehensive'],
 659 |                   description: 'Type of analysis to perform',
 660 |                   default: 'comprehensive',
 661 |                 },
 662 |                 beforeCode: {
 663 |                   type: 'string',
 664 |                   description: 'Code before changes (for code_changes analysis)',
 665 |                 },
 666 |                 afterCode: {
 667 |                   type: 'string',
 668 |                   description: 'Code after changes (for code_changes analysis)',
 669 |                 },
 670 |                 changeDescription: {
 671 |                   type: 'string',
 672 |                   description: 'Description of the changes (for code_changes analysis)',
 673 |                 },
 674 |                 commitMessages: {
 675 |                   type: 'array',
 676 |                   items: { type: 'string' },
 677 |                   description: 'Related commit messages (for code_changes analysis)',
 678 |                 },
 679 |                 existingAdrs: {
 680 |                   type: 'array',
 681 |                   items: { type: 'string' },
 682 |                   description: 'List of existing ADR titles to avoid duplication',
 683 |                 },
 684 |                 enhancedMode: {
 685 |                   type: 'boolean',
 686 |                   description:
 687 |                     'Enable advanced prompting features (Knowledge Generation + Reflexion)',
 688 |                   default: true,
 689 |                 },
 690 |                 learningEnabled: {
 691 |                   type: 'boolean',
 692 |                   description: 'Enable Reflexion learning from past experiences',
 693 |                   default: true,
 694 |                 },
 695 |                 knowledgeEnhancement: {
 696 |                   type: 'boolean',
 697 |                   description: 'Enable Knowledge Generation for domain-specific insights',
 698 |                   default: true,
 699 |                 },
 700 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
 701 |               },
 702 |             },
 703 |           },
 704 |           {
 705 |             name: 'generate_adr_from_decision',
 706 |             description:
 707 |               'Generate a complete ADR from decision data. TIP: Reference @.mcp-server-context.md to align with existing architectural patterns and decisions.',
 708 |             inputSchema: {
 709 |               type: 'object',
 710 |               properties: {
 711 |                 decisionData: {
 712 |                   type: 'object',
 713 |                   properties: {
 714 |                     title: { type: 'string', description: 'Decision title' },
 715 |                     context: { type: 'string', description: 'Decision context and problem' },
 716 |                     decision: { type: 'string', description: 'The architectural decision' },
 717 |                     consequences: { type: 'string', description: 'Decision consequences' },
 718 |                     alternatives: {
 719 |                       type: 'array',
 720 |                       items: { type: 'string' },
 721 |                       description: 'Alternative approaches considered',
 722 |                     },
 723 |                     evidence: {
 724 |                       type: 'array',
 725 |                       items: { type: 'string' },
 726 |                       description: 'Supporting evidence for the decision',
 727 |                     },
 728 |                   },
 729 |                   required: ['title', 'context', 'decision', 'consequences'],
 730 |                 },
 731 |                 templateFormat: {
 732 |                   type: 'string',
 733 |                   enum: ['nygard', 'madr', 'custom'],
 734 |                   description: 'ADR template format to use',
 735 |                   default: 'nygard',
 736 |                 },
 737 |                 existingAdrs: {
 738 |                   type: 'array',
 739 |                   items: { type: 'string' },
 740 |                   description: 'List of existing ADRs for numbering and references',
 741 |                 },
 742 |                 adrDirectory: {
 743 |                   type: 'string',
 744 |                   description: 'Directory where ADRs are stored',
 745 |                   default: 'docs/adrs',
 746 |                 },
 747 |               },
 748 |               required: ['decisionData'],
 749 |             },
 750 |           },
 751 |           {
 752 |             name: 'generate_adr_bootstrap',
 753 |             description:
 754 |               'Generate bootstrap.sh and validate_bootstrap.sh scripts to ensure deployed code follows ADR requirements',
 755 |             inputSchema: {
 756 |               type: 'object',
 757 |               properties: {
 758 |                 projectPath: {
 759 |                   type: 'string',
 760 |                   description: 'Path to the project directory',
 761 |                   default: '.',
 762 |                 },
 763 |                 adrDirectory: {
 764 |                   type: 'string',
 765 |                   description: 'Directory where ADRs are stored',
 766 |                   default: 'docs/adrs',
 767 |                 },
 768 |                 outputPath: {
 769 |                   type: 'string',
 770 |                   description: 'Directory where to generate scripts',
 771 |                   default: '.',
 772 |                 },
 773 |                 scriptType: {
 774 |                   type: 'string',
 775 |                   enum: ['bootstrap', 'validate', 'both'],
 776 |                   description: 'Which scripts to generate',
 777 |                   default: 'both',
 778 |                 },
 779 |                 includeTests: {
 780 |                   type: 'boolean',
 781 |                   description: 'Include test execution in bootstrap',
 782 |                   default: true,
 783 |                 },
 784 |                 includeDeployment: {
 785 |                   type: 'boolean',
 786 |                   description: 'Include deployment steps in bootstrap',
 787 |                   default: true,
 788 |                 },
 789 |                 customValidations: {
 790 |                   type: 'array',
 791 |                   items: { type: 'string' },
 792 |                   description: 'Custom validation commands to include',
 793 |                 },
 794 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
 795 |               },
 796 |             },
 797 |           },
 798 |           {
 799 |             name: 'bootstrap_validation_loop',
 800 |             description:
 801 |               'Execute complete bootstrap validation loop with environment monitoring, auto-fixing, and ADR learning. Iteratively validates deployments against ADRs and updates ADRs with real-world deployment experience.',
 802 |             inputSchema: {
 803 |               type: 'object',
 804 |               properties: {
 805 |                 projectPath: {
 806 |                   type: 'string',
 807 |                   description: 'Path to the project directory',
 808 |                   default: '.',
 809 |                 },
 810 |                 adrDirectory: {
 811 |                   type: 'string',
 812 |                   description: 'Directory where ADRs are stored',
 813 |                   default: 'docs/adrs',
 814 |                 },
 815 |                 targetEnvironment: {
 816 |                   type: 'string',
 817 |                   enum: ['development', 'staging', 'production', 'testing'],
 818 |                   description: 'Target deployment environment',
 819 |                   default: 'development',
 820 |                 },
 821 |                 maxIterations: {
 822 |                   type: 'number',
 823 |                   description: 'Maximum validation/fix iterations',
 824 |                   default: 5,
 825 |                 },
 826 |                 autoFix: {
 827 |                   type: 'boolean',
 828 |                   description: 'Automatically fix bootstrap scripts based on failures',
 829 |                   default: true,
 830 |                 },
 831 |                 validateAfterFix: {
 832 |                   type: 'boolean',
 833 |                   description: 'Re-validate after applying auto-fixes',
 834 |                   default: true,
 835 |                 },
 836 |                 captureEnvironmentSnapshot: {
 837 |                   type: 'boolean',
 838 |                   description: 'Capture environment state during execution',
 839 |                   default: true,
 840 |                 },
 841 |                 updateAdrsWithLearnings: {
 842 |                   type: 'boolean',
 843 |                   description: 'Update ADRs with deployment learnings (non-sensitive)',
 844 |                   default: true,
 845 |                 },
 846 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
 847 |               },
 848 |             },
 849 |           },
 850 |           {
 851 |             name: 'discover_existing_adrs',
 852 |             description: 'Discover and catalog existing ADRs in the project',
 853 |             inputSchema: {
 854 |               type: 'object',
 855 |               properties: {
 856 |                 adrDirectory: {
 857 |                   type: 'string',
 858 |                   description: 'Directory to search for ADRs',
 859 |                   default: 'docs/adrs',
 860 |                 },
 861 |                 includeContent: {
 862 |                   type: 'boolean',
 863 |                   description: 'Whether to include ADR content in analysis',
 864 |                   default: false,
 865 |                 },
 866 |               },
 867 |             },
 868 |           },
 869 |           {
 870 |             name: 'review_existing_adrs',
 871 |             description:
 872 |               'Review existing ADRs against actual code implementation with cloud/DevOps expertise. TIP: After review, call get_server_context to update @.mcp-server-context.md with findings.',
 873 |             inputSchema: {
 874 |               type: 'object',
 875 |               properties: {
 876 |                 adrDirectory: {
 877 |                   type: 'string',
 878 |                   description: 'Directory containing ADR files',
 879 |                   default: 'docs/adrs',
 880 |                 },
 881 |                 projectPath: {
 882 |                   type: 'string',
 883 |                   description: 'Path to the project directory',
 884 |                   default: '.',
 885 |                 },
 886 |                 specificAdr: {
 887 |                   type: 'string',
 888 |                   description: 'Specific ADR filename or title to review (optional)',
 889 |                 },
 890 |                 analysisDepth: {
 891 |                   type: 'string',
 892 |                   enum: ['basic', 'detailed', 'comprehensive'],
 893 |                   description: 'Depth of analysis to perform',
 894 |                   default: 'detailed',
 895 |                 },
 896 |                 includeTreeSitter: {
 897 |                   type: 'boolean',
 898 |                   description: 'Use tree-sitter for enhanced code analysis',
 899 |                   default: true,
 900 |                 },
 901 |                 generateUpdatePlan: {
 902 |                   type: 'boolean',
 903 |                   description: 'Generate action plan for updating non-compliant ADRs',
 904 |                   default: true,
 905 |                 },
 906 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
 907 |               },
 908 |             },
 909 |           },
 910 |           {
 911 |             name: 'validate_adr',
 912 |             description:
 913 |               'Validate an existing ADR against actual infrastructure reality using research-driven analysis. TIP: Compare findings against patterns in @.mcp-server-context.md for consistency checks.',
 914 |             inputSchema: {
 915 |               type: 'object',
 916 |               properties: {
 917 |                 adrPath: {
 918 |                   type: 'string',
 919 |                   description: 'Path to the ADR file to validate (relative or absolute)',
 920 |                 },
 921 |                 projectPath: {
 922 |                   type: 'string',
 923 |                   description: 'Path to the project directory',
 924 |                   default: '.',
 925 |                 },
 926 |                 adrDirectory: {
 927 |                   type: 'string',
 928 |                   description: 'Directory containing ADR files',
 929 |                   default: 'docs/adrs',
 930 |                 },
 931 |                 includeEnvironmentCheck: {
 932 |                   type: 'boolean',
 933 |                   description: 'Include live environment verification in validation',
 934 |                   default: true,
 935 |                 },
 936 |                 confidenceThreshold: {
 937 |                   type: 'number',
 938 |                   description: 'Minimum research confidence threshold (0-1)',
 939 |                   default: 0.6,
 940 |                 },
 941 |               },
 942 |               required: ['adrPath'],
 943 |             },
 944 |           },
 945 |           {
 946 |             name: 'validate_all_adrs',
 947 |             description: 'Validate all ADRs in a directory against actual infrastructure reality',
 948 |             inputSchema: {
 949 |               type: 'object',
 950 |               properties: {
 951 |                 projectPath: {
 952 |                   type: 'string',
 953 |                   description: 'Path to the project directory',
 954 |                   default: '.',
 955 |                 },
 956 |                 adrDirectory: {
 957 |                   type: 'string',
 958 |                   description: 'Directory containing ADR files',
 959 |                   default: 'docs/adrs',
 960 |                 },
 961 |                 includeEnvironmentCheck: {
 962 |                   type: 'boolean',
 963 |                   description: 'Include live environment verification in validation',
 964 |                   default: true,
 965 |                 },
 966 |                 minConfidence: {
 967 |                   type: 'number',
 968 |                   description: 'Minimum research confidence for validation (0-1)',
 969 |                   default: 0.6,
 970 |                 },
 971 |               },
 972 |             },
 973 |           },
 974 |           {
 975 |             name: 'incorporate_research',
 976 |             description: 'Incorporate research findings into architectural decisions',
 977 |             inputSchema: {
 978 |               type: 'object',
 979 |               properties: {
 980 |                 researchPath: {
 981 |                   type: 'string',
 982 |                   description: 'Path to research directory',
 983 |                   default: 'docs/research',
 984 |                 },
 985 |                 adrDirectory: {
 986 |                   type: 'string',
 987 |                   description: 'Path to ADR directory',
 988 |                   default: 'docs/adrs',
 989 |                 },
 990 |                 analysisType: {
 991 |                   type: 'string',
 992 |                   enum: [
 993 |                     'monitor',
 994 |                     'extract_topics',
 995 |                     'evaluate_impact',
 996 |                     'generate_updates',
 997 |                     'comprehensive',
 998 |                   ],
 999 |                   description: 'Type of research analysis to perform',
1000 |                   default: 'comprehensive',
1001 |                 },
1002 |                 existingTopics: {
1003 |                   type: 'array',
1004 |                   items: { type: 'string' },
1005 |                   description: 'Previously identified research topics',
1006 |                 },
1007 |                 researchTopics: {
1008 |                   type: 'array',
1009 |                   items: {
1010 |                     type: 'object',
1011 |                     properties: {
1012 |                       id: { type: 'string' },
1013 |                       title: { type: 'string' },
1014 |                       category: { type: 'string' },
1015 |                       keyFindings: { type: 'array', items: { type: 'string' } },
1016 |                       relevanceScore: { type: 'number' },
1017 |                     },
1018 |                   },
1019 |                   description: 'Research topics for impact evaluation',
1020 |                 },
1021 |                 adrId: {
1022 |                   type: 'string',
1023 |                   description: 'ADR ID for update generation',
1024 |                 },
1025 |                 updateType: {
1026 |                   type: 'string',
1027 |                   enum: ['content', 'status', 'consequences', 'alternatives', 'deprecation'],
1028 |                   description: 'Type of ADR update to generate',
1029 |                 },
1030 |                 researchFindings: {
1031 |                   type: 'array',
1032 |                   items: {
1033 |                     type: 'object',
1034 |                     properties: {
1035 |                       finding: { type: 'string' },
1036 |                       evidence: { type: 'array', items: { type: 'string' } },
1037 |                       impact: { type: 'string' },
1038 |                     },
1039 |                   },
1040 |                   description: 'Research findings for update generation',
1041 |                 },
1042 |               },
1043 |             },
1044 |           },
1045 |           {
1046 |             name: 'create_research_template',
1047 |             description: 'Create a research template file for documenting findings',
1048 |             inputSchema: {
1049 |               type: 'object',
1050 |               properties: {
1051 |                 title: {
1052 |                   type: 'string',
1053 |                   description: 'Title of the research',
1054 |                 },
1055 |                 category: {
1056 |                   type: 'string',
1057 |                   description: 'Research category',
1058 |                   default: 'general',
1059 |                 },
1060 |                 researchPath: {
1061 |                   type: 'string',
1062 |                   description: 'Path to research directory',
1063 |                   default: 'docs/research',
1064 |                 },
1065 |               },
1066 |               required: ['title'],
1067 |             },
1068 |           },
1069 |           {
1070 |             name: 'request_action_confirmation',
1071 |             description: 'Request confirmation before applying research-based changes',
1072 |             inputSchema: {
1073 |               type: 'object',
1074 |               properties: {
1075 |                 action: {
1076 |                   type: 'string',
1077 |                   description: 'Description of the action to be performed',
1078 |                 },
1079 |                 details: {
1080 |                   type: 'string',
1081 |                   description: 'Detailed information about the action',
1082 |                 },
1083 |                 impact: {
1084 |                   type: 'string',
1085 |                   enum: ['low', 'medium', 'high', 'critical'],
1086 |                   description: 'Impact level of the action',
1087 |                   default: 'medium',
1088 |                 },
1089 |               },
1090 |               required: ['action', 'details'],
1091 |             },
1092 |           },
1093 |           {
1094 |             name: 'generate_rules',
1095 |             description: 'Generate architectural rules from ADRs and code patterns',
1096 |             inputSchema: {
1097 |               type: 'object',
1098 |               properties: {
1099 |                 source: {
1100 |                   type: 'string',
1101 |                   enum: ['adrs', 'patterns', 'both'],
1102 |                   description: 'Source for rule generation',
1103 |                   default: 'both',
1104 |                 },
1105 |                 adrDirectory: {
1106 |                   type: 'string',
1107 |                   description: 'Directory containing ADR files',
1108 |                   default: 'docs/adrs',
1109 |                 },
1110 |                 projectPath: {
1111 |                   type: 'string',
1112 |                   description: 'Path to project for pattern analysis',
1113 |                   default: '.',
1114 |                 },
1115 |                 existingRules: {
1116 |                   type: 'array',
1117 |                   items: {
1118 |                     type: 'object',
1119 |                     properties: {
1120 |                       id: { type: 'string' },
1121 |                       name: { type: 'string' },
1122 |                       description: { type: 'string' },
1123 |                     },
1124 |                   },
1125 |                   description: 'Existing rules to avoid duplication',
1126 |                 },
1127 |                 outputFormat: {
1128 |                   type: 'string',
1129 |                   enum: ['json', 'yaml', 'both'],
1130 |                   description: 'Output format for rules',
1131 |                   default: 'json',
1132 |                 },
1133 |               },
1134 |             },
1135 |           },
1136 |           {
1137 |             name: 'validate_rules',
1138 |             description: 'Validate code against architectural rules',
1139 |             inputSchema: {
1140 |               type: 'object',
1141 |               properties: {
1142 |                 filePath: {
1143 |                   type: 'string',
1144 |                   description: 'Path to file to validate',
1145 |                 },
1146 |                 fileContent: {
1147 |                   type: 'string',
1148 |                   description: 'Content to validate (alternative to filePath)',
1149 |                 },
1150 |                 fileName: {
1151 |                   type: 'string',
1152 |                   description: 'Name of file being validated (when using fileContent)',
1153 |                 },
1154 |                 rules: {
1155 |                   type: 'array',
1156 |                   items: {
1157 |                     type: 'object',
1158 |                     properties: {
1159 |                       id: { type: 'string' },
1160 |                       name: { type: 'string' },
1161 |                       description: { type: 'string' },
1162 |                       pattern: { type: 'string' },
1163 |                       severity: { type: 'string' },
1164 |                       message: { type: 'string' },
1165 |                     },
1166 |                     required: ['id', 'name', 'pattern', 'severity', 'message'],
1167 |                   },
1168 |                   description: 'Rules to validate against',
1169 |                 },
1170 |                 validationType: {
1171 |                   type: 'string',
1172 |                   enum: ['file', 'function', 'component', 'module'],
1173 |                   description: 'Type of validation to perform',
1174 |                   default: 'file',
1175 |                 },
1176 |                 reportFormat: {
1177 |                   type: 'string',
1178 |                   enum: ['summary', 'detailed', 'json'],
1179 |                   description: 'Format for validation report',
1180 |                   default: 'detailed',
1181 |                 },
1182 |               },
1183 |               required: ['rules'],
1184 |             },
1185 |           },
1186 |           {
1187 |             name: 'create_rule_set',
1188 |             description: 'Create machine-readable rule set in JSON/YAML format',
1189 |             inputSchema: {
1190 |               type: 'object',
1191 |               properties: {
1192 |                 name: {
1193 |                   type: 'string',
1194 |                   description: 'Name of the rule set',
1195 |                 },
1196 |                 description: {
1197 |                   type: 'string',
1198 |                   description: 'Description of the rule set',
1199 |                   default: 'Generated architectural rule set',
1200 |                 },
1201 |                 adrRules: {
1202 |                   type: 'array',
1203 |                   items: { type: 'object' },
1204 |                   description: 'Rules extracted from ADRs',
1205 |                 },
1206 |                 patternRules: {
1207 |                   type: 'array',
1208 |                   items: { type: 'object' },
1209 |                   description: 'Rules generated from code patterns',
1210 |                 },
1211 |                 rules: {
1212 |                   type: 'array',
1213 |                   items: { type: 'object' },
1214 |                   description: 'Additional rules to include',
1215 |                 },
1216 |                 outputFormat: {
1217 |                   type: 'string',
1218 |                   enum: ['json', 'yaml', 'both'],
1219 |                   description: 'Output format for rule set',
1220 |                   default: 'json',
1221 |                 },
1222 |                 author: {
1223 |                   type: 'string',
1224 |                   description: 'Author of the rule set',
1225 |                   default: 'MCP ADR Analysis Server',
1226 |                 },
1227 |               },
1228 |               required: ['name'],
1229 |             },
1230 |           },
1231 |           {
1232 |             name: 'analyze_environment',
1233 |             description:
1234 |               'Analyze environment context and provide optimization recommendations with optional memory integration for environment snapshot tracking',
1235 |             inputSchema: {
1236 |               type: 'object',
1237 |               properties: {
1238 |                 projectPath: {
1239 |                   type: 'string',
1240 |                   description: 'Path to project directory',
1241 |                   default: '.',
1242 |                 },
1243 |                 adrDirectory: {
1244 |                   type: 'string',
1245 |                   description: 'Directory containing ADR files',
1246 |                   default: 'docs/adrs',
1247 |                 },
1248 |                 analysisType: {
1249 |                   type: 'string',
1250 |                   enum: [
1251 |                     'specs',
1252 |                     'containerization',
1253 |                     'requirements',
1254 |                     'compliance',
1255 |                     'comprehensive',
1256 |                   ],
1257 |                   description: 'Type of environment analysis to perform',
1258 |                   default: 'comprehensive',
1259 |                 },
1260 |                 currentEnvironment: {
1261 |                   type: 'object',
1262 |                   description: 'Current environment specifications (for compliance analysis)',
1263 |                 },
1264 |                 requirements: {
1265 |                   type: 'object',
1266 |                   description: 'Environment requirements (for compliance analysis)',
1267 |                 },
1268 |                 industryStandards: {
1269 |                   type: 'array',
1270 |                   items: { type: 'string' },
1271 |                   description: 'Industry standards to assess compliance against',
1272 |                 },
1273 |                 enableMemoryIntegration: {
1274 |                   type: 'boolean',
1275 |                   description:
1276 |                     'Enable memory entity storage for environment snapshot tracking and historical analysis',
1277 |                   default: true,
1278 |                 },
1279 |                 enableTrendAnalysis: {
1280 |                   type: 'boolean',
1281 |                   description:
1282 |                     'Enable analysis of environment changes over time using stored snapshots',
1283 |                   default: true,
1284 |                 },
1285 |               },
1286 |             },
1287 |           },
1288 |           {
1289 |             name: 'generate_research_questions',
1290 |             description:
1291 |               'Generate context-aware research questions and create research tracking system',
1292 |             inputSchema: {
1293 |               type: 'object',
1294 |               properties: {
1295 |                 analysisType: {
1296 |                   type: 'string',
1297 |                   enum: ['correlation', 'relevance', 'questions', 'tracking', 'comprehensive'],
1298 |                   description: 'Type of research analysis to perform',
1299 |                   default: 'comprehensive',
1300 |                 },
1301 |                 researchContext: {
1302 |                   type: 'object',
1303 |                   properties: {
1304 |                     topic: { type: 'string' },
1305 |                     category: { type: 'string' },
1306 |                     scope: { type: 'string' },
1307 |                     objectives: { type: 'array', items: { type: 'string' } },
1308 |                     constraints: { type: 'array', items: { type: 'string' } },
1309 |                     timeline: { type: 'string' },
1310 |                   },
1311 |                   description: 'Research context and objectives',
1312 |                 },
1313 |                 problems: {
1314 |                   type: 'array',
1315 |                   items: {
1316 |                     type: 'object',
1317 |                     properties: {
1318 |                       id: { type: 'string' },
1319 |                       description: { type: 'string' },
1320 |                       category: { type: 'string' },
1321 |                       severity: { type: 'string' },
1322 |                       context: { type: 'string' },
1323 |                     },
1324 |                   },
1325 |                   description: 'Problems to correlate with knowledge graph',
1326 |                 },
1327 |                 knowledgeGraph: {
1328 |                   type: 'object',
1329 |                   properties: {
1330 |                     technologies: { type: 'array', items: { type: 'object' } },
1331 |                     patterns: { type: 'array', items: { type: 'object' } },
1332 |                     adrs: { type: 'array', items: { type: 'object' } },
1333 |                     relationships: { type: 'array', items: { type: 'object' } },
1334 |                   },
1335 |                   description: 'Architectural knowledge graph',
1336 |                 },
1337 |                 relevantKnowledge: {
1338 |                   type: 'object',
1339 |                   properties: {
1340 |                     adrs: { type: 'array', items: { type: 'object' } },
1341 |                     patterns: { type: 'array', items: { type: 'object' } },
1342 |                     gaps: { type: 'array', items: { type: 'object' } },
1343 |                     opportunities: { type: 'array', items: { type: 'object' } },
1344 |                   },
1345 |                   description: 'Relevant knowledge for question generation',
1346 |                 },
1347 |                 researchQuestions: {
1348 |                   type: 'array',
1349 |                   items: {
1350 |                     type: 'object',
1351 |                     properties: {
1352 |                       id: { type: 'string' },
1353 |                       question: { type: 'string' },
1354 |                       type: { type: 'string' },
1355 |                       priority: { type: 'string' },
1356 |                       timeline: { type: 'string' },
1357 |                       methodology: { type: 'string' },
1358 |                     },
1359 |                   },
1360 |                   description: 'Research questions for task tracking',
1361 |                 },
1362 |                 currentProgress: {
1363 |                   type: 'array',
1364 |                   items: {
1365 |                     type: 'object',
1366 |                     properties: {
1367 |                       questionId: { type: 'string' },
1368 |                       status: { type: 'string' },
1369 |                       progress: { type: 'number' },
1370 |                       findings: { type: 'array', items: { type: 'string' } },
1371 |                       blockers: { type: 'array', items: { type: 'string' } },
1372 |                     },
1373 |                   },
1374 |                   description: 'Current research progress',
1375 |                 },
1376 |                 projectPath: {
1377 |                   type: 'string',
1378 |                   description: 'Path to project directory',
1379 |                   default: '.',
1380 |                 },
1381 |                 adrDirectory: {
1382 |                   type: 'string',
1383 |                   description: 'Directory containing ADR files',
1384 |                   default: 'docs/adrs',
1385 |                 },
1386 |               },
1387 |             },
1388 |           },
1389 |           {
1390 |             name: 'perform_research',
1391 |             description:
1392 |               'Perform research using cascading sources: project files → knowledge graph → environment resources → web search (fallback)',
1393 |             inputSchema: {
1394 |               type: 'object',
1395 |               properties: {
1396 |                 question: {
1397 |                   type: 'string',
1398 |                   description: 'The research question to answer',
1399 |                 },
1400 |                 projectPath: {
1401 |                   type: 'string',
1402 |                   description: 'Path to project directory',
1403 |                   default: '.',
1404 |                 },
1405 |                 adrDirectory: {
1406 |                   type: 'string',
1407 |                   description: 'Directory containing ADR files',
1408 |                   default: 'docs/adrs',
1409 |                 },
1410 |                 confidenceThreshold: {
1411 |                   type: 'number',
1412 |                   description: 'Minimum confidence threshold (0-1) before suggesting web search',
1413 |                   default: 0.6,
1414 |                   minimum: 0,
1415 |                   maximum: 1,
1416 |                 },
1417 |                 performWebSearch: {
1418 |                   type: 'boolean',
1419 |                   description: 'Enable web search recommendations when confidence is low',
1420 |                   default: true,
1421 |                 },
1422 |               },
1423 |               required: ['question'],
1424 |             },
1425 |           },
1426 |           {
1427 |             name: 'llm_web_search',
1428 |             description: 'LLM-managed web search using Firecrawl for cross-platform support',
1429 |             inputSchema: {
1430 |               type: 'object',
1431 |               properties: {
1432 |                 query: {
1433 |                   type: 'string',
1434 |                   description: 'The search query to execute',
1435 |                 },
1436 |                 maxResults: {
1437 |                   type: 'number',
1438 |                   description: 'Maximum results to return',
1439 |                   default: 5,
1440 |                   minimum: 1,
1441 |                   maximum: 20,
1442 |                 },
1443 |                 includeContent: {
1444 |                   type: 'boolean',
1445 |                   description: 'Include full content in results',
1446 |                   default: true,
1447 |                 },
1448 |                 llmInstructions: {
1449 |                   type: 'string',
1450 |                   description: 'LLM instructions for search optimization',
1451 |                 },
1452 |                 projectPath: {
1453 |                   type: 'string',
1454 |                   description: 'Path to project directory',
1455 |                   default: '.',
1456 |                 },
1457 |                 adrDirectory: {
1458 |                   type: 'string',
1459 |                   description: 'Directory containing ADR files',
1460 |                   default: 'docs/adrs',
1461 |                 },
1462 |               },
1463 |               required: ['query'],
1464 |             },
1465 |           },
1466 |           {
1467 |             name: 'llm_cloud_management',
1468 |             description: 'LLM-managed cloud provider operations with research-driven approach',
1469 |             inputSchema: {
1470 |               type: 'object',
1471 |               properties: {
1472 |                 provider: {
1473 |                   type: 'string',
1474 |                   enum: ['aws', 'azure', 'gcp', 'redhat', 'ubuntu', 'macos'],
1475 |                   description: 'Cloud provider to use',
1476 |                 },
1477 |                 action: {
1478 |                   type: 'string',
1479 |                   description: 'Action to perform',
1480 |                 },
1481 |                 parameters: {
1482 |                   type: 'object',
1483 |                   description: 'Action parameters',
1484 |                 },
1485 |                 llmInstructions: {
1486 |                   type: 'string',
1487 |                   description: 'LLM instructions for command generation',
1488 |                 },
1489 |                 researchFirst: {
1490 |                   type: 'boolean',
1491 |                   description: 'Research best approach first',
1492 |                   default: true,
1493 |                 },
1494 |                 projectPath: {
1495 |                   type: 'string',
1496 |                   description: 'Path to project directory',
1497 |                   default: '.',
1498 |                 },
1499 |                 adrDirectory: {
1500 |                   type: 'string',
1501 |                   description: 'Directory containing ADR files',
1502 |                   default: 'docs/adrs',
1503 |                 },
1504 |               },
1505 |               required: ['provider', 'action', 'llmInstructions'],
1506 |             },
1507 |           },
1508 |           {
1509 |             name: 'llm_database_management',
1510 |             description: 'LLM-managed database operations with research-driven approach',
1511 |             inputSchema: {
1512 |               type: 'object',
1513 |               properties: {
1514 |                 database: {
1515 |                   type: 'string',
1516 |                   enum: ['postgresql', 'mongodb', 'redis', 'mysql', 'mariadb'],
1517 |                   description: 'Database type to use',
1518 |                 },
1519 |                 action: {
1520 |                   type: 'string',
1521 |                   description: 'Database action to perform',
1522 |                 },
1523 |                 parameters: {
1524 |                   type: 'object',
1525 |                   description: 'Action parameters',
1526 |                 },
1527 |                 llmInstructions: {
1528 |                   type: 'string',
1529 |                   description: 'LLM instructions for command generation',
1530 |                 },
1531 |                 researchFirst: {
1532 |                   type: 'boolean',
1533 |                   description: 'Research best approach first',
1534 |                   default: true,
1535 |                 },
1536 |                 projectPath: {
1537 |                   type: 'string',
1538 |                   description: 'Path to project directory',
1539 |                   default: '.',
1540 |                 },
1541 |                 adrDirectory: {
1542 |                   type: 'string',
1543 |                   description: 'Directory containing ADR files',
1544 |                   default: 'docs/adrs',
1545 |                 },
1546 |               },
1547 |               required: ['database', 'action', 'llmInstructions'],
1548 |             },
1549 |           },
1550 |           {
1551 |             name: 'analyze_deployment_progress',
1552 |             description: 'Analyze deployment progress and verify completion with outcome rules',
1553 |             inputSchema: {
1554 |               type: 'object',
1555 |               properties: {
1556 |                 analysisType: {
1557 |                   type: 'string',
1558 |                   enum: ['tasks', 'cicd', 'progress', 'completion', 'comprehensive'],
1559 |                   description: 'Type of deployment analysis to perform',
1560 |                   default: 'comprehensive',
1561 |                 },
1562 |                 adrDirectory: {
1563 |                   type: 'string',
1564 |                   description: 'Directory containing ADR files',
1565 |                   default: 'docs/adrs',
1566 |                 },
1567 |                 todoPath: {
1568 |                   type: 'string',
1569 |                   description: 'Path to TODO.md file for task identification',
1570 |                   default: 'TODO.md',
1571 |                 },
1572 |                 cicdLogs: {
1573 |                   type: 'string',
1574 |                   description: 'CI/CD pipeline logs for analysis',
1575 |                 },
1576 |                 pipelineConfig: {
1577 |                   type: 'string',
1578 |                   description: 'CI/CD pipeline configuration',
1579 |                 },
1580 |                 deploymentTasks: {
1581 |                   type: 'array',
1582 |                   items: {
1583 |                     type: 'object',
1584 |                     properties: {
1585 |                       taskId: { type: 'string' },
1586 |                       taskName: { type: 'string' },
1587 |                       status: { type: 'string' },
1588 |                       progress: { type: 'number' },
1589 |                       category: { type: 'string' },
1590 |                       priority: { type: 'string' },
1591 |                       verificationCriteria: { type: 'array', items: { type: 'string' } },
1592 |                       expectedOutcome: { type: 'string' },
1593 |                     },
1594 |                   },
1595 |                   description: 'Deployment tasks for progress calculation',
1596 |                 },
1597 |                 outcomeRules: {
1598 |                   type: 'array',
1599 |                   items: {
1600 |                     type: 'object',
1601 |                     properties: {
1602 |                       ruleId: { type: 'string' },
1603 |                       description: { type: 'string' },
1604 |                       criteria: { type: 'array', items: { type: 'string' } },
1605 |                       verificationMethod: { type: 'string' },
1606 |                     },
1607 |                   },
1608 |                   description: 'Outcome rules for completion verification',
1609 |                 },
1610 |                 actualOutcomes: {
1611 |                   type: 'array',
1612 |                   items: {
1613 |                     type: 'object',
1614 |                     properties: {
1615 |                       taskId: { type: 'string' },
1616 |                       outcome: { type: 'string' },
1617 |                       evidence: { type: 'array', items: { type: 'string' } },
1618 |                       timestamp: { type: 'string' },
1619 |                     },
1620 |                   },
1621 |                   description: 'Actual deployment outcomes',
1622 |                 },
1623 |                 cicdStatus: {
1624 |                   type: 'object',
1625 |                   description: 'CI/CD pipeline status data',
1626 |                 },
1627 |                 environmentStatus: {
1628 |                   type: 'object',
1629 |                   description: 'Environment status data',
1630 |                 },
1631 |               },
1632 |             },
1633 |           },
1634 |           {
1635 |             name: 'check_ai_execution_status',
1636 |             description:
1637 |               'Check AI execution configuration and status for debugging prompt-only mode issues',
1638 |             inputSchema: {
1639 |               type: 'object',
1640 |               properties: {},
1641 |               required: [],
1642 |             },
1643 |           },
1644 |           {
1645 |             name: 'get_workflow_guidance',
1646 |             description:
1647 |               'Get intelligent workflow guidance and tool recommendations based on your goals and project context to achieve expected outcomes efficiently',
1648 |             inputSchema: {
1649 |               type: 'object',
1650 |               properties: {
1651 |                 goal: {
1652 |                   type: 'string',
1653 |                   description:
1654 |                     'What you want to accomplish (e.g., "analyze new project", "document existing decisions", "security audit", "modernize legacy system")',
1655 |                 },
1656 |                 projectContext: {
1657 |                   type: 'string',
1658 |                   description:
1659 |                     'Current state of your project (e.g., "new project", "existing project with ADRs", "legacy codebase", "greenfield development")',
1660 |                   enum: [
1661 |                     'new_project',
1662 |                     'existing_with_adrs',
1663 |                     'existing_without_adrs',
1664 |                     'legacy_codebase',
1665 |                     'greenfield',
1666 |                     'maintenance_mode',
1667 |                     'unknown',
1668 |                   ],
1669 |                 },
1670 |                 availableAssets: {
1671 |                   type: 'array',
1672 |                   items: { type: 'string' },
1673 |                   description:
1674 |                     'What assets you already have (e.g., ["PRD.md", "existing ADRs", "codebase", "documentation", "test suite"])',
1675 |                 },
1676 |                 timeframe: {
1677 |                   type: 'string',
1678 |                   description: 'Available time/effort level',
1679 |                   enum: [
1680 |                     'quick_analysis',
1681 |                     'thorough_review',
1682 |                     'comprehensive_audit',
1683 |                     'ongoing_process',
1684 |                   ],
1685 |                 },
1686 |                 primaryConcerns: {
1687 |                   type: 'array',
1688 |                   items: { type: 'string' },
1689 |                   description:
1690 |                     'Main areas of concern (e.g., ["security", "performance", "maintainability", "scalability", "compliance"])',
1691 |                 },
1692 |               },
1693 |               required: ['goal', 'projectContext'],
1694 |             },
1695 |           },
1696 |           {
1697 |             name: 'get_development_guidance',
1698 |             description:
1699 |               'Get comprehensive development guidance that translates architectural decisions and workflow recommendations into specific coding tasks, implementation patterns, and development roadmap',
1700 |             inputSchema: {
1701 |               type: 'object',
1702 |               properties: {
1703 |                 developmentPhase: {
1704 |                   type: 'string',
1705 |                   description: 'Current development phase',
1706 |                   enum: [
1707 |                     'planning',
1708 |                     'setup',
1709 |                     'implementation',
1710 |                     'testing',
1711 |                     'deployment',
1712 |                     'maintenance',
1713 |                     'refactoring',
1714 |                   ],
1715 |                 },
1716 |                 adrsToImplement: {
1717 |                   type: 'array',
1718 |                   items: { type: 'string' },
1719 |                   description:
1720 |                     'List of ADR titles or file paths that need to be implemented in code',
1721 |                 },
1722 |                 technologyStack: {
1723 |                   type: 'array',
1724 |                   items: { type: 'string' },
1725 |                   description:
1726 |                     'Current technology stack (e.g., ["TypeScript", "React", "Node.js", "PostgreSQL", "Docker"])',
1727 |                 },
1728 |                 currentProgress: {
1729 |                   type: 'string',
1730 |                   description: 'What has already been implemented or current state of development',
1731 |                 },
1732 |                 teamContext: {
1733 |                   type: 'object',
1734 |                   properties: {
1735 |                     size: {
1736 |                       type: 'string',
1737 |                       enum: ['solo', 'small_team', 'medium_team', 'large_team'],
1738 |                     },
1739 |                     experienceLevel: {
1740 |                       type: 'string',
1741 |                       enum: ['junior', 'mixed', 'senior', 'expert'],
1742 |                     },
1743 |                   },
1744 |                 },
1745 |                 timeline: {
1746 |                   type: 'string',
1747 |                   description: 'Development timeline or deadline constraints',
1748 |                 },
1749 |                 focusAreas: {
1750 |                   type: 'array',
1751 |                   items: { type: 'string' },
1752 |                   description:
1753 |                     'Specific areas to focus on (e.g., ["API design", "database schema", "testing strategy", "deployment pipeline"])',
1754 |                 },
1755 |               },
1756 |               required: ['developmentPhase'],
1757 |             },
1758 |           },
1759 |           {
1760 |             name: 'list_roots',
1761 |             description:
1762 |               'List available file system roots that can be accessed. Use this to discover what directories are available before reading files.',
1763 |             inputSchema: {
1764 |               type: 'object',
1765 |               properties: {},
1766 |             },
1767 |           },
1768 |           {
1769 |             name: 'read_directory',
1770 |             description:
1771 |               'List files and folders in a directory. Use this to explore the file structure within accessible roots.',
1772 |             inputSchema: {
1773 |               type: 'object',
1774 |               properties: {
1775 |                 path: {
1776 |                   type: 'string',
1777 |                   description:
1778 |                     'Directory path to list (relative to project root or absolute within roots)',
1779 |                 },
1780 |               },
1781 |               required: ['path'],
1782 |             },
1783 |           },
1784 |           {
1785 |             name: 'read_file',
1786 |             description: 'Read contents of a file',
1787 |             inputSchema: {
1788 |               type: 'object',
1789 |               properties: {
1790 |                 path: {
1791 |                   type: 'string',
1792 |                   description: 'Path to the file to read',
1793 |                 },
1794 |               },
1795 |               required: ['path'],
1796 |             },
1797 |           },
1798 |           {
1799 |             name: 'write_file',
1800 |             description: 'Write content to a file',
1801 |             inputSchema: {
1802 |               type: 'object',
1803 |               properties: {
1804 |                 path: {
1805 |                   type: 'string',
1806 |                   description: 'Path to the file to write',
1807 |                 },
1808 |                 content: {
1809 |                   type: 'string',
1810 |                   description: 'Content to write to the file',
1811 |                 },
1812 |               },
1813 |               required: ['path', 'content'],
1814 |             },
1815 |           },
1816 |           {
1817 |             name: 'list_directory',
1818 |             description: 'List contents of a directory',
1819 |             inputSchema: {
1820 |               type: 'object',
1821 |               properties: {
1822 |                 path: {
1823 |                   type: 'string',
1824 |                   description: 'Path to the directory to list',
1825 |                 },
1826 |               },
1827 |               required: ['path'],
1828 |             },
1829 |           },
1830 |           {
1831 |             name: 'generate_deployment_guidance',
1832 |             description:
1833 |               'Generate deployment guidance and instructions from ADRs with environment-specific configurations',
1834 |             inputSchema: {
1835 |               type: 'object',
1836 |               properties: {
1837 |                 adrDirectory: {
1838 |                   type: 'string',
1839 |                   default: 'docs/adrs',
1840 |                   description: 'Directory containing ADR files',
1841 |                 },
1842 |                 environment: {
1843 |                   type: 'string',
1844 |                   enum: ['development', 'staging', 'production', 'all'],
1845 |                   default: 'production',
1846 |                   description: 'Target deployment environment',
1847 |                 },
1848 |                 format: {
1849 |                   type: 'string',
1850 |                   enum: ['markdown', 'scripts', 'structured', 'all'],
1851 |                   default: 'markdown',
1852 |                   description: 'Output format for guidance',
1853 |                 },
1854 |                 projectPath: {
1855 |                   type: 'string',
1856 |                   description:
1857 |                     'Project root path (optional, uses configured PROJECT_PATH if not provided)',
1858 |                 },
1859 |                 includeScripts: {
1860 |                   type: 'boolean',
1861 |                   default: true,
1862 |                   description: 'Generate deployment scripts',
1863 |                 },
1864 |                 includeConfigs: {
1865 |                   type: 'boolean',
1866 |                   default: true,
1867 |                   description: 'Generate configuration files',
1868 |                 },
1869 |                 includeValidation: {
1870 |                   type: 'boolean',
1871 |                   default: true,
1872 |                   description: 'Include validation and health checks',
1873 |                 },
1874 |                 technologyFilter: {
1875 |                   type: 'array',
1876 |                   items: {
1877 |                     type: 'string',
1878 |                     enum: [
1879 |                       'containerization',
1880 |                       'database',
1881 |                       'web-server',
1882 |                       'cache',
1883 |                       'message-queue',
1884 |                       'monitoring',
1885 |                       'security',
1886 |                       'ci-cd',
1887 |                       'infrastructure',
1888 |                     ],
1889 |                   },
1890 |                   description: 'Filter by specific technology categories',
1891 |                 },
1892 |                 customRequirements: {
1893 |                   type: 'array',
1894 |                   items: { type: 'string' },
1895 |                   description: 'Additional custom requirements',
1896 |                 },
1897 |                 includeRollback: {
1898 |                   type: 'boolean',
1899 |                   default: true,
1900 |                   description: 'Include rollback procedures',
1901 |                 },
1902 |                 generateFiles: {
1903 |                   type: 'boolean',
1904 |                   default: false,
1905 |                   description: 'Actually generate files (vs just guidance)',
1906 |                 },
1907 |               },
1908 |               required: [],
1909 |             },
1910 |           },
1911 |           {
1912 |             name: 'smart_git_push',
1913 |             description:
1914 |               'AI-driven security-focused git push with credential detection, file filtering, and deployment metrics tracking. Tests should be run by calling AI and results provided.',
1915 |             inputSchema: {
1916 |               type: 'object',
1917 |               properties: {
1918 |                 branch: {
1919 |                   type: 'string',
1920 |                   description:
1921 |                     'Target branch for push (optional, uses current branch if not specified)',
1922 |                 },
1923 |                 message: {
1924 |                   type: 'string',
1925 |                   description: 'Commit message (optional, commits staged files if provided)',
1926 |                 },
1927 |                 testResults: {
1928 |                   type: 'object',
1929 |                   description:
1930 |                     'Test results from AI-executed tests (required for proper deployment tracking)',
1931 |                   properties: {
1932 |                     success: {
1933 |                       type: 'boolean',
1934 |                       description: 'Whether all tests passed',
1935 |                     },
1936 |                     testsRun: {
1937 |                       type: 'number',
1938 |                       description: 'Total number of tests executed',
1939 |                     },
1940 |                     testsPassed: {
1941 |                       type: 'number',
1942 |                       description: 'Number of tests that passed',
1943 |                     },
1944 |                     testsFailed: {
1945 |                       type: 'number',
1946 |                       description: 'Number of tests that failed',
1947 |                     },
1948 |                     duration: {
1949 |                       type: 'number',
1950 |                       description: 'Test execution duration in seconds',
1951 |                     },
1952 |                     command: {
1953 |                       type: 'string',
1954 |                       description: 'Test command that was executed by AI',
1955 |                     },
1956 |                     output: {
1957 |                       type: 'string',
1958 |                       description: 'Test execution output',
1959 |                     },
1960 |                     failureDetails: {
1961 |                       type: 'array',
1962 |                       items: { type: 'string' },
1963 |                       description: 'Details of test failures',
1964 |                     },
1965 |                     testTypes: {
1966 |                       type: 'object',
1967 |                       description: 'Results broken down by test type (unit, integration, etc.)',
1968 |                       additionalProperties: {
1969 |                         type: 'object',
1970 |                         properties: {
1971 |                           passed: { type: 'number' },
1972 |                           failed: { type: 'number' },
1973 |                         },
1974 |                       },
1975 |                     },
1976 |                   },
1977 |                   required: ['success', 'testsRun', 'testsPassed', 'testsFailed'],
1978 |                 },
1979 |                 skipSecurity: {
1980 |                   type: 'boolean',
1981 |                   default: false,
1982 |                   description: 'Skip security scanning (NOT RECOMMENDED)',
1983 |                 },
1984 |                 dryRun: {
1985 |                   type: 'boolean',
1986 |                   default: false,
1987 |                   description: 'Show what would be pushed without actually pushing',
1988 |                 },
1989 |                 projectPath: {
1990 |                   type: 'string',
1991 |                   description: 'Path to project directory (defaults to current working directory)',
1992 |                 },
1993 |                 forceUnsafe: {
1994 |                   type: 'boolean',
1995 |                   default: false,
1996 |                   description: 'Override security blocks and test failures (DANGEROUS)',
1997 |                 },
1998 |               },
1999 |             },
2000 |           },
2001 |           {
2002 |             name: 'deployment_readiness',
2003 |             description:
2004 |               'Comprehensive deployment readiness validation with test failure tracking, deployment history analysis, and hard blocking for unsafe deployments. Integrates with smart_git_push for deployment gating.',
2005 |             inputSchema: {
2006 |               type: 'object',
2007 |               properties: {
2008 |                 operation: {
2009 |                   type: 'string',
2010 |                   enum: [
2011 |                     'check_readiness',
2012 |                     'validate_production',
2013 |                     'test_validation',
2014 |                     'deployment_history',
2015 |                     'full_audit',
2016 |                     'emergency_override',
2017 |                   ],
2018 |                   description: 'Type of deployment readiness check to perform',
2019 |                 },
2020 |                 projectPath: {
2021 |                   type: 'string',
2022 |                   description: 'Path to project directory (defaults to current working directory)',
2023 |                 },
2024 |                 targetEnvironment: {
2025 |                   type: 'string',
2026 |                   enum: ['staging', 'production', 'integration'],
2027 |                   default: 'production',
2028 |                   description: 'Target deployment environment',
2029 |                 },
2030 |                 strictMode: {
2031 |                   type: 'boolean',
2032 |                   default: true,
2033 |                   description: 'Enable strict validation (recommended for production)',
2034 |                 },
2035 |                 allowMockCode: {
2036 |                   type: 'boolean',
2037 |                   default: false,
2038 |                   description: 'Allow mock code in deployment (NOT RECOMMENDED)',
2039 |                 },
2040 |                 productionCodeThreshold: {
2041 |                   type: 'number',
2042 |                   default: 85,
2043 |                   description: 'Minimum production code quality score (0-100)',
2044 |                 },
2045 |                 mockCodeMaxAllowed: {
2046 |                   type: 'number',
2047 |                   default: 0,
2048 |                   description: 'Maximum mock code indicators allowed',
2049 |                 },
2050 |                 maxTestFailures: {
2051 |                   type: 'number',
2052 |                   default: 0,
2053 |                   description: 'Maximum test failures allowed (0 = zero tolerance)',
2054 |                 },
2055 |                 requireTestCoverage: {
2056 |                   type: 'number',
2057 |                   default: 80,
2058 |                   description: 'Minimum test coverage percentage required',
2059 |                 },
2060 |                 blockOnFailingTests: {
2061 |                   type: 'boolean',
2062 |                   default: true,
2063 |                   description: 'Block deployment if tests are failing',
2064 |                 },
2065 |                 testSuiteRequired: {
2066 |                   type: 'array',
2067 |                   items: { type: 'string' },
2068 |                   default: [],
2069 |                   description: 'Required test suites that must pass',
2070 |                 },
2071 |                 maxRecentFailures: {
2072 |                   type: 'number',
2073 |                   default: 2,
2074 |                   description: 'Maximum recent deployment failures allowed',
2075 |                 },
2076 |                 deploymentSuccessThreshold: {
2077 |                   type: 'number',
2078 |                   default: 80,
2079 |                   description: 'Minimum deployment success rate required (%)',
2080 |                 },
2081 |                 blockOnRecentFailures: {
2082 |                   type: 'boolean',
2083 |                   default: true,
2084 |                   description: 'Block if recent deployments failed',
2085 |                 },
2086 |                 rollbackFrequencyThreshold: {
2087 |                   type: 'number',
2088 |                   default: 20,
2089 |                   description: 'Maximum rollback frequency allowed (%)',
2090 |                 },
2091 |                 requireAdrCompliance: {
2092 |                   type: 'boolean',
2093 |                   default: true,
2094 |                   description: 'Require ADR compliance validation',
2095 |                 },
2096 |                 integrateTodoTasks: {
2097 |                   type: 'boolean',
2098 |                   default: true,
2099 |                   description: 'Auto-create blocking tasks for issues',
2100 |                 },
2101 |                 updateHealthScoring: {
2102 |                   type: 'boolean',
2103 |                   default: true,
2104 |                   description: 'Update project health scores',
2105 |                 },
2106 |                 triggerSmartGitPush: {
2107 |                   type: 'boolean',
2108 |                   default: false,
2109 |                   description: 'Trigger smart git push validation',
2110 |                 },
2111 |                 emergencyBypass: {
2112 |                   type: 'boolean',
2113 |                   default: false,
2114 |                   description: 'Emergency bypass for critical fixes',
2115 |                 },
2116 |                 businessJustification: {
2117 |                   type: 'string',
2118 |                   description:
2119 |                     'Business justification for overrides (required for emergency_override)',
2120 |                 },
2121 |                 approvalRequired: {
2122 |                   type: 'boolean',
2123 |                   default: true,
2124 |                   description: 'Require approval for overrides',
2125 |                 },
2126 |                 enableMemoryIntegration: {
2127 |                   type: 'boolean',
2128 |                   description:
2129 |                     'Enable memory entity storage for deployment assessment tracking and historical analysis',
2130 |                   default: true,
2131 |                 },
2132 |                 migrateExistingHistory: {
2133 |                   type: 'boolean',
2134 |                   description: 'Migrate existing JSON-based deployment history to memory entities',
2135 |                   default: true,
2136 |                 },
2137 |               },
2138 |               required: ['operation'],
2139 |             },
2140 |           },
2141 |           {
2142 |             name: 'troubleshoot_guided_workflow',
2143 |             description:
2144 |               'Structured failure analysis and test plan generation with memory integration for troubleshooting session tracking and intelligent ADR/research suggestion capabilities - provide JSON failure info to get specific test commands',
2145 |             inputSchema: {
2146 |               type: 'object',
2147 |               properties: {
2148 |                 operation: {
2149 |                   type: 'string',
2150 |                   enum: ['analyze_failure', 'generate_test_plan', 'full_workflow'],
2151 |                   description: 'Type of troubleshooting operation',
2152 |                 },
2153 |                 failure: {
2154 |                   type: 'object',
2155 |                   properties: {
2156 |                     failureType: {
2157 |                       type: 'string',
2158 |                       enum: [
2159 |                         'test_failure',
2160 |                         'deployment_failure',
2161 |                         'build_failure',
2162 |                         'runtime_error',
2163 |                         'performance_issue',
2164 |                         'security_issue',
2165 |                         'other',
2166 |                       ],
2167 |                       description: 'Type of failure',
2168 |                     },
2169 |                     failureDetails: {
2170 |                       type: 'object',
2171 |                       properties: {
2172 |                         command: {
2173 |                           type: 'string',
2174 |                           description: 'Command that failed (optional)',
2175 |                         },
2176 |                         exitCode: {
2177 |                           type: 'number',
2178 |                           description: 'Exit code of failed process (optional)',
2179 |                         },
2180 |                         errorMessage: {
2181 |                           type: 'string',
2182 |                           description: 'Primary error message',
2183 |                         },
2184 |                         stackTrace: {
2185 |                           type: 'string',
2186 |                           description: 'Stack trace if available (optional)',
2187 |                         },
2188 |                         logOutput: {
2189 |                           type: 'string',
2190 |                           description: 'Relevant log output (optional)',
2191 |                         },
2192 |                         environment: {
2193 |                           type: 'string',
2194 |                           description: 'Environment where failure occurred (optional)',
2195 |                         },
2196 |                         timestamp: {
2197 |                           type: 'string',
2198 |                           description: 'When the failure occurred (optional)',
2199 |                         },
2200 |                         affectedFiles: {
2201 |                           type: 'array',
2202 |                           items: { type: 'string' },
2203 |                           description: 'Files involved in the failure (optional)',
2204 |                         },
2205 |                       },
2206 |                       required: ['errorMessage'],
2207 |                       description: 'Detailed failure information',
2208 |                     },
2209 |                     context: {
2210 |                       type: 'object',
2211 |                       properties: {
2212 |                         recentChanges: {
2213 |                           type: 'string',
2214 |                           description: 'Recent changes that might be related (optional)',
2215 |                         },
2216 |                         reproducible: {
2217 |                           type: 'boolean',
2218 |                           description: 'Whether the failure is reproducible (optional)',
2219 |                         },
2220 |                         frequency: {
2221 |                           type: 'string',
2222 |                           description: 'How often this failure occurs (optional)',
2223 |                         },
2224 |                         impact: {
2225 |                           type: 'string',
2226 |                           enum: ['low', 'medium', 'high', 'critical'],
2227 |                           description: 'Impact level of the failure (optional)',
2228 |                         },
2229 |                       },
2230 |                       description: 'Additional context about the failure (optional)',
2231 |                     },
2232 |                   },
2233 |                   required: ['failureType', 'failureDetails'],
2234 |                   description:
2235 |                     'Structured failure information (required for analyze_failure and generate_test_plan)',
2236 |                 },
2237 |                 projectPath: {
2238 |                   type: 'string',
2239 |                   description: 'Path to project directory (optional)',
2240 |                 },
2241 |                 adrDirectory: {
2242 |                   type: 'string',
2243 |                   description: 'ADR directory path',
2244 |                   default: 'docs/adrs',
2245 |                 },
2246 |                 todoPath: {
2247 |                   type: 'string',
2248 |                   description: 'Path to TODO.md file',
2249 |                   default: 'TODO.md',
2250 |                 },
2251 |                 enableMemoryIntegration: {
2252 |                   type: 'boolean',
2253 |                   description:
2254 |                     'Enable memory entity storage for troubleshooting session tracking and pattern recognition',
2255 |                   default: true,
2256 |                 },
2257 |                 enablePatternRecognition: {
2258 |                   type: 'boolean',
2259 |                   description: 'Enable automatic pattern recognition and failure classification',
2260 |                   default: true,
2261 |                 },
2262 |                 enableAdrSuggestion: {
2263 |                   type: 'boolean',
2264 |                   description: 'Enable automatic ADR suggestion based on recurring failures',
2265 |                   default: true,
2266 |                 },
2267 |                 enableResearchGeneration: {
2268 |                   type: 'boolean',
2269 |                   description:
2270 |                     'Enable automatic research question generation for persistent problems',
2271 |                   default: true,
2272 |                 },
2273 |                 conversationContext: CONVERSATION_CONTEXT_SCHEMA,
2274 |               },
2275 |               required: ['operation'],
2276 |             },
2277 |           },
2278 |           {
2279 |             name: 'smart_score',
2280 |             description:
2281 |               'Central coordination for project health scoring system - recalculate, sync, diagnose, optimize, and reset scores across all MCP tools',
2282 |             inputSchema: {
2283 |               type: 'object',
2284 |               properties: {
2285 |                 operation: {
2286 |                   type: 'string',
2287 |                   enum: [
2288 |                     'recalculate_scores',
2289 |                     'sync_scores',
2290 |                     'diagnose_scores',
2291 |                     'optimize_weights',
2292 |                     'reset_scores',
2293 |                     'get_score_trends',
2294 |                     'get_intent_scores',
2295 |                   ],
2296 |                   description: 'Smart scoring operation to perform',
2297 |                 },
2298 |                 projectPath: {
2299 |                   type: 'string',
2300 |                   description: 'Path to project directory',
2301 |                 },
2302 |                 components: {
2303 |                   type: 'array',
2304 |                   items: {
2305 |                     type: 'string',
2306 |                     enum: [
2307 |                       'task_completion',
2308 |                       'deployment_readiness',
2309 |                       'architecture_compliance',
2310 |                       'security_posture',
2311 |                       'code_quality',
2312 |                       'all',
2313 |                     ],
2314 |                   },
2315 |                   default: ['all'],
2316 |                   description: 'Score components to recalculate (for recalculate_scores operation)',
2317 |                 },
2318 |                 forceUpdate: {
2319 |                   type: 'boolean',
2320 |                   default: false,
2321 |                   description: 'Force update even if data is fresh',
2322 |                 },
2323 |                 updateSources: {
2324 |                   type: 'boolean',
2325 |                   default: true,
2326 |                   description: 'Trigger source tool updates before recalculating',
2327 |                 },
2328 |                 todoPath: {
2329 |                   type: 'string',
2330 |                   default: 'TODO.md',
2331 |                   description: 'Path to TODO.md file (for sync_scores operation)',
2332 |                 },
2333 |                 triggerTools: {
2334 |                   type: 'array',
2335 |                   items: {
2336 |                     type: 'string',
2337 |                     enum: [
2338 |                       'smart_git_push',
2339 |                       'compare_adr_progress',
2340 |                       'analyze_content_security',
2341 |                       'validate_rules',
2342 |                     ],
2343 |                   },
2344 |                   description: 'Tools to trigger for fresh data (for sync_scores operation)',
2345 |                 },
2346 |                 rebalanceWeights: {
2347 |                   type: 'boolean',
2348 |                   default: false,
2349 |                   description: 'Recalculate optimal scoring weights (for sync_scores operation)',
2350 |                 },
2351 |                 includeHistory: {
2352 |                   type: 'boolean',
2353 |                   default: true,
2354 |                   description: 'Include score history analysis (for diagnose_scores operation)',
2355 |                 },
2356 |                 checkDataFreshness: {
2357 |                   type: 'boolean',
2358 |                   default: true,
2359 |                   description:
2360 |                     'Validate data freshness across tools (for diagnose_scores operation)',
2361 |                 },
2362 |                 suggestImprovements: {
2363 |                   type: 'boolean',
2364 |                   default: true,
2365 |                   description:
2366 |                     'Provide score improvement suggestions (for diagnose_scores operation)',
2367 |                 },
2368 |                 analysisMode: {
2369 |                   type: 'string',
2370 |                   enum: ['current_state', 'historical_data', 'project_type'],
2371 |                   default: 'current_state',
2372 |                   description: 'Method for weight optimization (for optimize_weights operation)',
2373 |                 },
2374 |                 customWeights: {
2375 |                   type: 'object',
2376 |                   properties: {
2377 |                     taskCompletion: { type: 'number', minimum: 0, maximum: 1 },
2378 |                     deploymentReadiness: { type: 'number', minimum: 0, maximum: 1 },
2379 |                     architectureCompliance: { type: 'number', minimum: 0, maximum: 1 },
2380 |                     securityPosture: { type: 'number', minimum: 0, maximum: 1 },
2381 |                     codeQuality: { type: 'number', minimum: 0, maximum: 1 },
2382 |                   },
2383 |                   description: 'Custom weight overrides (for optimize_weights operation)',
2384 |                 },
2385 |                 previewOnly: {
2386 |                   type: 'boolean',
2387 |                   default: false,
2388 |                   description: 'Preview changes without applying (for optimize_weights operation)',
2389 |                 },
2390 |                 component: {
2391 |                   type: 'string',
2392 |                   enum: [
2393 |                     'task_completion',
2394 |                     'deployment_readiness',
2395 |                     'architecture_compliance',
2396 |                     'security_posture',
2397 |                     'code_quality',
2398 |                     'all',
2399 |                   ],
2400 |                   default: 'all',
2401 |                   description: 'Score component to reset (for reset_scores operation)',
2402 |                 },
2403 |                 preserveHistory: {
2404 |                   type: 'boolean',
2405 |                   default: true,
2406 |                   description: 'Preserve score history in backup (for reset_scores operation)',
2407 |                 },
2408 |                 recalculateAfterReset: {
2409 |                   type: 'boolean',
2410 |                   default: true,
2411 |                   description: 'Immediately recalculate after reset (for reset_scores operation)',
2412 |                 },
2413 |                 intentId: {
2414 |                   type: 'string',
2415 |                   description:
2416 |                     'Intent ID to get score trends for (for get_intent_scores operation)',
2417 |                 },
2418 |               },
2419 |               required: ['operation', 'projectPath'],
2420 |             },
2421 |           },
2422 |           {
2423 |             name: 'mcp_planning',
2424 |             description:
2425 |               'Enhanced project planning and workflow management tool - phase-based project management, team resource allocation, progress tracking, risk analysis, and executive reporting',
2426 |             inputSchema: {
2427 |               type: 'object',
2428 |               properties: {
2429 |                 operation: {
2430 |                   type: 'string',
2431 |                   enum: [
2432 |                     'create_project',
2433 |                     'manage_phases',
2434 |                     'track_progress',
2435 |                     'manage_resources',
2436 |                     'risk_analysis',
2437 |                     'generate_reports',
2438 |                   ],
2439 |                   description: 'Project planning operation to perform',
2440 |                 },
2441 |                 projectPath: {
2442 |                   type: 'string',
2443 |                   description: 'Project root path',
2444 |                 },
2445 |                 projectName: {
2446 |                   type: 'string',
2447 |                   description: 'Project name (for create_project operation)',
2448 |                 },
2449 |                 description: {
2450 |                   type: 'string',
2451 |                   description: 'Project description (for create_project operation)',
2452 |                 },
2453 |                 phases: {
2454 |                   type: 'array',
2455 |                   items: {
2456 |                     type: 'object',
2457 |                     properties: {
2458 |                       name: { type: 'string' },
2459 |                       duration: { type: 'string' },
2460 |                       dependencies: {
2461 |                         type: 'array',
2462 |                         items: { type: 'string' },
2463 |                         default: [],
2464 |                       },
2465 |                       milestones: {
2466 |                         type: 'array',
2467 |                         items: { type: 'string' },
2468 |                         default: [],
2469 |                       },
2470 |                     },
2471 |                     required: ['name', 'duration'],
2472 |                   },
2473 |                   description: 'Initial project phases (for create_project operation)',
2474 |                 },
2475 |                 team: {
2476 |                   type: 'array',
2477 |                   items: {
2478 |                     type: 'object',
2479 |                     properties: {
2480 |                       name: { type: 'string' },
2481 |                       role: { type: 'string' },
2482 |                       skills: {
2483 |                         type: 'array',
2484 |                         items: { type: 'string' },
2485 |                         default: [],
2486 |                       },
2487 |                       capacity: { type: 'string' },
2488 |                     },
2489 |                     required: ['name', 'role', 'capacity'],
2490 |                   },
2491 |                   default: [],
2492 |                   description: 'Team structure (for create_project operation)',
2493 |                 },
2494 |                 importFromAdrs: {
2495 |                   type: 'boolean',
2496 |                   default: true,
2497 |                   description: 'Import phases from existing ADRs (for create_project operation)',
2498 |                 },
2499 |                 importFromTodos: {
2500 |                   type: 'boolean',
2501 |                   default: true,
2502 |                   description: 'Import tasks from TODO system (for create_project operation)',
2503 |                 },
2504 |                 action: {
2505 |                   type: 'string',
2506 |                   enum: [
2507 |                     'list',
2508 |                     'create',
2509 |                     'update',
2510 |                     'delete',
2511 |                     'transition',
2512 |                     'add',
2513 |                     'remove',
2514 |                     'allocate',
2515 |                     'optimize',
2516 |                   ],
2517 |                   description: 'Management action (for manage_phases/manage_resources operations)',
2518 |                 },
2519 |                 phaseId: {
2520 |                   type: 'string',
2521 |                   description: 'Phase ID for phase operations',
2522 |                 },
2523 |                 phaseData: {
2524 |                   type: 'object',
2525 |                   properties: {
2526 |                     name: { type: 'string' },
2527 |                     description: { type: 'string' },
2528 |                     estimatedDuration: { type: 'string' },
2529 |                     dependencies: {
2530 |                       type: 'array',
2531 |                       items: { type: 'string' },
2532 |                     },
2533 |                     milestones: {
2534 |                       type: 'array',
2535 |                       items: { type: 'string' },
2536 |                     },
2537 |                     linkedAdrs: {
2538 |                       type: 'array',
2539 |                       items: { type: 'string' },
2540 |                     },
2541 |                   },
2542 |                   description: 'Phase data for create/update operations',
2543 |                 },
2544 |                 targetStatus: {
2545 |                   type: 'string',
2546 |                   enum: ['planning', 'active', 'completed', 'blocked', 'cancelled'],
2547 |                   description: 'Target status for phase transition',
2548 |                 },
2549 |                 reportType: {
2550 |                   type: 'string',
2551 |                   enum: [
2552 |                     'summary',
2553 |                     'detailed',
2554 |                     'gantt',
2555 |                     'milestones',
2556 |                     'risks',
2557 |                     'executive',
2558 |                     'status',
2559 |                     'health',
2560 |                     'team_performance',
2561 |                     'milestone_tracking',
2562 |                   ],
2563 |                   default: 'summary',
2564 |                   description: 'Type of progress report or generated report',
2565 |                 },
2566 |                 timeframe: {
2567 |                   type: 'string',
2568 |                   enum: [
2569 |                     'current',
2570 |                     'weekly',
2571 |                     'monthly',
2572 |                     'quarterly',
2573 |                     'week',
2574 |                     'month',
2575 |                     'quarter',
2576 |                     'project',
2577 |                   ],
2578 |                   default: 'current',
2579 |                   description: 'Time frame for reports and tracking',
2580 |                 },
2581 |                 includeVisuals: {
2582 |                   type: 'boolean',
2583 |                   default: true,
2584 |                   description: 'Include visual progress indicators',
2585 |                 },
2586 |                 updateTaskProgress: {
2587 |                   type: 'boolean',
2588 |                   default: true,
2589 |                   description: 'Sync progress from TODO system',
2590 |                 },
2591 |                 memberId: {
2592 |                   type: 'string',
2593 |                   description: 'Team member ID for resource operations',
2594 |                 },
2595 |                 memberData: {
2596 |                   type: 'object',
2597 |                   properties: {
2598 |                     name: { type: 'string' },
2599 |                     role: { type: 'string' },
2600 |                     skills: {
2601 |                       type: 'array',
2602 |                       items: { type: 'string' },
2603 |                     },
2604 |                     capacity: { type: 'string' },
2605 |                   },
2606 |                   description: 'Team member data for resource operations',
2607 |                 },
2608 |                 allocationData: {
2609 |                   type: 'object',
2610 |                   properties: {
2611 |                     phaseId: { type: 'string' },
2612 |                     allocation: {
2613 |                       type: 'number',
2614 |                       minimum: 0,
2615 |                       maximum: 100,
2616 |                     },
2617 |                   },
2618 |                   required: ['phaseId', 'allocation'],
2619 |                   description: 'Resource allocation data',
2620 |                 },
2621 |                 analysisType: {
2622 |                   type: 'string',
2623 |                   enum: ['automated', 'manual', 'comprehensive'],
2624 |                   default: 'comprehensive',
2625 |                   description: 'Type of risk analysis',
2626 |                 },
2627 |                 includeAdrRisks: {
2628 |                   type: 'boolean',
2629 |                   default: true,
2630 |                   description: 'Analyze risks from ADR complexity',
2631 |                 },
2632 |                 includeDependencyRisks: {
2633 |                   type: 'boolean',
2634 |                   default: true,
2635 |                   description: 'Analyze dependency chain risks',
2636 |                 },
2637 |                 includeResourceRisks: {
2638 |                   type: 'boolean',
2639 |                   default: true,
2640 |                   description: 'Analyze resource allocation risks',
2641 |                 },
2642 |                 generateMitigation: {
2643 |                   type: 'boolean',
2644 |                   default: true,
2645 |                   description: 'Generate mitigation strategies',
2646 |                 },
2647 |                 format: {
2648 |                   type: 'string',
2649 |                   enum: ['markdown', 'json', 'html'],
2650 |                   default: 'markdown',
2651 |                   description: 'Report output format',
2652 |                 },
2653 |                 includeCharts: {
2654 |                   type: 'boolean',
2655 |                   default: true,
2656 |                   description: 'Include progress charts and graphs',
2657 |                 },
2658 |               },
2659 |               required: ['operation', 'projectPath'],
2660 |             },
2661 |           },
2662 |           {
2663 |             name: 'interactive_adr_planning',
2664 |             description:
2665 |               'Interactive guided ADR planning and creation tool - walks users through structured decision-making process with research integration, option evaluation, and automatic ADR generation. TIP: Start by reading @.mcp-server-context.md to understand project context and previous decisions.',
2666 |             inputSchema: {
2667 |               type: 'object',
2668 |               properties: {
2669 |                 operation: {
2670 |                   type: 'string',
2671 |                   enum: [
2672 |                     'start_session',
2673 |                     'continue_session',
2674 |                     'provide_input',
2675 |                     'request_research',
2676 |                     'evaluate_options',
2677 |                     'make_decision',
2678 |                     'assess_impact',
2679 |                     'plan_implementation',
2680 |                     'generate_adr',
2681 |                     'update_todos',
2682 |                     'get_guidance',
2683 |                     'save_session',
2684 |                     'complete_session',
2685 |                   ],
2686 |                   description: 'Interactive planning operation to perform',
2687 |                 },
2688 |                 sessionId: {
2689 |                   type: 'string',
2690 |                   description:
2691 |                     'Planning session ID (required for all operations except start_session)',
2692 |                 },
2693 |                 input: {
2694 |                   type: 'string',
2695 |                   description: 'User input for the current phase (varies by phase)',
2696 |                 },
2697 |                 projectPath: {
2698 |                   type: 'string',
2699 |                   description: 'Project root path',
2700 |                 },
2701 |                 autoResearch: {
2702 |                   type: 'boolean',
2703 |                   default: true,
2704 |                   description: 'Automatically trigger research when needed',
2705 |                 },
2706 |                 generateTodos: {
2707 |                   type: 'boolean',
2708 |                   default: true,
2709 |                   description: 'Automatically generate TODO items from decisions',
2710 |                 },
2711 |               },
2712 |               required: ['operation', 'projectPath'],
2713 |             },
2714 |           },
2715 |           {
2716 |             name: 'memory_loading',
2717 |             description:
2718 |               'Advanced memory loading tool for the memory-centric architecture. Query, explore, and manage memory entities and relationships. Load ADRs into memory system and perform intelligent queries.',
2719 |             inputSchema: {
2720 |               type: 'object',
2721 |               properties: {
2722 |                 action: {
2723 |                   type: 'string',
2724 |                   enum: [
2725 |                     'load_adrs',
2726 |                     'query_entities',
2727 |                     'get_entity',
2728 |                     'find_related',
2729 |                     'get_intelligence',
2730 |                     'create_snapshot',
2731 |                   ],
2732 |                   description: 'Memory operation to perform',
2733 |                   default: 'query_entities',
2734 |                 },
2735 |                 query: {
2736 |                   type: 'object',
2737 |                   properties: {
2738 |                     entityTypes: {
2739 |                       type: 'array',
2740 |                       items: {
2741 |                         type: 'string',
2742 |                         enum: [
2743 |                           'architectural_decision',
2744 |                           'code_component',
2745 |                           'business_requirement',
2746 |                           'technical_constraint',
2747 |                           'quality_concern',
2748 |                           'implementation_pattern',
2749 |                           'environmental_factor',
2750 |                           'stakeholder_input',
2751 |                           'knowledge_artifact',
2752 |                           'decision_context',
2753 |                         ],
2754 |                       },
2755 |                       description: 'Filter by entity types',
2756 |                     },
2757 |                     tags: {
2758 |                       type: 'array',
2759 |                       items: { type: 'string' },
2760 |                       description: 'Filter by tags',
2761 |                     },
2762 |                     textQuery: {
2763 |                       type: 'string',
2764 |                       description: 'Full-text search query',
2765 |                     },
2766 |                     relationshipTypes: {
2767 |                       type: 'array',
2768 |                       items: {
2769 |                         type: 'string',
2770 |                         enum: [
2771 |                           'depends_on',
2772 |                           'influences',
2773 |                           'conflicts_with',
2774 |                           'implements',
2775 |                           'supersedes',
2776 |                           'relates_to',
2777 |                           'originated_from',
2778 |                           'impacts',
2779 |                           'constrains',
2780 |                         ],
2781 |                       },
2782 |                       description: 'Filter by relationship types',
2783 |                     },
2784 |                     confidenceThreshold: {
2785 |                       type: 'number',
2786 |                       minimum: 0,
2787 |                       maximum: 1,
2788 |                       description: 'Minimum confidence threshold',
2789 |                     },
2790 |                     relevanceThreshold: {
2791 |                       type: 'number',
2792 |                       minimum: 0,
2793 |                       maximum: 1,
2794 |                       description: 'Minimum relevance threshold',
2795 |                     },
2796 |                     timeRange: {
2797 |                       type: 'object',
2798 |                       properties: {
2799 |                         from: { type: 'string', description: 'Start date (ISO 8601)' },
2800 |                         to: { type: 'string', description: 'End date (ISO 8601)' },
2801 |                       },
2802 |                       description: 'Filter by time range',
2803 |                     },
2804 |                     contextFilters: {
2805 |                       type: 'object',
2806 |                       properties: {
2807 |                         projectPhase: { type: 'string', description: 'Project phase filter' },
2808 |                         businessDomain: { type: 'string', description: 'Business domain filter' },
2809 |                         technicalStack: {
2810 |                           type: 'array',
2811 |                           items: { type: 'string' },
2812 |                           description: 'Technical stack filter',
2813 |                         },
2814 |                         environmentalFactors: {
2815 |                           type: 'array',
2816 |                           items: { type: 'string' },
2817 |                           description: 'Environmental factors filter',
2818 |                         },
2819 |                       },
2820 |                       description: 'Context-based filters',
2821 |                     },
2822 |                     limit: {
2823 |                       type: 'number',
2824 |                       minimum: 1,
2825 |                       description: 'Maximum number of results',
2826 |                     },
2827 |                     sortBy: {
2828 |                       type: 'string',
2829 |                       enum: ['relevance', 'confidence', 'lastModified', 'created', 'accessCount'],
2830 |                       description: 'Sort field',
2831 |                       default: 'relevance',
2832 |                     },
2833 |                     includeRelated: {
2834 |                       type: 'boolean',
2835 |                       description: 'Include related entities and relationships',
2836 |                       default: false,
2837 |                     },
2838 |                     relationshipDepth: {
2839 |                       type: 'number',
2840 |                       minimum: 1,
2841 |                       maximum: 5,
2842 |                       description: 'Maximum relationship traversal depth',
2843 |                       default: 2,
2844 |                     },
2845 |                   },
2846 |                   description: 'Query parameters for entity search',
2847 |                 },
2848 |                 entityId: {
2849 |                   type: 'string',
2850 |                   description: 'Entity ID for get_entity and find_related actions',
2851 |                 },
2852 |                 maxDepth: {
2853 |                   type: 'number',
2854 |                   minimum: 1,
2855 |                   maximum: 5,
2856 |                   description: 'Maximum depth for relationship traversal (find_related action)',
2857 |                   default: 2,
2858 |                 },
2859 |                 forceReload: {
2860 |                   type: 'boolean',
2861 |                   description: 'Force reload of ADRs (load_adrs action)',
2862 |                   default: false,
2863 |                 },
2864 |               },
2865 |             },
2866 |           },
2867 |           {
2868 |             name: 'expand_analysis_section',
2869 |             description:
2870 |               'Retrieve full analysis content from tiered responses. Expand entire analysis or specific sections stored in memory. Use this when a tool returns a summary with an expandable ID.',
2871 |             inputSchema: {
2872 |               type: 'object',
2873 |               properties: {
2874 |                 expandableId: {
2875 |                   type: 'string',
2876 |                   description: 'ID of the expandable analysis (provided in tiered response)',
2877 |                 },
2878 |                 section: {
2879 |                   type: 'string',
2880 |                   description:
2881 |                     'Optional: Specific section to expand (omit to get full analysis). Available sections are listed in the tiered response.',
2882 |                 },
2883 |                 format: {
2884 |                   type: 'string',
2885 |                   enum: ['markdown', 'json'],
2886 |                   description: 'Output format (default: markdown)',
2887 |                   default: 'markdown',
2888 |                 },
2889 |               },
2890 |               required: ['expandableId'],
2891 |             },
2892 |           },
2893 |           {
2894 |             name: 'tool_chain_orchestrator',
2895 |             description:
2896 |               'AI-powered dynamic tool sequencing - intelligently analyze user requests and generate structured tool execution plans',
2897 |             inputSchema: {
2898 |               type: 'object',
2899 |               properties: {
2900 |                 userRequest: {
2901 |                   type: 'string',
2902 |                   description: 'User request to analyze and create tool execution plan for',
2903 |                 },
2904 |                 availableTools: {
2905 |                   type: 'array',
2906 |                   items: { type: 'string' },
2907 |                   description: 'List of available MCP tools to orchestrate',
2908 |                 },
2909 |                 executionMode: {
2910 |                   type: 'string',
2911 |                   enum: ['plan_only', 'plan_and_execute', 'validate_plan'],
2912 |                   description: 'Orchestration mode',
2913 |                   default: 'plan_only',
2914 |                 },
2915 |                 maxSteps: {
2916 |                   type: 'number',
2917 |                   description: 'Maximum number of steps in the execution plan',
2918 |                   default: 10,
2919 |                 },
2920 |                 allowParallel: {
2921 |                   type: 'boolean',
2922 |                   description: 'Allow parallel execution of independent steps',
2923 |                   default: true,
2924 |                 },
2925 |                 contextHints: {
2926 |                   type: 'array',
2927 |                   items: { type: 'string' },
2928 |                   description: 'Additional context hints for better plan generation',
2929 |                 },
2930 |               },
2931 |               required: ['userRequest'],
2932 |             },
2933 |           },
2934 |           {
2935 |             name: 'expand_memory',
2936 |             description:
2937 |               'Phase 3: Retrieve and expand stored content from a tiered response using its expandable ID',
2938 |             inputSchema: {
2939 |               type: 'object',
2940 |               properties: {
2941 |                 expandableId: {
2942 |                   type: 'string',
2943 |                   description: 'Expandable ID from a tiered response',
2944 |                 },
2945 |                 section: {
2946 |                   type: 'string',
2947 |                   description: 'Optional: specific section to expand',
2948 |                 },
2949 |                 includeContext: {
2950 |                   type: 'boolean',
2951 |                   description: 'Include related conversation context and knowledge graph state',
2952 |                   default: true,
2953 |                 },
2954 |               },
2955 |               required: ['expandableId'],
2956 |             },
2957 |           },
2958 |           {
2959 |             name: 'query_conversation_history',
2960 |             description: 'Phase 3: Search and retrieve conversation sessions based on filters',
2961 |             inputSchema: {
2962 |               type: 'object',
2963 |               properties: {
2964 |                 projectPath: {
2965 |                   type: 'string',
2966 |                   description: 'Filter by project path',
2967 |                 },
2968 |                 dateRange: {
2969 |                   type: 'object',
2970 |                   properties: {
2971 |                     start: { type: 'string', description: 'Start date (ISO 8601)' },
2972 |                     end: { type: 'string', description: 'End date (ISO 8601)' },
2973 |                   },
2974 |                   description: 'Filter by date range',
2975 |                 },
2976 |                 toolsUsed: {
2977 |                   type: 'array',
2978 |                   items: { type: 'string' },
2979 |                   description: 'Filter by tools used in the session',
2980 |                 },
2981 |                 keyword: {
2982 |                   type: 'string',
2983 |                   description: 'Search keyword in conversation turns',
2984 |                 },
2985 |                 limit: {
2986 |                   type: 'number',
2987 |                   description: 'Maximum number of sessions to return',
2988 |                   default: 10,
2989 |                 },
2990 |               },
2991 |             },
2992 |           },
2993 |           {
2994 |             name: 'get_conversation_snapshot',
2995 |             description:
2996 |               'Phase 3: Get current conversation context snapshot for resumption or analysis',
2997 |             inputSchema: {
2998 |               type: 'object',
2999 |               properties: {
3000 |                 recentTurnCount: {
3001 |                   type: 'number',
3002 |                   description: 'Number of recent turns to include',
3003 |                   default: 5,
3004 |                 },
3005 |               },
3006 |             },
3007 |           },
3008 |           {
3009 |             name: 'get_memory_stats',
3010 |             description: 'Phase 3: Get statistics about stored conversation memory',
3011 |             inputSchema: {
3012 |               type: 'object',
3013 |               properties: {},
3014 |             },
3015 |           },
3016 |           {
3017 |             name: 'get_server_context',
3018 |             description:
3019 |               "Generate a comprehensive context file showing the server's current state, memory, and capabilities. Creates .mcp-server-context.md that can be @ referenced in conversations for instant LLM awareness",
3020 |             inputSchema: {
3021 |               type: 'object',
3022 |               properties: {
3023 |                 writeToFile: {
3024 |                   type: 'boolean',
3025 |                   description: 'Whether to write the context to .mcp-server-context.md file',
3026 |                   default: true,
3027 |                 },
3028 |                 outputPath: {
3029 |                   type: 'string',
3030 |                   description: 'Custom output path for the context file',
3031 |                 },
3032 |                 includeDetailed: {
3033 |                   type: 'boolean',
3034 |                   description: 'Include detailed information',
3035 |                   default: true,
3036 |                 },
3037 |                 maxRecentItems: {
3038 |                   type: 'number',
3039 |                   description: 'Maximum number of recent items to show',
3040 |                   default: 5,
3041 |                 },
3042 |               },
3043 |             },
3044 |           },
3045 |         ],
3046 |       };
3047 |     });
3048 | 
3049 |     /**
3050 |      * Call Tool Handler - MCP Protocol Endpoint
3051 |      *
3052 |      * @description Executes specific tools with provided arguments. This is the core
3053 |      * execution endpoint that routes tool calls to their respective implementations.
3054 |      * Includes comprehensive error handling, argument validation, and response masking.
3055 |      *
3056 |      * @param {CallToolRequest} request - MCP tool execution request
3057 |      * @param {string} request.params.name - Tool name to execute
3058 |      * @param {Object} request.params.arguments - Tool-specific arguments
3059 |      *
3060 |      * @returns {Promise<CallToolResult>} Tool execution result with content and metadata
3061 |      *
3062 |      * @throws {McpAdrError} When tool execution fails or arguments are invalid
3063 |      *
3064 |      * @example
3065 |      * ```typescript
3066 |      * // Execute research tool
3067 |      * const result = await mcpClient.callTool('perform_research', {
3068 |      *   question: 'What authentication methods are used?',
3069 |      *   projectPath: '/path/to/project'
3070 |      * });
3071 |      *
3072 |      * console.log(result.content); // Research findings
3073 |      * ```
3074 |      *
3075 |      * @example
3076 |      * ```typescript
3077 |      * // Execute ADR validation
3078 |      * const validation = await mcpClient.callTool('validate_adr', {
3079 |      *   adrPath: 'docs/adrs/0001-auth-choice.md',
3080 |      *   includeEnvironmentCheck: true
3081 |      * });
3082 |      *
3083 |      * console.log(validation.isValid); // true/false
3084 |      * console.log(validation.findings); // Validation issues
3085 |      * ```
3086 |      *
3087 |      * @mcp-endpoint
3088 |      * @category Tools
3089 |      * @category Execution
3090 |      */
3091 |     this.server.setRequestHandler(CallToolRequestSchema, async request => {
3092 |       const { name, arguments: args } = request.params;
3093 | 
3094 |       // Create context for progress notifications and logging
3095 |       const context: ToolContext = {
3096 |         info: (message: string) => {
3097 |           this.logger.info(message);
3098 |           // Note: MCP progress notifications will be available in future SDK versions
3099 |           // For now, we log to server console for visibility
3100 |         },
3101 |         report_progress: (progress: number, total?: number) => {
3102 |           const percentage = total ? Math.round((progress / total) * 100) : progress;
3103 |           this.logger.info(`Progress: ${percentage}%${total ? ` (${progress}/${total})` : ''}`);
3104 |         },
3105 |         warn: (message: string) => {
3106 |           this.logger.warn(message);
3107 |         },
3108 |         error: (message: string) => {
3109 |           this.logger.error(message);
3110 |         },
3111 |       };
3112 | 
3113 |       try {
3114 |         let response: CallToolResult;
3115 |         const safeArgs = args || {};
3116 | 
3117 |         switch (name) {
3118 |           case 'analyze_project_ecosystem':
3119 |             response = await this.analyzeProjectEcosystem(
3120 |               safeArgs as unknown as AnalyzeProjectEcosystemArgs,
3121 |               context
3122 |             );
3123 |             break;
3124 |           case 'get_architectural_context':
3125 |             response = await this.getArchitecturalContext(
3126 |               safeArgs as unknown as GetArchitecturalContextArgs
3127 |             );
3128 |             break;
3129 |           case 'generate_adrs_from_prd':
3130 |             response = await this.generateAdrsFromPrd(safeArgs, context);
3131 |             break;
3132 |           case 'compare_adr_progress':
3133 |             response = await this.compareAdrProgress(safeArgs);
3134 |             break;
3135 |           case 'analyze_content_security':
3136 |             response = await this.analyzeContentSecurity(
3137 |               safeArgs as unknown as AnalyzeContentSecurityArgs
3138 |             );
3139 |             break;
3140 |           case 'generate_content_masking':
3141 |             response = await this.generateContentMasking(
3142 |               safeArgs as unknown as GenerateContentMaskingArgs
3143 |             );
3144 |             break;
3145 |           case 'configure_custom_patterns':
3146 |             response = await this.configureCustomPatterns(
3147 |               safeArgs as unknown as ConfigureCustomPatternsArgs
3148 |             );
3149 |             break;
3150 |           case 'apply_basic_content_masking':
3151 |             response = await this.applyBasicContentMasking(
3152 |               safeArgs as unknown as ApplyBasicContentMaskingArgs
3153 |             );
3154 |             break;
3155 |           case 'validate_content_masking':
3156 |             response = await this.validateContentMasking(
3157 |               safeArgs as unknown as ValidateContentMaskingArgs
3158 |             );
3159 |             break;
3160 |           case 'manage_cache':
3161 |             response = await this.manageCache(safeArgs);
3162 |             break;
3163 |           case 'configure_output_masking':
3164 |             response = await this.configureOutputMasking(safeArgs);
3165 |             break;
3166 |           case 'suggest_adrs':
3167 |             response = await this.suggestAdrs(safeArgs);
3168 |             break;
3169 |           case 'generate_adr_from_decision':
3170 |             response = await this.generateAdrFromDecision(
3171 |               safeArgs as unknown as GenerateAdrFromDecisionArgs
3172 |             );
3173 |             break;
3174 |           case 'generate_adr_bootstrap':
3175 |             response = await this.generateAdrBootstrap(safeArgs);
3176 |             break;
3177 |           case 'bootstrap_validation_loop':
3178 |             response = await this.bootstrapValidationLoop(safeArgs);
3179 |             break;
3180 |           case 'discover_existing_adrs':
3181 |             response = await this.discoverExistingAdrs(safeArgs, context);
3182 |             break;
3183 |           case 'review_existing_adrs':
3184 |             response = await this.reviewExistingAdrs(safeArgs);
3185 |             break;
3186 |           case 'validate_adr':
3187 |             response = await this.validateAdr(safeArgs);
3188 |             break;
3189 |           case 'validate_all_adrs':
3190 |             response = await this.validateAllAdrs(safeArgs);
3191 |             break;
3192 |           case 'incorporate_research':
3193 |             response = await this.incorporateResearch(safeArgs);
3194 |             break;
3195 |           case 'create_research_template':
3196 |             response = await this.createResearchTemplate(safeArgs);
3197 |             break;
3198 |           case 'request_action_confirmation':
3199 |             response = await this.requestActionConfirmation(safeArgs);
3200 |             break;
3201 |           case 'generate_rules':
3202 |             response = await this.generateRules(safeArgs);
3203 |             break;
3204 |           case 'validate_rules':
3205 |             response = await this.validateRules(safeArgs as unknown as ValidateRulesArgs);
3206 |             break;
3207 |           case 'create_rule_set':
3208 |             response = await this.createRuleSet(safeArgs as unknown as CreateRuleSetArgs);
3209 |             break;
3210 |           case 'analyze_environment':
3211 |             response = await this.analyzeEnvironment(safeArgs);
3212 |             break;
3213 |           case 'generate_research_questions':
3214 |             response = await this.generateResearchQuestions(safeArgs);
3215 |             break;
3216 |           case 'perform_research':
3217 |             response = await this.performResearch(safeArgs, context);
3218 |             break;
3219 |           case 'llm_web_search':
3220 |             response = await this.llmWebSearch(safeArgs);
3221 |             break;
3222 |           case 'llm_cloud_management':
3223 |             response = await this.llmCloudManagement(safeArgs);
3224 |             break;
3225 |           case 'llm_database_management':
3226 |             response = await this.llmDatabaseManagement(safeArgs);
3227 |             break;
3228 |           case 'analyze_deployment_progress':
3229 |             response = await this.analyzeDeploymentProgress(safeArgs);
3230 |             break;
3231 |           case 'check_ai_execution_status':
3232 |             response = await this.checkAIExecutionStatus(safeArgs);
3233 |             break;
3234 |           case 'get_workflow_guidance':
3235 |             response = await this.getWorkflowGuidance(
3236 |               safeArgs as unknown as GetWorkflowGuidanceArgs
3237 |             );
3238 |             break;
3239 |           case 'get_development_guidance':
3240 |             response = await this.getDevelopmentGuidance(
3241 |               safeArgs as unknown as GetDevelopmentGuidanceArgs
3242 |             );
3243 |             break;
3244 |           case 'list_roots':
3245 |             response = await this.listRoots();
3246 |             break;
3247 |           case 'read_directory':
3248 |             response = await this.readDirectory(safeArgs);
3249 |             break;
3250 |           case 'read_file':
3251 |             response = await this.readFile(safeArgs as unknown as ReadFileArgs);
3252 |             break;
3253 |           case 'write_file':
3254 |             response = await this.writeFile(safeArgs as unknown as WriteFileArgs);
3255 |             break;
3256 |           case 'list_directory':
3257 |             response = await this.listDirectory(safeArgs);
3258 |             break;
3259 |           case 'generate_deployment_guidance':
3260 |             response = await this.generateDeploymentGuidance(safeArgs);
3261 |             break;
3262 |           case 'smart_git_push':
3263 |             response = await this.smartGitPush(safeArgs);
3264 |             break;
3265 |           case 'deployment_readiness':
3266 |             response = await this.deploymentReadiness(safeArgs);
3267 |             break;
3268 |           case 'troubleshoot_guided_workflow':
3269 |             response = await this.troubleshootGuidedWorkflow(safeArgs);
3270 |             break;
3271 |           case 'smart_score':
3272 |             response = await this.smartScore(safeArgs);
3273 |             break;
3274 |           case 'mcp_planning':
3275 |             response = await this.mcpPlanning(safeArgs);
3276 |             break;
3277 |           case 'memory_loading':
3278 |             response = await this.memoryLoading(safeArgs);
3279 |             break;
3280 |           case 'expand_analysis_section':
3281 |             response = await this.expandAnalysisSection(safeArgs);
3282 |             break;
3283 |           case 'interactive_adr_planning':
3284 |             response = await this.interactiveAdrPlanning(safeArgs);
3285 |             break;
3286 |           case 'tool_chain_orchestrator':
3287 |             response = await this.toolChainOrchestrator(
3288 |               safeArgs as unknown as ToolChainOrchestratorArgs
3289 |             );
3290 |             break;
3291 |           case 'expand_memory':
3292 |             response = await this.expandMemory(safeArgs);
3293 |             break;
3294 |           case 'query_conversation_history':
3295 |             response = await this.queryConversationHistory(safeArgs);
3296 |             break;
3297 |           case 'get_conversation_snapshot':
3298 |             response = await this.getConversationSnapshot(safeArgs);
3299 |             break;
3300 |           case 'get_memory_stats':
3301 |             response = await this.getMemoryStats();
3302 |             break;
3303 |           case 'get_server_context':
3304 |             response = await this.getServerContext(safeArgs);
3305 |             break;
3306 |           default:
3307 |             throw new McpAdrError(`Unknown tool: ${name}`, 'UNKNOWN_TOOL');
3308 |         }
3309 | 
3310 |         // Track tool execution in knowledge graph
3311 |         await this.trackToolExecution(name, args, response, true);
3312 | 
3313 |         // Apply state reinforcement (Phase 2: Context Decay Mitigation) and content masking
3314 |         // Also record conversation turn (Phase 3: Structured External Memory)
3315 |         return await this.enrichResponseWithStateReinforcement(response, name, args);
3316 |       } catch (error) {
3317 |         // Track failed execution
3318 |         await this.trackToolExecution(
3319 |           name,
3320 |           args,
3321 |           {},
3322 |           false,
3323 |           error instanceof Error ? error.message : String(error)
3324 |         );
3325 | 
3326 |         if (error instanceof McpAdrError) {
3327 |           throw error;
3328 |         }
3329 |         throw new McpAdrError(
3330 |           `Tool execution failed: ${error instanceof Error ? error.message : String(error)}`,
3331 |           'TOOL_EXECUTION_ERROR'
3332 |         );
3333 |       }
3334 |     });
3335 | 
3336 |     /**
3337 |      * List Resources Handler - MCP Protocol Endpoint
3338 |      *
3339 |      * @description Returns available resources for client access including the
3340 |      * architectural knowledge graph and project analysis data. Resources provide
3341 |      * read-only access to server-managed data structures.
3342 |      *
3343 |      * @returns {Promise<{resources: Array}>} Available resources with URIs and descriptions
3344 |      *
3345 |      * @example
3346 |      * ```typescript
3347 |      * // List available resources
3348 |      * const resources = await mcpClient.listResources();
3349 |      * console.log(resources.resources.length); // Available resources
3350 |      *
3351 |      * // Find knowledge graph resource
3352 |      * const kgResource = resources.resources.find(r =>
3353 |      *   r.uri === 'adr://architectural_knowledge_graph'
3354 |      * );
3355 |      * console.log(kgResource.name); // "Architectural Knowledge Graph"
3356 |      * ```
3357 |      *
3358 |      * @mcp-endpoint
3359 |      * @category Resources
3360 |      */
3361 |     this.server.setRequestHandler(ListResourcesRequestSchema, async () => {
3362 |       return {
3363 |         resources: [
3364 |           // Existing resources (refactored to return data)
3365 |           {
3366 |             uri: 'adr://architectural_knowledge_graph',
3367 |             name: 'Architectural Knowledge Graph',
3368 |             description:
3369 |               'Complete architectural knowledge graph with technologies, patterns, and relationships',
3370 |             mimeType: 'application/json',
3371 |           },
3372 |           {
3373 |             uri: 'adr://analysis_report',
3374 |             name: 'Analysis Report',
3375 |             description: 'Comprehensive project analysis report with metrics and recommendations',
3376 |             mimeType: 'application/json',
3377 |           },
3378 |           {
3379 |             uri: 'adr://adr_list',
3380 |             name: 'ADR List',
3381 |             description: 'List of all Architectural Decision Records with status and metadata',
3382 |             mimeType: 'application/json',
3383 |           },
3384 |           // NEW Phase 1 Resources
3385 |           {
3386 |             uri: 'adr://todo_list',
3387 |             name: 'Todo List',
3388 |             description: 'Current project task list with status, priorities, and dependencies',
3389 |             mimeType: 'application/json',
3390 |           },
3391 |           {
3392 |             uri: 'adr://research_index',
3393 |             name: 'Research Index',
3394 |             description: 'Index of all research documents and findings with metadata',
3395 |             mimeType: 'application/json',
3396 |           },
3397 |           {
3398 |             uri: 'adr://rule_catalog',
3399 |             name: 'Rule Catalog',
3400 |             description: 'Catalog of all architectural and validation rules from ADRs and code',
3401 |             mimeType: 'application/json',
3402 |           },
3403 |           {
3404 |             uri: 'adr://rule_generation',
3405 |             name: 'Rule Generation',
3406 |             description:
3407 |               'AI-powered rule generation from ADRs and code patterns. Supports query parameters: ?operation=generate|validate|create_set, ?source=adrs|patterns|both, ?knowledge=true|false, ?enhanced=true|false, ?format=json|yaml|both, ?comprehensive=true|false',
3408 |             mimeType: 'application/json',
3409 |           },
3410 |           {
3411 |             uri: 'adr://project_status',
3412 |             name: 'Project Status',
3413 |             description: 'Current project status and health metrics aggregated from all sources',
3414 |             mimeType: 'application/json',
3415 |           },
3416 |           // NEW Phase 2 Templated Resources
3417 |           {
3418 |             uri: 'adr://adr/{id}',
3419 |             name: 'ADR by ID',
3420 |             description: 'Individual Architectural Decision Record by ID or title match',
3421 |             mimeType: 'application/json',
3422 |           },
3423 |           {
3424 |             uri: 'adr://research/{topic}',
3425 |             name: 'Research by Topic',
3426 |             description: 'Research documents filtered by topic with full content',
3427 |             mimeType: 'application/json',
3428 |           },
3429 |           {
3430 |             uri: 'adr://todo/{task_id}',
3431 |             name: 'Todo by Task ID',
3432 |             description:
3433 |               'Individual task details by ID or title match with dependencies and history',
3434 |             mimeType: 'application/json',
3435 |           },
3436 |           {
3437 |             uri: 'adr://rule/{rule_id}',
3438 |             name: 'Rule by ID',
3439 |             description:
3440 |               'Individual architectural rule by ID or name match with violations and usage stats',
3441 |             mimeType: 'application/json',
3442 |           },
3443 |           // NEW Phase 3 Advanced Resources
3444 |           {
3445 |             uri: 'adr://deployment_status',
3446 |             name: 'Deployment Status',
3447 |             description:
3448 |               'Current deployment state with health checks, build status, and readiness score',
3449 |             mimeType: 'application/json',
3450 |           },
3451 |           {
3452 |             uri: 'adr://environment_analysis',
3453 |             name: 'Environment Analysis',
3454 |             description:
3455 |               'System environment details including platform, dependencies, and capabilities',
3456 |             mimeType: 'application/json',
3457 |           },
3458 |           {
3459 |             uri: 'adr://memory_snapshots',
3460 |             name: 'Memory Snapshots',
3461 |             description:
3462 |               'Knowledge graph snapshots with statistics, insights, and relationship data',
3463 |             mimeType: 'application/json',
3464 |           },
3465 |           {
3466 |             uri: 'adr://project_metrics',
3467 |             name: 'Project Metrics',
3468 |             description:
3469 |               'Code metrics and quality scores including codebase stats, quality assessment, and git metrics',
3470 |             mimeType: 'application/json',
3471 |           },
3472 |           {
3473 |             uri: 'adr://technology/{name}',
3474 |             name: 'Technology by Name',
3475 |             description:
3476 |               'Individual technology analysis by name with usage, relationships, and adoption status',
3477 |             mimeType: 'application/json',
3478 |           },
3479 |           {
3480 |             uri: 'adr://pattern/{name}',
3481 |             name: 'Pattern by Name',
3482 |             description:
3483 |               'Individual pattern analysis by name with quality metrics, relationships, and examples',
3484 |             mimeType: 'application/json',
3485 |           },
3486 |           // NEW Phase 4 Final Resources
3487 |           {
3488 |             uri: 'adr://deployment_history',
3489 |             name: 'Deployment History',
3490 |             description:
3491 |               'Historical deployment data with trends, failure analysis, and patterns. Supports query parameters: ?period=7d|30d|90d|1y|all, ?environment=production|staging|development|all, ?includeFailures=true|false, ?includeMetrics=true|false, ?format=summary|detailed',
3492 |             mimeType: 'application/json',
3493 |           },
3494 |           {
3495 |             uri: 'adr://code_quality',
3496 |             name: 'Code Quality',
3497 |             description:
3498 |               'Comprehensive code quality assessment with metrics, issues, and recommendations. Supports query parameters: ?scope=full|changes|critical, ?includeMetrics=true|false, ?includeRecommendations=true|false, ?threshold=0-100, ?format=summary|detailed',
3499 |             mimeType: 'application/json',
3500 |           },
3501 |         ],
3502 |       };
3503 |     });
3504 | 
3505 |     /**
3506 |      * Read Resource Handler - MCP Protocol Endpoint
3507 |      *
3508 |      * @description Reads specific resource content by URI. Provides access to
3509 |      * architectural knowledge graphs, project analysis data, and other server-managed
3510 |      * resources with appropriate content masking applied.
3511 |      *
3512 |      * @param {ReadResourceRequest} request - MCP resource read request
3513 |      * @param {string} request.params.uri - Resource URI to read
3514 |      *
3515 |      * @returns {Promise<ReadResourceResult>} Resource content with metadata
3516 |      *
3517 |      * @throws {McpAdrError} When resource URI is invalid or access fails
3518 |      *
3519 |      * @example
3520 |      * ```typescript
3521 |      * // Read knowledge graph resource
3522 |      * const kgData = await mcpClient.readResource(
3523 |      *   'adr://architectural_knowledge_graph'
3524 |      * );
3525 |      * console.log(kgData.contents); // Knowledge graph JSON
3526 |      * ```
3527 |      *
3528 |      * @mcp-endpoint
3529 |      * @category Resources
3530 |      */
3531 |     this.server.setRequestHandler(ReadResourceRequestSchema, async request => {
3532 |       const { uri } = request.params;
3533 | 
3534 |       try {
3535 |         const response = await this.readResource(uri);
3536 |         return await this.applyOutputMasking(response);
3537 |       } catch (error) {
3538 |         if (error instanceof McpAdrError) {
3539 |           throw error;
3540 |         }
3541 |         throw new McpAdrError(
3542 |           `Resource reading failed: ${error instanceof Error ? error.message : String(error)}`,
3543 |           'RESOURCE_ERROR'
3544 |         );
3545 |       }
3546 |     });
3547 | 
3548 |     /**
3549 |      * List Prompts Handler - MCP Protocol Endpoint
3550 |      *
3551 |      * @description Returns available prompt templates for ADR analysis, research,
3552 |      * and architectural decision support. Prompts can be executed directly or
3553 |      * used as templates for custom implementations.
3554 |      *
3555 |      * @returns {Promise<{prompts: Array}>} Available prompt templates with metadata
3556 |      *
3557 |      * @example
3558 |      * ```typescript
3559 |      * // List available prompts
3560 |      * const prompts = await mcpClient.listPrompts();
3561 |      * console.log(prompts.prompts.length); // Available prompt templates
3562 |      *
3563 |      * // Find ADR analysis prompt
3564 |      * const adrPrompt = prompts.prompts.find(p =>
3565 |      *   p.name === 'adr_analysis_prompt'
3566 |      * );
3567 |      * console.log(adrPrompt.description); // Prompt description
3568 |      * ```
3569 |      *
3570 |      * @mcp-endpoint
3571 |      * @category Prompts
3572 |      */
3573 |     this.server.setRequestHandler(ListPromptsRequestSchema, async () => {
3574 |       const { allPrompts } = await import('./prompts/index.js');
3575 | 
3576 |       return {
3577 |         prompts: allPrompts.map(prompt => ({
3578 |           name: prompt.name,
3579 |           description: prompt.description,
3580 |           arguments: prompt.arguments,
3581 |         })),
3582 |       };
3583 |     });
3584 | 
3585 |     /**
3586 |      * Get Prompt Handler - MCP Protocol Endpoint
3587 |      *
3588 |      * @description Executes specific prompt templates with provided arguments.
3589 |      * Returns formatted prompts ready for AI execution or further processing.
3590 |      * Supports dynamic argument injection and template customization.
3591 |      *
3592 |      * @param {GetPromptRequest} request - MCP prompt execution request
3593 |      * @param {string} request.params.name - Prompt template name
3594 |      * @param {Object} request.params.arguments - Template-specific arguments
3595 |      *
3596 |      * @returns {Promise<GetPromptResult>} Formatted prompt with metadata
3597 |      *
3598 |      * @throws {McpAdrError} When prompt template is not found or arguments are invalid
3599 |      *
3600 |      * @example
3601 |      * ```typescript
3602 |      * // Execute ADR analysis prompt
3603 |      * const prompt = await mcpClient.getPrompt('adr_analysis_prompt', {
3604 |      *   adrPath: 'docs/adrs/0001-auth.md',
3605 |      *   projectContext: 'microservices architecture'
3606 |      * });
3607 |      *
3608 |      * console.log(prompt.messages); // Formatted prompt messages
3609 |      * ```
3610 |      *
3611 |      * @example
3612 |      * ```typescript
3613 |      * // Execute research prompt
3614 |      * const researchPrompt = await mcpClient.getPrompt('research_question_prompt', {
3615 |      *   domain: 'authentication',
3616 |      *   complexity: 'advanced'
3617 |      * });
3618 |      *
3619 |      * console.log(researchPrompt.messages[0].content); // Research prompt
3620 |      * ```
3621 |      *
3622 |      * @mcp-endpoint
3623 |      * @category Prompts
3624 |      * @category Execution
3625 |      */
3626 |     this.server.setRequestHandler(GetPromptRequestSchema, async request => {
3627 |       const { name, arguments: args } = request.params;
3628 | 
3629 |       try {
3630 |         const { allPrompts } = await import('./prompts/index.js');
3631 |         const prompt = allPrompts.find(p => p.name === name);
3632 | 
3633 |         if (!prompt) {
3634 |           throw new McpAdrError(`Unknown prompt: ${name}`, 'UNKNOWN_PROMPT');
3635 |         }
3636 | 
3637 |         // Simple template rendering (replace {{variable}} with values)
3638 |         let renderedTemplate = prompt.template;
3639 |         if (args) {
3640 |           for (const [key, value] of Object.entries(args)) {
3641 |             const regex = new RegExp(`{{${key}}}`, 'g');
3642 |             renderedTemplate = renderedTemplate.replace(regex, String(value));
3643 |           }
3644 |         }
3645 | 
3646 |         const response = {
3647 |           description: prompt.description,
3648 |           messages: [
3649 |             {
3650 |               role: 'user',
3651 |               content: {
3652 |                 type: 'text',
3653 |                 text: renderedTemplate,
3654 |               },
3655 |             },
3656 |           ],
3657 |         };
3658 | 
3659 |         return await this.applyOutputMasking(response);
3660 |       } catch (error) {
3661 |         if (error instanceof McpAdrError) {
3662 |           throw error;
3663 |         }
3664 |         throw new McpAdrError(
3665 |           `Prompt execution failed: ${error instanceof Error ? error.message : String(error)}`,
3666 |           'PROMPT_EXECUTION_ERROR'
3667 |         );
3668 |       }
3669 |     });
3670 |   }
3671 | 
3672 |   /**
3673 |    * Tool implementations
3674 |    */
3675 |   private async checkAIExecutionStatus(_args: Record<string, unknown>): Promise<CallToolResult> {
3676 |     try {
3677 |       const { getAIExecutionStatus } = await import('./utils/prompt-execution.js');
3678 |       const status = getAIExecutionStatus();
3679 | 
3680 |       return {
3681 |         content: [
3682 |           {
3683 |             type: 'text',
3684 |             text: `# AI Execution Status Diagnostic
3685 | 
3686 | ## Current Configuration
3687 | - **AI Execution Enabled**: ${status.isEnabled ? '✅ YES' : '❌ NO'}
3688 | - **Has API Key**: ${status.hasApiKey ? '✅ YES' : '❌ NO'}
3689 | - **Execution Mode**: ${status.executionMode}
3690 | - **AI Model**: ${status.model}
3691 | 
3692 | ${
3693 |   status.reason
3694 |     ? `## ⚠️ Issue Detected
3695 | **Problem**: ${status.reason}
3696 | 
3697 | ## Solution
3698 | ${
3699 |   !status.hasApiKey
3700 |     ? `
3701 | 1. Get an OpenRouter API key from https://openrouter.ai/keys
3702 | 2. Add it to your MCP configuration:
3703 |    \`\`\`json
3704 |    {
3705 |      "mcpServers": {
3706 |        "adr-analysis": {
3707 |          "command": "mcp-adr-analysis-server",
3708 |          "env": {
3709 |            "OPENROUTER_API_KEY": "your_api_key_here",
3710 |            "EXECUTION_MODE": "full",
3711 |            "AI_MODEL": "anthropic/claude-3-sonnet"
3712 |          }
3713 |        }
3714 |      }
3715 |    }
3716 |    \`\`\`
3717 | 3. Restart your MCP client (Claude Desktop, etc.)
3718 | `
3719 |     : status.executionMode !== 'full'
3720 |       ? `
3721 | 1. Update your MCP configuration to set EXECUTION_MODE to "full":
3722 |    \`\`\`json
3723 |    {
3724 |      "mcpServers": {
3725 |        "adr-analysis": {
3726 |          "env": {
3727 |            "EXECUTION_MODE": "full"
3728 |          }
3729 |        }
3730 |      }
3731 |    }
3732 |    \`\`\`
3733 | 2. Restart your MCP client
3734 | `
3735 |       : ''
3736 | }`
3737 |     : `## ✅ Configuration Looks Good!
3738 | 
3739 | AI execution is properly configured. Tools should return actual results instead of prompts.
3740 | 
3741 | If you're still seeing prompts instead of results, try:
3742 | 1. Restart your MCP client
3743 | 2. Check your OpenRouter API key has sufficient credits
3744 | 3. Verify network connectivity to OpenRouter.ai`
3745 | }
3746 | 
3747 | ## Environment Variables Expected
3748 | - **OPENROUTER_API_KEY**: Your OpenRouter API key
3749 | - **EXECUTION_MODE**: Set to "full" for AI execution
3750 | - **AI_MODEL**: AI model to use (optional, defaults to claude-3-sonnet)
3751 | 
3752 | ## Testing
3753 | After fixing the configuration, try calling \`suggest_adrs\` - it should return actual ADR suggestions instead of prompts.
3754 | `,
3755 |           },
3756 |         ],
3757 |       };
3758 |     } catch (error) {
3759 |       return {
3760 |         content: [
3761 |           {
3762 |             type: 'text',
3763 |             text: `# AI Execution Status Check Failed
3764 | 
3765 | **Error**: ${error instanceof Error ? error.message : String(error)}
3766 | 
3767 | This diagnostic tool helps identify why tools return prompts instead of actual results.
3768 | 
3769 | ## Manual Check
3770 | Verify these environment variables are set in your MCP configuration:
3771 | - OPENROUTER_API_KEY
3772 | - EXECUTION_MODE=full
3773 | - AI_MODEL (optional)
3774 | `,
3775 |           },
3776 |         ],
3777 |       };
3778 |     }
3779 |   }
3780 | 
3781 |   private async getWorkflowGuidance(args: GetWorkflowGuidanceArgs): Promise<CallToolResult> {
3782 |     const {
3783 |       goal,
3784 |       projectContext,
3785 |       availableAssets = [],
3786 |       timeframe = 'thorough_review',
3787 |       primaryConcerns = [],
3788 |     } = args;
3789 | 
3790 |     try {
3791 |       const workflowPrompt = `
3792 | # Workflow Guidance & Tool Recommendation System
3793 | 
3794 | ## User Context Analysis
3795 | - **Goal**: ${goal}
3796 | - **Project Context**: ${projectContext}
3797 | - **Available Assets**: ${availableAssets.length > 0 ? availableAssets.join(', ') : 'None specified'}
3798 | - **Timeframe**: ${timeframe}
3799 | - **Primary Concerns**: ${primaryConcerns.length > 0 ? primaryConcerns.join(', ') : 'General analysis'}
3800 | 
3801 | ## Available MCP Tools (24 Total)
3802 | 
3803 | ### 🎯 **Core Analysis Tools** (AI-Powered ✅)
3804 | 1. **analyze_project_ecosystem** - Comprehensive technology and pattern detection
3805 | 2. **get_architectural_context** - Generate intelligent architectural insights + ADR setup
3806 | 3. **generate_adrs_from_prd** - Convert requirements to structured ADRs
3807 | 4. **analyze_content_security** - Detect sensitive information patterns
3808 | 
3809 | ### 📋 **ADR Management Tools** (AI-Powered ✅)
3810 | 5. **suggest_adrs** - Auto-suggest ADRs from implicit decisions
3811 | 6. **generate_adr_from_decision** - Create ADRs from specific decisions
3812 | 7. **discover_existing_adrs** - Intelligent ADR discovery and analysis
3813 | 
3814 | ### 🔍 **Research & Documentation Tools** (AI-Powered ✅)
3815 | 8. **generate_research_questions** - Create context-aware research questions
3816 | 9. **incorporate_research** - Integrate research findings into decisions
3817 | 10. **create_research_template** - Generate research documentation templates
3818 | 
3819 | ### 🛡️ **Security & Compliance Tools** (AI-Powered ✅)
3820 | 11. **generate_content_masking** - Intelligent content masking and protection
3821 | 12. **configure_custom_patterns** - Customize security and masking settings
3822 | 13. **apply_basic_content_masking** - Basic content masking (fallback)
3823 | 14. **validate_content_masking** - Validate masking effectiveness
3824 | 
3825 | ### 🏗️ **Rule & Governance Tools** (AI-Powered ✅)
3826 | 16. **generate_rules** - Extract architectural rules from ADRs
3827 | 17. **validate_rules** - Validate code against architectural rules
3828 | 18. **create_rule_set** - Create comprehensive rule management systems
3829 | 
3830 | ### 🚀 **Deployment & Environment Tools** (AI-Powered ✅)
3831 | 19. **analyze_environment** - Environment analysis and optimization
3832 | 20. **analyze_deployment_progress** - Deployment tracking and verification
3833 | 
3834 | ### ⚙️ **Utility & Management Tools**
3835 | 21. **manage_cache** - Cache management and optimization
3836 | 22. **configure_output_masking** - Configure global output masking
3837 | 23. **request_action_confirmation** - Interactive user confirmation workflows
3838 | 24. **get_workflow_guidance** - This tool - intelligent workflow advisor
3839 | 
3840 | ## Workflow Recommendation Instructions
3841 | 
3842 | Based on the user's goal, project context, available assets, timeframe, and concerns, provide:
3843 | 
3844 | ### 1. **Recommended Tool Sequence**
3845 | Provide a step-by-step workflow with:
3846 | - **Tool Name**: Exact tool to call
3847 | - **Purpose**: Why this tool is needed
3848 | - **Expected Outcome**: What it will deliver
3849 | - **Parameters**: Suggested parameters for the tool call
3850 | - **Success Criteria**: How to know it worked
3851 | 
3852 | ### 2. **Alternative Workflows**
3853 | Provide 2-3 alternative approaches based on:
3854 | - Different time constraints
3855 | - Different priorities
3856 | - Different starting points
3857 | 
3858 | ### 3. **Expected Timeline & Effort**
3859 | For each recommended workflow:
3860 | - **Estimated Time**: How long each step takes
3861 | - **Effort Level**: Low/Medium/High effort required
3862 | - **Dependencies**: Which steps must be completed first
3863 | 
3864 | ### 4. **Success Metrics**
3865 | Define how to measure success:
3866 | - **Immediate Indicators**: Quick wins and early signals
3867 | - **Progress Milestones**: Key checkpoints
3868 | - **Final Outcomes**: Ultimate success criteria
3869 | 
3870 | ### 5. **Common Pitfalls & Tips**
3871 | - **What to Avoid**: Common mistakes in this workflow
3872 | - **Pro Tips**: Best practices for maximum effectiveness
3873 | - **Troubleshooting**: What to do if steps fail
3874 | 
3875 | ## Common Workflow Patterns
3876 | 
3877 | ### **New Project Setup**
3878 | 1. analyze_project_ecosystem → 2. get_architectural_context → 3. suggest_adrs → 4. generate_adr_from_decision
3879 | 
3880 | ### **Existing Project Analysis**
3881 | 1. discover_existing_adrs → 2. get_architectural_context → 3. validate_rules
3882 | 
3883 | ### **Security Audit**
3884 | 1. analyze_content_security → 2. generate_content_masking → 3. configure_custom_patterns → 4. validate_content_masking
3885 | 
3886 | ### **PRD to Implementation**
3887 | 1. generate_adrs_from_prd → 2. analyze_deployment_progress
3888 | 
3889 | ### **Legacy Modernization**
3890 | 1. analyze_project_ecosystem → 2. get_architectural_context → 3. suggest_adrs → 4. generate_rules → 5. validate_rules
3891 | 
3892 | ## Output Format
3893 | 
3894 | Provide a comprehensive workflow guide that includes:
3895 | 
3896 | 1. **🎯 Recommended Primary Workflow** (step-by-step with tool calls)
3897 | 2. **🔄 Alternative Approaches** (2-3 different paths)
3898 | 3. **⏱️ Timeline & Effort Estimates** (realistic expectations)
3899 | 4. **📊 Success Metrics** (how to measure progress)
3900 | 5. **💡 Pro Tips & Best Practices** (maximize effectiveness)
3901 | 6. **⚠️ Common Pitfalls** (what to avoid)
3902 | 
3903 | Make the guidance **actionable, specific, and outcome-focused** so the user can immediately start executing the recommended workflow.
3904 | `;
3905 | 
3906 |       // Execute the workflow guidance with AI if enabled
3907 |       const { executePromptWithFallback, formatMCPResponse } = await import(
3908 |         './utils/prompt-execution.js'
3909 |       );
3910 |       const executionResult = await executePromptWithFallback(
3911 |         workflowPrompt,
3912 |         'Analyze the user context and provide intelligent workflow guidance with specific tool recommendations.',
3913 |         {
3914 |           temperature: 0.1,
3915 |           maxTokens: 6000,
3916 |           systemPrompt: `You are an expert workflow advisor for the MCP ADR Analysis Server.
3917 | Your role is to analyze user goals and project context, then recommend the optimal sequence of tools to achieve their objectives efficiently.
3918 | Provide specific, actionable guidance with clear tool sequences, expected outcomes, and success criteria.
3919 | Focus on practical workflows that deliver measurable results.`,
3920 |         }
3921 |       );
3922 | 
3923 |       if (executionResult.isAIGenerated) {
3924 |         // AI execution successful - return actual workflow guidance
3925 |         return formatMCPResponse({
3926 |           ...executionResult,
3927 |           content: `# Workflow Guidance & Tool Recommendations
3928 | 
3929 | ## Your Context
3930 | - **Goal**: ${goal}
3931 | - **Project Context**: ${projectContext}
3932 | - **Available Assets**: ${availableAssets.length > 0 ? availableAssets.join(', ') : 'None specified'}
3933 | - **Timeframe**: ${timeframe}
3934 | - **Primary Concerns**: ${primaryConcerns.length > 0 ? primaryConcerns.join(', ') : 'General analysis'}
3935 | 
3936 | ## AI-Generated Workflow Guidance
3937 | 
3938 | ${executionResult.content}
3939 | 
3940 | ## Quick Reference: Available Tools
3941 | 
3942 | **Core Analysis**: analyze_project_ecosystem, get_architectural_context, generate_adrs_from_prd, analyze_content_security
3943 | **ADR Management**: suggest_adrs, generate_adr_from_decision, discover_existing_adrs
3944 | **Security**: generate_content_masking, configure_custom_patterns, validate_content_masking
3945 | **Governance**: generate_rules, validate_rules, create_rule_set
3946 | **Environment**: analyze_environment, analyze_deployment_progress
3947 | **Utilities**: manage_cache, configure_output_masking, check_ai_execution_status
3948 | 
3949 | ## Next Steps
3950 | 
3951 | 1. **Start with the recommended primary workflow** above
3952 | 2. **Call the first tool** with the suggested parameters
3953 | 3. **Review the results** and proceed to the next step
3954 | 4. **Track progress** using the success metrics provided
3955 | 5. **Adjust as needed** based on your specific findings
3956 | 
3957 | This guidance is tailored to your specific context and goals for maximum effectiveness!
3958 | `,
3959 |         });
3960 |       } else {
3961 |         // Fallback to prompt-only mode
3962 |         return {
3963 |           content: [
3964 |             {
3965 |               type: 'text',
3966 |               text: workflowPrompt,
3967 |             },
3968 |           ],
3969 |         };
3970 |       }
3971 |     } catch (error) {
3972 |       throw new McpAdrError(
3973 |         `Failed to generate workflow guidance: ${error instanceof Error ? error.message : String(error)}`,
3974 |         'WORKFLOW_ERROR'
3975 |       );
3976 |     }
3977 |   }
3978 | 
3979 |   private async getDevelopmentGuidance(args: GetDevelopmentGuidanceArgs): Promise<CallToolResult> {
3980 |     const {
3981 |       developmentPhase,
3982 |       adrsToImplement = [],
3983 |       technologyStack = [],
3984 |       currentProgress = '',
3985 |       teamContext = { size: 'small_team', experienceLevel: 'mixed' },
3986 |       timeline = '',
3987 |       focusAreas = [],
3988 |     } = args;
3989 | 
3990 |     try {
3991 |       // Use actual ADR discovery if ADRs are specified
3992 |       let adrAnalysisPrompt = '';
3993 | 
3994 |       if (adrsToImplement.length > 0) {
3995 |         const { getAdrDirectoryPath } = await import('./utils/config.js');
3996 |         const { discoverAdrsInDirectory } = await import('./utils/adr-discovery.js');
3997 |         const absoluteAdrPath = getAdrDirectoryPath(this.config);
3998 | 
3999 |         const discoveryResult = await discoverAdrsInDirectory(
4000 |           absoluteAdrPath,
4001 |           true,
4002 |           this.config.projectPath
4003 |         );
4004 | 
4005 |         // Filter ADRs to only those specified for implementation
4006 |         const targetAdrs = discoveryResult.adrs.filter(adr =>
4007 |           adrsToImplement.some(
4008 |             (target: string) =>
4009 |               adr.title.toLowerCase().includes(target.toLowerCase()) ||
4010 |               adr.filename.toLowerCase().includes(target.toLowerCase())
4011 |           )
4012 |         );
4013 | 
4014 |         adrAnalysisPrompt = `
4015 | ## ADR Analysis for Implementation
4016 | 
4017 | **ADRs to Implement**: ${adrsToImplement.join(', ')}
4018 | **ADR Directory**: ${absoluteAdrPath}
4019 | **Found ${targetAdrs.length} matching ADRs**
4020 | 
4021 | ${targetAdrs
4022 |   .map(
4023 |     adr => `
4024 | ### ${adr.title}
4025 | - **File**: ${adr.filename}
4026 | - **Status**: ${adr.status}
4027 | - **Context**: ${adr.context}
4028 | - **Decision**: ${adr.decision}
4029 | - **Consequences**: ${adr.consequences}
4030 | `
4031 |   )
4032 |   .join('\n')}
4033 | `;
4034 |       }
4035 | 
4036 |       const developmentPrompt = `
4037 | # Development Guidance & Implementation Roadmap
4038 | 
4039 | ## Development Context
4040 | - **Development Phase**: ${developmentPhase}
4041 | - **Technology Stack**: ${technologyStack.length > 0 ? technologyStack.join(', ') : 'Not specified'}
4042 | - **Current Progress**: ${currentProgress || 'Starting fresh'}
4043 | - **Team Size**: ${teamContext.size}
4044 | - **Team Experience**: ${teamContext.experienceLevel}
4045 | - **Timeline**: ${timeline || 'Not specified'}
4046 | - **Focus Areas**: ${focusAreas.length > 0 ? focusAreas.join(', ') : 'General development'}
4047 | 
4048 | ${adrAnalysisPrompt}
4049 | 
4050 | ## Development Guidance Instructions
4051 | 
4052 | Based on the development context, ADRs to implement, and technology stack, provide comprehensive development guidance including:
4053 | 
4054 | ### 1. **Implementation Roadmap**
4055 | Create a detailed development plan with:
4056 | - **Phase-by-Phase Breakdown**: Logical development phases
4057 | - **Task Prioritization**: Order tasks by dependencies and impact
4058 | - **Milestone Definition**: Clear checkpoints and deliverables
4059 | - **Risk Assessment**: Potential blockers and mitigation strategies
4060 | 
4061 | ### 2. **Code Structure & Architecture**
4062 | Provide specific guidance on:
4063 | - **Project Structure**: How to organize code files and directories
4064 | - **Module Architecture**: How to structure components/modules
4065 | - **Design Patterns**: Which patterns to use and where
4066 | - **Code Organization**: Separation of concerns and layering
4067 | 
4068 | ### 3. **Implementation Patterns & Best Practices**
4069 | For each technology in the stack, provide:
4070 | - **Framework-Specific Patterns**: Best practices for the chosen frameworks
4071 | - **API Design**: How to structure APIs and endpoints
4072 | - **Data Layer**: Database schema and data access patterns
4073 | - **State Management**: How to handle application state
4074 | - **Error Handling**: Consistent error handling strategies
4075 | 
4076 | ### 4. **ADR-to-Code Translation**
4077 | For each ADR to implement:
4078 | - **Implementation Tasks**: Specific coding tasks derived from the ADR
4079 | - **Code Examples**: Pseudo-code or pattern examples
4080 | - **Integration Points**: How this ADR affects other parts of the system
4081 | - **Validation Criteria**: How to verify the ADR is properly implemented
4082 | 
4083 | ### 5. **Testing Strategy**
4084 | Comprehensive testing approach:
4085 | - **Unit Testing**: What to test and how
4086 | - **Integration Testing**: API and component integration tests
4087 | - **End-to-End Testing**: User workflow testing
4088 | - **Performance Testing**: Load and performance validation
4089 | - **Security Testing**: Security validation approaches
4090 | 
4091 | ### 6. **Development Workflow**
4092 | Team-specific guidance:
4093 | - **Git Workflow**: Branching strategy and code review process
4094 | - **CI/CD Pipeline**: Automated testing and deployment
4095 | - **Code Quality**: Linting, formatting, and quality gates
4096 | - **Documentation**: What to document and how
4097 | 
4098 | ### 7. **Quality Gates & Checkpoints**
4099 | Define success criteria:
4100 | - **Code Quality Metrics**: Coverage, complexity, maintainability
4101 | - **Performance Benchmarks**: Response times, throughput targets
4102 | - **Security Checkpoints**: Security validation at each phase
4103 | - **Architectural Compliance**: Adherence to ADR decisions
4104 | 
4105 | ### 8. **Technology-Specific Implementation**
4106 | For each technology in the stack, provide:
4107 | - **Setup Instructions**: Environment and tooling setup
4108 | - **Configuration**: Framework and tool configuration
4109 | - **Optimization**: Performance and build optimization
4110 | - **Deployment**: Technology-specific deployment considerations
4111 | 
4112 | ## Expected Output Format
4113 | 
4114 | Provide a comprehensive development guide that includes:
4115 | 
4116 | ### 📋 **1. Development Roadmap**
4117 | - **Phase 1-N**: Logical development phases with tasks
4118 | - **Dependencies**: Task dependencies and critical path
4119 | - **Timeline**: Estimated effort and duration
4120 | - **Milestones**: Key deliverables and checkpoints
4121 | 
4122 | ### 🏗️ **2. Implementation Guide**
4123 | - **Code Structure**: Detailed project organization
4124 | - **Design Patterns**: Specific patterns to implement
4125 | - **API Design**: Endpoint structure and conventions
4126 | - **Data Architecture**: Database and data flow design
4127 | 
4128 | ### 🧪 **3. Testing & Quality Strategy**
4129 | - **Test Types**: Unit, integration, e2e testing approach
4130 | - **Quality Gates**: Code quality and performance criteria
4131 | - **Automation**: CI/CD and automated testing setup
4132 | 
4133 | ### 🚀 **4. Deployment & Operations**
4134 | - **Environment Setup**: Development, staging, production
4135 | - **Deployment Pipeline**: Automated deployment process
4136 | - **Monitoring**: Logging, metrics, and alerting
4137 | - **Maintenance**: Ongoing maintenance and updates
4138 | 
4139 | ### 📊 **5. Progress Tracking**
4140 | - **Success Metrics**: How to measure development progress
4141 | - **Quality Indicators**: Code quality and performance metrics
4142 | - **Milestone Validation**: How to verify milestone completion
4143 | - **Risk Monitoring**: Early warning signs and mitigation
4144 | 
4145 | ### 💡 **6. Team-Specific Recommendations**
4146 | Based on team size (${teamContext.size}) and experience (${teamContext.experienceLevel}):
4147 | - **Workflow Adaptations**: Process adjustments for team context
4148 | - **Skill Development**: Areas for team skill building
4149 | - **Tool Recommendations**: Development tools and practices
4150 | - **Communication**: Coordination and documentation practices
4151 | 
4152 | ## Integration with Architectural Decisions
4153 | 
4154 | Ensure all development guidance:
4155 | - **Aligns with ADRs**: Every recommendation supports architectural decisions
4156 | - **Maintains Consistency**: Consistent patterns across the codebase
4157 | - **Enables Evolution**: Flexible design for future changes
4158 | - **Supports Quality**: Built-in quality and maintainability
4159 | 
4160 | Make the guidance **actionable, specific, and immediately implementable** so developers can start coding with confidence and architectural alignment.
4161 | `;
4162 | 
4163 |       // Execute the development guidance with AI if enabled
4164 |       const { executePromptWithFallback, formatMCPResponse } = await import(
4165 |         './utils/prompt-execution.js'
4166 |       );
4167 |       const executionResult = await executePromptWithFallback(
4168 |         developmentPrompt,
4169 |         'Analyze the development context and provide comprehensive implementation guidance that translates architectural decisions into specific coding tasks and development roadmap.',
4170 |         {
4171 |           temperature: 0.1,
4172 |           maxTokens: 8000,
4173 |           systemPrompt: `You are an expert software development advisor specializing in translating architectural decisions into practical implementation guidance.
4174 | Your role is to bridge the gap between architectural planning and actual code development.
4175 | Provide specific, actionable development guidance with clear implementation steps, code patterns, and quality criteria.
4176 | Focus on practical guidance that ensures architectural decisions are properly implemented in code.
4177 | Consider team context, technology stack, and development phase to provide tailored recommendations.`,
4178 |         }
4179 |       );
4180 | 
4181 |       if (executionResult.isAIGenerated) {
4182 |         // AI execution successful - return actual development guidance
4183 |         return formatMCPResponse({
4184 |           ...executionResult,
4185 |           content: `# Development Guidance & Implementation Roadmap
4186 | 
4187 | ## Your Development Context
4188 | - **Development Phase**: ${developmentPhase}
4189 | - **Technology Stack**: ${technologyStack.length > 0 ? technologyStack.join(', ') : 'Not specified'}
4190 | - **Current Progress**: ${currentProgress || 'Starting fresh'}
4191 | - **Team Context**: ${teamContext.size} team with ${teamContext.experienceLevel} experience
4192 | - **Timeline**: ${timeline || 'Not specified'}
4193 | - **Focus Areas**: ${focusAreas.length > 0 ? focusAreas.join(', ') : 'General development'}
4194 | - **ADRs to Implement**: ${adrsToImplement.length > 0 ? adrsToImplement.join(', ') : 'None specified'}
4195 | 
4196 | ## AI-Generated Development Guidance
4197 | 
4198 | ${executionResult.content}
4199 | 
4200 | ## Integration with Workflow Tools
4201 | 
4202 | This development guidance works seamlessly with other MCP tools:
4203 | 
4204 | ### **Workflow Integration**
4205 | 1. **get_workflow_guidance** → Recommends architectural process
4206 | 2. **get_development_guidance** → Guides implementation (this tool)
4207 | 3. **validate_rules** → Ensures code follows architectural decisions
4208 | 4. **analyze_deployment_progress** → Tracks implementation progress
4209 | 
4210 | ### **Quality Assurance Tools**
4211 | - **generate_rules** → Extract coding standards from ADRs
4212 | - **validate_rules** → Validate code against architectural rules
4213 | - **analyze_content_security** → Security validation during development
4214 | 
4215 | ### **Documentation Tools**
4216 | - **discover_existing_adrs** → Reference existing architectural decisions
4217 | 
4218 | ## Next Steps: From Architecture to Code
4219 | 
4220 | 1. **📋 Review the Development Roadmap** above
4221 | 2. **🏗️ Set Up Project Structure** as recommended
4222 | 3. **🧪 Implement Testing Strategy** early in development
4223 | 4. **📊 Track Progress** using the success metrics provided
4224 | 5. **🔄 Iterate and Refine** based on implementation learnings
4225 | 
4226 | This guidance ensures your development work is **architecturally aligned**, **quality-focused**, and **efficiently executed**!
4227 | `,
4228 |         });
4229 |       } else {
4230 |         // Fallback to prompt-only mode
4231 |         return {
4232 |           content: [
4233 |             {
4234 |               type: 'text',
4235 |               text: developmentPrompt,
4236 |             },
4237 |           ],
4238 |         };
4239 |       }
4240 |     } catch (error) {
4241 |       throw new McpAdrError(
4242 |         `Failed to generate development guidance: ${error instanceof Error ? error.message : String(error)}`,
4243 |         'DEVELOPMENT_ERROR'
4244 |       );
4245 |     }
4246 |   }
4247 | 
4248 |   private async analyzeProjectEcosystem(
4249 |     args: AnalyzeProjectEcosystemArgs,
4250 |     context?: ToolContext
4251 |   ): Promise<CallToolResult> {
4252 |     const ctx = context || createNoOpContext();
4253 | 
4254 |     // Use configured project path if not provided in args
4255 |     const projectPath = args.projectPath || this.config.projectPath;
4256 |     const {
4257 |       includePatterns,
4258 |       enhancedMode = true,
4259 |       knowledgeEnhancement = true,
4260 |       learningEnabled = true,
4261 |       technologyFocus = [],
4262 |       analysisDepth = 'comprehensive',
4263 |       includeEnvironment = true,
4264 |       recursiveDepth = 'comprehensive',
4265 |       analysisScope = [],
4266 |       // conversationContext - TODO: implement context integration for ecosystem analysis
4267 |     } = args;
4268 | 
4269 |     this.logger.info(`Generating comprehensive ecosystem analysis for project at: ${projectPath}`);
4270 |     this.logger.info(
4271 |       `Analysis configuration - Depth: ${analysisDepth}, Recursive: ${recursiveDepth}, Environment: ${includeEnvironment}`
4272 |     );
4273 |     this.logger.info(
4274 |       `Enhancement features - Knowledge: ${knowledgeEnhancement}, Learning: ${learningEnabled}`
4275 |     );
4276 |     this.logger.info(
4277 |       `Analysis scope: ${analysisScope.length > 0 ? analysisScope.join(', ') : 'Full ecosystem analysis'}`
4278 |     );
4279 | 
4280 |     ctx.info(`🌐 Starting comprehensive ecosystem analysis: ${projectPath}`);
4281 |     ctx.report_progress(0, 100);
4282 | 
4283 |     try {
4284 |       ctx.info('📊 Phase 1: Analyzing project structure');
4285 |       ctx.report_progress(10, 100);
4286 | 
4287 |       // Import utilities dynamically to avoid circular dependencies
4288 |       const { analyzeProjectStructureCompat: analyzeProjectStructure } = await import(
4289 |         './utils/file-system.js'
4290 |       );
4291 | 
4292 |       // Initialize ADR knowledge base on first run
4293 |       ctx.info('📚 Phase 1.5: Initializing ADR knowledge base');
4294 |       ctx.report_progress(15, 100);
4295 | 
4296 |       try {
4297 |         const { initializeAdrKnowledgeBase, isAdrKnowledgeBaseInitialized } = await import(
4298 |           './utils/adr-knowledge-initializer.js'
4299 |         );
4300 | 
4301 |         const isInitialized = await isAdrKnowledgeBaseInitialized(this.kgManager);
4302 | 
4303 |         if (!isInitialized) {
4304 |           this.logger.info('First run detected - initializing ADR knowledge base');
4305 |           const initResult = await initializeAdrKnowledgeBase(
4306 |             this.kgManager,
4307 |             this.config.adrDirectory,
4308 |             projectPath
4309 |           );
4310 | 
4311 |           if (initResult.success) {
4312 |             this.logger.info(
4313 |               `✅ ADR knowledge base initialized with ${initResult.adrsIndexed} ADRs`
4314 |             );
4315 |             ctx.info(`📚 Indexed ${initResult.adrsIndexed} existing ADRs to knowledge base`);
4316 |           } else {
4317 |             this.logger.warn(
4318 |               `ADR knowledge base initialization completed with errors: ${initResult.errors.join(', ')}`
4319 |             );
4320 |           }
4321 |         } else {
4322 |           this.logger.info('ADR knowledge base already initialized - skipping');
4323 |         }
4324 |       } catch (error) {
4325 |         this.logger.warn('Failed to initialize ADR knowledge base:', error);
4326 |         // Don't fail the entire analysis if ADR initialization fails
4327 |       }
4328 | 
4329 |       // Import advanced prompting utilities if enhanced mode is enabled
4330 |       let generateArchitecturalKnowledge: GenerateArchitecturalKnowledgeFunction | null = null;
4331 |       let executeWithReflexion: ExecuteWithReflexionFunction | null = null;
4332 |       let retrieveRelevantMemories: RetrieveRelevantMemoriesFunction | null = null;
4333 |       let createToolReflexionConfig: CreateToolReflexionConfigFunction | null = null;
4334 | 
4335 |       if (enhancedMode) {
4336 |         if (knowledgeEnhancement) {
4337 |           const knowledgeModule = await import('./utils/knowledge-generation.js');
4338 |           generateArchitecturalKnowledge = knowledgeModule.generateArchitecturalKnowledge;
4339 |         }
4340 | 
4341 |         if (learningEnabled) {
4342 |           const reflexionModule = await import('./utils/reflexion.js');
4343 |           executeWithReflexion = reflexionModule.executeWithReflexion;
4344 |           retrieveRelevantMemories = reflexionModule.retrieveRelevantMemories;
4345 |           createToolReflexionConfig = reflexionModule.createToolReflexionConfig;
4346 |         }
4347 |       }
4348 | 
4349 |       // Step 1: Generate technology-specific knowledge if enabled
4350 |       ctx.info('🧠 Phase 2: Generating architectural knowledge');
4351 |       ctx.report_progress(25, 100);
4352 | 
4353 |       let knowledgeContext = '';
4354 |       if (enhancedMode && knowledgeEnhancement && generateArchitecturalKnowledge) {
4355 |         try {
4356 |           const knowledgeResult = await generateArchitecturalKnowledge(
4357 |             {
4358 |               projectPath,
4359 |               technologies: technologyFocus,
4360 |               patterns: [],
4361 |               projectType: 'ecosystem-analysis',
4362 |               existingAdrs: [],
4363 |             },
4364 |             {
4365 |               domains: this.getEcosystemAnalysisDomains(technologyFocus) as ArchitecturalDomain[],
4366 |               depth: analysisDepth === 'basic' ? 'basic' : 'intermediate',
4367 |               cacheEnabled: true,
4368 |             }
4369 |           );
4370 | 
4371 |           knowledgeContext = `
4372 | ## Technology-Specific Knowledge Enhancement
4373 | 
4374 | The following architectural knowledge has been generated to enhance ecosystem analysis:
4375 | 
4376 | ${knowledgeResult.prompt}
4377 | 
4378 | ---
4379 | `;
4380 |         } catch (error) {
4381 |           this.logger.warn('Knowledge generation failed:', error);
4382 |           knowledgeContext = '<!-- Knowledge generation unavailable -->\n';
4383 |         }
4384 |       }
4385 | 
4386 |       // Step 2: Retrieve relevant memories if learning is enabled
4387 |       let reflexionContext = '';
4388 |       if (enhancedMode && learningEnabled && retrieveRelevantMemories) {
4389 |         try {
4390 |           const memoryResult = await retrieveRelevantMemories(
4391 |             'ecosystem-analysis',
4392 |             { projectPath, analysisDepth, technologyFocus },
4393 |             { maxResults: 5, relevanceThreshold: 0.6 }
4394 |           );
4395 | 
4396 |           reflexionContext = `
4397 | ## Learning from Past Analyses
4398 | 
4399 | The following insights from past ecosystem analysis tasks will inform this analysis:
4400 | 
4401 | ${memoryResult.prompt}
4402 | 
4403 | ---
4404 | `;
4405 |         } catch (error) {
4406 |           this.logger.warn('Reflexion memory retrieval failed:', error);
4407 |           reflexionContext = '<!-- Learning context unavailable -->\n';
4408 |         }
4409 |       }
4410 | 
4411 |       // Step 3: Generate base project analysis prompt with recursive depth
4412 |       ctx.info('📁 Phase 3: Scanning project files and structure');
4413 |       ctx.report_progress(40, 100);
4414 | 
4415 |       const baseProjectAnalysisPrompt = await analyzeProjectStructure(projectPath);
4416 | 
4417 |       // Step 4: Generate environment analysis if enabled
4418 |       ctx.info('🔧 Phase 4: Analyzing environment and infrastructure');
4419 |       ctx.report_progress(55, 100);
4420 |       let environmentAnalysisContext = '';
4421 |       if (includeEnvironment) {
4422 |         try {
4423 |           this.logger.info('Including comprehensive environment analysis in ecosystem analysis');
4424 |           const { analyzeEnvironment } = await import('./tools/environment-analysis-tool.js');
4425 | 
4426 |           // Call environment analysis with comprehensive scope
4427 |           const environmentResult = await analyzeEnvironment({
4428 |             projectPath,
4429 |             adrDirectory: this.config.adrDirectory,
4430 |             analysisType: 'comprehensive',
4431 |           });
4432 | 
4433 |           // Extract environment analysis content
4434 |           if (environmentResult.content && environmentResult.content[0]) {
4435 |             environmentAnalysisContext = `
4436 | ## Integrated Environment Analysis
4437 | 
4438 | ${environmentResult.content[0].text}
4439 | 
4440 | ---
4441 | `;
4442 |           }
4443 |         } catch (error) {
4444 |           this.logger.warn('Environment analysis integration failed:', error);
4445 |           environmentAnalysisContext = `
4446 | ## Environment Analysis
4447 | <!-- Environment analysis unavailable: ${error instanceof Error ? error.message : 'Unknown error'} -->
4448 | 
4449 | ---
4450 | `;
4451 |         }
4452 |       }
4453 | 
4454 |       // Step 5: Apply Reflexion execution if learning is enabled
4455 |       ctx.info('🧪 Phase 5: Applying learning and reflexion');
4456 |       ctx.report_progress(70, 100);
4457 | 
4458 |       let enhancedAnalysisPrompt = baseProjectAnalysisPrompt.prompt + environmentAnalysisContext;
4459 |       if (enhancedMode && learningEnabled && executeWithReflexion && createToolReflexionConfig) {
4460 |         try {
4461 |           const reflexionConfig = createToolReflexionConfig('analyze_project_ecosystem', {
4462 |             reflectionDepth: analysisDepth === 'basic' ? 'basic' : 'detailed',
4463 |             evaluationCriteria: ['task-success', 'accuracy', 'completeness'],
4464 |             learningRate: 0.7,
4465 |           });
4466 | 
4467 |           const reflexionResult = await executeWithReflexion(
4468 |             {
4469 |               prompt:
4470 |                 baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext,
4471 |               instructions: baseProjectAnalysisPrompt.instructions,
4472 |               context: {
4473 |                 projectPath,
4474 |                 analysisDepth,
4475 |                 recursiveDepth,
4476 |                 technologyFocus,
4477 |                 includePatterns,
4478 |                 includeEnvironment,
4479 |                 analysisScope,
4480 |                 knowledgeEnhanced: knowledgeEnhancement,
4481 |                 learningEnabled: true,
4482 |               },
4483 |             },
4484 |             reflexionConfig
4485 |           );
4486 | 
4487 |           enhancedAnalysisPrompt = reflexionResult.prompt;
4488 |         } catch (error) {
4489 |           this.logger.warn('Reflexion execution failed:', error);
4490 |           enhancedAnalysisPrompt =
4491 |             baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext;
4492 |         }
4493 |       } else {
4494 |         enhancedAnalysisPrompt =
4495 |           baseProjectAnalysisPrompt.prompt + knowledgeContext + environmentAnalysisContext;
4496 |       }
4497 | 
4498 |       // Execute the analysis with AI if enabled, otherwise return prompt
4499 |       ctx.info('🤖 Phase 6: Executing AI-powered ecosystem analysis');
4500 |       ctx.report_progress(85, 100);
4501 | 
4502 |       const { executeEcosystemAnalysisPrompt, formatMCPResponse } = await import(
4503 |         './utils/prompt-execution.js'
4504 |       );
4505 |       const executionResult = await executeEcosystemAnalysisPrompt(
4506 |         enhancedAnalysisPrompt,
4507 |         baseProjectAnalysisPrompt.instructions,
4508 |         {
4509 |           temperature: 0.1,
4510 |           maxTokens: 6000,
4511 |         }
4512 |       );
4513 | 
4514 |       // Step 6: Record project structure to knowledge graph
4515 |       try {
4516 |         this.logger.info('Recording project structure to knowledge graph');
4517 | 
4518 |         const projectStructureSnapshot = {
4519 |           projectPath,
4520 |           analysisDepth,
4521 |           recursiveDepth,
4522 |           technologyFocus,
4523 |           analysisScope,
4524 |           includeEnvironment,
4525 |           timestamp: new Date().toISOString(),
4526 |           structureData: baseProjectAnalysisPrompt.context || {},
4527 |         };
4528 | 
4529 |         await this.kgManager.recordProjectStructure(projectStructureSnapshot);
4530 |         this.logger.info('✅ Project structure recorded to knowledge graph');
4531 |       } catch (kgError) {
4532 |         this.logger.warn('Failed to record project structure to knowledge graph:', kgError);
4533 |         // Don't fail the entire analysis if KG recording fails
4534 |       }
4535 | 
4536 |       ctx.info('✅ Ecosystem analysis completed successfully');
4537 |       ctx.report_progress(100, 100);
4538 | 
4539 |       // Return appropriate response based on execution result
4540 |       if (executionResult.isAIGenerated) {
4541 |         // AI execution successful - return actual analysis results
4542 |         return formatMCPResponse({
4543 |           ...executionResult,
4544 |           content: `# Comprehensive Project Ecosystem Analysis Results
4545 | 
4546 | ## Analysis Configuration
4547 | - **Project Path**: ${projectPath}
4548 | - **Analysis Depth**: ${analysisDepth}
4549 | - **Recursive Depth**: ${recursiveDepth}
4550 | - **Environment Analysis**: ${includeEnvironment ? '✅ Included' : '❌ Excluded'}
4551 | - **Analysis Scope**: ${analysisScope.length > 0 ? analysisScope.join(', ') : 'Full ecosystem analysis'}
4552 | 
4553 | ## Enhancement Features
4554 | - **Knowledge Generation**: ${enhancedMode && knowledgeEnhancement ? '✅ Enabled' : '❌ Disabled'}
4555 | - **Reflexion Learning**: ${enhancedMode && learningEnabled ? '✅ Enabled' : '❌ Disabled'}
4556 | - **Enhanced Mode**: ${enhancedMode ? '✅ Enabled' : '❌ Disabled'}
4557 | - **Technology Focus**: ${technologyFocus.length > 0 ? technologyFocus.join(', ') : 'Auto-detect'}
4558 | - **Knowledge Graph**: ✅ Project structure recorded
4559 | 
4560 | ${knowledgeContext}
4561 | 
4562 | ${reflexionContext}
4563 | 
4564 | ## Comprehensive Ecosystem Analysis Results
4565 | 
4566 | ${executionResult.content}
4567 | 
4568 | ${
4569 |   includeEnvironment
4570 |     ? `
4571 | 
4572 | ## Environment Integration Summary
4573 | 
4574 | The analysis above includes comprehensive environment analysis covering:
4575 | - **Infrastructure Specifications**: Deployment and runtime environment details
4576 | - **Containerization**: Docker, Kubernetes, and container orchestration analysis
4577 | - **Environment Requirements**: Configuration and dependency requirements
4578 | - **Compliance Assessment**: Security and regulatory compliance evaluation
4579 | 
4580 | This integrated approach provides complete understanding of both codebase patterns AND operational environment.
4581 | `
4582 |     : ''
4583 | }
4584 | 
4585 | ## Next Steps: Complete Ecosystem Understanding
4586 | 
4587 | Based on the comprehensive analysis above:
4588 | 
4589 | ### **Immediate Actions**
4590 | 1. **Review Ecosystem Overview**: Examine the complete technology stack and environment context
4591 | 2. **Assess Integration Points**: Understand how code patterns relate to operational environment
4592 | 3. **Identify Critical Dependencies**: Focus on key dependencies between code and infrastructure
4593 | 
4594 | ### **Strategic Planning**
4595 | 4. **Address Architectural Issues**: Prioritize improvements based on both code and environment analysis
4596 | 5. **Plan Environment Optimization**: Optimize deployment and operational configurations
4597 | 6. **Update Documentation**: Document both architectural decisions and environment specifications
4598 | 
4599 | ### **Implementation Roadmap**
4600 | 7. **Implement Code Improvements**: Execute code-level architectural enhancements
4601 | 8. **Optimize Environment**: Improve infrastructure and deployment configurations
4602 | 9. **Monitor Integration**: Ensure code and environment changes work together effectively
4603 | 
4604 | This comprehensive ecosystem analysis provides the foundation for informed architectural and operational decisions.
4605 | `,
4606 |         });
4607 |       } else {
4608 |         // Fallback to prompt-only mode
4609 |         return {
4610 |           content: [
4611 |             {
4612 |               type: 'text',
4613 |               text: `# Comprehensive Project Ecosystem Analysis
4614 | 
4615 | This comprehensive analysis provides deep recursive project understanding with integrated environment analysis.
4616 | 
4617 | ## Analysis Configuration
4618 | - **Project Path**: ${projectPath}
4619 | - **Analysis Depth**: ${analysisDepth}
4620 | - **Recursive Depth**: ${recursiveDepth}
4621 | - **Environment Analysis**: ${includeEnvironment ? '✅ Included' : '❌ Excluded'}
4622 | - **Analysis Scope**: ${analysisScope.length > 0 ? analysisScope.join(', ') : 'Full ecosystem analysis'}
4623 | 
4624 | ## Enhancement Features
4625 | - **Knowledge Generation**: ${enhancedMode && knowledgeEnhancement ? '✅ Enabled' : '❌ Disabled'}
4626 | - **Reflexion Learning**: ${enhancedMode && learningEnabled ? '✅ Enabled' : '❌ Disabled'}
4627 | - **Enhanced Mode**: ${enhancedMode ? '✅ Enabled' : '❌ Disabled'}
4628 | - **Technology Focus**: ${technologyFocus.length > 0 ? technologyFocus.join(', ') : 'Auto-detect'}
4629 | - **Include Patterns**: ${includePatterns?.length ? includePatterns.join(', ') : 'Default patterns'}
4630 | - **Knowledge Graph**: ✅ Project structure recorded
4631 | 
4632 | ${knowledgeContext}
4633 | 
4634 | ${reflexionContext}
4635 | 
4636 | ## Enhanced Analysis Prompt
4637 | 
4638 | ${enhancedAnalysisPrompt}
4639 | 
4640 | ## Enhanced Implementation Instructions
4641 | 
4642 | ${baseProjectAnalysisPrompt.instructions}
4643 | 
4644 | ### Enhancement-Specific Instructions
4645 | 
4646 | ${
4647 |   enhancedMode && knowledgeEnhancement
4648 |     ? `
4649 | #### Knowledge Enhancement
4650 | - Apply technology-specific knowledge to ecosystem analysis
4651 | - Use domain expertise to identify patterns and anti-patterns
4652 | - Leverage architectural best practices for technology stack evaluation
4653 | `
4654 |     : ''
4655 | }
4656 | 
4657 | ${
4658 |   enhancedMode && learningEnabled
4659 |     ? `
4660 | #### Learning Integration
4661 | - Apply lessons learned from past ecosystem analyses
4662 | - Use memory insights to improve pattern recognition accuracy
4663 | - Incorporate feedback from previous analysis outcomes
4664 | `
4665 |     : ''
4666 | }
4667 | 
4668 | ## Expected Enhanced Output
4669 | 
4670 | The enhanced analysis should provide:
4671 | 1. **Technology Stack Analysis** with domain knowledge context
4672 | 2. **Architectural Pattern Detection** informed by past experiences
4673 | 3. **Ecosystem Health Assessment** using learned evaluation criteria
4674 | 4. **Improvement Recommendations** based on domain best practices
4675 | 5. **Learning Insights** for future analysis improvement
4676 | 
4677 | ## Quality Assurance
4678 | 
4679 | - Ensure analysis leverages all available enhancement features
4680 | - Verify technology-specific knowledge is properly applied
4681 | - Confirm learning insights improve analysis accuracy
4682 | - Validate recommendations align with domain best practices`,
4683 |             },
4684 |           ],
4685 |         };
4686 |       }
4687 |     } catch (error) {
4688 |       throw new McpAdrError(
4689 |         `Failed to analyze project ecosystem: ${error instanceof Error ? error.message : String(error)}`,
4690 |         'ANALYSIS_ERROR'
4691 |       );
4692 |     }
4693 |   }
4694 | 
4695 |   private async getArchitecturalContext(
4696 |     args: GetArchitecturalContextArgs
4697 |   ): Promise<CallToolResult> {
4698 |     const { filePath, includeCompliance = true } = args;
4699 | 
4700 |     try {
4701 |       const {
4702 |         analyzeProjectStructureCompat: analyzeProjectStructure,
4703 |         fileExistsCompat: fileExists,
4704 |         ensureDirectoryCompat: ensureDirectory,
4705 |       } = await import('./utils/file-system.js');
4706 |       const path = await import('path');
4707 | 
4708 |       // Determine project path
4709 |       const projectPath = filePath
4710 |         ? filePath.split('/').slice(0, -1).join('/')
4711 |         : this.config.projectPath;
4712 |       const adrDirectory = path.join(projectPath, this.config.adrDirectory);
4713 | 
4714 |       // Generate prompts for ADR directory setup
4715 |       const adrDirectoryCheckPrompt = await fileExists(adrDirectory);
4716 |       const adrDirectorySetupPrompt = await ensureDirectory(adrDirectory);
4717 | 
4718 |       // Generate architectural analysis prompt
4719 |       const projectAnalysisPrompt = await analyzeProjectStructure(projectPath);
4720 | 
4721 |       const architecturalPrompt = `
4722 | # Architectural Context Analysis & Project Setup
4723 | 
4724 | ## Project Overview
4725 | **Project Path**: ${projectPath}
4726 | **Analysis Scope**: ${filePath ? `Specific file: ${filePath}` : 'Entire project'}
4727 | **ADR Directory**: ${this.config.adrDirectory}
4728 | **Include Compliance**: ${includeCompliance ? 'Yes' : 'No'}
4729 | 
4730 | ## 🚀 ADR Infrastructure Setup
4731 | 
4732 | This analysis will include setting up ADR infrastructure if needed:
4733 | 
4734 | ### ADR Directory Check
4735 | ${adrDirectoryCheckPrompt.prompt}
4736 | 
4737 | ### ADR Directory Setup (if needed)
4738 | ${adrDirectorySetupPrompt.prompt}
4739 | 
4740 | ## Comprehensive Project Analysis
4741 | 
4742 | ${projectAnalysisPrompt.prompt}
4743 | 
4744 | ## Enhanced Architectural Focus
4745 | 
4746 | Please provide a **comprehensive, outcome-focused analysis** including:
4747 | 
4748 | ### 1. Technology Stack & Infrastructure Analysis
4749 | - **Core Technologies**: Programming languages, frameworks, runtime environments
4750 | - **Dependencies**: Package managers, third-party libraries, version constraints
4751 | - **Build & Deployment**: CI/CD pipelines, build tools, deployment strategies
4752 | - **Data Layer**: Databases, caching, data storage and retrieval patterns
4753 | 
4754 | ### 2. Architectural Pattern & Design Analysis
4755 | - **System Architecture**: Monolith, microservices, serverless, hybrid patterns
4756 | - **Code Organization**: Module structure, separation of concerns, layering
4757 | - **API Design**: REST, GraphQL, RPC patterns and conventions
4758 | - **Data Flow**: Request/response cycles, event handling, state management
4759 | ${filePath ? `- **File-specific Context**: How ${filePath} fits into the overall architecture` : ''}
4760 | 
4761 | ### 3. Quality, Security & Performance Assessment
4762 | - **Code Quality**: Structure, naming, documentation, testing strategies
4763 | - **Security Implementation**: Authentication, authorization, data protection
4764 | - **Performance Patterns**: Caching, optimization, scalability considerations
4765 | - **Monitoring & Observability**: Logging, metrics, error tracking
4766 | 
4767 | ### 4. Architectural Decision Discovery & Documentation
4768 | - **Explicit Decisions**: Find existing documentation and decision records
4769 | - **Implicit Decisions**: Identify significant undocumented architectural choices
4770 | - **Technology Rationale**: Understand selection criteria and trade-offs
4771 | - **Evolution Path**: How the architecture has changed over time
4772 | 
4773 | ${
4774 |   includeCompliance
4775 |     ? `### 5. Compliance & Standards Assessment
4776 | - **Industry Standards**: Adherence to relevant industry standards and best practices
4777 | - **Security Compliance**: Security standards compliance (OWASP, SOC2, etc.)
4778 | - **Code Standards**: Coding standards and style guide compliance
4779 | - **Architectural Compliance**: Adherence to established architectural principles
4780 | - **Regulatory Requirements**: Any regulatory compliance requirements (GDPR, HIPAA, etc.)`
4781 |     : ''
4782 | }
4783 | 
4784 | ## Expected Output: Outcome-Focused Architectural Context
4785 | 
4786 | Provide a **comprehensive architectural context** with **clear project outcomes**:
4787 | 
4788 | ### 📋 **1. Executive Summary & Project Outcomes**
4789 | - **Current State**: What the project is and what it does
4790 | - **Architectural Maturity**: Assessment of current architectural practices
4791 | - **Key Strengths**: What's working well architecturally
4792 | - **Critical Gaps**: What needs immediate attention
4793 | - **Success Metrics**: How to measure architectural improvements
4794 | 
4795 | ### 🔧 **2. Technology & Infrastructure Inventory**
4796 | - **Technology Stack**: Complete inventory with versions and purposes
4797 | - **Infrastructure Components**: Deployment, monitoring, data storage
4798 | - **Dependencies**: Critical dependencies and potential risks
4799 | - **Tool Chain**: Development, testing, and deployment tools
4800 | 
4801 | ### 🏗️ **3. Architectural Patterns & Design Decisions**
4802 | - **System Design**: Overall architectural approach and patterns
4803 | - **Component Architecture**: How major components interact
4804 | - **Data Architecture**: How data flows and is managed
4805 | - **Integration Patterns**: How external systems are integrated
4806 | 
4807 | ### 📊 **4. Quality & Compliance Assessment**
4808 | - **Code Quality Score**: Assessment of current code quality
4809 | - **Security Posture**: Security implementation and gaps
4810 | - **Performance Profile**: Current performance characteristics
4811 | - **Maintainability Index**: How easy the system is to maintain and evolve
4812 | 
4813 | ### 🎯 **5. Outcome-Focused Action Plan**
4814 | Based on the analysis, provide a **clear workflow** with **projected outcomes**:
4815 | 
4816 | #### **Immediate Actions (Next 1-2 weeks)**
4817 | - **Priority 1**: Most critical architectural issues to address
4818 | - **Quick Wins**: Low-effort, high-impact improvements
4819 | - **Documentation**: Essential decisions that need immediate documentation
4820 | 
4821 | #### **Short-term Goals (Next 1-3 months)**
4822 | - **Architectural Improvements**: Planned enhancements with expected outcomes
4823 | - **Technical Debt**: Priority technical debt to address
4824 | - **Process Improvements**: Development workflow enhancements
4825 | 
4826 | #### **Long-term Vision (3-12 months)**
4827 | - **Strategic Architecture**: Long-term architectural evolution
4828 | - **Scalability Roadmap**: How to scale the system effectively
4829 | - **Innovation Opportunities**: Areas for architectural innovation
4830 | 
4831 | ### 📈 **6. Success Metrics & Outcomes**
4832 | Define **measurable outcomes** for architectural improvements:
4833 | 
4834 | - **Performance Metrics**: Response times, throughput, resource utilization
4835 | - **Quality Metrics**: Code coverage, bug rates, maintainability scores
4836 | - **Developer Experience**: Build times, deployment frequency, developer satisfaction
4837 | - **Business Impact**: Feature delivery speed, system reliability, cost efficiency
4838 | 
4839 | ### 🏗️ **7. ADR Infrastructure & Documentation Plan**
4840 | 
4841 | If ADR directory doesn't exist, also provide:
4842 | 
4843 | 1. **Create Directory Structure**:
4844 |    \`\`\`
4845 |    ${this.config.adrDirectory}/
4846 |    ├── 0001-record-architecture-decisions.md (template)
4847 |    ├── README.md (ADR process guide)
4848 |    └── template.md (ADR template)
4849 |    \`\`\`
4850 | 
4851 | 2. **Generate Initial ADRs** for discovered architectural decisions
4852 | 3. **Create ADR Process Guide** for the team
4853 | 4. **Establish ADR Workflow** for future decisions
4854 | 
4855 | ### 🔄 **8. Continuous Improvement Workflow**
4856 | Establish ongoing architectural governance:
4857 | 
4858 | - **Regular Reviews**: Monthly architectural health checks
4859 | - **Decision Documentation**: Process for documenting new architectural decisions
4860 | - **Compliance Monitoring**: Ongoing adherence to architectural standards
4861 | - **Evolution Planning**: Quarterly architectural roadmap updates
4862 | 
4863 | ## Next Steps: Grounded Project Workflow
4864 | 
4865 | After this analysis, follow this **outcome-focused workflow**:
4866 | 
4867 | 1. **📋 Review Analysis**: Examine the architectural context and recommendations
4868 | 2. **🎯 Set Priorities**: Choose 3-5 most impactful improvements based on outcomes
4869 | 3. **📝 Document Decisions**: Create ADRs for significant architectural choices
4870 | 4. **🔧 Implement Changes**: Execute improvements in priority order
4871 | 5. **📊 Measure Progress**: Track success metrics and outcomes
4872 | 6. **🔄 Iterate**: Regular reviews and continuous improvement
4873 | 
4874 | This approach ensures that architectural work is **grounded in measurable outcomes** and **aligned with project success**.
4875 | `;
4876 | 
4877 |       // Execute the analysis with AI if enabled, otherwise return prompt
4878 |       const { executeEcosystemAnalysisPrompt, formatMCPResponse } = await import(
4879 |         './utils/prompt-execution.js'
4880 |       );
4881 |       const executionResult = await executeEcosystemAnalysisPrompt(
4882 |         architecturalPrompt,
4883 |         projectAnalysisPrompt.instructions,
4884 |         {
4885 |           temperature: 0.1,
4886 |           maxTokens: 5000,
4887 |           systemPrompt: `You are a senior software architect specializing in architectural context analysis.
4888 | Analyze the provided project to understand its architectural patterns, design decisions, and structural organization.
4889 | Focus on providing actionable insights about the architecture that can guide development decisions.`,
4890 |         }
4891 |       );
4892 | 
4893 |       if (executionResult.isAIGenerated) {
4894 |         // AI execution successful - return actual analysis results
4895 |         return formatMCPResponse({
4896 |           ...executionResult,
4897 |           content: `# Architectural Context Analysis Results
4898 | 
4899 | ${filePath ? `## Target File: ${filePath}` : '## Project-wide Analysis'}
4900 | 
4901 | ## Project Information
4902 | - **Project Path**: ${projectPath}
4903 | - **Analysis Scope**: ${filePath ? 'File-specific' : 'Project-wide'}
4904 | - **ADR Directory**: ${this.config.adrDirectory}
4905 | 
4906 | ## ADR Infrastructure Setup
4907 | 
4908 | The analysis includes automatic ADR infrastructure setup:
4909 | 
4910 | ${adrDirectoryCheckPrompt.instructions}
4911 | 
4912 | ${adrDirectorySetupPrompt.instructions}
4913 | 
4914 | ## AI Analysis Results
4915 | 
4916 | ${executionResult.content}
4917 | 
4918 | ## Outcome-Focused Next Steps
4919 | 
4920 | Based on the architectural analysis, follow this **grounded workflow**:
4921 | 
4922 | ### **Immediate Actions (This Week)**
4923 | 1. **Review Analysis**: Examine the architectural context and recommendations above
4924 | 2. **Set Up ADRs**: Ensure ADR directory structure is created and ready
4925 | 3. **Identify Quick Wins**: Focus on low-effort, high-impact improvements
4926 | 
4927 | ### **Short-term Goals (Next Month)**
4928 | 4. **Document Key Decisions**: Create ADRs for the most significant architectural choices
4929 | 5. **Address Critical Issues**: Tackle the highest-priority architectural concerns
4930 | 6. **Establish Metrics**: Set up measurement for the success metrics identified
4931 | 
4932 | ### **Long-term Vision (Next Quarter)**
4933 | 7. **Implement Roadmap**: Execute the architectural improvement plan
4934 | 8. **Monitor Progress**: Track success metrics and adjust approach as needed
4935 | 9. **Continuous Improvement**: Establish regular architectural reviews
4936 | 
4937 | This **outcome-focused approach** ensures architectural work delivers **measurable value** and keeps the project **grounded in clear objectives**.
4938 | `,
4939 |         });
4940 |       } else {
4941 |         // Fallback to prompt-only mode
4942 |         return {
4943 |           content: [
4944 |             {
4945 |               type: 'text',
4946 |               text: architecturalPrompt,
4947 |             },
4948 |           ],
4949 |         };
4950 |       }
4951 |     } catch (error) {
4952 |       throw new McpAdrError(
4953 |         `Failed to get architectural context: ${error instanceof Error ? error.message : String(error)}`,
4954 |         'ANALYSIS_ERROR'
4955 |       );
4956 |     }
4957 |   }
4958 | 
4959 |   private async generateAdrsFromPrd(
4960 |     args: Record<string, unknown>,
4961 |     context?: ToolContext
4962 |   ): Promise<CallToolResult> {
4963 |     const ctx = context || createNoOpContext();
4964 | 
4965 |     const {
4966 |       prdPath,
4967 |       enhancedMode = true,
4968 |       promptOptimization = true,
4969 |       knowledgeEnhancement = true,
4970 |       prdType = 'general',
4971 |     } = args;
4972 |     const outputDirectory = args['outputDirectory'] || this.config.adrDirectory;
4973 | 
4974 |     this.logger.info(`Generating enhanced ADRs from PRD: ${prdPath} to ${outputDirectory}`);
4975 |     this.logger.info(
4976 |       `Enhancement features - APE: ${promptOptimization}, Knowledge: ${knowledgeEnhancement}, Type: ${prdType}`
4977 |     );
4978 | 
4979 |     ctx.info(`📝 Starting ADR generation from PRD: ${prdPath}`);
4980 |     ctx.report_progress(0, 100);
4981 | 
4982 |     try {
4983 |       ctx.info('📂 Phase 1: Validating PRD file');
4984 |       ctx.report_progress(10, 100);
4985 |       const { readFileContentCompat: readFileContent, fileExistsCompat: fileExists } = await import(
4986 |         './utils/file-system.js'
4987 |       );
4988 | 
4989 |       // Import advanced prompting utilities if enhanced mode is enabled
4990 |       // eslint-disable-next-line @typescript-eslint/no-explicit-any
4991 |       let generateArchitecturalKnowledge: any = null;
4992 |       // eslint-disable-next-line @typescript-eslint/no-explicit-any
4993 |       let optimizePromptWithAPE: any = null;
4994 |       // eslint-disable-next-line @typescript-eslint/no-explicit-any
4995 |       let createToolAPEConfig: any = null;
4996 | 
4997 |       if (enhancedMode) {
4998 |         if (knowledgeEnhancement) {
4999 |           const knowledgeModule = await import('./utils/knowledge-generation.js');
5000 |           generateArchitecturalKnowledge = knowledgeModule.generateArchitecturalKnowledge;
5001 |         }
5002 | 
5003 |         if (promptOptimization) {
5004 |           const apeModule = await import('./utils/automatic-prompt-engineering.js');
5005 |           optimizePromptWithAPE = apeModule.optimizePromptWithAPE;
5006 |           createToolAPEConfig = apeModule.createToolAPEConfig;
5007 |         }
5008 |       }
5009 | 
5010 |       // Generate file existence check prompt
5011 |       const fileExistsPrompt = await fileExists(prdPath as string);
5012 | 
5013 |       // Generate file content reading prompt
5014 |       const fileContentPrompt = await readFileContent(prdPath as string);
5015 | 
5016 |       ctx.info('📚 Phase 2: Reading PRD content');
5017 |       ctx.report_progress(25, 100);
5018 | 
5019 |       // Step 1: Generate domain-specific knowledge if enabled
5020 |       ctx.info('🧠 Phase 3: Generating domain knowledge');
5021 |       ctx.report_progress(40, 100);
5022 | 
5023 |       let knowledgeContext = '';
5024 |       if (enhancedMode && knowledgeEnhancement && generateArchitecturalKnowledge) {
5025 |         try {
5026 |           const knowledgeResult = await generateArchitecturalKnowledge(
5027 |             {
5028 |               projectPath: outputDirectory,
5029 |               technologies: [],
5030 |               patterns: [],
5031 |               projectType: prdType,
5032 |               existingAdrs: [],
5033 |             },
5034 |             {
5035 |               domains: this.getPrdTypeDomains(prdType as string),
5036 |               depth: 'intermediate',
5037 |               cacheEnabled: true,
5038 |             }
5039 |           );
5040 | 
5041 |           knowledgeContext = `
5042 | ## Domain-Specific Knowledge Enhancement
5043 | 
5044 | The following architectural knowledge has been generated to enhance PRD analysis and ADR creation:
5045 | 
5046 | ${knowledgeResult.prompt}
5047 | 
5048 | ---
5049 | `;
5050 |         } catch (error) {
5051 |           this.logger.warn('Knowledge generation failed:', error);
5052 |           knowledgeContext = '<!-- Knowledge generation unavailable -->\n';
5053 |         }
5054 |       }
5055 | 
5056 |       // Step 2: Create base ADR generation prompt
5057 |       ctx.info('📋 Phase 4: Creating base ADR prompts');
5058 |       ctx.report_progress(60, 100);
5059 | 
5060 |       const baseAdrPrompt = this.createBaseAdrPrompt(
5061 |         prdPath as string,
5062 |         outputDirectory as string,
5063 |         knowledgeContext
5064 |       );
5065 | 
5066 |       // Step 3: Apply APE optimization if enabled
5067 |       ctx.info('⚡ Phase 5: Optimizing prompts with APE');
5068 |       ctx.report_progress(75, 100);
5069 | 
5070 |       let finalAdrPrompt = baseAdrPrompt;
5071 |       if (enhancedMode && promptOptimization && optimizePromptWithAPE && createToolAPEConfig) {
5072 |         try {
5073 |           const apeConfig = createToolAPEConfig('generate_adrs_from_prd', {
5074 |             candidateCount: 5,
5075 |             evaluationCriteria: ['task-completion', 'clarity', 'specificity'],
5076 |             optimizationRounds: 2,
5077 |             qualityThreshold: 0.75,
5078 |           });
5079 | 
5080 |           const apeResult = await optimizePromptWithAPE(
5081 |             {
5082 |               prompt: baseAdrPrompt,
5083 |               instructions: 'Generate comprehensive ADRs from PRD analysis',
5084 |               context: {
5085 |                 prdPath,
5086 |                 outputDirectory,
5087 |                 prdType,
5088 |                 knowledgeEnhanced: knowledgeEnhancement,
5089 |               },
5090 |             },
5091 |             apeConfig
5092 |           );
5093 | 
5094 |           finalAdrPrompt = apeResult.prompt;
5095 |         } catch (error) {
5096 |           this.logger.warn('APE optimization failed:', error);
5097 |           finalAdrPrompt = baseAdrPrompt;
5098 |         }
5099 |       }
5100 | 
5101 |       // Generate comprehensive ADR creation prompt that includes file operations
5102 |       const adrPrompt = `
5103 | # Enhanced ADR Generation from PRD Request
5104 | 
5105 | This is a comprehensive prompt-driven ADR generation process enhanced with advanced prompting techniques.
5106 | 
5107 | ## Enhancement Status
5108 | - **APE Optimization**: ${enhancedMode && promptOptimization ? '✅ Enabled' : '❌ Disabled'}
5109 | - **Knowledge Generation**: ${enhancedMode && knowledgeEnhancement ? '✅ Enabled' : '❌ Disabled'}
5110 | - **PRD Type**: ${prdType}
5111 | - **Enhanced Mode**: ${enhancedMode ? '✅ Enabled' : '❌ Disabled'}
5112 | 
5113 | ## Step 1: File Validation
5114 | ${fileExistsPrompt.prompt}
5115 | 
5116 | **Instructions**: First, execute the file existence check above. If the file does not exist, stop the process and report the error. Only proceed to Step 2 if the file exists.
5117 | 
5118 | ## Step 2: PRD Content Reading
5119 | ${fileContentPrompt.prompt}
5120 | 
5121 | **Instructions**: Execute the file reading operation above to obtain the PRD content. Use the content from this step for the enhanced ADR generation in Step 3.
5122 | 
5123 | ## Step 3: Enhanced ADR Generation
5124 | 
5125 | ${
5126 |   enhancedMode && promptOptimization
5127 |     ? `
5128 | ### APE-Optimized Analysis
5129 | This prompt has been optimized using Automatic Prompt Engineering for superior ADR generation quality.
5130 | The optimization focused on task completion, clarity, and specificity for PRD analysis.
5131 | 
5132 | `
5133 |     : ''
5134 | }
5135 | 
5136 | ${finalAdrPrompt}
5137 | 
5138 | ### File Creation Instructions
5139 | 
5140 | For each generated ADR, create a file creation prompt using the following pattern:
5141 | - **File Path**: ${outputDirectory}/[number]-[decision-title].md
5142 | - **Content**: The complete enhanced ADR markdown content
5143 | - **Action Confirmation**: Require user confirmation before creating files
5144 | - **Security Validation**: Ensure output directory is safe and authorized
5145 | 
5146 | ### Enhanced Quality Assurance
5147 | 
5148 | - Ensure each ADR leverages domain knowledge when available
5149 | - Verify decisions align with PRD type best practices
5150 | - Check that enhancement features are properly utilized
5151 | - Validate that ADR content exceeds baseline quality expectations
5152 | - Confirm all decisions are traceable back to PRD requirements with domain context
5153 | `;
5154 | 
5155 |       // Execute the ADR generation with AI if enabled, otherwise return prompt
5156 |       ctx.info('🤖 Phase 6: Executing AI-powered ADR generation');
5157 |       ctx.report_progress(90, 100);
5158 | 
5159 |       const { executeADRGenerationPrompt, formatMCPResponse } = await import(
5160 |         './utils/prompt-execution.js'
5161 |       );
5162 |       const executionResult = await executeADRGenerationPrompt(
5163 |         adrPrompt,
5164 |         'Generate comprehensive ADRs from PRD analysis with enhanced domain knowledge and optimization',
5165 |         {
5166 |           temperature: 0.1,
5167 |           maxTokens: 8000,
5168 |           systemPrompt: `You are an expert software architect who creates comprehensive Architectural Decision Records (ADRs) from Product Requirements Documents (PRDs).
5169 | Generate well-structured ADRs that follow best practices and include all necessary sections.
5170 | Focus on extracting architectural decisions from the PRD and creating actionable ADRs with clear reasoning.`,
5171 |         }
5172 |       );
5173 | 
5174 |       ctx.info('✅ ADR generation completed successfully');
5175 |       ctx.report_progress(100, 100);
5176 | 
5177 |       if (executionResult.isAIGenerated) {
5178 |         // AI execution successful - return actual ADR generation results
5179 |         return formatMCPResponse({
5180 |           ...executionResult,
5181 |           content: `# ADR Generation from PRD Results
5182 | 
5183 | ## Enhancement Features
5184 | - **APE Optimization**: ${enhancedMode && promptOptimization ? '✅ Enabled' : '❌ Disabled'}
5185 | - **Knowledge Generation**: ${enhancedMode && knowledgeEnhancement ? '✅ Enabled' : '❌ Disabled'}
5186 | - **PRD Type Optimization**: ${prdType}
5187 | - **Enhanced Mode**: ${enhancedMode ? '✅ Enabled' : '❌ Disabled'}
5188 | 
5189 | ## Source Information
5190 | - **PRD Path**: ${prdPath}
5191 | - **Output Directory**: ${outputDirectory}
5192 | 
5193 | ## Generated ADRs
5194 | 
5195 | ${executionResult.content}
5196 | 
5197 | ## Next Steps
5198 | 
5199 | 1. **Review Generated ADRs**: Examine each ADR for completeness and accuracy
5200 | 2. **Save ADR Files**: Create individual .md files for each ADR in ${outputDirectory}
5201 | 3. **Update ADR Index**: Add new ADRs to your project's ADR catalog
5202 | 4. **Stakeholder Review**: Share ADRs with team for feedback and approval
5203 | 5. **Implementation Planning**: Create tasks for implementing the architectural decisions
5204 | 
5205 | ## File Creation Commands
5206 | 
5207 | To save the generated ADRs, create individual files in ${outputDirectory}:
5208 | 
5209 | \`\`\`bash
5210 | # Create ADR directory if it doesn't exist
5211 | mkdir -p ${outputDirectory}
5212 | 
5213 | # Save each ADR as a separate file (example)
5214 | # Replace [NUMBER] and [TITLE] with actual values from generated ADRs
5215 | # cat > "${outputDirectory}/001-example-decision.md" << 'EOF'
5216 | # [ADR content here]
5217 | # EOF
5218 | \`\`\`
5219 | `,
5220 |         });
5221 |       } else {
5222 |         // Fallback to prompt-only mode
5223 |         return {
5224 |           content: [
5225 |             {
5226 |               type: 'text',
5227 |               text: `# Enhanced ADR Generation from PRD: ${prdPath}
5228 | 
5229 | ## Advanced Prompt-Driven ADR Generation Process
5230 | 
5231 | This tool uses a 100% prompt-driven architecture enhanced with advanced prompting techniques:
5232 | 
5233 | ### Enhancement Features
5234 | - **APE Optimization**: ${enhancedMode && promptOptimization ? '✅ Enabled - Prompts optimized for superior quality' : '❌ Disabled'}
5235 | - **Knowledge Generation**: ${enhancedMode && knowledgeEnhancement ? '✅ Enabled - Domain knowledge enhanced analysis' : '❌ Disabled'}
5236 | - **PRD Type Optimization**: ${prdType} - Tailored for specific domain requirements
5237 | - **Enhanced Mode**: ${enhancedMode ? '✅ Enabled - All advanced features active' : '❌ Disabled - Basic mode'}
5238 | 
5239 | ### Enhanced AI Agent Workflow
5240 | 
5241 | 1. **Validate PRD file existence** using secure file system operations
5242 | 2. **Read PRD content** safely with proper security validation
5243 | 3. **Apply domain knowledge** to enhance understanding (if enabled)
5244 | 4. **Generate optimized ADRs** using APE-enhanced prompts (if enabled)
5245 | 5. **Create enhanced ADR files** in the specified output directory: ${outputDirectory}
5246 | 
5247 | ## Execution Instructions
5248 | 
5249 | Please execute the following enhanced comprehensive prompt:
5250 | 
5251 | ${adrPrompt}
5252 | 
5253 | ## Advanced Features
5254 | 
5255 | ${
5256 |   enhancedMode && knowledgeEnhancement
5257 |     ? `
5258 | ### Knowledge Enhancement
5259 | - Domain-specific architectural knowledge has been generated
5260 | - PRD analysis is enhanced with ${prdType} domain expertise
5261 | - ADR decisions leverage domain best practices and patterns
5262 | `
5263 |     : ''
5264 | }
5265 | 
5266 | ${
5267 |   enhancedMode && promptOptimization
5268 |     ? `
5269 | ### APE Optimization
5270 | - Prompts have been automatically optimized for quality
5271 | - Enhanced evaluation criteria ensure superior ADR generation
5272 | - Optimization focused on task completion, clarity, and specificity
5273 | `
5274 |     : ''
5275 | }
5276 | 
5277 | ## Security and Validation
5278 | 
5279 | - All file operations include security validation
5280 | - Path traversal protection is enabled
5281 | - System directory access is prevented
5282 | - User confirmation is required for file creation
5283 | - Content validation ensures safe enhanced ADR generation
5284 | 
5285 | ## Expected Enhanced Workflow
5286 | 
5287 | 1. Execute file existence check for: ${prdPath}
5288 | 2. If file exists, read PRD content securely
5289 | 3. Apply domain knowledge to enhance PRD understanding
5290 | 4. Analyze PRD content using optimized prompts
5291 | 5. Generate domain-enhanced individual ADRs for each decision
5292 | 6. Create file creation prompts for each enhanced ADR
5293 | 7. Confirm with user before writing files to: ${outputDirectory}
5294 | 
5295 | The enhanced process maintains full traceability from PRD requirements to generated ADRs while providing superior quality through advanced prompting techniques and ensuring security and user control over file operations.`,
5296 |             },
5297 |           ],
5298 |         };
5299 |       }
5300 |     } catch (error) {
5301 |       throw new McpAdrError(
5302 |         `Failed to generate ADR prompts from PRD: ${error instanceof Error ? error.message : String(error)}`,
5303 |         'PROMPT_GENERATION_ERROR'
5304 |       );
5305 |     }
5306 |   }
5307 | 
5308 |   private async compareAdrProgress(args: Record<string, unknown>): Promise<CallToolResult> {
5309 |     const {
5310 |       todoPath = 'TODO.md',
5311 |       adrDirectory = this.config.adrDirectory,
5312 |       projectPath = this.config.projectPath,
5313 |       environment = 'auto-detect',
5314 |       environmentConfig = {},
5315 |       validationType = 'full',
5316 |       includeFileChecks = true,
5317 |       includeRuleValidation = true,
5318 |       deepCodeAnalysis = true,
5319 |       functionalValidation = true,
5320 |       strictMode = true,
5321 |       environmentValidation = true,
5322 |     } = args;
5323 | 
5324 |     const { getAdrDirectoryPath } = await import('./utils/config.js');
5325 |     const path = await import('path');
5326 | 
5327 |     // Resolve paths
5328 |     const absoluteTodoPath = path.resolve(projectPath as string, todoPath as string);
5329 |     const absoluteAdrPath = adrDirectory
5330 |       ? path.resolve(projectPath as string, adrDirectory as string)
5331 |       : getAdrDirectoryPath(this.config);
5332 | 
5333 |     this.logger.info(
5334 |       `Comparing ADR progress: TODO(${absoluteTodoPath}) vs ADRs(${absoluteAdrPath}) vs Environment(${projectPath}) [env: ${environment}]`
5335 |     );
5336 | 
5337 |     // Environment validation and auto-detection
5338 |     let detectedEnvironment = environment;
5339 |     let finalEnvironmentConfig = { ...(environmentConfig as Record<string, unknown>) };
5340 | 
5341 |     if (
5342 |       environmentValidation &&
5343 |       (validationType === 'full' || validationType === 'environment-only')
5344 |     ) {
5345 |       try {
5346 |         const envResult = await this.detectAndValidateEnvironment(
5347 |           projectPath as string,
5348 |           environment as string,
5349 |           environmentConfig as Record<string, unknown>
5350 |         );
5351 |         detectedEnvironment = envResult.detectedEnvironment;
5352 |         finalEnvironmentConfig = { ...finalEnvironmentConfig, ...envResult.environmentConfig };
5353 |         this.logger.info(`Environment detection result: ${detectedEnvironment}`);
5354 |       } catch (error) {
5355 |         this.logger.warn(
5356 |           `Environment detection failed: ${error instanceof Error ? error.message : String(error)}`
5357 |         );
5358 |       }
5359 |     }
5360 | 
5361 |     try {
5362 |       // Step 1: Read TODO.md file directly
5363 |       let todoContent = '';
5364 |       if (validationType === 'full' || validationType === 'todo-only') {
5365 |         try {
5366 |           const fs = await import('fs/promises');
5367 |           todoContent = await fs.readFile(absoluteTodoPath, 'utf-8');
5368 |         } catch (error) {
5369 |           this.logger.warn(
5370 |             `Could not read TODO.md file: ${error instanceof Error ? error.message : String(error)}`
5371 |           );
5372 |         }
5373 |       }
5374 | 
5375 |       // Step 2: Use actual project structure scanning
5376 |       let projectStructure = null;
5377 |       if (validationType === 'full' || validationType === 'environment-only') {
5378 |         try {
5379 |           const { scanProjectStructure } = await import('./utils/actual-file-operations.js');
5380 |           const includeContent = (deepCodeAnalysis as boolean) || (functionalValidation as boolean);
5381 |           projectStructure = await scanProjectStructure(projectPath as string, {
5382 |             readContent: includeContent,
5383 |             maxFileSize: includeContent ? 10000 : 0,
5384 |           });
5385 |         } catch (error) {
5386 |           this.logger.warn(
5387 |             `Could not scan project structure: ${error instanceof Error ? error.message : String(error)}`
5388 |           );
5389 |         }
5390 |       }
5391 | 
5392 |       // Perform actual analysis locally instead of relying on AI execution
5393 |       let discoveryResult: unknown = null;
5394 |       if (validationType === 'full' || validationType === 'adr-only') {
5395 |         const { discoverAdrsInDirectory } = await import('./utils/adr-discovery.js');
5396 |         discoveryResult = await discoverAdrsInDirectory(
5397 |           absoluteAdrPath as string,
5398 |           true,
5399 |           projectPath as string
5400 |         );
5401 |       }
5402 |       const analysis = await this.performLocalAdrProgressAnalysis({
5403 |         todoContent,
5404 |         todoPath: absoluteTodoPath,
5405 |         discoveredAdrs: (discoveryResult as { adrs?: unknown[] })?.adrs || [],
5406 |         adrDirectory: absoluteAdrPath,
5407 |         projectStructure: projectStructure || null,
5408 |         projectPath: projectPath as string,
5409 |         validationType: validationType as string,
5410 |         includeFileChecks: includeFileChecks as boolean,
5411 |         includeRuleValidation: includeRuleValidation as boolean,
5412 |         deepCodeAnalysis: deepCodeAnalysis as boolean,
5413 |         functionalValidation: functionalValidation as boolean,
5414 |         strictMode: strictMode as boolean,
5415 |         environment: detectedEnvironment as string,
5416 |         environmentConfig: finalEnvironmentConfig,
5417 |         environmentValidation: environmentValidation as boolean,
5418 |       });
5419 | 
5420 |       return {
5421 |         content: [
5422 |           {
5423 |             type: 'text',
5424 |             text: analysis,
5425 |           },
5426 |         ],
5427 |       };
5428 |     } catch (error) {
5429 |       throw new McpAdrError(
5430 |         `Failed to compare ADR progress: ${error instanceof Error ? error.message : String(error)}`,
5431 |         'VALIDATION_ERROR'
5432 |       );
5433 |     }
5434 |   }
5435 | 
5436 |   /**
5437 |    * Detect and validate environment context
5438 |    */
5439 |   private async detectAndValidateEnvironment(
5440 |     projectPath: string,
5441 |     environment: string,
5442 |     environmentConfig: Record<string, unknown>
5443 |   ): Promise<{ detectedEnvironment: string; environmentConfig: Record<string, unknown> }> {
5444 |     const path = await import('path');
5445 |     const fs = await import('fs/promises');
5446 | 
5447 |     let detectedEnvironment = environment;
5448 |     let finalConfig = { ...environmentConfig };
5449 | 
5450 |     if (environment === 'auto-detect') {
5451 |       // Auto-detect environment based on project structure
5452 |       try {
5453 |         // Check for environment indicator files
5454 |         const envFiles = [
5455 |           '.env.development',
5456 |           '.env.staging',
5457 |           '.env.production',
5458 |           '.env.test',
5459 |           'package.json',
5460 |           'docker-compose.yml',
5461 |           'Dockerfile',
5462 |         ];
5463 | 
5464 |         const existingFiles: string[] = [];
5465 |         for (const file of envFiles) {
5466 |           try {
5467 |             await fs.access(path.join(projectPath, file));
5468 |             existingFiles.push(file);
5469 |           } catch {
5470 |             // File doesn't exist, continue
5471 |           }
5472 |         }
5473 | 
5474 |         // Environment detection logic
5475 |         if (existingFiles.includes('.env.production') || existingFiles.includes('Dockerfile')) {
5476 |           detectedEnvironment = 'production';
5477 |         } else if (existingFiles.includes('.env.staging')) {
5478 |           detectedEnvironment = 'staging';
5479 |         } else if (existingFiles.includes('.env.test')) {
5480 |           detectedEnvironment = 'testing';
5481 |         } else {
5482 |           detectedEnvironment = 'development';
5483 |         }
5484 | 
5485 |         // Set environment-specific default configurations
5486 |         switch (detectedEnvironment) {
5487 |           case 'production':
5488 |             finalConfig = {
5489 |               securityLevel: 'critical',
5490 |               requiredFiles: ['package.json', 'README.md'],
5491 |               requiredServices: ['monitoring', 'logging'],
5492 |               performanceRequirements: { minUptime: 99.9 },
5493 |               ...finalConfig,
5494 |             };
5495 |             break;
5496 |           case 'staging':
5497 |             finalConfig = {
5498 |               securityLevel: 'high',
5499 |               requiredFiles: ['package.json'],
5500 |               requiredServices: ['testing', 'monitoring'],
5501 |               performanceRequirements: { minUptime: 95 },
5502 |               ...finalConfig,
5503 |             };
5504 |             break;
5505 |           case 'testing':
5506 |             finalConfig = {
5507 |               securityLevel: 'medium',
5508 |               requiredFiles: ['package.json'],
5509 |               requiredServices: ['testing'],
5510 |               performanceRequirements: {},
5511 |               ...finalConfig,
5512 |             };
5513 |             break;
5514 |           default: // development
5515 |             finalConfig = {
5516 |               securityLevel: 'medium',
5517 |               requiredFiles: ['package.json'],
5518 |               requiredServices: [],
5519 |               performanceRequirements: {},
5520 |               ...finalConfig,
5521 |             };
5522 |         }
5523 |       } catch (error) {
5524 |         this.logger.warn(
5525 |           `Environment auto-detection failed: ${error instanceof Error ? error.message : String(error)}`
5526 |         );
5527 |         detectedEnvironment = 'development'; // fallback
5528 |       }
5529 |     }
5530 | 
5531 |     return { detectedEnvironment, environmentConfig: finalConfig };
5532 |   }
5533 | 
5534 |   /**
5535 |    * Perform local ADR progress analysis without relying on AI execution
5536 |    */
5537 |   private async performLocalAdrProgressAnalysis(params: {
5538 |     todoContent: string;
5539 |     todoPath: string;
5540 |     discoveredAdrs: unknown[];
5541 |     adrDirectory: string;
5542 |     projectStructure: unknown;
5543 |     projectPath: string;
5544 |     validationType: string;
5545 |     includeFileChecks: boolean;
5546 |     includeRuleValidation: boolean;
5547 |     deepCodeAnalysis: boolean;
5548 |     functionalValidation: boolean;
5549 |     strictMode: boolean;
5550 |     environment: string;
5551 |     environmentConfig: unknown;
5552 |     environmentValidation: boolean;
5553 |   }): Promise<string> {
5554 |     const {
5555 |       todoContent,
5556 |       todoPath,
5557 |       discoveredAdrs,
5558 |       adrDirectory,
5559 |       projectStructure,
5560 |       projectPath,
5561 |       validationType,
5562 |       includeFileChecks,
5563 |       includeRuleValidation,
5564 |       deepCodeAnalysis,
5565 |       functionalValidation,
5566 |       strictMode,
5567 |       environment,
5568 |       environmentConfig,
5569 |       environmentValidation,
5570 |     } = params;
5571 | 
5572 |     const currentDate = new Date().toISOString().split('T')[0];
5573 | 
5574 |     // Parse TODO content to extract tasks
5575 |     const todoTasks = this.parseTodoTasks(todoContent);
5576 | 
5577 |     // Basic analysis
5578 |     const totalAdrs = discoveredAdrs.length;
5579 |     const totalTasks = todoTasks.length;
5580 |     const completedTasks = todoTasks.filter(task => task.completed).length;
5581 | 
5582 |     // Calculate alignment score (simplified, now environment-aware)
5583 |     const adrTaskMapping = this.mapTasksToAdrs(
5584 |       todoTasks,
5585 |       discoveredAdrs,
5586 |       environment,
5587 |       environmentConfig
5588 |     );
5589 |     const alignedTasks = adrTaskMapping.aligned.length;
5590 |     let alignmentScore = totalTasks > 0 ? Math.round((alignedTasks / totalTasks) * 100) : 0;
5591 | 
5592 |     // Environment-aware scoring adjustments
5593 |     if (environmentValidation && environmentConfig) {
5594 |       const envScore = this.calculateEnvironmentScore(
5595 |         projectStructure,
5596 |         environment,
5597 |         environmentConfig
5598 |       );
5599 |       alignmentScore = Math.round((alignmentScore + envScore) / 2); // Blend scores
5600 |     }
5601 | 
5602 |     // File existence checks
5603 |     let fileCheckResults = '';
5604 |     if (includeFileChecks && projectStructure) {
5605 |       fileCheckResults = this.performFileExistenceChecks(todoTasks, projectStructure);
5606 |     }
5607 | 
5608 |     // Environment compliance checks
5609 |     let environmentAnalysisResults = '';
5610 |     if (environmentValidation && environmentConfig) {
5611 |       environmentAnalysisResults = this.performEnvironmentComplianceAnalysis(
5612 |         projectStructure,
5613 |         environment,
5614 |         environmentConfig,
5615 |         strictMode
5616 |       );
5617 |     }
5618 | 
5619 |     // Mock vs Production analysis
5620 |     let mockAnalysisResults = '';
5621 |     if (deepCodeAnalysis && projectStructure) {
5622 |       mockAnalysisResults = this.performMockVsProductionAnalysis(projectStructure, strictMode);
5623 |     }
5624 | 
5625 |     return `# ADR Progress Validation Report
5626 | 
5627 | **Validation Date**: ${currentDate}
5628 | **Validation Type**: ${validationType}
5629 | **Project Path**: ${projectPath}
5630 | **TODO Path**: ${todoPath}
5631 | **ADR Directory**: ${adrDirectory}
5632 | **Environment**: ${environment}${environmentValidation ? ` (validation enabled)` : ''}
5633 | 
5634 | ## Summary
5635 | - **Total ADRs**: ${totalAdrs}
5636 | - **Total TODO Tasks**: ${totalTasks}
5637 | - **Completed Tasks**: ${completedTasks}
5638 | - **Alignment Score**: ${alignmentScore}%
5639 | - **Compliance Score**: ${Math.max(alignmentScore - 10, 0)}%
5640 | - **Environment**: ${environment}
5641 | 
5642 | ## Configuration
5643 | - **File Checks**: ${includeFileChecks ? 'Enabled' : 'Disabled'}
5644 | - **Rule Validation**: ${includeRuleValidation ? 'Enabled' : 'Disabled'}
5645 | - **Deep Code Analysis**: ${deepCodeAnalysis ? 'Enabled' : 'Disabled'}
5646 | - **Functional Validation**: ${functionalValidation ? 'Enabled' : 'Disabled'}
5647 | - **Strict Mode**: ${strictMode ? 'Enabled - High scrutiny for mock vs production' : 'Disabled'}
5648 | - **Environment Validation**: ${environmentValidation ? 'Enabled' : 'Disabled'}
5649 | 
5650 | ## Environment Context
5651 | - **Target Environment**: ${environment}
5652 | - **Security Level**: ${(environmentConfig as Record<string, unknown>)?.['securityLevel'] || 'Not specified'}
5653 | - **Required Files**: ${((environmentConfig as Record<string, unknown>)?.['requiredFiles'] as unknown[] | undefined)?.length || 0} files
5654 | - **Required Services**: ${((environmentConfig as Record<string, unknown>)?.['requiredServices'] as unknown[] | undefined)?.length || 0} services
5655 | 
5656 | ## ADR Discovery Results
5657 | ${
5658 |   totalAdrs > 0
5659 |     ? `Found ${totalAdrs} ADRs:\n${discoveredAdrs
5660 |         .map((adr, i) => {
5661 |           const adrRecord = adr as Record<string, unknown>;
5662 |           return `${i + 1}. **${adrRecord['title']}** (${adrRecord['status']}) - ${adrRecord['filename']}`;
5663 |         })
5664 |         .join('\n')}`
5665 |     : 'No ADRs found in the specified directory.'
5666 | }
5667 | 
5668 | ## TODO Task Analysis
5669 | ${
5670 |   totalTasks > 0
5671 |     ? `Found ${totalTasks} tasks:\n${todoTasks
5672 |         .map((task, i) => `${i + 1}. ${task.completed ? '✅' : '⏳'} ${task.title}`)
5673 |         .join('\n')}`
5674 |     : 'No tasks found in TODO.md file.'
5675 | }
5676 | 
5677 | ## Alignment Analysis
5678 | 
5679 | ### ✅ Properly Aligned Tasks
5680 | ${
5681 |   adrTaskMapping.aligned.length > 0
5682 |     ? adrTaskMapping.aligned
5683 |         .map(task => `- ${task.title}: Corresponds to ADR requirements`)
5684 |         .join('\n')
5685 |     : '- No aligned tasks identified'
5686 | }
5687 | 
5688 | ### ⚠️ Misaligned Tasks
5689 | ${
5690 |   adrTaskMapping.misaligned.length > 0
5691 |     ? adrTaskMapping.misaligned
5692 |         .map(task => `- ${task.title}: May not fully align with ADR specifications`)
5693 |         .join('\n')
5694 |     : '- No misaligned tasks identified'
5695 | }
5696 | 
5697 | ### ❌ Missing Tasks
5698 | ${
5699 |   adrTaskMapping.missing.length > 0
5700 |     ? adrTaskMapping.missing.map(gap => `- ${gap}: Required by ADRs but not in TODO`).join('\n')
5701 |     : '- No obvious missing tasks identified'
5702 | }
5703 | 
5704 | ## Implementation Status
5705 | 
5706 | ${fileCheckResults || '### File Existence Validation\n- File checks disabled or no project structure available'}
5707 | 
5708 | ${environmentAnalysisResults || ''}
5709 | 
5710 | ${mockAnalysisResults || ''}
5711 | 
5712 | ## Recommendations
5713 | 
5714 | ### High Priority Actions
5715 | ${
5716 |   alignmentScore < 70
5717 |     ? '1. **Improve ADR-TODO Alignment**: Review TODO tasks against ADR requirements\n2. **Add Missing Tasks**: Identify and add tasks required by ADRs'
5718 |     : '1. **Maintain Current Alignment**: Continue following ADR specifications'
5719 | }
5720 | ${
5721 |   completedTasks < totalTasks * 0.5
5722 |     ? '\n3. **Accelerate Implementation**: Focus on completing pending tasks'
5723 |     : ''
5724 | }
5725 | ${
5726 |   environmentValidation && environment === 'production' && alignmentScore < 90
5727 |     ? '\n4. **⚠️ Production Environment Warning**: Current alignment may not meet production requirements'
5728 |     : ''
5729 | }
5730 | 
5731 | ### Medium Priority Actions
5732 | 1. **Review Implementation Quality**: ${strictMode ? 'Strict mode analysis above shows' : 'Consider enabling strict mode for'} detailed quality assessment
5733 | 2. **Update Documentation**: Ensure TODO.md reflects current project state
5734 | ${
5735 |   environmentValidation
5736 |     ? `3. **Environment Compliance**: Ensure ${environment} environment requirements are met`
5737 |     : ''
5738 | }
5739 | 
5740 | ### Low Priority Actions
5741 | 1. **Optimize Workflow**: Consider tools for automated ADR-TODO synchronization
5742 | 2. **Regular Validation**: Schedule periodic ADR progress reviews
5743 | 
5744 | ## Next Steps
5745 | 1. Address high-priority alignment issues identified above
5746 | 2. ${totalTasks === 0 ? 'Create initial TODO.md from ADR requirements' : 'Update TODO.md with missing tasks'}
5747 | 3. ${includeFileChecks ? 'Verify implementation of completed tasks' : 'Enable file checks for detailed implementation verification'}
5748 | 4. ${includeRuleValidation ? 'Resolve architectural rule compliance violations' : 'Enable rule validation for compliance checking'}
5749 | \`\`\`
5750 | 
5751 | To re-run this validation with strict mode:
5752 | \`\`\`json
5753 | {
5754 |   "tool": "compare_adr_progress",
5755 |   "args": {
5756 |     "todoPath": "${todoPath}",
5757 |     "adrDirectory": "${adrDirectory}",
5758 |     "validationType": "full",
5759 |     "deepCodeAnalysis": true,
5760 |     "functionalValidation": true,
5761 |     "strictMode": true
5762 |   }
5763 | }
5764 | \`\`\`
5765 | `;
5766 |   }
5767 | 
5768 |   /**
5769 |    * Parse TODO.md content to extract tasks
5770 |    */
5771 |   private parseTodoTasks(
5772 |     todoContent: string
5773 |   ): Array<{ title: string; completed: boolean; description?: string }> {
5774 |     if (!todoContent) return [];
5775 | 
5776 |     const lines = todoContent.split('\n');
5777 |     const tasks: Array<{ title: string; completed: boolean; description?: string }> = [];
5778 | 
5779 |     for (const line of lines) {
5780 |       // Look for markdown checkbox patterns
5781 |       const taskMatch = line.match(/^\s*[-*]\s*\[([x\s])\]\s*(.+)$/i);
5782 |       if (taskMatch && taskMatch[1] && taskMatch[2]) {
5783 |         const checkbox = taskMatch[1];
5784 |         const title = taskMatch[2];
5785 |         tasks.push({
5786 |           title: title.trim(),
5787 |           completed: checkbox.toLowerCase() === 'x',
5788 |         });
5789 |       }
5790 |       // Also look for simple list items that might be tasks
5791 |       else if (line.match(/^\s*[-*]\s+\w+/)) {
5792 |         const title = line.replace(/^\s*[-*]\s+/, '').trim();
5793 |         if (title.length > 3) {
5794 |           // Avoid very short items
5795 |           tasks.push({
5796 |             title,
5797 |             completed: false,
5798 |           });
5799 |         }
5800 |       }
5801 |     }
5802 | 
5803 |     return tasks;
5804 |   }
5805 | 
5806 |   /**
5807 |    * Map TODO tasks to ADRs to identify alignment (now environment-aware)
5808 |    */
5809 |   private mapTasksToAdrs(
5810 |     tasks: Array<{ title: string; completed: boolean }>,
5811 |     adrs: unknown[],
5812 |     environment?: string,
5813 |     environmentConfig?: unknown
5814 |   ): {
5815 |     aligned: typeof tasks;
5816 |     misaligned: typeof tasks;
5817 |     missing: string[];
5818 |   } {
5819 |     const aligned: typeof tasks = [];
5820 |     const misaligned: typeof tasks = [];
5821 |     const missing: string[] = [];
5822 | 
5823 |     // Simple keyword matching for alignment detection
5824 |     const adrKeywords = adrs.flatMap(adr => {
5825 |       const adrRecord = adr as Record<string, unknown>;
5826 |       return [
5827 |         String(adrRecord['title'] || '').toLowerCase(),
5828 |         ...String(adrRecord['decision'] || '')
5829 |           .toLowerCase()
5830 |           .split(/\s+/)
5831 |           .filter((w: string) => w.length > 4),
5832 |         ...String(adrRecord['context'] || '')
5833 |           .toLowerCase()
5834 |           .split(/\s+/)
5835 |           .filter((w: string) => w.length > 4),
5836 |       ];
5837 |     });
5838 | 
5839 |     // Environment-specific keywords that should be prioritized
5840 |     const envKeywords: string[] = [];
5841 |     if (environment && environmentConfig) {
5842 |       if (environment === 'production') {
5843 |         envKeywords.push('deploy', 'production', 'monitoring', 'security', 'performance');
5844 |       } else if (environment === 'staging') {
5845 |         envKeywords.push('test', 'staging', 'integration', 'validation');
5846 |       } else if (environment === 'development') {
5847 |         envKeywords.push('setup', 'development', 'local', 'debug');
5848 |       }
5849 |     }
5850 | 
5851 |     for (const task of tasks) {
5852 |       const taskLower = task.title.toLowerCase();
5853 |       const firstWord = taskLower.split(' ')[0] || '';
5854 |       const hasKeywordMatch = adrKeywords.some(
5855 |         keyword => taskLower.includes(keyword) || keyword.includes(firstWord)
5856 |       );
5857 | 
5858 |       // Environment-aware alignment scoring
5859 |       const hasEnvKeywordMatch = envKeywords.some(keyword => taskLower.includes(keyword));
5860 | 
5861 |       if (hasKeywordMatch || hasEnvKeywordMatch) {
5862 |         aligned.push(task);
5863 |       } else {
5864 |         misaligned.push(task);
5865 |       }
5866 |     }
5867 | 
5868 |     // Identify potential missing tasks based on ADR content
5869 |     for (const adr of adrs) {
5870 |       const adrRecord = adr as Record<string, unknown>;
5871 |       if (adrRecord['status'] === 'accepted' && adrRecord['decision']) {
5872 |         const decisionWords = String(adrRecord['decision']).toLowerCase().split(/\s+/);
5873 |         const implementationWords = [
5874 |           'implement',
5875 |           'create',
5876 |           'build',
5877 |           'develop',
5878 |           'add',
5879 |           'setup',
5880 |           'configure',
5881 |         ];
5882 | 
5883 |         if (implementationWords.some(word => decisionWords.includes(word))) {
5884 |           const adrTitle = String(adrRecord['title'] || '');
5885 |           const adrFirstWord = adrTitle.toLowerCase().split(' ')[0] || '';
5886 |           const hasCorrespondingTask = tasks.some(task =>
5887 |             task.title.toLowerCase().includes(adrFirstWord)
5888 |           );
5889 | 
5890 |           if (!hasCorrespondingTask) {
5891 |             missing.push(`Implement ${adrTitle}`);
5892 |           }
5893 |         }
5894 |       }
5895 |     }
5896 | 
5897 |     // Environment-specific missing tasks
5898 |     if (environment && environmentConfig) {
5899 |       const envConfig = environmentConfig as Record<string, unknown>;
5900 |       if (envConfig['requiredFiles']) {
5901 |         for (const file of envConfig['requiredFiles'] as string[]) {
5902 |           const hasFileTask = tasks.some(task =>
5903 |             task.title.toLowerCase().includes(file.toLowerCase())
5904 |           );
5905 |           if (!hasFileTask) {
5906 |             missing.push(`Create ${file} for ${environment} environment`);
5907 |           }
5908 |         }
5909 |       }
5910 | 
5911 |       if (envConfig['requiredServices']) {
5912 |         for (const service of envConfig['requiredServices'] as string[]) {
5913 |           const hasServiceTask = tasks.some(task =>
5914 |             task.title.toLowerCase().includes(service.toLowerCase())
5915 |           );
5916 |           if (!hasServiceTask) {
5917 |             missing.push(`Setup ${service} service for ${environment}`);
5918 |           }
5919 |         }
5920 |       }
5921 |     }
5922 | 
5923 |     return { aligned, misaligned, missing };
5924 |   }
5925 | 
5926 |   /**
5927 |    * Check file existence for completed tasks
5928 |    */
5929 |   private performFileExistenceChecks(
5930 |     tasks: Array<{ title: string; completed: boolean }>,
5931 |     projectStructure: any
5932 |   ): string {
5933 |     if (!projectStructure) return '- Project structure not available';
5934 | 
5935 |     const allFiles = [
5936 |       ...(projectStructure.packageFiles || []),
5937 |       ...(projectStructure.configFiles || []),
5938 |       ...(projectStructure.buildFiles || []),
5939 |       ...(projectStructure.dockerFiles || []),
5940 |       ...(projectStructure.ciFiles || []),
5941 |       ...(projectStructure.scriptFiles || []),
5942 |     ];
5943 | 
5944 |     let results = '### File Existence Validation\n';
5945 |     let checkCount = 0;
5946 | 
5947 |     for (const task of tasks) {
5948 |       if (task.completed) {
5949 |         // Simple heuristic: look for files mentioned in task title
5950 |         const taskLower = task.title.toLowerCase();
5951 |         const mentionedFiles = allFiles.filter(
5952 |           file =>
5953 |             taskLower.includes(file.filename.toLowerCase()) ||
5954 |             taskLower.includes(file.filename.replace(/\.[^.]+$/, '').toLowerCase())
5955 |         );
5956 | 
5957 |         if (mentionedFiles.length > 0) {
5958 |           results += `- ✅ **${task.title}**: Found related files (${mentionedFiles.map(f => f.filename).join(', ')})\n`;
5959 |           checkCount++;
5960 |         } else if (
5961 |           taskLower.includes('file') ||
5962 |           taskLower.includes('create') ||
5963 |           taskLower.includes('implement')
5964 |         ) {
5965 |           results += `- ⚠️ **${task.title}**: No clearly related files found\n`;
5966 |           checkCount++;
5967 |         }
5968 |       }
5969 |     }
5970 | 
5971 |     if (checkCount === 0) {
5972 |       results += '- No file-related completed tasks to validate\n';
5973 |     }
5974 | 
5975 |     return results;
5976 |   }
5977 | 
5978 |   /**
5979 |    * Analyze code for mock vs production implementation
5980 |    */
5981 |   private performMockVsProductionAnalysis(projectStructure: any, strictMode: boolean): string {
5982 |     if (!projectStructure) return '';
5983 | 
5984 |     const codeFiles = [
5985 |       ...(projectStructure.buildFiles || []),
5986 |       ...(projectStructure.configFiles || []),
5987 |     ].filter(file => file.content && file.content !== '[Binary or unreadable file]');
5988 | 
5989 |     if (codeFiles.length === 0) return '';
5990 | 
5991 |     let results = '\n### Mock vs Production Code Analysis\n';
5992 |     let mockIndicators = 0;
5993 |     let productionIndicators = 0;
5994 | 
5995 |     const mockPatterns = [
5996 |       /TODO:/gi,
5997 |       /FIXME:/gi,
5998 |       /NotImplementedException/gi,
5999 |       /throw.*not.*implement/gi,
6000 |       /return.*mock/gi,
6001 |       /placeholder/gi,
6002 |       /stub/gi,
6003 |       /return\s+null;/gi,
6004 |       /return\s+""/gi,
6005 |       /return\s+\[\]/gi,
6006 |       /return\s+{}/gi,
6007 |     ];
6008 | 
6009 |     const productionPatterns = [
6010 |       /error\s+handling/gi,
6011 |       /try\s*{/gi,
6012 |       /catch\s*\(/gi,
6013 |       /validate/gi,
6014 |       /authentication/gi,
6015 |       /authorization/gi,
6016 |       /database/gi,
6017 |       /api/gi,
6018 |       /config/gi,
6019 |     ];
6020 | 
6021 |     for (const file of codeFiles.slice(0, 10)) {
6022 |       // Limit analysis to prevent overwhelming output
6023 |       const content = file.content;
6024 |       const fileMockCount = mockPatterns.reduce(
6025 |         (count, pattern) => count + (content.match(pattern) || []).length,
6026 |         0
6027 |       );
6028 |       const fileProdCount = productionPatterns.reduce(
6029 |         (count, pattern) => count + (content.match(pattern) || []).length,
6030 |         0
6031 |       );
6032 | 
6033 |       mockIndicators += fileMockCount;
6034 |       productionIndicators += fileProdCount;
6035 | 
6036 |       if (fileMockCount > 0 || fileProdCount > 2) {
6037 |         const status =
6038 |           fileMockCount > fileProdCount
6039 |             ? '❌ **Mock/Stub**'
6040 |             : fileProdCount > fileMockCount * 2
6041 |               ? '✅ **Production Ready**'
6042 |               : '⚠️ **Partial Implementation**';
6043 | 
6044 |         results += `- ${status}: ${file.filename} `;
6045 |         if (fileMockCount > 0) {
6046 |           results += `(${fileMockCount} mock indicators) `;
6047 |         }
6048 |         if (fileProdCount > 0) {
6049 |           results += `(${fileProdCount} production indicators)`;
6050 |         }
6051 |         results += '\n';
6052 |       }
6053 |     }
6054 | 
6055 |     results += `\n#### Overall Code Quality Assessment\n`;
6056 |     results += `- **Mock Indicators Found**: ${mockIndicators} instances\n`;
6057 |     results += `- **Production Indicators Found**: ${productionIndicators} instances\n`;
6058 | 
6059 |     if (strictMode) {
6060 |       const qualityScore =
6061 |         productionIndicators > mockIndicators * 2
6062 |           ? 'Good'
6063 |           : productionIndicators > mockIndicators
6064 |             ? 'Fair'
6065 |             : 'Needs Improvement';
6066 |       results += `- **Quality Assessment**: ${qualityScore}\n`;
6067 | 
6068 |       if (mockIndicators > 0) {
6069 |         results += `- **⚠️ Strict Mode Warning**: Found ${mockIndicators} potential mock/stub indicators\n`;
6070 |       }
6071 |     }
6072 | 
6073 |     return results;
6074 |   }
6075 | 
6076 |   /**
6077 |    * Calculate environment-specific compliance score
6078 |    */
6079 |   private calculateEnvironmentScore(
6080 |     projectStructure: any,
6081 |     environment: string,
6082 |     environmentConfig: any
6083 |   ): number {
6084 |     if (!projectStructure || !environmentConfig) return 0;
6085 | 
6086 |     let score = 100; // Start with perfect score
6087 | 
6088 |     // Check required files
6089 |     if (environmentConfig.requiredFiles) {
6090 |       const allFiles = [
6091 |         ...(projectStructure.packageFiles || []),
6092 |         ...(projectStructure.configFiles || []),
6093 |         ...(projectStructure.buildFiles || []),
6094 |         ...(projectStructure.dockerFiles || []),
6095 |         ...(projectStructure.ciFiles || []),
6096 |         ...(projectStructure.scriptFiles || []),
6097 |       ];
6098 | 
6099 |       const existingFiles = allFiles.map(f => f.filename);
6100 |       const missingFiles = environmentConfig.requiredFiles.filter(
6101 |         (file: string) => !existingFiles.includes(file)
6102 |       );
6103 | 
6104 |       // Deduct 10 points per missing required file
6105 |       score -= missingFiles.length * 10;
6106 |     }
6107 | 
6108 |     // Environment-specific penalties
6109 |     if (environment === 'production') {
6110 |       // Production requires higher standards
6111 |       if (!projectStructure.dockerFiles?.length) score -= 15;
6112 |       if (!projectStructure.ciFiles?.length) score -= 10;
6113 |     }
6114 | 
6115 |     return Math.max(score, 0);
6116 |   }
6117 | 
6118 |   /**
6119 |    * Perform environment compliance analysis
6120 |    */
6121 |   private performEnvironmentComplianceAnalysis(
6122 |     projectStructure: any,
6123 |     environment: string,
6124 |     environmentConfig: any,
6125 |     strictMode: boolean
6126 |   ): string {
6127 |     if (!projectStructure || !environmentConfig) {
6128 |       return '\n### Environment Compliance Analysis\n- Environment analysis disabled or no project structure available\n';
6129 |     }
6130 | 
6131 |     let results = '\n### Environment Compliance Analysis\n';
6132 | 
6133 |     // Required files analysis
6134 |     if (environmentConfig.requiredFiles) {
6135 |       results += `#### Required Files for ${environment} Environment\n`;
6136 |       const allFiles = [
6137 |         ...(projectStructure.packageFiles || []),
6138 |         ...(projectStructure.configFiles || []),
6139 |         ...(projectStructure.buildFiles || []),
6140 |         ...(projectStructure.dockerFiles || []),
6141 |         ...(projectStructure.ciFiles || []),
6142 |         ...(projectStructure.scriptFiles || []),
6143 |       ];
6144 | 
6145 |       const existingFiles = allFiles.map(f => f.filename);
6146 | 
6147 |       for (const requiredFile of environmentConfig.requiredFiles) {
6148 |         const exists = existingFiles.includes(requiredFile);
6149 |         results += `- ${exists ? '✅' : '❌'} **${requiredFile}**: ${exists ? 'Found' : 'Missing'}\n`;
6150 |       }
6151 |     }
6152 | 
6153 |     // Security level compliance
6154 |     if (environmentConfig.securityLevel) {
6155 |       results += `\n#### Security Level: ${environmentConfig.securityLevel}\n`;
6156 | 
6157 |       const securityIndicators = this.analyzeSecurityCompliance(
6158 |         projectStructure,
6159 |         environmentConfig.securityLevel
6160 |       );
6161 |       results += securityIndicators;
6162 |     }
6163 | 
6164 |     // Environment-specific recommendations
6165 |     results += `\n#### ${environment} Environment Recommendations\n`;
6166 |     switch (environment) {
6167 |       case 'production':
6168 |         results +=
6169 |           '- ⚠️ **Production Critical**: Ensure monitoring, logging, and backup strategies are implemented\n';
6170 |         results += '- 🔒 **Security**: Implement comprehensive security measures\n';
6171 |         results += '- 📊 **Performance**: Monitor and optimize for production workloads\n';
6172 |         if (strictMode) {
6173 |           results +=
6174 |             '- 🔍 **Strict Mode**: Enhanced validation enabled for production environment\n';
6175 |         }
6176 |         break;
6177 |       case 'staging':
6178 |         results += '- 🧪 **Testing**: Ensure comprehensive test coverage and validation\n';
6179 |         results += '- 📋 **Validation**: Implement environment parity checks\n';
6180 |         break;
6181 |       case 'development':
6182 |         results += '- 🛠️ **Development**: Focus on developer experience and debugging tools\n';
6183 |         results += '- 🔄 **Iteration**: Ensure fast feedback loops\n';
6184 |         break;
6185 |     }
6186 | 
6187 |     return results;
6188 |   }
6189 | 
6190 |   /**
6191 |    * Analyze security compliance based on security level
6192 |    */
6193 |   private analyzeSecurityCompliance(projectStructure: any, securityLevel: string): string {
6194 |     let results = '';
6195 | 
6196 |     const securityFiles = [
6197 |       ...(projectStructure.configFiles || []),
6198 |       ...(projectStructure.dockerFiles || []),
6199 |     ].filter(
6200 |       file =>
6201 |         file.filename.includes('security') ||
6202 |         file.filename.includes('auth') ||
6203 |         file.filename.includes('.env') ||
6204 |         file.filename === 'Dockerfile'
6205 |     );
6206 | 
6207 |     const hasSecurityConfig = securityFiles.length > 0;
6208 | 
6209 |     switch (securityLevel) {
6210 |       case 'critical':
6211 |         results += `- ${hasSecurityConfig ? '✅' : '❌'} **Critical Security**: ${hasSecurityConfig ? 'Security configuration found' : 'No security configuration detected'}\n`;
6212 |         if (!hasSecurityConfig) {
6213 |           results += '  - **Action Required**: Implement comprehensive security measures\n';
6214 |         }
6215 |         break;
6216 |       case 'high':
6217 |         results += `- ${hasSecurityConfig ? '✅' : '⚠️'} **High Security**: ${hasSecurityConfig ? 'Some security configuration found' : 'Limited security configuration'}\n`;
6218 |         break;
6219 |       case 'medium':
6220 |         results += `- ℹ️ **Medium Security**: Basic security measures recommended\n`;
6221 |         break;
6222 |       default:
6223 |         results += `- ℹ️ **Security Level**: ${securityLevel} (consider increasing for production)\n`;
6224 |     }
6225 | 
6226 |     return results;
6227 |   }
6228 | 
6229 |   /**
6230 |    * Content masking tool implementations
6231 |    */
6232 |   private async analyzeContentSecurity(args: AnalyzeContentSecurityArgs): Promise<CallToolResult> {
6233 |     const { analyzeContentSecurity } = await import('./tools/content-masking-tool.js');
6234 |     return await analyzeContentSecurity(args);
6235 |   }
6236 | 
6237 |   private async generateContentMasking(args: GenerateContentMaskingArgs): Promise<CallToolResult> {
6238 |     const { generateContentMasking } = await import('./tools/content-masking-tool.js');
6239 |     return await generateContentMasking(args);
6240 |   }
6241 | 
6242 |   private async configureCustomPatterns(
6243 |     args: ConfigureCustomPatternsArgs
6244 |   ): Promise<CallToolResult> {
6245 |     const { configureCustomPatterns } = await import('./tools/content-masking-tool.js');
6246 |     return await configureCustomPatterns(args);
6247 |   }
6248 | 
6249 |   private async applyBasicContentMasking(
6250 |     args: ApplyBasicContentMaskingArgs
6251 |   ): Promise<CallToolResult> {
6252 |     const { applyBasicContentMasking } = await import('./tools/content-masking-tool.js');
6253 |     return await applyBasicContentMasking(args);
6254 |   }
6255 | 
6256 |   private async validateContentMasking(args: ValidateContentMaskingArgs): Promise<CallToolResult> {
6257 |     const { validateContentMasking } = await import('./tools/content-masking-tool.js');
6258 |     return await validateContentMasking(args);
6259 |   }
6260 | 
6261 |   private async manageCache(args: Record<string, unknown>): Promise<CallToolResult> {
6262 |     const { action, key } = args;
6263 | 
6264 |     try {
6265 |       const { clearCache, getCacheStats, cleanupCache, invalidateCache } = await import(
6266 |         './utils/cache.js'
6267 |       );
6268 | 
6269 |       switch (action) {
6270 |         case 'clear': {
6271 |           const clearPrompt = await clearCache();
6272 |           return {
6273 |             content: [
6274 |               {
6275 |                 type: 'text',
6276 |                 text: `# Cache Clear Operation
6277 | 
6278 | ## AI Delegation Required
6279 | 
6280 | Please execute the following cache clearing operation:
6281 | 
6282 | ${clearPrompt.prompt}
6283 | 
6284 | ## Implementation Instructions
6285 | 
6286 | ${clearPrompt.instructions}
6287 | 
6288 | ## Expected Result
6289 | 
6290 | After successful execution, all cache entries will be removed while preserving the cache directory structure and metadata.json file.`,
6291 |               },
6292 |             ],
6293 |           };
6294 |         }
6295 | 
6296 |         case 'stats': {
6297 |           const statsPrompt = await getCacheStats();
6298 |           return {
6299 |             content: [
6300 |               {
6301 |                 type: 'text',
6302 |                 text: `# Cache Statistics Collection
6303 | 
6304 | ## AI Delegation Required
6305 | 
6306 | Please execute the following cache statistics collection operation:
6307 | 
6308 | ${statsPrompt.prompt}
6309 | 
6310 | ## Implementation Instructions
6311 | 
6312 | ${statsPrompt.instructions}
6313 | 
6314 | ## Expected Information
6315 | 
6316 | The AI agent will provide:
6317 | - **Total Entries**: Number of cache files
6318 | - **Total Size**: Combined size of all cache files
6319 | - **Oldest Entry**: Cache key of the oldest entry
6320 | - **Newest Entry**: Cache key of the newest entry
6321 | 
6322 | ## Cache Directory
6323 | \`.mcp-adr-cache/\`
6324 | 
6325 | ## Cache Types
6326 | - **Knowledge Graph**: Architectural analysis results (TTL: 1 hour)
6327 | - **Analysis Report**: Project analysis reports (TTL: 30 minutes)
6328 | - **ADR List**: ADR inventory and metadata (TTL: 15 minutes)
6329 | 
6330 | ## Management
6331 | Use \`manage_cache\` tool with different actions:
6332 | - \`clear\`: Remove all cache entries
6333 | - \`cleanup\`: Remove expired entries only
6334 | - \`invalidate\`: Remove specific cache entry`,
6335 |               },
6336 |             ],
6337 |           };
6338 |         }
6339 | 
6340 |         case 'cleanup': {
6341 |           const cleanupPrompt = await cleanupCache();
6342 |           return {
6343 |             content: [
6344 |               {
6345 |                 type: 'text',
6346 |                 text: `# Cache Cleanup Operation
6347 | 
6348 | ## AI Delegation Required
6349 | 
6350 | Please execute the following cache cleanup operation:
6351 | 
6352 | ${cleanupPrompt.prompt}
6353 | 
6354 | ## Implementation Instructions
6355 | 
6356 | ${cleanupPrompt.instructions}
6357 | 
6358 | ## Expected Result
6359 | 
6360 | The AI agent will remove expired cache entries and provide a count of cleaned files.`,
6361 |               },
6362 |             ],
6363 |           };
6364 |         }
6365 | 
6366 |         case 'invalidate': {
6367 |           if (!key) {
6368 |             throw new McpAdrError('Cache key is required for invalidate action', 'INVALID_INPUT');
6369 |           }
6370 | 
6371 |           const invalidatePrompt = await invalidateCache(key as string);
6372 |           return {
6373 |             content: [
6374 |               {
6375 |                 type: 'text',
6376 |                 text: `# Cache Invalidation Operation
6377 | 
6378 | ## AI Delegation Required
6379 | 
6380 | Please execute the following cache invalidation operation:
6381 | 
6382 | ${invalidatePrompt.prompt}
6383 | 
6384 | ## Implementation Instructions
6385 | 
6386 | ${invalidatePrompt.instructions}
6387 | 
6388 | ## Target Cache Entry
6389 | 
6390 | **Cache Key**: ${key}
6391 | 
6392 | The AI agent will safely remove the specified cache entry.`,
6393 |               },
6394 |             ],
6395 |           };
6396 |         }
6397 | 
6398 |         default:
6399 |           throw new McpAdrError(`Unknown cache action: ${action}`, 'INVALID_INPUT');
6400 |       }
6401 |     } catch (error) {
6402 |       throw new McpAdrError(
6403 |         `Cache management failed: ${error instanceof Error ? error.message : String(error)}`,
6404 |         'CACHE_ERROR'
6405 |       );
6406 |     }
6407 |   }
6408 | 
6409 |   private async configureOutputMasking(args: Record<string, unknown>): Promise<CallToolResult> {
6410 |     const { action = 'get', enabled, strategy, customPatterns } = args;
6411 | 
6412 |     try {
6413 |       const { validateMaskingConfig } = await import('./utils/output-masking.js');
6414 | 
6415 |       switch (action) {
6416 |         case 'get': {
6417 |           return {
6418 |             content: [
6419 |               {
6420 |                 type: 'text',
6421 |                 text: `# Current Output Masking Configuration
6422 | 
6423 | ## Settings
6424 | - **Enabled**: ${this.maskingConfig.enabled}
6425 | - **Strategy**: ${this.maskingConfig.strategy}
6426 | - **Custom Patterns**: ${this.maskingConfig.customPatterns?.length || 0} patterns
6427 | - **Skip Patterns**: ${this.maskingConfig.skipPatterns?.length || 0} patterns
6428 | 
6429 | ## Available Strategies
6430 | - **full**: Replace entire sensitive content with [REDACTED]
6431 | - **partial**: Show safe prefix/suffix, mask middle (e.g., sk-...****)
6432 | - **placeholder**: Replace with descriptive placeholders (e.g., <YOUR_API_KEY>)
6433 | - **environment**: Replace with environment variable references (e.g., \${API_KEY})
6434 | 
6435 | ## Configuration
6436 | Use \`configure_output_masking\` tool with:
6437 | - \`action: "set"\` to update configuration
6438 | - \`action: "reset"\` to restore defaults
6439 | 
6440 | ## Current Status
6441 | ${this.maskingConfig.enabled ? '✅ Output masking is ACTIVE' : '⚠️ Output masking is DISABLED'}
6442 | `,
6443 |               },
6444 |             ],
6445 |           };
6446 |         }
6447 | 
6448 |         case 'set': {
6449 |           const newConfig = { ...this.maskingConfig };
6450 | 
6451 |           if (typeof enabled === 'boolean') {
6452 |             newConfig.enabled = enabled;
6453 |           }
6454 | 
6455 |           if (
6456 |             strategy &&
6457 |             ['full', 'partial', 'placeholder', 'environment'].includes(strategy as string)
6458 |           ) {
6459 |             newConfig.strategy = strategy as 'full' | 'partial' | 'placeholder' | 'environment';
6460 |           }
6461 | 
6462 |           if (Array.isArray(customPatterns)) {
6463 |             newConfig.customPatterns = customPatterns;
6464 |           }
6465 | 
6466 |           const validation = validateMaskingConfig(newConfig);
6467 |           if (!validation.isValid) {
6468 |             throw new McpAdrError(
6469 |               `Invalid masking configuration: ${validation.errors.join(', ')}`,
6470 |               'INVALID_CONFIG'
6471 |             );
6472 |           }
6473 | 
6474 |           this.maskingConfig = newConfig;
6475 | 
6476 |           return {
6477 |             content: [
6478 |               {
6479 |                 type: 'text',
6480 |                 text: `✅ Output masking configuration updated successfully!
6481 | 
6482 | ## New Settings
6483 | - **Enabled**: ${newConfig.enabled}
6484 | - **Strategy**: ${newConfig.strategy}
6485 | - **Custom Patterns**: ${newConfig.customPatterns?.length || 0} patterns
6486 | 
6487 | ${
6488 |   newConfig.enabled
6489 |     ? '🔒 All MCP tool and resource outputs will now be masked according to the new configuration.'
6490 |     : '⚠️ Output masking is disabled. Sensitive information may be exposed in responses.'
6491 | }
6492 | `,
6493 |               },
6494 |             ],
6495 |           };
6496 |         }
6497 | 
6498 |         case 'reset': {
6499 |           const { createMaskingConfig } = await import('./utils/output-masking.js');
6500 |           this.maskingConfig = createMaskingConfig();
6501 | 
6502 |           return {
6503 |             content: [
6504 |               {
6505 |                 type: 'text',
6506 |                 text: `✅ Output masking configuration reset to defaults!
6507 | 
6508 | ## Default Settings
6509 | - **Enabled**: ${this.maskingConfig.enabled}
6510 | - **Strategy**: ${this.maskingConfig.strategy}
6511 | - **Custom Patterns**: ${this.maskingConfig.customPatterns?.length || 0} patterns
6512 | - **Skip Patterns**: ${this.maskingConfig.skipPatterns?.length || 0} patterns
6513 | 
6514 | 🔒 Default masking is now active for all outputs.
6515 | `,
6516 |               },
6517 |             ],
6518 |           };
6519 |         }
6520 | 
6521 |         default:
6522 |           throw new McpAdrError(`Unknown masking action: ${action}`, 'INVALID_INPUT');
6523 |       }
6524 |     } catch (error) {
6525 |       throw new McpAdrError(
6526 |         `Output masking configuration failed: ${error instanceof Error ? error.message : String(error)}`,
6527 |         'CONFIG_ERROR'
6528 |       );
6529 |     }
6530 |   }
6531 | 
6532 |   /**
6533 |    * Helper method to get domains based on PRD type
6534 |    */
6535 |   private getPrdTypeDomains(prdType: string): string[] {
6536 |     const domainMap: Record<string, string[]> = {
6537 |       'web-application': ['api-design', 'frontend-architecture', 'database-design', 'security'],
6538 |       'mobile-app': ['mobile-architecture', 'api-design', 'performance-optimization', 'security'],
6539 |       microservices: ['microservices', 'api-design', 'distributed-systems', 'database-design'],
6540 |       'data-platform': [
6541 |         'database-design',
6542 |         'data-architecture',
6543 |         'performance-optimization',
6544 |         'scalability',
6545 |       ],
6546 |       'api-service': ['api-design', 'microservices', 'security', 'performance-optimization'],
6547 |       general: ['api-design', 'database-design', 'security'],
6548 |     };
6549 | 
6550 |     return (
6551 |       domainMap[prdType] || domainMap['general'] || ['api-design', 'database-design', 'security']
6552 |     );
6553 |   }
6554 | 
6555 |   /**
6556 |    * Helper method to get domains for ecosystem analysis based on technology focus
6557 |    */
6558 |   private getEcosystemAnalysisDomains(technologyFocus: string[]): string[] {
6559 |     // Base domains for ecosystem analysis
6560 |     const baseDomains = ['api-design', 'database-design', 'security', 'performance-optimization'];
6561 | 
6562 |     // Technology-specific domain mapping
6563 |     const technologyDomainMap: Record<string, string[]> = {
6564 |       react: ['frontend-architecture', 'web-applications'],
6565 |       vue: ['frontend-architecture', 'web-applications'],
6566 |       angular: ['frontend-architecture', 'web-applications'],
6567 |       node: ['api-design', 'microservices'],
6568 |       express: ['api-design', 'web-applications'],
6569 |       fastify: ['api-design', 'performance-optimization'],
6570 |       nestjs: ['api-design', 'microservices'],
6571 |       spring: ['api-design', 'microservices'],
6572 |       django: ['api-design', 'web-applications'],
6573 |       flask: ['api-design', 'web-applications'],
6574 |       rails: ['api-design', 'web-applications'],
6575 |       laravel: ['api-design', 'web-applications'],
6576 |       docker: ['containerization', 'microservices'],
6577 |       kubernetes: ['containerization', 'distributed-systems'],
6578 |       mongodb: ['database-design', 'data-architecture'],
6579 |       postgresql: ['database-design', 'data-architecture'],
6580 |       mysql: ['database-design', 'data-architecture'],
6581 |       redis: ['database-design', 'performance-optimization'],
6582 |       elasticsearch: ['database-design', 'data-architecture'],
6583 |       kafka: ['distributed-systems', 'data-architecture'],
6584 |       rabbitmq: ['distributed-systems', 'microservices'],
6585 |       aws: ['cloud-architecture', 'scalability'],
6586 |       azure: ['cloud-architecture', 'scalability'],
6587 |       gcp: ['cloud-architecture', 'scalability'],
6588 |       terraform: ['infrastructure-as-code', 'cloud-architecture'],
6589 |       ansible: ['infrastructure-as-code', 'automation'],
6590 |       jenkins: ['ci-cd', 'automation'],
6591 |       'github-actions': ['ci-cd', 'automation'],
6592 |       'gitlab-ci': ['ci-cd', 'automation'],
6593 |     };
6594 | 
6595 |     // Collect domains based on technology focus
6596 |     const technologyDomains = new Set<string>();
6597 |     for (const tech of technologyFocus) {
6598 |       const techLower = tech.toLowerCase();
6599 |       const domains = technologyDomainMap[techLower];
6600 |       if (domains) {
6601 |         domains.forEach(domain => technologyDomains.add(domain));
6602 |       }
6603 |     }
6604 | 
6605 |     // Combine base domains with technology-specific domains
6606 |     const allDomains = [...baseDomains, ...Array.from(technologyDomains)];
6607 | 
6608 |     // Remove duplicates and limit to reasonable number
6609 |     const uniqueDomains = [...new Set(allDomains)];
6610 | 
6611 |     // Return up to 6 most relevant domains
6612 |     return uniqueDomains.slice(0, 6);
6613 |   }
6614 | 
6615 |   /**
6616 |    * Helper method to create base ADR generation prompt
6617 |    */
6618 |   private createBaseAdrPrompt(
6619 |     prdPath: string,
6620 |     outputDirectory: string,
6621 |     knowledgeContext: string
6622 |   ): string {
6623 |     return `
6624 | # Enhanced ADR Generation from PRD Request
6625 | 
6626 | This is a comprehensive prompt-driven ADR generation process enhanced with domain knowledge and optimized prompting.
6627 | 
6628 | ${knowledgeContext}
6629 | 
6630 | ## Step 1: File Validation
6631 | Please verify that the PRD file exists at: ${prdPath}
6632 | 
6633 | ## Step 2: PRD Content Reading
6634 | Read and analyze the PRD content from: ${prdPath}
6635 | 
6636 | ## Step 3: Enhanced ADR Generation and Creation
6637 | 
6638 | Once you have successfully read the PRD content, analyze it using the domain knowledge above and generate Architectural Decision Records (ADRs).
6639 | 
6640 | ### Enhanced Analysis Requirements
6641 | 
6642 | 1. **Extract Key Decisions**: Identify all architectural decisions implied or stated in the PRD
6643 | 2. **Apply Domain Knowledge**: Use the generated domain knowledge to enhance decision analysis
6644 | 3. **Decision Categorization**: Group decisions by:
6645 |    - Technology stack choices (informed by domain best practices)
6646 |    - Architectural patterns (leveraging domain-specific patterns)
6647 |    - Infrastructure decisions (considering domain requirements)
6648 |    - Security considerations (applying domain security knowledge)
6649 |    - Performance requirements (using domain performance insights)
6650 |    - Integration approaches (following domain integration patterns)
6651 | 
6652 | ### Enhanced ADR Generation Requirements
6653 | 
6654 | 1. **Follow ADR Format**: Use standard ADR template with domain-enhanced content
6655 | 2. **Number Sequentially**: Use format 001-decision-title.md, 002-next-decision.md, etc.
6656 | 3. **Output Directory**: Place ADRs in ${outputDirectory}/
6657 | 4. **Domain Context**: Include relevant domain knowledge in each ADR
6658 | 5. **File Creation**: Generate file creation prompts for each ADR
6659 | 
6660 | ### Enhanced ADR Template Format
6661 | 
6662 | \`\`\`markdown
6663 | # [Number]. [Title]
6664 | 
6665 | **Status**: [Proposed/Accepted/Deprecated/Superseded]
6666 | **Date**: [YYYY-MM-DD]
6667 | **Domain**: [Relevant domain from knowledge enhancement]
6668 | 
6669 | ## Context
6670 | [Describe the context and problem statement from PRD, enhanced with domain knowledge]
6671 | 
6672 | ## Decision
6673 | [Describe the architectural decision, informed by domain best practices]
6674 | 
6675 | ## Consequences
6676 | [Describe positive and negative consequences, considering domain-specific implications]
6677 | 
6678 | ## Domain Considerations
6679 | [Specific considerations from the domain knowledge that influenced this decision]
6680 | 
6681 | ## Implementation Plan
6682 | [Steps to implement this decision, leveraging domain expertise]
6683 | 
6684 | ## Related PRD Sections
6685 | [Reference specific sections from the PRD that led to this decision]
6686 | 
6687 | ## Domain References
6688 | [References to domain knowledge that informed this decision]
6689 | \`\`\`
6690 | 
6691 | ### Expected Enhanced Output
6692 | 
6693 | Please provide:
6694 | 1. **File Validation Results**: Confirmation that PRD file exists and is readable
6695 | 2. **PRD Content Summary**: Brief summary enhanced with domain context
6696 | 3. **Domain Analysis**: How domain knowledge applies to this PRD
6697 | 4. **Identified Decisions**: List of all architectural decisions with domain context
6698 | 5. **Generated ADRs**: Complete enhanced ADR content for each decision
6699 | 6. **File Creation Plan**: File names, directory structure, and creation order
6700 | 7. **Implementation Priority**: Recommended order considering domain best practices
6701 | 
6702 | ### Quality Assurance with Domain Enhancement
6703 | 
6704 | - Ensure each ADR leverages relevant domain knowledge
6705 | - Verify decisions align with domain best practices
6706 | - Check that domain considerations are properly documented
6707 | - Validate that ADR content is enhanced beyond basic analysis
6708 | `;
6709 |   }
6710 | 
6711 |   /**
6712 |    * ADR suggestion tool implementations
6713 |    */
6714 |   private async suggestAdrs(args: Record<string, unknown>): Promise<CallToolResult> {
6715 |     const { suggestAdrs } = await import('./tools/adr-suggestion-tool.js');
6716 |     return await suggestAdrs(args);
6717 |   }
6718 | 
6719 |   private async generateAdrFromDecision(
6720 |     args: GenerateAdrFromDecisionArgs
6721 |   ): Promise<CallToolResult> {
6722 |     const { generateAdrFromDecision } = await import('./tools/adr-suggestion-tool.js');
6723 |     return await generateAdrFromDecision(args);
6724 |   }
6725 | 
6726 |   private async generateAdrBootstrap(args: Record<string, unknown>): Promise<CallToolResult> {
6727 |     const { default: generateAdrBootstrapScripts } = await import(
6728 |       './tools/adr-bootstrap-validation-tool.js'
6729 |     );
6730 |     return await generateAdrBootstrapScripts(args);
6731 |   }
6732 | 
6733 |   private async bootstrapValidationLoop(args: Record<string, unknown>): Promise<CallToolResult> {
6734 |     const { default: bootstrapValidationLoop } = await import(
6735 |       './tools/bootstrap-validation-loop-tool.js'
6736 |     );
6737 |     return await bootstrapValidationLoop(args);
6738 |   }
6739 | 
6740 |   private async discoverExistingAdrs(
6741 |     args: Record<string, unknown>,
6742 |     context?: ToolContext
6743 |   ): Promise<CallToolResult> {
6744 |     const ctx = context || createNoOpContext();
6745 | 
6746 |     try {
6747 |       ctx.info('🔍 Starting ADR discovery process...');
6748 |       ctx.report_progress(0, 100);
6749 | 
6750 |       ctx.info('📂 Phase 1: Scanning ADR directory');
6751 |       ctx.report_progress(30, 100);
6752 | 
6753 |       const { discoverExistingAdrs } = await import('./tools/adr-suggestion-tool.js');
6754 | 
6755 |       ctx.info('📄 Phase 2: Analyzing ADR files');
6756 |       ctx.report_progress(60, 100);
6757 | 
6758 |       const result = await discoverExistingAdrs(args);
6759 | 
6760 |       ctx.info('✅ ADR discovery completed successfully');
6761 |       ctx.report_progress(100, 100);
6762 | 
6763 |       return result;
6764 |     } catch (error) {
6765 |       ctx.error?.(
6766 |         `❌ ADR discovery failed: ${error instanceof Error ? error.message : String(error)}`
6767 |       );
6768 |       throw error;
6769 |     }
6770 |   }
6771 | 
6772 |   private async reviewExistingAdrs(args: Record<string, unknown>): Promise<CallToolResult> {
6773 |     const { reviewExistingAdrs } = await import('./tools/review-existing-adrs-tool.js');
6774 |     return await reviewExistingAdrs(args);
6775 |   }
6776 | 
6777 |   /**
6778 |    * ADR validation tool implementations
6779 |    */
6780 |   private async validateAdr(args: Record<string, unknown>): Promise<CallToolResult> {
6781 |     const { validateAdr } = await import('./tools/adr-validation-tool.js');
6782 |     return await validateAdr(args as any);
6783 |   }
6784 | 
6785 |   private async validateAllAdrs(args: Record<string, unknown>): Promise<CallToolResult> {
6786 |     const { validateAllAdrs } = await import('./tools/adr-validation-tool.js');
6787 |     return await validateAllAdrs(args as any);
6788 |   }
6789 | 
6790 |   /**
6791 |    * Research integration tool implementations
6792 |    */
6793 |   private async incorporateResearch(args: Record<string, unknown>): Promise<CallToolResult> {
6794 |     const { incorporateResearch } = await import('./tools/research-integration-tool.js');
6795 |     return await incorporateResearch(args);
6796 |   }
6797 | 
6798 |   private async createResearchTemplate(args: Record<string, unknown>): Promise<CallToolResult> {
6799 |     const { createResearchTemplate } = await import('./tools/research-integration-tool.js');
6800 |     return await createResearchTemplate(args);
6801 |   }
6802 | 
6803 |   private async requestActionConfirmation(args: Record<string, unknown>): Promise<CallToolResult> {
6804 |     const { requestActionConfirmation } = await import('./tools/research-integration-tool.js');
6805 |     return await requestActionConfirmation(args as unknown as ActionArgs);
6806 |   }
6807 | 
6808 |   /**
6809 |    * Rule generation and validation tool implementations
6810 |    */
6811 |   private async generateRules(args: Record<string, unknown>): Promise<CallToolResult> {
6812 |     const { generateRules } = await import('./tools/rule-generation-tool.js');
6813 |     return await generateRules(args);
6814 |   }
6815 | 
6816 |   private async validateRules(args: ValidateRulesArgs): Promise<CallToolResult> {
6817 |     const { validateRules } = await import('./tools/rule-generation-tool.js');
6818 |     return await validateRules(args);
6819 |   }
6820 | 
6821 |   private async createRuleSet(args: CreateRuleSetArgs): Promise<CallToolResult> {
6822 |     const { createRuleSet } = await import('./tools/rule-generation-tool.js');
6823 |     return await createRuleSet(args);
6824 |   }
6825 | 
6826 |   /**
6827 |    * Environment analysis tool implementation
6828 |    */
6829 |   private async analyzeEnvironment(args: Record<string, unknown>): Promise<CallToolResult> {
6830 |     const { analyzeEnvironment } = await import('./tools/environment-analysis-tool.js');
6831 |     return await analyzeEnvironment(args);
6832 |   }
6833 | 
6834 |   /**
6835 |    * Research question generation tool implementation
6836 |    */
6837 |   private async generateResearchQuestions(args: Record<string, unknown>): Promise<CallToolResult> {
6838 |     const { generateResearchQuestions } = await import('./tools/research-question-tool.js');
6839 |     return await generateResearchQuestions(args);
6840 |   }
6841 | 
6842 |   /**
6843 |    * Perform research tool implementation
6844 |    */
6845 |   private async performResearch(
6846 |     args: Record<string, unknown>,
6847 |     context?: ToolContext
6848 |   ): Promise<CallToolResult> {
6849 |     const ctx = context || createNoOpContext();
6850 | 
6851 |     if (!('question' in args) || typeof args['question'] !== 'string') {
6852 |       throw new McpAdrError('Missing required parameter: question', 'INVALID_ARGUMENTS');
6853 |     }
6854 | 
6855 |     try {
6856 |       ctx.info('🔍 Starting research process...');
6857 |       ctx.report_progress(0, 100);
6858 | 
6859 |       ctx.info('📊 Phase 1: Initializing research framework');
6860 |       ctx.report_progress(10, 100);
6861 | 
6862 |       const { performResearch } = await import('./tools/perform-research-tool.js');
6863 | 
6864 |       ctx.info('📚 Phase 2: Executing research orchestration');
6865 |       ctx.report_progress(20, 100);
6866 | 
6867 |       const result = await performResearch(
6868 |         args as {
6869 |           question: string;
6870 |           projectPath?: string;
6871 |           adrDirectory?: string;
6872 |           confidenceThreshold?: number;
6873 |           performWebSearch?: boolean;
6874 |         },
6875 |         ctx // ✅ Pass context to tool function for progress updates
6876 |       );
6877 | 
6878 |       return result;
6879 |     } catch (error) {
6880 |       ctx.error?.(
6881 |         `❌ Research execution failed: ${error instanceof Error ? error.message : String(error)}`
6882 |       );
6883 |       throw new McpAdrError(
6884 |         `Failed to perform research: ${error instanceof Error ? error.message : String(error)}`,
6885 |         'RESEARCH_EXECUTION_ERROR'
6886 |       );
6887 |     }
6888 |   }
6889 | 
6890 |   /**
6891 |    * LLM web search tool implementation
6892 |    */
6893 |   private async llmWebSearch(
6894 |     args: Record<string, unknown>,
6895 |     context?: ToolContext
6896 |   ): Promise<CallToolResult> {
6897 |     const ctx = context || createNoOpContext();
6898 | 
6899 |     if (!('query' in args) || typeof args['query'] !== 'string') {
6900 |       throw new McpAdrError('Missing required parameter: query', 'INVALID_ARGUMENTS');
6901 |     }
6902 | 
6903 |     ctx.info('🌐 Starting LLM-managed web search...');
6904 |     ctx.report_progress(0, 100);
6905 | 
6906 |     const { llmWebSearch } = await import('./tools/llm-web-search-tool.js');
6907 |     return await llmWebSearch(
6908 |       args as {
6909 |         query: string;
6910 |         maxResults?: number;
6911 |         includeContent?: boolean;
6912 |         llmInstructions?: string;
6913 |         projectPath?: string;
6914 |         adrDirectory?: string;
6915 |       },
6916 |       ctx // ✅ Pass context to tool function for progress updates
6917 |     );
6918 |   }
6919 | 
6920 |   /**
6921 |    * LLM cloud management tool implementation
6922 |    */
6923 |   private async llmCloudManagement(
6924 |     args: Record<string, unknown>,
6925 |     context?: ToolContext
6926 |   ): Promise<CallToolResult> {
6927 |     const ctx = context || createNoOpContext();
6928 | 
6929 |     if (!('provider' in args) || !('action' in args) || !('llmInstructions' in args)) {
6930 |       throw new McpAdrError(
6931 |         'Missing required parameters: provider, action, llmInstructions',
6932 |         'INVALID_ARGUMENTS'
6933 |       );
6934 |     }
6935 | 
6936 |     ctx.info('🔧 Starting LLM-managed cloud operation...');
6937 |     ctx.report_progress(0, 100);
6938 | 
6939 |     const { llmCloudManagement } = await import('./tools/llm-cloud-management-tool.js');
6940 |     return await llmCloudManagement(
6941 |       args as {
6942 |         provider: 'aws' | 'azure' | 'gcp' | 'redhat' | 'ubuntu' | 'macos';
6943 |         action: string;
6944 |         parameters?: Record<string, any>;
6945 |         llmInstructions: string;
6946 |         researchFirst?: boolean;
6947 |         projectPath?: string;
6948 |         adrDirectory?: string;
6949 |       },
6950 |       ctx // ✅ Pass context to tool function for progress updates
6951 |     );
6952 |   }
6953 | 
6954 |   /**
6955 |    * LLM database management tool implementation
6956 |    */
6957 |   private async llmDatabaseManagement(
6958 |     args: Record<string, unknown>,
6959 |     context?: ToolContext
6960 |   ): Promise<CallToolResult> {
6961 |     const ctx = context || createNoOpContext();
6962 | 
6963 |     if (!('database' in args) || !('action' in args) || !('llmInstructions' in args)) {
6964 |       throw new McpAdrError(
6965 |         'Missing required parameters: database, action, llmInstructions',
6966 |         'INVALID_ARGUMENTS'
6967 |       );
6968 |     }
6969 | 
6970 |     ctx.info('🗄️ Starting LLM-managed database operation...');
6971 |     ctx.report_progress(0, 100);
6972 | 
6973 |     const { llmDatabaseManagement } = await import('./tools/llm-database-management-tool.js');
6974 |     return await llmDatabaseManagement(
6975 |       args as {
6976 |         database: 'postgresql' | 'mongodb' | 'redis' | 'mysql' | 'mariadb';
6977 |         action: string;
6978 |         parameters?: Record<string, any>;
6979 |         llmInstructions: string;
6980 |         researchFirst?: boolean;
6981 |         projectPath?: string;
6982 |         adrDirectory?: string;
6983 |       },
6984 |       ctx // ✅ Pass context to tool function for progress updates
6985 |     );
6986 |   }
6987 | 
6988 |   /**
6989 |    * Deployment analysis tool implementation
6990 |    */
6991 |   private async analyzeDeploymentProgress(args: Record<string, unknown>): Promise<CallToolResult> {
6992 |     const { analyzeDeploymentProgress } = await import('./tools/deployment-analysis-tool.js');
6993 |     return await analyzeDeploymentProgress(args);
6994 |   }
6995 | 
6996 |   /**
6997 |    * Apply content masking to MCP response
6998 |    */
6999 |   /**
7000 |    * Track memory operations performed by tools
7001 |    */
7002 |   private async trackMemoryOperations(
7003 |     toolName: string,
7004 |     parameters: any,
7005 |     result: any,
7006 |     success: boolean
7007 |   ): Promise<void> {
7008 |     try {
7009 |       // Check if memory integration was enabled and used
7010 |       if (parameters?.enableMemoryIntegration === false) {
7011 |         return; // Memory integration was explicitly disabled
7012 |       }
7013 | 
7014 |       // Extract memory operation information from result
7015 |       const memoryOps = this.extractMemoryOperations(toolName, parameters, result);
7016 | 
7017 |       if (memoryOps.length > 0) {
7018 |         // Store memory operation tracking in knowledge graph
7019 |         for (const op of memoryOps) {
7020 |           await this.kgManager.addMemoryExecution(
7021 |             toolName,
7022 |             op.action,
7023 |             op.entityType,
7024 |             success && op.success,
7025 |             op.details
7026 |           );
7027 |         }
7028 |       }
7029 |     } catch (error) {
7030 |       // Don't let memory tracking errors break execution
7031 |       console.error('[WARN] Memory operation tracking failed:', error);
7032 |     }
7033 |   }
7034 | 
7035 |   /**
7036 |    * Extract memory operation details from tool execution
7037 |    */
7038 |   private extractMemoryOperations(toolName: string, parameters: any, result: any): any[] {
7039 |     const operations: any[] = [];
7040 | 
7041 |     // Define memory-enabled tools and their expected operations
7042 |     const memoryEnabledTools = {
7043 |       analyze_content_security: {
7044 |         entityType: 'security_pattern',
7045 |         actions: ['store_pattern', 'analyze_institutional_security', 'track_evolution'],
7046 |       },
7047 |       analyze_environment: {
7048 |         entityType: 'environment_snapshot',
7049 |         actions: ['store_snapshot', 'analyze_trends', 'compare_configurations'],
7050 |       },
7051 |       deployment_readiness: {
7052 |         entityType: 'deployment_assessment',
7053 |         actions: ['store_assessment', 'migrate_history', 'analyze_patterns'],
7054 |       },
7055 |       troubleshoot_guided_workflow: {
7056 |         entityType: 'troubleshooting_session',
7057 |         actions: ['store_session', 'pattern_recognition', 'suggest_adrs', 'generate_research'],
7058 |       },
7059 |     };
7060 | 
7061 |     // Check if this tool supports memory operations
7062 |     const toolConfig = memoryEnabledTools[toolName as keyof typeof memoryEnabledTools];
7063 |     if (!toolConfig) {
7064 |       return operations; // Tool doesn't support memory operations
7065 |     }
7066 | 
7067 |     // Extract memory operation details from result
7068 |     if (result?.memoryIntegration) {
7069 |       const memoryInfo = result.memoryIntegration;
7070 | 
7071 |       // Pattern entity storage operation
7072 |       if (memoryInfo.entityStored || memoryInfo.patternStored) {
7073 |         operations.push({
7074 |           action: 'entity_storage',
7075 |           entityType: toolConfig.entityType,
7076 |           success: memoryInfo.storageSuccess !== false,
7077 |           details: {
7078 |             entityId: memoryInfo.entityId || memoryInfo.patternId,
7079 |             entityCount: memoryInfo.entityCount || 1,
7080 |             storageMethod: memoryInfo.storageMethod || 'standard',
7081 |           },
7082 |         });
7083 |       }
7084 | 
7085 |       // Historical analysis operation
7086 |       if (memoryInfo.historicalAnalysis || memoryInfo.trendAnalysis) {
7087 |         operations.push({
7088 |           action: 'historical_analysis',
7089 |           entityType: toolConfig.entityType,
7090 |           success: memoryInfo.analysisSuccess !== false,
7091 |           details: {
7092 |             analysisType: memoryInfo.analysisType || 'trend_analysis',
7093 |             entitiesAnalyzed: memoryInfo.entitiesAnalyzed || 0,
7094 |             insights: memoryInfo.insights || [],
7095 |           },
7096 |         });
7097 |       }
7098 | 
7099 |       // Evolution tracking operation
7100 |       if (memoryInfo.evolutionTracking) {
7101 |         operations.push({
7102 |           action: 'evolution_tracking',
7103 |           entityType: toolConfig.entityType,
7104 |           success: memoryInfo.evolutionSuccess !== false,
7105 |           details: {
7106 |             improvements: memoryInfo.improvements || [],
7107 |             degradations: memoryInfo.degradations || [],
7108 |             recommendations: memoryInfo.recommendations || [],
7109 |           },
7110 |         });
7111 |       }
7112 | 
7113 |       // Migration operation (for deployment readiness)
7114 |       if (memoryInfo.migrationCompleted) {
7115 |         operations.push({
7116 |           action: 'data_migration',
7117 |           entityType: toolConfig.entityType,
7118 |           success: memoryInfo.migrationSuccess !== false,
7119 |           details: {
7120 |             migratedRecords: memoryInfo.migratedRecords || 0,
7121 |             migrationMethod: memoryInfo.migrationMethod || 'json_to_memory',
7122 |           },
7123 |         });
7124 |       }
7125 |     }
7126 | 
7127 |     // If no specific memory integration info, infer from parameters
7128 |     if (operations.length === 0 && parameters?.enableMemoryIntegration !== false) {
7129 |       // Default assumption: entity was stored
7130 |       operations.push({
7131 |         action: 'entity_storage',
7132 |         entityType: toolConfig.entityType,
7133 |         success: true, // Assume success if no explicit info
7134 |         details: {
7135 |           entityCount: 1,
7136 |           storageMethod: 'inferred',
7137 |           note: 'Memory operation inferred from tool execution',
7138 |         },
7139 |       });
7140 |     }
7141 | 
7142 |     return operations;
7143 |   }
7144 | 
7145 |   /**
7146 |    * Track tool execution in knowledge graph
7147 |    */
7148 |   private async trackToolExecution(
7149 |     toolName: string,
7150 |     parameters: any,
7151 |     result: any,
7152 |     success: boolean,
7153 |     error?: string
7154 |   ): Promise<void> {
7155 |     try {
7156 |       // Extract intentId from metadata if available
7157 |       let intentId: string | undefined;
7158 | 
7159 |       if (result?.metadata?.intentId) {
7160 |         intentId = result.metadata.intentId;
7161 |       } else {
7162 |         // Check for active intents that might be related to this tool execution
7163 |         const activeIntents = await this.kgManager.getActiveIntents();
7164 |         if (activeIntents.length > 0) {
7165 |           // Use the most recent active intent
7166 |           const latestIntent = activeIntents[activeIntents.length - 1];
7167 |           if (latestIntent) {
7168 |             intentId = latestIntent.intentId;
7169 |           }
7170 |         }
7171 |       }
7172 | 
7173 |       // If no intent found, create a standalone execution record
7174 |       if (!intentId) {
7175 |         // Extract human request from conversation context if available
7176 |         let humanRequest = `Standalone tool execution: ${toolName}`;
7177 |         if (parameters?.conversationContext?.humanRequest) {
7178 |           humanRequest = parameters.conversationContext.humanRequest;
7179 |         }
7180 | 
7181 |         intentId = await this.kgManager.createIntent(
7182 |           humanRequest,
7183 |           [`Execute ${toolName}`, 'Complete tool operation'],
7184 |           'medium'
7185 |         );
7186 |       }
7187 | 
7188 |       // Determine tasks created/modified from tool operation
7189 |       const todoTasksCreated: string[] = [];
7190 |       const todoTasksModified: string[] = [];
7191 | 
7192 |       // Extract task information from result metadata
7193 |       if (result?.metadata) {
7194 |         if (result.metadata.tasksCreated) {
7195 |           todoTasksCreated.push(...result.metadata.tasksCreated);
7196 |         }
7197 |         if (result.metadata.tasksModified) {
7198 |           todoTasksModified.push(...result.metadata.tasksModified);
7199 |         }
7200 |         if (result.metadata.taskIds) {
7201 |           todoTasksModified.push(...result.metadata.taskIds);
7202 |         }
7203 |       }
7204 | 
7205 |       // Track memory operations if present
7206 |       await this.trackMemoryOperations(toolName, parameters, result, success);
7207 | 
7208 |       // Store execution in knowledge graph
7209 |       await this.kgManager.addToolExecution(
7210 |         intentId,
7211 |         toolName,
7212 |         parameters,
7213 |         result,
7214 |         success,
7215 |         todoTasksCreated,
7216 |         todoTasksModified,
7217 |         error
7218 |       );
7219 | 
7220 |       // If execution completed successfully, update intent status
7221 |       if (success && !error) {
7222 |         // Check if this might be the final tool in a chain
7223 |         const intent = await this.kgManager.getIntentById(intentId);
7224 |         if (intent && intent.currentStatus === 'executing') {
7225 |           // Simple heuristic: if tool is a "completion" type tool, mark intent as completed
7226 |           const completionTools = ['smart_git_push', 'generate_deployment_guidance', 'smart_score'];
7227 |           if (completionTools.includes(toolName)) {
7228 |             await this.kgManager.updateIntentStatus(intentId, 'completed');
7229 |           }
7230 |         }
7231 |       }
7232 |     } catch (trackingError) {
7233 |       // Don't let tracking errors break tool execution
7234 |       console.error('[WARN] Knowledge graph tracking failed:', trackingError);
7235 |     }
7236 |   }
7237 | 
7238 |   private async applyOutputMasking(response: any): Promise<any> {
7239 |     try {
7240 |       return await maskMcpResponse(response, this.maskingConfig);
7241 |     } catch (error) {
7242 |       // If masking fails, log warning and return original response
7243 |       // Log to stderr to avoid corrupting MCP protocol
7244 |       console.error('[WARN] Output masking failed:', error);
7245 |       return response;
7246 |     }
7247 |   }
7248 | 
7249 |   /**
7250 |    * Enrich response with state reinforcement and apply masking
7251 |    *
7252 |    * Implements Phase 2 of context decay mitigation by injecting
7253 |    * context reminders every N turns or when response exceeds token threshold.
7254 |    *
7255 |    * Phase 3 extension: Records conversation turns to structured external memory.
7256 |    */
7257 |   private async enrichResponseWithStateReinforcement(
7258 |     response: CallToolResult,
7259 |     toolName?: string,
7260 |     toolArgs?: any
7261 |   ): Promise<CallToolResult> {
7262 |     const startTime = Date.now();
7263 |     try {
7264 |       // Extract text content from response
7265 |       const textContent = response.content
7266 |         .filter((item): item is { type: 'text'; text: string } => item.type === 'text')
7267 |         .map(item => item.text)
7268 |         .join('\n\n');
7269 | 
7270 |       if (!textContent) {
7271 |         // No text content to enrich, just apply masking
7272 |         return await this.applyOutputMasking(response);
7273 |       }
7274 | 
7275 |       // Enrich with state reinforcement (Phase 2)
7276 |       const enriched = await this.stateReinforcementManager.enrichResponseWithContext(textContent);
7277 | 
7278 |       // Prepare final response
7279 |       let finalResponse: CallToolResult;
7280 | 
7281 |       // Replace text content with enriched version if context was injected
7282 |       if (enriched.contextInjected) {
7283 |         finalResponse = {
7284 |           ...response,
7285 |           content: response.content.map(item => {
7286 |             if (item.type === 'text') {
7287 |               return {
7288 |                 type: 'text',
7289 |                 text: enriched.enrichedContent,
7290 |               };
7291 |             }
7292 |             return item;
7293 |           }),
7294 |         };
7295 |       } else {
7296 |         finalResponse = response;
7297 |       }
7298 | 
7299 |       // Record conversation turn (Phase 3: Structured External Memory)
7300 |       if (toolName) {
7301 |         const duration = Date.now() - startTime;
7302 | 
7303 |         // Check if response has expandableId (from tiered response)
7304 |         const expandableIdMatch = textContent.match(/expandableId:\s*(\S+)/);
7305 |         const expandableId = expandableIdMatch ? expandableIdMatch[1] : undefined;
7306 | 
7307 |         await this.conversationMemoryManager.recordTurn(
7308 |           {
7309 |             type: 'tool_call',
7310 |             toolName,
7311 |             toolArgs,
7312 |           },
7313 |           {
7314 |             content: enriched.enrichedContent || textContent,
7315 |             tokenCount: enriched.tokenCount,
7316 |             contextInjected: enriched.contextInjected,
7317 |             ...(expandableId ? { expandableId } : {}),
7318 |           },
7319 |           {
7320 |             duration,
7321 |             cacheHit: false, // Could be enhanced to track cache hits
7322 |             errorOccurred: false,
7323 |           }
7324 |         );
7325 | 
7326 |         this.logger.debug(`Conversation turn recorded for ${toolName}`, 'McpAdrAnalysisServer', {
7327 |           turnNumber: enriched.turnNumber,
7328 |         });
7329 |       }
7330 | 
7331 |       // Apply masking to final response
7332 |       return await this.applyOutputMasking(finalResponse);
7333 |     } catch (error) {
7334 |       this.logger.error(
7335 |         'State reinforcement or conversation recording failed, returning original response',
7336 |         'McpAdrAnalysisServer',
7337 |         error instanceof Error ? error : undefined
7338 |       );
7339 |       // Fallback to just masking if enrichment fails
7340 |       return await this.applyOutputMasking(response);
7341 |     }
7342 |   }
7343 | 
7344 |   /**
7345 |    * Read MCP resource with prompt-driven caching
7346 |    */
7347 |   private async readResource(uri: string): Promise<any> {
7348 |     try {
7349 |       // Import resource router and templated resources (ensures routes are registered)
7350 |       const { resourceRouter } = await import('./resources/resource-router.js');
7351 | 
7352 |       // Import templated resources to register routes
7353 |       await import('./resources/adr-by-id-resource.js');
7354 |       await import('./resources/research-by-topic-resource.js');
7355 |       await import('./resources/todo-by-id-resource.js');
7356 |       await import('./resources/rule-by-id-resource.js');
7357 |       await import('./resources/technology-by-name-resource.js');
7358 |       await import('./resources/pattern-by-name-resource.js');
7359 | 
7360 |       // Try routing first (handles templated resources)
7361 |       if (resourceRouter.canRoute(uri)) {
7362 |         const result = await resourceRouter.route(uri);
7363 | 
7364 |         return {
7365 |           contents: [
7366 |             {
7367 |               uri,
7368 |               mimeType: result.contentType,
7369 |               text: JSON.stringify(result.data, null, 2),
7370 |             },
7371 |           ],
7372 |           _meta: {
7373 |             lastModified: result.lastModified,
7374 |             etag: result.etag,
7375 |             cacheKey: result.cacheKey,
7376 |           },
7377 |         };
7378 |       }
7379 | 
7380 |       // Fall back to static resource handling
7381 |       // Parse URI to determine resource type and parameters
7382 |       const url = new globalThis.URL(uri);
7383 |       const resourceType = url.pathname.replace('/', '');
7384 |       const params = Object.fromEntries(url.searchParams.entries());
7385 | 
7386 |       switch (resourceType) {
7387 |         case 'architectural_knowledge_graph': {
7388 |           const { generateArchitecturalKnowledgeGraph } = await import('./resources/index.js');
7389 |           const projectPath = params['projectPath'] || process.cwd();
7390 | 
7391 |           // Generate resource directly (caching is now handled through AI delegation)
7392 |           const result = await generateArchitecturalKnowledgeGraph(projectPath);
7393 | 
7394 |           return {
7395 |             contents: [
7396 |               {
7397 |                 uri,
7398 |                 mimeType: result.contentType,
7399 |                 text: JSON.stringify(result.data, null, 2),
7400 |               },
7401 |             ],
7402 |           };
7403 |         }
7404 | 
7405 |         case 'analysis_report': {
7406 |           const { generateAnalysisReport } = await import('./resources/index.js');
7407 |           const projectPath = params['projectPath'] || process.cwd();
7408 |           const focusAreas = params['focusAreas'] ? params['focusAreas'].split(',') : undefined;
7409 | 
7410 |           // Generate resource directly (caching is now handled through AI delegation)
7411 |           const result = await generateAnalysisReport(projectPath, focusAreas);
7412 | 
7413 |           return {
7414 |             contents: [
7415 |               {
7416 |                 uri,
7417 |                 mimeType: result.contentType,
7418 |                 text: JSON.stringify(result.data, null, 2),
7419 |               },
7420 |             ],
7421 |           };
7422 |         }
7423 | 
7424 |         case 'adr_list': {
7425 |           const { generateAdrList } = await import('./resources/index.js');
7426 |           const { getAdrDirectoryPath } = await import('./utils/config.js');
7427 |           const path = await import('path');
7428 | 
7429 |           // Use absolute ADR path relative to project
7430 |           const absoluteAdrPath = params['adrDirectory']
7431 |             ? path.resolve(this.config.projectPath, params['adrDirectory'])
7432 |             : getAdrDirectoryPath(this.config);
7433 | 
7434 |           // Generate resource directly (caching is now handled through AI delegation)
7435 |           const result = await generateAdrList(absoluteAdrPath, this.config.projectPath);
7436 | 
7437 |           return {
7438 |             contents: [
7439 |               {
7440 |                 uri,
7441 |                 mimeType: result.contentType,
7442 |                 text: JSON.stringify(result.data, null, 2),
7443 |               },
7444 |             ],
7445 |           };
7446 |         }
7447 | 
7448 |         case 'todo_list': {
7449 |           const { generateTodoListResource } = await import('./resources/todo-list-resource.js');
7450 |           const result = await generateTodoListResource();
7451 | 
7452 |           return {
7453 |             contents: [
7454 |               {
7455 |                 uri,
7456 |                 mimeType: result.contentType,
7457 |                 text: JSON.stringify(result.data, null, 2),
7458 |               },
7459 |             ],
7460 |             _meta: {
7461 |               lastModified: result.lastModified,
7462 |               etag: result.etag,
7463 |               cacheKey: result.cacheKey,
7464 |             },
7465 |           };
7466 |         }
7467 | 
7468 |         case 'research_index': {
7469 |           const { generateResearchIndexResource } = await import(
7470 |             './resources/research-index-resource.js'
7471 |           );
7472 |           const result = await generateResearchIndexResource();
7473 | 
7474 |           return {
7475 |             contents: [
7476 |               {
7477 |                 uri,
7478 |                 mimeType: result.contentType,
7479 |                 text: JSON.stringify(result.data, null, 2),
7480 |               },
7481 |             ],
7482 |             _meta: {
7483 |               lastModified: result.lastModified,
7484 |               etag: result.etag,
7485 |               cacheKey: result.cacheKey,
7486 |             },
7487 |           };
7488 |         }
7489 | 
7490 |         case 'rule_catalog': {
7491 |           const { generateRuleCatalogResource } = await import(
7492 |             './resources/rule-catalog-resource.js'
7493 |           );
7494 |           const result = await generateRuleCatalogResource();
7495 | 
7496 |           return {
7497 |             contents: [
7498 |               {
7499 |                 uri,
7500 |                 mimeType: result.contentType,
7501 |                 text: JSON.stringify(result.data, null, 2),
7502 |               },
7503 |             ],
7504 |             _meta: {
7505 |               lastModified: result.lastModified,
7506 |               etag: result.etag,
7507 |               cacheKey: result.cacheKey,
7508 |             },
7509 |           };
7510 |         }
7511 | 
7512 |         case 'rule_generation': {
7513 |           const { generateRuleGenerationResource } = await import(
7514 |             './resources/rule-generation-resource.js'
7515 |           );
7516 |           const result = await generateRuleGenerationResource(undefined, url.searchParams);
7517 | 
7518 |           return {
7519 |             contents: [
7520 |               {
7521 |                 uri,
7522 |                 mimeType: result.contentType,
7523 |                 text: JSON.stringify(result.data, null, 2),
7524 |               },
7525 |             ],
7526 |             _meta: {
7527 |               lastModified: result.lastModified,
7528 |               etag: result.etag,
7529 |               cacheKey: result.cacheKey,
7530 |             },
7531 |           };
7532 |         }
7533 | 
7534 |         case 'project_status': {
7535 |           const { generateProjectStatusResource } = await import(
7536 |             './resources/project-status-resource.js'
7537 |           );
7538 |           const result = await generateProjectStatusResource();
7539 | 
7540 |           return {
7541 |             contents: [
7542 |               {
7543 |                 uri,
7544 |                 mimeType: result.contentType,
7545 |                 text: JSON.stringify(result.data, null, 2),
7546 |               },
7547 |             ],
7548 |             _meta: {
7549 |               lastModified: result.lastModified,
7550 |               etag: result.etag,
7551 |               cacheKey: result.cacheKey,
7552 |             },
7553 |           };
7554 |         }
7555 | 
7556 |         case 'deployment_status': {
7557 |           const { generateDeploymentStatusResource } = await import(
7558 |             './resources/deployment-status-resource.js'
7559 |           );
7560 |           const result = await generateDeploymentStatusResource(undefined, url.searchParams);
7561 | 
7562 |           return {
7563 |             contents: [
7564 |               {
7565 |                 uri,
7566 |                 mimeType: result.contentType,
7567 |                 text: JSON.stringify(result.data, null, 2),
7568 |               },
7569 |             ],
7570 |             _meta: {
7571 |               lastModified: result.lastModified,
7572 |               etag: result.etag,
7573 |               cacheKey: result.cacheKey,
7574 |             },
7575 |           };
7576 |         }
7577 | 
7578 |         case 'environment_analysis': {
7579 |           const { generateEnvironmentAnalysisResource } = await import(
7580 |             './resources/environment-analysis-resource.js'
7581 |           );
7582 |           const result = await generateEnvironmentAnalysisResource(undefined, url.searchParams);
7583 | 
7584 |           return {
7585 |             contents: [
7586 |               {
7587 |                 uri,
7588 |                 mimeType: result.contentType,
7589 |                 text: JSON.stringify(result.data, null, 2),
7590 |               },
7591 |             ],
7592 |             _meta: {
7593 |               lastModified: result.lastModified,
7594 |               etag: result.etag,
7595 |               cacheKey: result.cacheKey,
7596 |             },
7597 |           };
7598 |         }
7599 | 
7600 |         case 'memory_snapshots': {
7601 |           const { generateMemorySnapshotsResource } = await import(
7602 |             './resources/memory-snapshots-resource.js'
7603 |           );
7604 |           const result = await generateMemorySnapshotsResource(undefined, url.searchParams);
7605 | 
7606 |           return {
7607 |             contents: [
7608 |               {
7609 |                 uri,
7610 |                 mimeType: result.contentType,
7611 |                 text: JSON.stringify(result.data, null, 2),
7612 |               },
7613 |             ],
7614 |             _meta: {
7615 |               lastModified: result.lastModified,
7616 |               etag: result.etag,
7617 |               cacheKey: result.cacheKey,
7618 |             },
7619 |           };
7620 |         }
7621 | 
7622 |         case 'project_metrics': {
7623 |           const { generateProjectMetricsResource } = await import(
7624 |             './resources/project-metrics-resource.js'
7625 |           );
7626 |           const result = await generateProjectMetricsResource();
7627 | 
7628 |           return {
7629 |             contents: [
7630 |               {
7631 |                 uri,
7632 |                 mimeType: result.contentType,
7633 |                 text: JSON.stringify(result.data, null, 2),
7634 |               },
7635 |             ],
7636 |             _meta: {
7637 |               lastModified: result.lastModified,
7638 |               etag: result.etag,
7639 |               cacheKey: result.cacheKey,
7640 |             },
7641 |           };
7642 |         }
7643 | 
7644 |         case 'deployment_history': {
7645 |           const { generateDeploymentHistoryResource } = await import(
7646 |             './resources/deployment-history-resource.js'
7647 |           );
7648 |           const result = await generateDeploymentHistoryResource(undefined, url.searchParams);
7649 | 
7650 |           return {
7651 |             contents: [
7652 |               {
7653 |                 uri,
7654 |                 mimeType: result.contentType,
7655 |                 text: JSON.stringify(result.data, null, 2),
7656 |               },
7657 |             ],
7658 |             _meta: {
7659 |               lastModified: result.lastModified,
7660 |               etag: result.etag,
7661 |               cacheKey: result.cacheKey,
7662 |             },
7663 |           };
7664 |         }
7665 | 
7666 |         case 'code_quality': {
7667 |           const { generateCodeQualityResource } = await import(
7668 |             './resources/code-quality-resource.js'
7669 |           );
7670 |           const result = await generateCodeQualityResource(undefined, url.searchParams);
7671 | 
7672 |           return {
7673 |             contents: [
7674 |               {
7675 |                 uri,
7676 |                 mimeType: result.contentType,
7677 |                 text: JSON.stringify(result.data, null, 2),
7678 |               },
7679 |             ],
7680 |             _meta: {
7681 |               lastModified: result.lastModified,
7682 |               etag: result.etag,
7683 |               cacheKey: result.cacheKey,
7684 |             },
7685 |           };
7686 |         }
7687 | 
7688 |         default:
7689 |           throw new McpAdrError(`Unknown resource type: ${resourceType}`, 'UNKNOWN_RESOURCE');
7690 |       }
7691 |     } catch (error) {
7692 |       if (error instanceof McpAdrError) {
7693 |         throw error;
7694 |       }
7695 |       throw new McpAdrError(
7696 |         `Failed to read resource: ${error instanceof Error ? error.message : String(error)}`,
7697 |         'RESOURCE_ERROR'
7698 |       );
7699 |     }
7700 |   }
7701 | 
7702 |   /**
7703 |    * Start the server
7704 |    */
7705 |   async start(): Promise<void> {
7706 |     // Validate configuration before starting
7707 |     await this.validateConfiguration();
7708 | 
7709 |     // Initialize memory entity manager
7710 |     await this.memoryEntityManager.initialize();
7711 |     this.logger.info('Memory Entity Manager initialized', 'McpAdrAnalysisServer');
7712 | 
7713 |     // Initialize conversation memory manager (Phase 3: Structured External Memory)
7714 |     await this.conversationMemoryManager.initialize();
7715 |     this.logger.info('Phase 3 (Structured External Memory) initialized', 'McpAdrAnalysisServer');
7716 | 
7717 |     // Generate initial server context file
7718 |     try {
7719 |       await this.contextGenerator.writeContextFile(
7720 |         this.kgManager,
7721 |         this.memoryEntityManager,
7722 |         this.conversationMemoryManager
7723 |       );
7724 |       this.logger.info(
7725 |         'Server context file generated at .mcp-server-context.md',
7726 |         'McpAdrAnalysisServer'
7727 |       );
7728 |     } catch (error) {
7729 |       this.logger.warn('Failed to generate initial server context file', 'McpAdrAnalysisServer', {
7730 |         error: error instanceof Error ? error.message : String(error),
7731 |       });
7732 |     }
7733 | 
7734 |     const transport = new StdioServerTransport();
7735 |     await this.server.connect(transport);
7736 | 
7737 |     // Keep the process alive
7738 |     process.on('SIGINT', async () => {
7739 |       await this.server.close();
7740 |       process.exit(0);
7741 |     });
7742 |   }
7743 | 
7744 |   /**
7745 |    * File system tool implementations
7746 |    */
7747 | 
7748 |   /**
7749 |    * List accessible roots (MCP best practice)
7750 |    */
7751 |   private async listRoots(): Promise<CallToolResult> {
7752 |     const roots = this.rootManager.listRoots();
7753 | 
7754 |     const rootsList = roots
7755 |       .map(r => `### ${r.name}\n\n**Path**: \`${r.path}\`\n\n**Description**: ${r.description}\n`)
7756 |       .join('\n');
7757 | 
7758 |     return {
7759 |       content: [
7760 |         {
7761 |           type: 'text',
7762 |           text: `# Available File System Roots\n\nThese are the directories that can be accessed by this MCP server.\n\n${rootsList}\nUse these paths with \`read_directory\` and \`read_file\` tools to explore and access files.`,
7763 |         },
7764 |       ],
7765 |     };
7766 |   }
7767 | 
7768 |   /**
7769 |    * Read directory contents (MCP best practice for autonomous file discovery)
7770 |    */
7771 |   private async readDirectory(args: { path?: string }): Promise<CallToolResult> {
7772 |     const targetPath = args.path || this.config.projectPath;
7773 | 
7774 |     try {
7775 |       const path = await import('path');
7776 |       const resolvedPath = path.resolve(targetPath);
7777 | 
7778 |       // Security check: ensure path is within accessible roots
7779 |       if (!this.rootManager.isPathAllowed(resolvedPath)) {
7780 |         const roots = this.rootManager.listRoots();
7781 |         const rootList = roots.map(r => `  - ${r.name}: ${r.path}`).join('\n');
7782 | 
7783 |         throw new McpAdrError(
7784 |           `Access denied: Path '${targetPath}' is outside accessible roots.\n\nAccessible roots:\n${rootList}\n\nUse list_roots tool for more details.`,
7785 |           'ACCESS_DENIED'
7786 |         );
7787 |       }
7788 | 
7789 |       const { readdir } = await import('fs/promises');
7790 |       const entries = await readdir(resolvedPath, { withFileTypes: true });
7791 | 
7792 |       const files = entries.filter(e => e.isFile()).map(e => `📄 ${e.name}`);
7793 | 
7794 |       const dirs = entries.filter(e => e.isDirectory()).map(e => `📁 ${e.name}/`);
7795 | 
7796 |       const root = this.rootManager.getRootForPath(resolvedPath);
7797 |       const relPath = this.rootManager.getRelativePathFromRoot(resolvedPath);
7798 | 
7799 |       const filesList = files.length > 0 ? files.join('\n') : '(no files)';
7800 |       const dirsList = dirs.length > 0 ? dirs.join('\n') : '(no directories)';
7801 | 
7802 |       return {
7803 |         content: [
7804 |           {
7805 |             type: 'text',
7806 |             text: `# Directory: ${targetPath}\n\n**Root**: ${root?.name}\n**Relative Path**: ${relPath || '/'}\n**Full Path**: \`${resolvedPath}\`\n\n## Directories (${dirs.length})\n\n${dirsList}\n\n## Files (${files.length})\n\n${filesList}`,
7807 |           },
7808 |         ],
7809 |       };
7810 |     } catch (error) {
7811 |       throw new McpAdrError(
7812 |         `Failed to read directory: ${error instanceof Error ? error.message : String(error)}`,
7813 |         'DIRECTORY_READ_ERROR'
7814 |       );
7815 |     }
7816 |   }
7817 | 
7818 |   private async readFile(args: ReadFileArgs): Promise<CallToolResult> {
7819 |     const { filePath } = args;
7820 | 
7821 |     try {
7822 |       const fs = await import('fs/promises');
7823 |       const path = await import('path');
7824 | 
7825 |       // Resolve path (handle both relative and absolute paths)
7826 |       const safePath = path.resolve(filePath);
7827 | 
7828 |       // Security check: ensure path is within accessible roots
7829 |       if (!this.rootManager.isPathAllowed(safePath)) {
7830 |         const roots = this.rootManager.listRoots();
7831 |         const rootList = roots.map(r => `  - ${r.name}: ${r.path}`).join('\n');
7832 | 
7833 |         throw new McpAdrError(
7834 |           `Access denied: Path '${filePath}' is outside accessible roots.\n\nAccessible roots:\n${rootList}\n\nUse list_roots tool for more details.`,
7835 |           'ACCESS_DENIED'
7836 |         );
7837 |       }
7838 | 
7839 |       const content = await fs.readFile(safePath, 'utf-8');
7840 | 
7841 |       return {
7842 |         content: [
7843 |           {
7844 |             type: 'text',
7845 |             text: content,
7846 |           },
7847 |         ],
7848 |       };
7849 |     } catch (error) {
7850 |       throw new McpAdrError(
7851 |         `Failed to read file: ${error instanceof Error ? error.message : String(error)}`,
7852 |         'FILE_READ_ERROR'
7853 |       );
7854 |     }
7855 |   }
7856 | 
7857 |   private async writeFile(args: WriteFileArgs): Promise<CallToolResult> {
7858 |     const { filePath, content } = args;
7859 | 
7860 |     try {
7861 |       const fs = await import('fs/promises');
7862 |       const path = await import('path');
7863 | 
7864 |       // Resolve path relative to project path for security
7865 |       const safePath = path.resolve(this.config.projectPath, filePath);
7866 | 
7867 |       // Security check: ensure path is within project directory
7868 |       if (!safePath.startsWith(this.config.projectPath)) {
7869 |         throw new McpAdrError('Access denied: Path is outside project directory', 'ACCESS_DENIED');
7870 |       }
7871 | 
7872 |       // Ensure directory exists
7873 |       await fs.mkdir(path.dirname(safePath), { recursive: true });
7874 | 
7875 |       // Write file
7876 |       await fs.writeFile(safePath, content, 'utf-8');
7877 | 
7878 |       return {
7879 |         content: [
7880 |           {
7881 |             type: 'text',
7882 |             text: `Successfully wrote to ${filePath}`,
7883 |           },
7884 |         ],
7885 |       };
7886 |     } catch (error) {
7887 |       throw new McpAdrError(
7888 |         `Failed to write file: ${error instanceof Error ? error.message : String(error)}`,
7889 |         'FILE_WRITE_ERROR'
7890 |       );
7891 |     }
7892 |   }
7893 | 
7894 |   private async listDirectory(args: Record<string, unknown>): Promise<CallToolResult> {
7895 |     const { path: dirPath } = args;
7896 | 
7897 |     try {
7898 |       const fs = await import('fs/promises');
7899 |       const path = await import('path');
7900 | 
7901 |       // Resolve path relative to project path for security
7902 |       const safePath = path.resolve(this.config.projectPath, dirPath as string);
7903 | 
7904 |       // Security check: ensure path is within project directory
7905 |       if (!safePath.startsWith(this.config.projectPath)) {
7906 |         throw new McpAdrError('Access denied: Path is outside project directory', 'ACCESS_DENIED');
7907 |       }
7908 | 
7909 |       const entries = await fs.readdir(safePath, { withFileTypes: true });
7910 |       const fileList = entries.map(entry => ({
7911 |         name: entry.name,
7912 |         type: entry.isDirectory() ? 'directory' : 'file',
7913 |         path: path.join(dirPath as string, entry.name),
7914 |       }));
7915 | 
7916 |       return {
7917 |         content: [
7918 |           {
7919 |             type: 'text',
7920 |             text: JSON.stringify(fileList, null, 2),
7921 |           },
7922 |         ],
7923 |       };
7924 |     } catch (error) {
7925 |       throw new McpAdrError(
7926 |         `Failed to list directory: ${error instanceof Error ? error.message : String(error)}`,
7927 |         'DIRECTORY_LIST_ERROR'
7928 |       );
7929 |     }
7930 |   }
7931 | 
7932 |   private async generateDeploymentGuidance(args: Record<string, unknown>): Promise<CallToolResult> {
7933 |     try {
7934 |       const { generateDeploymentGuidance } = await import('./tools/deployment-guidance-tool.js');
7935 |       return await generateDeploymentGuidance(args);
7936 |     } catch (error) {
7937 |       throw new McpAdrError(
7938 |         `Deployment guidance generation failed: ${error instanceof Error ? error.message : String(error)}`,
7939 |         'DEPLOYMENT_GUIDANCE_ERROR'
7940 |       );
7941 |     }
7942 |   }
7943 | 
7944 |   private async smartGitPush(args: Record<string, unknown>): Promise<CallToolResult> {
7945 |     try {
7946 |       const { smartGitPush } = await import('./tools/smart-git-push-tool-v2.js');
7947 |       return await smartGitPush(args);
7948 |     } catch (error) {
7949 |       throw new McpAdrError(
7950 |         `Smart git push failed: ${error instanceof Error ? error.message : String(error)}`,
7951 |         'SMART_GIT_PUSH_ERROR'
7952 |       );
7953 |     }
7954 |   }
7955 | 
7956 |   private async deploymentReadiness(args: Record<string, unknown>): Promise<CallToolResult> {
7957 |     try {
7958 |       const { deploymentReadiness } = await import('./tools/deployment-readiness-tool.js');
7959 |       return await deploymentReadiness(args);
7960 |     } catch (error) {
7961 |       throw new McpAdrError(
7962 |         `Deployment readiness check failed: ${error instanceof Error ? error.message : String(error)}`,
7963 |         'DEPLOYMENT_READINESS_ERROR'
7964 |       );
7965 |     }
7966 |   }
7967 | 
7968 |   private async troubleshootGuidedWorkflow(args: Record<string, unknown>): Promise<CallToolResult> {
7969 |     try {
7970 |       const { troubleshootGuidedWorkflow } = await import(
7971 |         './tools/troubleshoot-guided-workflow-tool.js'
7972 |       );
7973 |       return await troubleshootGuidedWorkflow(args as unknown as TodoManagementV2Args);
7974 |     } catch (error) {
7975 |       throw new McpAdrError(
7976 |         `Troubleshoot guided workflow failed: ${error instanceof Error ? error.message : String(error)}`,
7977 |         'TROUBLESHOOT_GUIDED_WORKFLOW_ERROR'
7978 |       );
7979 |     }
7980 |   }
7981 | 
7982 |   private async smartScore(_args: Record<string, unknown>): Promise<CallToolResult> {
7983 |     // Smart score tool was removed - return deprecation message
7984 |     return {
7985 |       content: [
7986 |         {
7987 |           type: 'text',
7988 |           text: `⚠️ **Smart Score Tool Deprecated**
7989 | 
7990 | This tool has been deprecated and replaced with memory-centric health scoring.
7991 | 
7992 | **Replacement:** The new MemoryHealthScoring system tracks:
7993 | - Memory quality and relevance
7994 | - Retrieval performance
7995 | - Entity relationship coherence
7996 | - Context utilization
7997 | - Decision alignment
7998 | 
7999 | **Migration:** Health scoring is now integrated into the knowledge graph and automatically calculated based on memory usage patterns.`,
8000 |         },
8001 |       ],
8002 |       isError: false,
8003 |     };
8004 |   }
8005 | 
8006 |   private async mcpPlanning(args: Record<string, unknown>): Promise<CallToolResult> {
8007 |     try {
8008 |       const { mcpPlanning } = await import('./tools/mcp-planning-tool.js');
8009 |       return await mcpPlanning(args);
8010 |     } catch (error) {
8011 |       throw new McpAdrError(
8012 |         `MCP planning failed: ${error instanceof Error ? error.message : String(error)}`,
8013 |         'MCP_PLANNING_ERROR'
8014 |       );
8015 |     }
8016 |   }
8017 | 
8018 |   private async memoryLoading(args: Record<string, unknown>): Promise<CallToolResult> {
8019 |     try {
8020 |       const { MemoryLoadingTool } = await import('./tools/memory-loading-tool.js');
8021 |       const memoryTool = new MemoryLoadingTool();
8022 |       return await memoryTool.execute(args);
8023 |     } catch (error) {
8024 |       throw new McpAdrError(
8025 |         `Memory loading failed: ${error instanceof Error ? error.message : String(error)}`,
8026 |         'MEMORY_LOADING_ERROR'
8027 |       );
8028 |     }
8029 |   }
8030 | 
8031 |   private async expandAnalysisSection(args: Record<string, unknown>): Promise<CallToolResult> {
8032 |     try {
8033 |       const { expandAnalysisSection } = await import('./tools/expand-analysis-tool.js');
8034 |       return await expandAnalysisSection(args as any);
8035 |     } catch (error) {
8036 |       throw new McpAdrError(
8037 |         `Failed to expand analysis: ${error instanceof Error ? error.message : String(error)}`,
8038 |         'EXPAND_ANALYSIS_ERROR'
8039 |       );
8040 |     }
8041 |   }
8042 | 
8043 |   private async interactiveAdrPlanning(args: Record<string, unknown>): Promise<CallToolResult> {
8044 |     try {
8045 |       const { interactiveAdrPlanning } = await import('./tools/interactive-adr-planning-tool.js');
8046 |       return await interactiveAdrPlanning(args);
8047 |     } catch (error) {
8048 |       throw new McpAdrError(
8049 |         `Interactive ADR planning failed: ${error instanceof Error ? error.message : String(error)}`,
8050 |         'INTERACTIVE_ADR_PLANNING_ERROR'
8051 |       );
8052 |     }
8053 |   }
8054 | 
8055 |   /**
8056 |    * Tool chain orchestrator implementation
8057 |    */
8058 |   private async toolChainOrchestrator(args: ToolChainOrchestratorArgs): Promise<CallToolResult> {
8059 |     try {
8060 |       const { toolChainOrchestrator } = await import('./tools/tool-chain-orchestrator.js');
8061 |       return await toolChainOrchestrator(args as any);
8062 |     } catch (error) {
8063 |       throw new McpAdrError(
8064 |         `Tool chain orchestration failed: ${error instanceof Error ? error.message : String(error)}`,
8065 |         'TOOL_CHAIN_ORCHESTRATOR_ERROR'
8066 |       );
8067 |     }
8068 |   }
8069 | 
8070 |   /**
8071 |    * Phase 3: Expand Memory Tool
8072 |    * Retrieves and expands stored content from tiered responses
8073 |    */
8074 |   private async expandMemory(args: any): Promise<CallToolResult> {
8075 |     try {
8076 |       const { expandMemory } = await import('./tools/conversation-memory-tool.js');
8077 |       return await expandMemory(args, this.conversationMemoryManager);
8078 |     } catch (error) {
8079 |       throw new McpAdrError(
8080 |         `Memory expansion failed: ${error instanceof Error ? error.message : String(error)}`,
8081 |         'MEMORY_EXPANSION_ERROR'
8082 |       );
8083 |     }
8084 |   }
8085 | 
8086 |   /**
8087 |    * Phase 3: Query Conversation History Tool
8088 |    * Searches and retrieves conversation sessions
8089 |    */
8090 |   private async queryConversationHistory(args: any): Promise<CallToolResult> {
8091 |     try {
8092 |       const { queryConversationHistory } = await import('./tools/conversation-memory-tool.js');
8093 |       return await queryConversationHistory(args, this.conversationMemoryManager);
8094 |     } catch (error) {
8095 |       throw new McpAdrError(
8096 |         `Conversation history query failed: ${error instanceof Error ? error.message : String(error)}`,
8097 |         'CONVERSATION_QUERY_ERROR'
8098 |       );
8099 |     }
8100 |   }
8101 | 
8102 |   /**
8103 |    * Phase 3: Get Conversation Snapshot Tool
8104 |    * Retrieves current conversation context
8105 |    */
8106 |   private async getConversationSnapshot(args: any): Promise<CallToolResult> {
8107 |     try {
8108 |       const { getConversationSnapshot } = await import('./tools/conversation-memory-tool.js');
8109 |       return await getConversationSnapshot(args, this.conversationMemoryManager);
8110 |     } catch (error) {
8111 |       throw new McpAdrError(
8112 |         `Conversation snapshot retrieval failed: ${error instanceof Error ? error.message : String(error)}`,
8113 |         'SNAPSHOT_ERROR'
8114 |       );
8115 |     }
8116 |   }
8117 | 
8118 |   /**
8119 |    * Phase 3: Get Memory Statistics Tool
8120 |    * Retrieves conversation memory statistics
8121 |    */
8122 |   private async getMemoryStats(): Promise<CallToolResult> {
8123 |     try {
8124 |       const { getMemoryStats } = await import('./tools/conversation-memory-tool.js');
8125 |       return await getMemoryStats(this.conversationMemoryManager);
8126 |     } catch (error) {
8127 |       throw new McpAdrError(
8128 |         `Memory stats retrieval failed: ${error instanceof Error ? error.message : String(error)}`,
8129 |         'MEMORY_STATS_ERROR'
8130 |       );
8131 |     }
8132 |   }
8133 | 
8134 |   /**
8135 |    * Get Server Context Tool
8136 |    * Generates comprehensive server context file for LLM @ referencing
8137 |    */
8138 |   private async getServerContext(args: any): Promise<CallToolResult> {
8139 |     try {
8140 |       const { getServerContext } = await import('./tools/get-server-context-tool.js');
8141 |       return await getServerContext(
8142 |         args,
8143 |         this.kgManager,
8144 |         this.memoryEntityManager,
8145 |         this.conversationMemoryManager
8146 |       );
8147 |     } catch (error) {
8148 |       throw new McpAdrError(
8149 |         `Server context generation failed: ${error instanceof Error ? error.message : String(error)}`,
8150 |         'SERVER_CONTEXT_ERROR'
8151 |       );
8152 |     }
8153 |   }
8154 | }
8155 | 
8156 | /**
8157 |  * Main execution function for the MCP ADR Analysis Server
8158 |  *
8159 |  * @description Initializes and starts the MCP server with proper configuration,
8160 |  * error handling, and graceful shutdown. Handles command line arguments for
8161 |  * help, version, and test modes.
8162 |  *
8163 |  * @returns {Promise<void>} Resolves when server shuts down gracefully
8164 |  *
8165 |  * @throws {Error} When server initialization fails or configuration is invalid
8166 |  *
8167 |  * @example
8168 |  * ```typescript
8169 |  * // Start the server (typically called from CLI)
8170 |  * await main();
8171 |  * ```
8172 |  *
8173 |  * @since 1.0.0
8174 |  * @category Main
8175 |  */
8176 | async function main(): Promise<void> {
8177 |   const args = process.argv.slice(2);
8178 | 
8179 |   // Handle command line arguments
8180 |   if (args.includes('--help') || args.includes('-h')) {
8181 |     console.log(`
8182 | MCP ADR Analysis Server v${SERVER_INFO.version}
8183 | 
8184 | Usage: mcp-adr-analysis-server [options]
8185 | 
8186 | Options:
8187 |   --help, -h        Show this help message
8188 |   --version, -v     Show version information
8189 |   --test            Run health check and exit
8190 |   --config          Show configuration and exit
8191 | 
8192 | Environment Variables:
8193 |   PROJECT_PATH      Path to project directory (default: current directory)
8194 |   ADR_DIRECTORY     ADR directory relative to project (default: docs/adrs)
8195 |   LOG_LEVEL         Logging level: DEBUG, INFO, WARN, ERROR (default: INFO)
8196 |   CACHE_ENABLED     Enable caching: true, false (default: true)
8197 | 
8198 | Examples:
8199 |   mcp-adr-analysis-server                    # Start MCP server
8200 |   PROJECT_PATH=/path/to/project mcp-adr-analysis-server
8201 |   mcp-adr-analysis-server --test             # Health check
8202 | `);
8203 |     process.exit(0);
8204 |   }
8205 | 
8206 |   if (args.includes('--version') || args.includes('-v')) {
8207 |     console.log(`MCP ADR Analysis Server v${SERVER_INFO.version}`);
8208 |     process.exit(0);
8209 |   }
8210 | 
8211 |   try {
8212 |     const server = new McpAdrAnalysisServer();
8213 | 
8214 |     if (args.includes('--test')) {
8215 |       console.log('🔍 Running health check...');
8216 |       await server.healthCheck();
8217 |       console.log('✅ Health check passed - server can start successfully');
8218 |       process.exit(0);
8219 |     }
8220 | 
8221 |     if (args.includes('--config')) {
8222 |       console.log('📋 Server configuration validated');
8223 |       process.exit(0);
8224 |     }
8225 | 
8226 |     // Normal server startup
8227 |     await server.start();
8228 |   } catch (error) {
8229 |     console.error('❌ MCP server failed to start');
8230 |     console.error('Error:', error instanceof Error ? error.message : String(error));
8231 |     process.exit(1);
8232 |   }
8233 | }
8234 | 
8235 | // Start the server if this file is run directly
8236 | // Jest-compatible check: avoid import.meta.url which Jest cannot handle
8237 | // Handle both direct execution and npm global package symlinks
8238 | if (
8239 |   process.argv[1] &&
8240 |   (process.argv[1].endsWith('index.js') ||
8241 |     process.argv[1].endsWith('index.ts') ||
8242 |     process.argv[1].endsWith('mcp-adr-analysis-server'))
8243 | ) {
8244 |   main().catch(error => {
8245 |     console.error('Unhandled error:', error);
8246 |     process.exit(1);
8247 |   });
8248 | }
8249 | // Test comment for pre-commit hook
8250 | 
```
Page 357/358FirstPrevNextLast