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