@jwikman/bc-code-intelligence-mcp 1.5.7-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (753) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/dist/cache/cache-manager.d.ts +95 -0
  4. package/dist/cache/cache-manager.d.ts.map +1 -0
  5. package/dist/cache/cache-manager.js +328 -0
  6. package/dist/cache/cache-manager.js.map +1 -0
  7. package/dist/cli/bc-code-intel-cli.d.ts +9 -0
  8. package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
  9. package/dist/cli/bc-code-intel-cli.js +440 -0
  10. package/dist/cli/bc-code-intel-cli.js.map +1 -0
  11. package/dist/config/config-loader.d.ts +28 -0
  12. package/dist/config/config-loader.d.ts.map +1 -0
  13. package/dist/config/config-loader.js +497 -0
  14. package/dist/config/config-loader.js.map +1 -0
  15. package/dist/config/config-validator.d.ts +84 -0
  16. package/dist/config/config-validator.d.ts.map +1 -0
  17. package/dist/config/config-validator.js +608 -0
  18. package/dist/config/config-validator.js.map +1 -0
  19. package/dist/config/test-config-loader.d.ts +10 -0
  20. package/dist/config/test-config-loader.d.ts.map +1 -0
  21. package/dist/config/test-config-loader.js +135 -0
  22. package/dist/config/test-config-loader.js.map +1 -0
  23. package/dist/config/test-enhanced-layer-service.d.ts +7 -0
  24. package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
  25. package/dist/config/test-enhanced-layer-service.js +104 -0
  26. package/dist/config/test-enhanced-layer-service.js.map +1 -0
  27. package/dist/config/test-git-layer.d.ts +7 -0
  28. package/dist/config/test-git-layer.d.ts.map +1 -0
  29. package/dist/config/test-git-layer.js +68 -0
  30. package/dist/config/test-git-layer.js.map +1 -0
  31. package/dist/dev/hot-reload.d.ts +91 -0
  32. package/dist/dev/hot-reload.d.ts.map +1 -0
  33. package/dist/dev/hot-reload.js +358 -0
  34. package/dist/dev/hot-reload.js.map +1 -0
  35. package/dist/index.d.ts +82 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1211 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/layers/base-layer.d.ts +133 -0
  40. package/dist/layers/base-layer.d.ts.map +1 -0
  41. package/dist/layers/base-layer.js +290 -0
  42. package/dist/layers/base-layer.js.map +1 -0
  43. package/dist/layers/embedded-layer.d.ts +130 -0
  44. package/dist/layers/embedded-layer.d.ts.map +1 -0
  45. package/dist/layers/embedded-layer.js +612 -0
  46. package/dist/layers/embedded-layer.js.map +1 -0
  47. package/dist/layers/git-layer.d.ts +77 -0
  48. package/dist/layers/git-layer.d.ts.map +1 -0
  49. package/dist/layers/git-layer.js +529 -0
  50. package/dist/layers/git-layer.js.map +1 -0
  51. package/dist/layers/index.d.ts +12 -0
  52. package/dist/layers/index.d.ts.map +1 -0
  53. package/dist/layers/index.js +11 -0
  54. package/dist/layers/index.js.map +1 -0
  55. package/dist/layers/layer-service.d.ts +135 -0
  56. package/dist/layers/layer-service.d.ts.map +1 -0
  57. package/dist/layers/layer-service.js +586 -0
  58. package/dist/layers/layer-service.js.map +1 -0
  59. package/dist/layers/project-layer.d.ts +58 -0
  60. package/dist/layers/project-layer.d.ts.map +1 -0
  61. package/dist/layers/project-layer.js +286 -0
  62. package/dist/layers/project-layer.js.map +1 -0
  63. package/dist/monitoring/production-monitor.d.ts +148 -0
  64. package/dist/monitoring/production-monitor.d.ts.map +1 -0
  65. package/dist/monitoring/production-monitor.js +463 -0
  66. package/dist/monitoring/production-monitor.js.map +1 -0
  67. package/dist/performance/performance-monitor.d.ts +99 -0
  68. package/dist/performance/performance-monitor.d.ts.map +1 -0
  69. package/dist/performance/performance-monitor.js +253 -0
  70. package/dist/performance/performance-monitor.js.map +1 -0
  71. package/dist/sdk/bc-code-intel-client.d.ts +175 -0
  72. package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
  73. package/dist/sdk/bc-code-intel-client.js +380 -0
  74. package/dist/sdk/bc-code-intel-client.js.map +1 -0
  75. package/dist/search/intelligent-search.d.ts +97 -0
  76. package/dist/search/intelligent-search.d.ts.map +1 -0
  77. package/dist/search/intelligent-search.js +358 -0
  78. package/dist/search/intelligent-search.js.map +1 -0
  79. package/dist/security/access-control.d.ts +110 -0
  80. package/dist/security/access-control.d.ts.map +1 -0
  81. package/dist/security/access-control.js +353 -0
  82. package/dist/security/access-control.js.map +1 -0
  83. package/dist/services/code-analysis-service.d.ts +72 -0
  84. package/dist/services/code-analysis-service.d.ts.map +1 -0
  85. package/dist/services/code-analysis-service.js +818 -0
  86. package/dist/services/code-analysis-service.js.map +1 -0
  87. package/dist/services/enhanced-prompt-service.d.ts +56 -0
  88. package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
  89. package/dist/services/enhanced-prompt-service.js +165 -0
  90. package/dist/services/enhanced-prompt-service.js.map +1 -0
  91. package/dist/services/knowledge-service.d.ts +90 -0
  92. package/dist/services/knowledge-service.d.ts.map +1 -0
  93. package/dist/services/knowledge-service.js +342 -0
  94. package/dist/services/knowledge-service.js.map +1 -0
  95. package/dist/services/methodology-service.d.ts +91 -0
  96. package/dist/services/methodology-service.d.ts.map +1 -0
  97. package/dist/services/methodology-service.js +423 -0
  98. package/dist/services/methodology-service.js.map +1 -0
  99. package/dist/services/multi-content-layer-service.d.ts +198 -0
  100. package/dist/services/multi-content-layer-service.d.ts.map +1 -0
  101. package/dist/services/multi-content-layer-service.js +991 -0
  102. package/dist/services/multi-content-layer-service.js.map +1 -0
  103. package/dist/services/roleplay-engine.d.ts +161 -0
  104. package/dist/services/roleplay-engine.d.ts.map +1 -0
  105. package/dist/services/roleplay-engine.js +994 -0
  106. package/dist/services/roleplay-engine.js.map +1 -0
  107. package/dist/services/session-storage/file-storage.d.ts +30 -0
  108. package/dist/services/session-storage/file-storage.d.ts.map +1 -0
  109. package/dist/services/session-storage/file-storage.js +229 -0
  110. package/dist/services/session-storage/file-storage.js.map +1 -0
  111. package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
  112. package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
  113. package/dist/services/session-storage/in-memory-storage.js +142 -0
  114. package/dist/services/session-storage/in-memory-storage.js.map +1 -0
  115. package/dist/services/specialist-discovery.d.ts +98 -0
  116. package/dist/services/specialist-discovery.d.ts.map +1 -0
  117. package/dist/services/specialist-discovery.js +387 -0
  118. package/dist/services/specialist-discovery.js.map +1 -0
  119. package/dist/services/specialist-loader.d.ts +101 -0
  120. package/dist/services/specialist-loader.d.ts.map +1 -0
  121. package/dist/services/specialist-loader.js +256 -0
  122. package/dist/services/specialist-loader.js.map +1 -0
  123. package/dist/services/specialist-session-manager.d.ts +76 -0
  124. package/dist/services/specialist-session-manager.d.ts.map +1 -0
  125. package/dist/services/specialist-session-manager.js +255 -0
  126. package/dist/services/specialist-session-manager.js.map +1 -0
  127. package/dist/services/workflow-service.d.ts +146 -0
  128. package/dist/services/workflow-service.d.ts.map +1 -0
  129. package/dist/services/workflow-service.js +409 -0
  130. package/dist/services/workflow-service.js.map +1 -0
  131. package/dist/setup/post-install.d.ts +12 -0
  132. package/dist/setup/post-install.d.ts.map +1 -0
  133. package/dist/setup/post-install.js +81 -0
  134. package/dist/setup/post-install.js.map +1 -0
  135. package/dist/streamlined-handlers.d.ts +94 -0
  136. package/dist/streamlined-handlers.d.ts.map +1 -0
  137. package/dist/streamlined-handlers.js +665 -0
  138. package/dist/streamlined-handlers.js.map +1 -0
  139. package/dist/test-enhanced-mcp-server.d.ts +7 -0
  140. package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
  141. package/dist/test-enhanced-mcp-server.js +177 -0
  142. package/dist/test-enhanced-mcp-server.js.map +1 -0
  143. package/dist/tools/config-diagnostic-tools.d.ts +234 -0
  144. package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
  145. package/dist/tools/config-diagnostic-tools.js +887 -0
  146. package/dist/tools/config-diagnostic-tools.js.map +1 -0
  147. package/dist/tools/core-tools.d.ts +26 -0
  148. package/dist/tools/core-tools.d.ts.map +1 -0
  149. package/dist/tools/core-tools.js +241 -0
  150. package/dist/tools/core-tools.js.map +1 -0
  151. package/dist/tools/handoff-tools.d.ts +37 -0
  152. package/dist/tools/handoff-tools.d.ts.map +1 -0
  153. package/dist/tools/handoff-tools.js +265 -0
  154. package/dist/tools/handoff-tools.js.map +1 -0
  155. package/dist/tools/index.d.ts +61 -0
  156. package/dist/tools/index.d.ts.map +1 -0
  157. package/dist/tools/index.js +75 -0
  158. package/dist/tools/index.js.map +1 -0
  159. package/dist/tools/onboarding-tools.d.ts +43 -0
  160. package/dist/tools/onboarding-tools.d.ts.map +1 -0
  161. package/dist/tools/onboarding-tools.js +353 -0
  162. package/dist/tools/onboarding-tools.js.map +1 -0
  163. package/dist/tools/specialist-discovery-tools.d.ts +27 -0
  164. package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
  165. package/dist/tools/specialist-discovery-tools.js +275 -0
  166. package/dist/tools/specialist-discovery-tools.js.map +1 -0
  167. package/dist/tools/specialist-tools.d.ts +43 -0
  168. package/dist/tools/specialist-tools.d.ts.map +1 -0
  169. package/dist/tools/specialist-tools.js +372 -0
  170. package/dist/tools/specialist-tools.js.map +1 -0
  171. package/dist/tools/workspace-tools.d.ts +96 -0
  172. package/dist/tools/workspace-tools.d.ts.map +1 -0
  173. package/dist/tools/workspace-tools.js +188 -0
  174. package/dist/tools/workspace-tools.js.map +1 -0
  175. package/dist/types/bc-knowledge.d.ts +303 -0
  176. package/dist/types/bc-knowledge.d.ts.map +1 -0
  177. package/dist/types/bc-knowledge.js +69 -0
  178. package/dist/types/bc-knowledge.js.map +1 -0
  179. package/dist/types/config-types.d.ts +186 -0
  180. package/dist/types/config-types.d.ts.map +1 -0
  181. package/dist/types/config-types.js +109 -0
  182. package/dist/types/config-types.js.map +1 -0
  183. package/dist/types/enhanced-layer-types.d.ts +193 -0
  184. package/dist/types/enhanced-layer-types.d.ts.map +1 -0
  185. package/dist/types/enhanced-layer-types.js +9 -0
  186. package/dist/types/enhanced-layer-types.js.map +1 -0
  187. package/dist/types/index.d.ts +5 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +7 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/layer-types.d.ts +173 -0
  192. package/dist/types/layer-types.d.ts.map +1 -0
  193. package/dist/types/layer-types.js +27 -0
  194. package/dist/types/layer-types.js.map +1 -0
  195. package/dist/types/roleplay-types.d.ts +156 -0
  196. package/dist/types/roleplay-types.d.ts.map +1 -0
  197. package/dist/types/roleplay-types.js +8 -0
  198. package/dist/types/roleplay-types.js.map +1 -0
  199. package/dist/types/session-types.d.ts +127 -0
  200. package/dist/types/session-types.d.ts.map +1 -0
  201. package/dist/types/session-types.js +8 -0
  202. package/dist/types/session-types.js.map +1 -0
  203. package/dist/utils/path-utils.d.ts +5 -0
  204. package/dist/utils/path-utils.d.ts.map +1 -0
  205. package/dist/utils/path-utils.js +14 -0
  206. package/dist/utils/path-utils.js.map +1 -0
  207. package/dist/workflows/domain-workflows.d.ts +8 -0
  208. package/dist/workflows/domain-workflows.d.ts.map +1 -0
  209. package/dist/workflows/domain-workflows.js +360 -0
  210. package/dist/workflows/domain-workflows.js.map +1 -0
  211. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
  212. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
  213. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
  214. package/embedded-knowledge/AGENTS.md +178 -0
  215. package/embedded-knowledge/CONTRIBUTING.md +58 -0
  216. package/embedded-knowledge/LICENSE +21 -0
  217. package/embedded-knowledge/README.md +32 -0
  218. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
  219. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
  220. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
  221. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
  222. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
  223. package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +371 -0
  224. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
  225. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
  226. package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +281 -0
  227. package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -0
  228. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
  229. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
  230. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
  231. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
  232. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
  233. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
  234. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
  235. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
  236. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
  237. package/embedded-knowledge/domains/alex-architect/samples/testability-design-patterns.md +223 -0
  238. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
  239. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
  240. package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +77 -0
  241. package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
  242. package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
  243. package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
  244. package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
  245. package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
  246. package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
  247. package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
  248. package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
  249. package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
  250. package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
  251. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -0
  252. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
  253. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
  254. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
  255. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
  256. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
  257. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
  258. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
  259. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
  260. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
  261. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
  262. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
  263. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
  264. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
  265. package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +160 -0
  266. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
  267. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
  268. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
  269. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
  270. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
  271. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
  272. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
  273. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
  274. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
  275. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
  276. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
  277. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
  278. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
  279. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
  280. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
  281. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
  282. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
  283. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
  284. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
  285. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
  286. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
  287. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
  288. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
  289. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
  290. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
  291. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
  292. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
  293. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
  294. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
  295. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
  296. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
  297. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
  298. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
  299. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
  300. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
  301. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
  302. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
  303. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
  304. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
  305. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
  306. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
  307. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
  308. package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +159 -0
  309. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
  310. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
  311. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
  312. package/embedded-knowledge/domains/eva-errors/samples/codeunit-run-pattern.md +239 -0
  313. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
  314. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
  315. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
  316. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
  317. package/embedded-knowledge/domains/eva-errors/samples/try-function-usage.md +195 -0
  318. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
  319. package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -0
  320. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
  321. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
  322. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
  323. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
  324. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
  325. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
  326. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
  327. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
  328. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
  329. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
  330. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
  331. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
  332. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
  333. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
  334. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
  335. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
  336. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
  337. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
  338. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
  339. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
  340. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
  341. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
  342. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
  343. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
  344. package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +201 -0
  345. package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
  346. package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
  347. package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
  348. package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
  349. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
  350. package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -0
  351. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
  352. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
  353. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
  354. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
  355. package/embedded-knowledge/domains/quinn-tester/samples/isolation-testing-patterns.md +424 -0
  356. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
  357. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
  358. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
  359. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
  360. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
  361. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
  362. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
  363. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
  364. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
  365. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
  366. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
  367. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
  368. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
  369. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
  370. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
  371. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
  372. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
  373. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
  374. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
  375. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
  376. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
  377. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
  378. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
  379. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
  380. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
  381. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
  382. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
  383. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
  384. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
  385. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
  386. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
  387. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
  388. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
  389. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
  390. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
  391. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
  392. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
  393. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
  394. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
  395. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
  396. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
  397. package/embedded-knowledge/domains/roger-reviewer/samples/testability-code-smells.md +256 -0
  398. package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -0
  399. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
  400. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
  401. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
  402. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
  403. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
  404. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
  405. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
  406. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
  407. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
  408. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
  409. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
  410. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
  411. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
  412. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
  413. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
  414. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
  415. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
  416. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
  417. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
  418. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
  419. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
  420. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
  421. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
  422. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
  423. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
  424. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
  425. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
  426. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
  427. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
  428. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
  429. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
  430. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
  431. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
  432. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
  433. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
  434. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
  435. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
  436. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
  437. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
  438. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
  439. package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
  440. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
  441. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
  442. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
  443. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +146 -0
  444. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
  445. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
  446. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
  447. package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
  448. package/embedded-knowledge/indexes/domain-catalog.json +106 -0
  449. package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
  450. package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
  451. package/embedded-knowledge/indexes/tags/access-control.json +1 -0
  452. package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
  453. package/embedded-knowledge/indexes/tags/actions.json +1 -0
  454. package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
  455. package/embedded-knowledge/indexes/tags/advanced.json +1 -0
  456. package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
  457. package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
  458. package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
  459. package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
  460. package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
  461. package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
  462. package/embedded-knowledge/indexes/tags/analytics.json +1 -0
  463. package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
  464. package/embedded-knowledge/indexes/tags/api-design.json +1 -0
  465. package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
  466. package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
  467. package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
  468. package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
  469. package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
  470. package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
  471. package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
  472. package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
  473. package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
  474. package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
  475. package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
  476. package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
  477. package/embedded-knowledge/indexes/tags/api.json +1 -0
  478. package/embedded-knowledge/indexes/tags/architecture.json +1 -0
  479. package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
  480. package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
  481. package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
  482. package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
  483. package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
  484. package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
  485. package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
  486. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
  487. package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
  488. package/embedded-knowledge/indexes/tags/binding.json +1 -0
  489. package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
  490. package/embedded-knowledge/indexes/tags/blocks.json +1 -0
  491. package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
  492. package/embedded-knowledge/indexes/tags/branching.json +1 -0
  493. package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
  494. package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
  495. package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
  496. package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
  497. package/embedded-knowledge/indexes/tags/business-process.json +1 -0
  498. package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
  499. package/embedded-knowledge/indexes/tags/caching.json +1 -0
  500. package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
  501. package/embedded-knowledge/indexes/tags/case.json +1 -0
  502. package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
  503. package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
  504. package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
  505. package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
  506. package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
  507. package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
  508. package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
  509. package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
  510. package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
  511. package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
  512. package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
  513. package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
  514. package/embedded-knowledge/indexes/tags/code-style.json +1 -0
  515. package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
  516. package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
  517. package/embedded-knowledge/indexes/tags/comments.json +1 -0
  518. package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
  519. package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
  520. package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
  521. package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
  522. package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
  523. package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
  524. package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
  525. package/embedded-knowledge/indexes/tags/conditional.json +1 -0
  526. package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
  527. package/embedded-knowledge/indexes/tags/consistency.json +1 -0
  528. package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
  529. package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
  530. package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
  531. package/embedded-knowledge/indexes/tags/correlation.json +1 -0
  532. package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
  533. package/embedded-knowledge/indexes/tags/data-access.json +1 -0
  534. package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
  535. package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
  536. package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
  537. package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
  538. package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
  539. package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
  540. package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
  541. package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
  542. package/embedded-knowledge/indexes/tags/database.json +1 -0
  543. package/embedded-knowledge/indexes/tags/debugging.json +1 -0
  544. package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
  545. package/embedded-knowledge/indexes/tags/declaration.json +1 -0
  546. package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
  547. package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
  548. package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
  549. package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
  550. package/embedded-knowledge/indexes/tags/deployment.json +1 -0
  551. package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
  552. package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
  553. package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
  554. package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
  555. package/embedded-knowledge/indexes/tags/documentation.json +1 -0
  556. package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
  557. package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
  558. package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
  559. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
  560. package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
  561. package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
  562. package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
  563. package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
  564. package/embedded-knowledge/indexes/tags/error-text.json +1 -0
  565. package/embedded-knowledge/indexes/tags/etag.json +1 -0
  566. package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
  567. package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
  568. package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
  569. package/embedded-knowledge/indexes/tags/events.json +1 -0
  570. package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
  571. package/embedded-knowledge/indexes/tags/expressions.json +1 -0
  572. package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
  573. package/embedded-knowledge/indexes/tags/extensions.json +1 -0
  574. package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
  575. package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
  576. package/embedded-knowledge/indexes/tags/field-control.json +1 -0
  577. package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
  578. package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
  579. package/embedded-knowledge/indexes/tags/field-state.json +1 -0
  580. package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
  581. package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
  582. package/embedded-knowledge/indexes/tags/fields.json +1 -0
  583. package/embedded-knowledge/indexes/tags/filtering.json +1 -0
  584. package/embedded-knowledge/indexes/tags/filters.json +1 -0
  585. package/embedded-knowledge/indexes/tags/formatting.json +1 -0
  586. package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
  587. package/embedded-knowledge/indexes/tags/http-status.json +1 -0
  588. package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
  589. package/embedded-knowledge/indexes/tags/implementation.json +1 -0
  590. package/embedded-knowledge/indexes/tags/indentation.json +1 -0
  591. package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
  592. package/embedded-knowledge/indexes/tags/indexing.json +1 -0
  593. package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
  594. package/embedded-knowledge/indexes/tags/integration.json +1 -0
  595. package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
  596. package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
  597. package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
  598. package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
  599. package/embedded-knowledge/indexes/tags/isolation.json +1 -0
  600. package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
  601. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
  602. package/embedded-knowledge/indexes/tags/keywords.json +1 -0
  603. package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
  604. package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
  605. package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
  606. package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
  607. package/embedded-knowledge/indexes/tags/localization.json +1 -0
  608. package/embedded-knowledge/indexes/tags/logging.json +1 -0
  609. package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
  610. package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
  611. package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
  612. package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
  613. package/embedded-knowledge/indexes/tags/memory.json +1 -0
  614. package/embedded-knowledge/indexes/tags/message-design.json +1 -0
  615. package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
  616. package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
  617. package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
  618. package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
  619. package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
  620. package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
  621. package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
  622. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
  623. package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
  624. package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
  625. package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
  626. package/embedded-knowledge/indexes/tags/naming.json +1 -0
  627. package/embedded-knowledge/indexes/tags/navigation.json +1 -0
  628. package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
  629. package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
  630. package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
  631. package/embedded-knowledge/indexes/tags/no-series.json +1 -0
  632. package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
  633. package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
  634. package/embedded-knowledge/indexes/tags/odata.json +1 -0
  635. package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
  636. package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
  637. package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
  638. package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
  639. package/embedded-knowledge/indexes/tags/operators.json +1 -0
  640. package/embedded-knowledge/indexes/tags/optimization.json +1 -0
  641. package/embedded-knowledge/indexes/tags/order.json +1 -0
  642. package/embedded-knowledge/indexes/tags/organization.json +1 -0
  643. package/embedded-knowledge/indexes/tags/pages.json +1 -0
  644. package/embedded-knowledge/indexes/tags/parameters.json +1 -0
  645. package/embedded-knowledge/indexes/tags/patterns.json +1 -0
  646. package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
  647. package/embedded-knowledge/indexes/tags/performance.json +1 -0
  648. package/embedded-knowledge/indexes/tags/placement.json +1 -0
  649. package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
  650. package/embedded-knowledge/indexes/tags/posting.json +1 -0
  651. package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
  652. package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
  653. package/embedded-knowledge/indexes/tags/privacy.json +1 -0
  654. package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
  655. package/embedded-knowledge/indexes/tags/production.json +1 -0
  656. package/embedded-knowledge/indexes/tags/productivity.json +1 -0
  657. package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
  658. package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
  659. package/embedded-knowledge/indexes/tags/ranges.json +1 -0
  660. package/embedded-knowledge/indexes/tags/readability.json +1 -0
  661. package/embedded-knowledge/indexes/tags/record-access.json +1 -0
  662. package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
  663. package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
  664. package/embedded-knowledge/indexes/tags/reference.json +1 -0
  665. package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
  666. package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
  667. package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
  668. package/embedded-knowledge/indexes/tags/runtime.json +1 -0
  669. package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
  670. package/embedded-knowledge/indexes/tags/security.json +1 -0
  671. package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
  672. package/embedded-knowledge/indexes/tags/serialization.json +1 -0
  673. package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
  674. package/embedded-knowledge/indexes/tags/session.json +1 -0
  675. package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
  676. package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
  677. package/embedded-knowledge/indexes/tags/sift.json +1 -0
  678. package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
  679. package/embedded-knowledge/indexes/tags/spacing.json +1 -0
  680. package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
  681. package/embedded-knowledge/indexes/tags/standards.json +1 -0
  682. package/embedded-knowledge/indexes/tags/statements.json +1 -0
  683. package/embedded-knowledge/indexes/tags/streaming.json +1 -0
  684. package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
  685. package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
  686. package/embedded-knowledge/indexes/tags/structure.json +1 -0
  687. package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
  688. package/embedded-knowledge/indexes/tags/switch.json +1 -0
  689. package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
  690. package/embedded-knowledge/indexes/tags/syntax.json +1 -0
  691. package/embedded-knowledge/indexes/tags/systemid.json +1 -0
  692. package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
  693. package/embedded-knowledge/indexes/tags/table-events.json +1 -0
  694. package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
  695. package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
  696. package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
  697. package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
  698. package/embedded-knowledge/indexes/tags/template-method.json +1 -0
  699. package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
  700. package/embedded-knowledge/indexes/tags/testfield.json +1 -0
  701. package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
  702. package/embedded-knowledge/indexes/tags/triggers.json +1 -0
  703. package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
  704. package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
  705. package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
  706. package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
  707. package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
  708. package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
  709. package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
  710. package/embedded-knowledge/indexes/tags/validation.json +1 -0
  711. package/embedded-knowledge/indexes/tags/variables.json +1 -0
  712. package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
  713. package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
  714. package/embedded-knowledge/indexes/tags/web-services.json +1 -0
  715. package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
  716. package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
  717. package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
  718. package/embedded-knowledge/indexes/tags/workspace.json +1 -0
  719. package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
  720. package/embedded-knowledge/indexes/topic-relationships.json +128 -0
  721. package/embedded-knowledge/methodologies/index.json +81 -0
  722. package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
  723. package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
  724. package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
  725. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
  726. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
  727. package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
  728. package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
  729. package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
  730. package/embedded-knowledge/methodologies/phases/performance.md +211 -0
  731. package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
  732. package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
  733. package/embedded-knowledge/methodologies/phases/verification.md +146 -0
  734. package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
  735. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
  736. package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
  737. package/embedded-knowledge/specialists/alex-architect.md +305 -0
  738. package/embedded-knowledge/specialists/casey-copilot.md +314 -0
  739. package/embedded-knowledge/specialists/chris-config.md +226 -0
  740. package/embedded-knowledge/specialists/dean-debug.md +365 -0
  741. package/embedded-knowledge/specialists/eva-errors.md +291 -0
  742. package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
  743. package/embedded-knowledge/specialists/logan-legacy.md +265 -0
  744. package/embedded-knowledge/specialists/maya-mentor.md +299 -0
  745. package/embedded-knowledge/specialists/morgan-market.md +281 -0
  746. package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
  747. package/embedded-knowledge/specialists/quinn-tester.md +323 -0
  748. package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
  749. package/embedded-knowledge/specialists/sam-coder.md +342 -0
  750. package/embedded-knowledge/specialists/seth-security.md +290 -0
  751. package/embedded-knowledge/specialists/taylor-docs.md +312 -0
  752. package/embedded-knowledge/specialists/uma-ux.md +291 -0
  753. package/package.json +82 -0
@@ -0,0 +1,887 @@
1
+ /**
2
+ * Configuration Diagnostic Tools
3
+ *
4
+ * Tools for Chris Config to diagnose configuration and layer issues,
5
+ * particularly git authentication and Azure DevOps connectivity.
6
+ */
7
+ import simpleGit from 'simple-git';
8
+ import { existsSync, accessSync, constants as fsConstants } from 'fs';
9
+ import { stat, readdir } from 'fs/promises';
10
+ import { join } from 'path';
11
+ export class ConfigDiagnosticTools {
12
+ layerService;
13
+ configLoader;
14
+ constructor(layerService, configLoader) {
15
+ this.layerService = layerService;
16
+ this.configLoader = configLoader;
17
+ }
18
+ getToolDefinitions() {
19
+ return [
20
+ {
21
+ name: 'diagnose_git_layer',
22
+ description: 'Diagnose git layer authentication and connectivity issues. Use this when git layers fail to load or Azure DevOps PAT authentication is not working.',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ git_url: {
27
+ type: 'string',
28
+ description: 'Git repository URL to test (e.g., https://dev.azure.com/org/project/_git/repo)'
29
+ },
30
+ auth_type: {
31
+ type: 'string',
32
+ enum: ['token', 'basic', 'ssh'],
33
+ description: 'Authentication type being used'
34
+ },
35
+ token_env_var: {
36
+ type: 'string',
37
+ description: 'Environment variable name containing the PAT/token (if using token auth)'
38
+ },
39
+ branch: {
40
+ type: 'string',
41
+ description: 'Branch to test (defaults to main)',
42
+ default: 'main'
43
+ },
44
+ test_type: {
45
+ type: 'string',
46
+ enum: ['connectivity', 'authentication', 'clone', 'full'],
47
+ description: 'Type of diagnostic test to run',
48
+ default: 'full'
49
+ }
50
+ },
51
+ required: ['git_url', 'auth_type']
52
+ }
53
+ },
54
+ {
55
+ name: 'validate_layer_config',
56
+ description: 'Validate layer configuration before attempting to load. Checks paths, permissions, and configuration syntax.',
57
+ inputSchema: {
58
+ type: 'object',
59
+ properties: {
60
+ config_path: {
61
+ type: 'string',
62
+ description: 'Path to configuration file to validate'
63
+ },
64
+ check_type: {
65
+ type: 'string',
66
+ enum: ['syntax', 'paths', 'permissions', 'full'],
67
+ description: 'Type of validation to perform',
68
+ default: 'full'
69
+ }
70
+ },
71
+ required: ['config_path']
72
+ }
73
+ },
74
+ {
75
+ name: 'test_azure_devops_pat',
76
+ description: 'Test Azure DevOps Personal Access Token (PAT) validity and permissions. Helps diagnose PAT-related authentication failures.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ organization: {
81
+ type: 'string',
82
+ description: 'Azure DevOps organization name'
83
+ },
84
+ project: {
85
+ type: 'string',
86
+ description: 'Azure DevOps project name'
87
+ },
88
+ repository: {
89
+ type: 'string',
90
+ description: 'Repository name'
91
+ },
92
+ pat_env_var: {
93
+ type: 'string',
94
+ description: 'Environment variable containing the PAT'
95
+ }
96
+ },
97
+ required: ['organization', 'project', 'repository', 'pat_env_var']
98
+ }
99
+ },
100
+ {
101
+ name: 'get_layer_diagnostics',
102
+ description: 'Get detailed diagnostics for all configured layers including load status, errors, and performance metrics.',
103
+ inputSchema: {
104
+ type: 'object',
105
+ properties: {
106
+ layer_name: {
107
+ type: 'string',
108
+ description: 'Specific layer name to diagnose (optional - omit for all layers)'
109
+ },
110
+ include_metrics: {
111
+ type: 'boolean',
112
+ description: 'Include performance metrics',
113
+ default: true
114
+ }
115
+ },
116
+ required: []
117
+ }
118
+ },
119
+ {
120
+ name: 'diagnose_local_layer',
121
+ description: 'Diagnose local layer (project overrides) path and content issues. Use when local layers fail to load or have 0 topics.',
122
+ inputSchema: {
123
+ type: 'object',
124
+ properties: {
125
+ layer_path: {
126
+ type: 'string',
127
+ description: 'Path to local layer directory (e.g., ./bc-code-intel-overrides)',
128
+ default: './bc-code-intel-overrides'
129
+ }
130
+ },
131
+ required: []
132
+ }
133
+ },
134
+ {
135
+ name: 'reload_layers',
136
+ description: 'Reload layers after configuration changes without restarting MCP server. Useful for testing configuration changes.',
137
+ inputSchema: {
138
+ type: 'object',
139
+ properties: {
140
+ layer_name: {
141
+ type: 'string',
142
+ description: 'Specific layer to reload (optional - omit to reload all layers)'
143
+ },
144
+ reload_config: {
145
+ type: 'boolean',
146
+ description: 'Reload configuration file before reloading layers',
147
+ default: true
148
+ }
149
+ },
150
+ required: []
151
+ }
152
+ }
153
+ ];
154
+ }
155
+ async handleToolCall(request) {
156
+ const { name, arguments: args } = request.params;
157
+ try {
158
+ switch (name) {
159
+ case 'diagnose_git_layer':
160
+ return await this.diagnoseGitLayer(args);
161
+ case 'validate_layer_config':
162
+ return await this.validateLayerConfig(args);
163
+ case 'test_azure_devops_pat':
164
+ return await this.testAzureDevOpsPAT(args);
165
+ case 'get_layer_diagnostics':
166
+ return await this.getLayerDiagnostics(args);
167
+ case 'diagnose_local_layer':
168
+ return await this.diagnoseLocalLayer(args);
169
+ case 'reload_layers':
170
+ return await this.reloadLayers(args);
171
+ default:
172
+ return {
173
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
174
+ isError: true
175
+ };
176
+ }
177
+ }
178
+ catch (error) {
179
+ return {
180
+ content: [{
181
+ type: 'text',
182
+ text: `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`
183
+ }],
184
+ isError: true
185
+ };
186
+ }
187
+ }
188
+ async diagnoseGitLayer(args) {
189
+ const { git_url, auth_type, token_env_var, branch = 'main', test_type = 'full' } = args;
190
+ const diagnostics = {
191
+ timestamp: new Date().toISOString(),
192
+ url: git_url,
193
+ auth_type,
194
+ tests: []
195
+ };
196
+ // Test 1: URL Format Validation
197
+ if (test_type === 'connectivity' || test_type === 'full') {
198
+ const urlTest = this.validateGitUrl(git_url);
199
+ diagnostics.tests.push(urlTest);
200
+ }
201
+ // Test 2: Authentication Configuration
202
+ if (test_type === 'authentication' || test_type === 'full') {
203
+ const authTest = await this.testAuthConfiguration(git_url, auth_type, token_env_var);
204
+ diagnostics.tests.push(authTest);
205
+ }
206
+ // Test 3: Network Connectivity (if full test)
207
+ if (test_type === 'connectivity' || test_type === 'full') {
208
+ const connectivityTest = await this.testGitConnectivity(git_url, auth_type, token_env_var);
209
+ diagnostics.tests.push(connectivityTest);
210
+ }
211
+ // Test 4: Clone Test (if full or clone test)
212
+ if (test_type === 'clone' || test_type === 'full') {
213
+ const cloneTest = await this.testGitClone(git_url, auth_type, token_env_var, branch);
214
+ diagnostics.tests.push(cloneTest);
215
+ }
216
+ // Generate recommendations based on failures
217
+ const recommendations = this.generateRecommendations(diagnostics.tests, auth_type);
218
+ return {
219
+ content: [{
220
+ type: 'text',
221
+ text: JSON.stringify({
222
+ ...diagnostics,
223
+ summary: this.generateDiagnosticSummary(diagnostics.tests),
224
+ recommendations
225
+ }, null, 2)
226
+ }]
227
+ };
228
+ }
229
+ validateGitUrl(url) {
230
+ const test = {
231
+ name: 'URL Format Validation',
232
+ passed: false,
233
+ details: {}
234
+ };
235
+ // Check URL format
236
+ try {
237
+ const urlObj = new URL(url);
238
+ test.details.protocol = urlObj.protocol;
239
+ test.details.hostname = urlObj.hostname;
240
+ test.details.pathname = urlObj.pathname;
241
+ // Azure DevOps specific validation
242
+ if (url.includes('dev.azure.com') || url.includes('visualstudio.com')) {
243
+ test.details.provider = 'Azure DevOps';
244
+ // Parse Azure DevOps URL components
245
+ const azureMatch = url.match(/dev\.azure\.com\/([^\/]+)\/([^\/]+)\/_git\/(.+?)(?:\.git)?$/);
246
+ if (azureMatch) {
247
+ test.details.organization = azureMatch[1];
248
+ test.details.project = azureMatch[2];
249
+ test.details.repository = azureMatch[3];
250
+ test.passed = true;
251
+ test.details.message = 'Valid Azure DevOps URL format';
252
+ }
253
+ else {
254
+ test.details.message = 'Invalid Azure DevOps URL format. Expected: https://dev.azure.com/{org}/{project}/_git/{repo}';
255
+ test.details.recommendation = 'Verify your Azure DevOps repository URL format';
256
+ }
257
+ }
258
+ else if (url.includes('github.com')) {
259
+ test.details.provider = 'GitHub';
260
+ test.passed = true;
261
+ }
262
+ else if (url.includes('gitlab.com')) {
263
+ test.details.provider = 'GitLab';
264
+ test.passed = true;
265
+ }
266
+ else {
267
+ test.details.provider = 'Unknown';
268
+ test.passed = true; // Generic git URL
269
+ }
270
+ }
271
+ catch (error) {
272
+ test.details.message = `Invalid URL: ${error instanceof Error ? error.message : String(error)}`;
273
+ test.details.recommendation = 'Provide a valid HTTP(S) or SSH URL';
274
+ }
275
+ return test;
276
+ }
277
+ async testAuthConfiguration(url, authType, tokenEnvVar) {
278
+ const test = {
279
+ name: 'Authentication Configuration',
280
+ passed: false,
281
+ details: {}
282
+ };
283
+ test.details.auth_type = authType;
284
+ if (authType === 'token') {
285
+ if (!tokenEnvVar) {
286
+ test.details.message = 'Token environment variable not specified';
287
+ test.details.recommendation = 'Specify token_env_var parameter';
288
+ return test;
289
+ }
290
+ test.details.token_env_var = tokenEnvVar;
291
+ const tokenValue = process.env[tokenEnvVar];
292
+ if (!tokenValue) {
293
+ test.details.message = `Environment variable ${tokenEnvVar} not set or empty`;
294
+ test.details.recommendation = `Set ${tokenEnvVar} environment variable with your PAT`;
295
+ test.details.check_instructions = [
296
+ `Run: echo $env:${tokenEnvVar} (PowerShell) or echo $${tokenEnvVar} (Bash)`,
297
+ 'Verify the PAT is not expired',
298
+ 'Ensure the PAT has "Code (Read)" permission for Azure DevOps'
299
+ ];
300
+ return test;
301
+ }
302
+ test.details.token_length = tokenValue.length;
303
+ test.details.token_prefix = tokenValue.substring(0, 4) + '...';
304
+ // Azure DevOps PAT validation
305
+ if (url.includes('dev.azure.com')) {
306
+ // Azure DevOps PATs are typically 52 characters
307
+ if (tokenValue.length === 52) {
308
+ test.passed = true;
309
+ test.details.message = 'PAT format appears valid for Azure DevOps';
310
+ }
311
+ else {
312
+ test.details.message = `PAT length (${tokenValue.length}) unusual for Azure DevOps (expected 52 characters)`;
313
+ test.details.recommendation = 'Verify this is a valid Azure DevOps Personal Access Token';
314
+ }
315
+ }
316
+ else {
317
+ test.passed = true;
318
+ test.details.message = 'Token configuration present';
319
+ }
320
+ }
321
+ else if (authType === 'ssh') {
322
+ test.details.message = 'SSH authentication configured';
323
+ test.passed = true;
324
+ }
325
+ else {
326
+ test.details.message = `Unsupported auth type: ${authType}`;
327
+ test.details.recommendation = 'Use "token", "basic", or "ssh" for auth_type';
328
+ }
329
+ return test;
330
+ }
331
+ async testGitConnectivity(url, authType, tokenEnvVar) {
332
+ const test = {
333
+ name: 'Git Connectivity Test',
334
+ passed: false,
335
+ details: {}
336
+ };
337
+ try {
338
+ const git = simpleGit();
339
+ // Prepare URL with auth for ls-remote test
340
+ let testUrl = url;
341
+ if (authType === 'token' && tokenEnvVar) {
342
+ const token = process.env[tokenEnvVar];
343
+ if (token && testUrl.startsWith('https://')) {
344
+ // For Azure DevOps, use empty username with PAT
345
+ testUrl = testUrl.replace('https://', `https://:${token}@`);
346
+ }
347
+ }
348
+ // Try ls-remote to test connectivity without cloning
349
+ const result = await git.listRemote(['--heads', testUrl]);
350
+ test.passed = true;
351
+ test.details.message = 'Successfully connected to repository';
352
+ test.details.branches_found = result.split('\n').filter(Boolean).length;
353
+ }
354
+ catch (error) {
355
+ test.details.message = 'Failed to connect to repository';
356
+ test.details.error = error.message;
357
+ // Parse common error scenarios
358
+ if (error.message.includes('Authentication failed') || error.message.includes('403')) {
359
+ test.details.issue = 'Authentication failure';
360
+ test.details.recommendation = 'Verify PAT is valid and has Code (Read) permission';
361
+ }
362
+ else if (error.message.includes('Could not resolve host')) {
363
+ test.details.issue = 'Network/DNS issue';
364
+ test.details.recommendation = 'Check network connection and URL hostname';
365
+ }
366
+ else if (error.message.includes('Repository not found') || error.message.includes('404')) {
367
+ test.details.issue = 'Repository not found';
368
+ test.details.recommendation = 'Verify repository URL and access permissions';
369
+ }
370
+ else {
371
+ test.details.issue = 'Unknown error';
372
+ test.details.recommendation = 'Check error message for details';
373
+ }
374
+ }
375
+ return test;
376
+ }
377
+ async testGitClone(url, authType, tokenEnvVar, branch) {
378
+ const test = {
379
+ name: 'Git Clone Test',
380
+ passed: false,
381
+ details: {}
382
+ };
383
+ const tempDir = join(process.cwd(), '.bckb-diagnostic-temp', Date.now().toString());
384
+ try {
385
+ const git = simpleGit();
386
+ // Prepare URL with auth
387
+ let cloneUrl = url;
388
+ if (authType === 'token' && tokenEnvVar) {
389
+ const token = process.env[tokenEnvVar];
390
+ if (token && cloneUrl.startsWith('https://')) {
391
+ // For Azure DevOps, use empty username with PAT as password
392
+ cloneUrl = cloneUrl.replace('https://', `https://:${token}@`);
393
+ }
394
+ }
395
+ test.details.clone_url_format = cloneUrl.replace(/:([^@]+)@/, ':***@'); // Mask token in output
396
+ await git.clone(cloneUrl, tempDir, [
397
+ '--depth', '1',
398
+ '--single-branch',
399
+ '--branch', branch
400
+ ]);
401
+ test.passed = true;
402
+ test.details.message = `Successfully cloned repository (branch: ${branch})`;
403
+ test.details.temp_location = tempDir;
404
+ }
405
+ catch (error) {
406
+ test.details.message = 'Clone failed';
407
+ test.details.error = error.message;
408
+ // Detailed error analysis
409
+ if (error.message.includes('authentication failed') || error.message.includes('invalid credentials')) {
410
+ test.details.issue = 'Authentication failed during clone';
411
+ test.details.recommendation = [
412
+ 'Verify PAT is valid and not expired',
413
+ 'Ensure PAT has "Code (Read)" scope in Azure DevOps',
414
+ 'Check that the PAT belongs to a user with repository access',
415
+ 'Try regenerating the PAT in Azure DevOps'
416
+ ];
417
+ }
418
+ else if (error.message.includes(`Couldn't find remote ref ${branch}`)) {
419
+ test.details.issue = `Branch '${branch}' not found`;
420
+ test.details.recommendation = `Verify branch name - try 'main' or 'master'`;
421
+ }
422
+ else {
423
+ test.details.issue = 'Clone operation failed';
424
+ test.details.recommendation = 'Review error message for specific cause';
425
+ }
426
+ }
427
+ return test;
428
+ }
429
+ generateDiagnosticSummary(tests) {
430
+ const passed = tests.filter(t => t.passed).length;
431
+ const failed = tests.filter(t => !t.passed).length;
432
+ return {
433
+ total_tests: tests.length,
434
+ passed,
435
+ failed,
436
+ overall_status: failed === 0 ? 'PASS' : 'FAIL',
437
+ failed_tests: tests.filter(t => !t.passed).map(t => t.name)
438
+ };
439
+ }
440
+ generateRecommendations(tests, authType) {
441
+ const recommendations = [];
442
+ const failedTests = tests.filter(t => !t.passed);
443
+ if (failedTests.length === 0) {
444
+ return ['All tests passed! Git layer should work with this configuration.'];
445
+ }
446
+ // URL format issues
447
+ if (failedTests.some(t => t.name === 'URL Format Validation')) {
448
+ recommendations.push('Fix the repository URL format before proceeding');
449
+ }
450
+ // Auth configuration issues
451
+ if (failedTests.some(t => t.name === 'Authentication Configuration')) {
452
+ recommendations.push('Configure authentication properly (set environment variable with valid PAT)');
453
+ if (authType === 'token') {
454
+ recommendations.push('For Azure DevOps: Create a PAT with "Code (Read)" scope at https://dev.azure.com/{org}/_usersSettings/tokens');
455
+ }
456
+ }
457
+ // Connectivity issues
458
+ if (failedTests.some(t => t.name === 'Git Connectivity Test')) {
459
+ recommendations.push('Test network connectivity and verify repository URL');
460
+ recommendations.push('Ensure firewall/proxy allows git protocol access');
461
+ }
462
+ // Clone issues
463
+ if (failedTests.some(t => t.name === 'Git Clone Test')) {
464
+ recommendations.push('Review clone test error details for specific issue');
465
+ recommendations.push('Verify PAT permissions include repository access');
466
+ }
467
+ return recommendations;
468
+ }
469
+ async testAzureDevOpsPAT(args) {
470
+ const { organization, project, repository, pat_env_var } = args;
471
+ const url = `https://dev.azure.com/${organization}/${project}/_git/${repository}`;
472
+ // Reuse git layer diagnostics
473
+ return this.diagnoseGitLayer({
474
+ git_url: url,
475
+ auth_type: 'token',
476
+ token_env_var: pat_env_var,
477
+ test_type: 'full'
478
+ });
479
+ }
480
+ async validateLayerConfig(args) {
481
+ const { config_path, check_type = 'full' } = args;
482
+ // TODO: Implement config validation
483
+ return {
484
+ content: [{
485
+ type: 'text',
486
+ text: JSON.stringify({
487
+ message: 'Configuration validation not yet implemented',
488
+ config_path,
489
+ check_type
490
+ }, null, 2)
491
+ }]
492
+ };
493
+ }
494
+ async getLayerDiagnostics(args) {
495
+ const { layer_name, include_metrics = true } = args;
496
+ const diagnostics = {
497
+ timestamp: new Date().toISOString(),
498
+ layers: []
499
+ };
500
+ const stats = this.layerService.getStatistics();
501
+ for (const layerStat of stats) {
502
+ if (layer_name && layerStat.name !== layer_name) {
503
+ continue;
504
+ }
505
+ const layerDiag = {
506
+ name: layerStat.name,
507
+ priority: layerStat.priority,
508
+ enabled: layerStat.enabled,
509
+ topic_count: layerStat.topicCount,
510
+ index_count: layerStat.indexCount,
511
+ load_status: layerStat.topicCount > 0 ? 'SUCCESS' : 'EMPTY_OR_FAILED'
512
+ };
513
+ if (include_metrics) {
514
+ layerDiag.metrics = {
515
+ load_time_ms: layerStat.loadTimeMs || 0,
516
+ memory_usage: layerStat.memoryUsage
517
+ };
518
+ }
519
+ diagnostics.layers.push(layerDiag);
520
+ }
521
+ if (diagnostics.layers.length === 0 && layer_name) {
522
+ return {
523
+ content: [{
524
+ type: 'text',
525
+ text: `Layer '${layer_name}' not found. Available layers: ${stats.map(s => s.name).join(', ')}`
526
+ }],
527
+ isError: true
528
+ };
529
+ }
530
+ return {
531
+ content: [{
532
+ type: 'text',
533
+ text: JSON.stringify(diagnostics, null, 2)
534
+ }]
535
+ };
536
+ }
537
+ async diagnoseLocalLayer(args) {
538
+ const { layer_path = './bc-code-intel-overrides' } = args;
539
+ const diagnostics = {
540
+ timestamp: new Date().toISOString(),
541
+ layer_path,
542
+ tests: []
543
+ };
544
+ // Test 1: Path Existence
545
+ const pathTest = {
546
+ name: 'Path Existence Check',
547
+ passed: false,
548
+ details: {}
549
+ };
550
+ pathTest.details.absolute_path = join(process.cwd(), layer_path);
551
+ pathTest.details.exists = existsSync(pathTest.details.absolute_path);
552
+ if (pathTest.details.exists) {
553
+ pathTest.passed = true;
554
+ pathTest.details.message = 'Directory exists';
555
+ }
556
+ else {
557
+ pathTest.details.message = 'Directory does not exist';
558
+ pathTest.details.recommendation = `Create directory: mkdir ${layer_path}`;
559
+ }
560
+ diagnostics.tests.push(pathTest);
561
+ // Test 2: Permissions Check
562
+ if (pathTest.details.exists) {
563
+ const permTest = {
564
+ name: 'Path Permissions Check',
565
+ passed: false,
566
+ details: {}
567
+ };
568
+ try {
569
+ accessSync(pathTest.details.absolute_path, fsConstants.R_OK);
570
+ permTest.details.readable = true;
571
+ }
572
+ catch {
573
+ permTest.details.readable = false;
574
+ }
575
+ try {
576
+ accessSync(pathTest.details.absolute_path, fsConstants.W_OK);
577
+ permTest.details.writable = true;
578
+ }
579
+ catch {
580
+ permTest.details.writable = false;
581
+ }
582
+ if (permTest.details.readable) {
583
+ permTest.passed = true;
584
+ permTest.details.message = 'Directory is accessible';
585
+ }
586
+ else {
587
+ permTest.details.message = 'Directory is not readable';
588
+ permTest.details.recommendation = 'Check file permissions on the directory';
589
+ }
590
+ diagnostics.tests.push(permTest);
591
+ }
592
+ // Test 3: Content Discovery
593
+ if (pathTest.details.exists) {
594
+ const contentTest = {
595
+ name: 'Content Discovery',
596
+ passed: false,
597
+ details: {}
598
+ };
599
+ try {
600
+ const files = await readdir(pathTest.details.absolute_path);
601
+ contentTest.details.total_files = files.length;
602
+ // Check for markdown files
603
+ const mdFiles = files.filter(f => f.endsWith('.md'));
604
+ contentTest.details.markdown_files = mdFiles.length;
605
+ // Check for expected directories
606
+ const expectedDirs = ['domains', 'topics', 'overrides', 'specialists'];
607
+ const foundDirs = files.filter(f => expectedDirs.includes(f));
608
+ contentTest.details.expected_directories_found = foundDirs;
609
+ // Recursively count markdown files
610
+ let totalMdFiles = mdFiles.length;
611
+ for (const item of files) {
612
+ const itemPath = join(pathTest.details.absolute_path, item);
613
+ try {
614
+ const stats = await stat(itemPath);
615
+ if (stats.isDirectory()) {
616
+ const subFiles = await this.countMarkdownFiles(itemPath);
617
+ totalMdFiles += subFiles;
618
+ }
619
+ }
620
+ catch {
621
+ // Skip inaccessible items
622
+ }
623
+ }
624
+ contentTest.details.total_markdown_files = totalMdFiles;
625
+ if (totalMdFiles > 0) {
626
+ contentTest.passed = true;
627
+ contentTest.details.message = `Found ${totalMdFiles} markdown file(s)`;
628
+ }
629
+ else {
630
+ contentTest.details.message = 'No markdown files found';
631
+ contentTest.details.recommendation = 'Add .md files to the directory or subdirectories (domains/, topics/, overrides/)';
632
+ contentTest.details.example_structure = [
633
+ `${layer_path}/domains/performance/my-optimization.md`,
634
+ `${layer_path}/topics/company-specific-pattern.md`,
635
+ `${layer_path}/overrides/existing-topic-override.md`
636
+ ];
637
+ }
638
+ }
639
+ catch (error) {
640
+ contentTest.details.message = 'Failed to read directory contents';
641
+ contentTest.details.error = error.message;
642
+ }
643
+ diagnostics.tests.push(contentTest);
644
+ }
645
+ // Test 4: Markdown File Validation (sample)
646
+ if (pathTest.details.exists) {
647
+ const validationTest = {
648
+ name: 'Markdown File Validation',
649
+ passed: false,
650
+ details: {}
651
+ };
652
+ try {
653
+ const sampleMdFiles = await this.findSampleMarkdownFiles(pathTest.details.absolute_path, 3);
654
+ validationTest.details.files_checked = sampleMdFiles.length;
655
+ if (sampleMdFiles.length > 0) {
656
+ const validFiles = [];
657
+ const invalidFiles = [];
658
+ for (const file of sampleMdFiles) {
659
+ const isValid = await this.validateMarkdownFile(file);
660
+ if (isValid) {
661
+ validFiles.push(file);
662
+ }
663
+ else {
664
+ invalidFiles.push(file);
665
+ }
666
+ }
667
+ validationTest.details.valid_files = validFiles.length;
668
+ validationTest.details.invalid_files = invalidFiles.length;
669
+ if (validFiles.length > 0) {
670
+ validationTest.passed = true;
671
+ validationTest.details.message = `${validFiles.length} of ${sampleMdFiles.length} files have valid frontmatter`;
672
+ }
673
+ else {
674
+ validationTest.details.message = 'No valid markdown files with frontmatter found';
675
+ validationTest.details.recommendation = 'Ensure markdown files have YAML frontmatter with title, domain, etc.';
676
+ }
677
+ if (invalidFiles.length > 0) {
678
+ validationTest.details.invalid_file_examples = invalidFiles.slice(0, 2);
679
+ validationTest.details.issue = 'Some files missing or have invalid YAML frontmatter';
680
+ }
681
+ }
682
+ }
683
+ catch (error) {
684
+ validationTest.details.message = 'Failed to validate markdown files';
685
+ validationTest.details.error = error.message;
686
+ }
687
+ diagnostics.tests.push(validationTest);
688
+ }
689
+ // Generate recommendations
690
+ const recommendations = this.generateLocalLayerRecommendations(diagnostics.tests);
691
+ return {
692
+ content: [{
693
+ type: 'text',
694
+ text: JSON.stringify({
695
+ ...diagnostics,
696
+ summary: this.generateDiagnosticSummary(diagnostics.tests),
697
+ recommendations
698
+ }, null, 2)
699
+ }]
700
+ };
701
+ }
702
+ async countMarkdownFiles(dir) {
703
+ let count = 0;
704
+ try {
705
+ const files = await readdir(dir);
706
+ for (const file of files) {
707
+ const filePath = join(dir, file);
708
+ try {
709
+ const stats = await stat(filePath);
710
+ if (stats.isDirectory()) {
711
+ count += await this.countMarkdownFiles(filePath);
712
+ }
713
+ else if (file.endsWith('.md')) {
714
+ count++;
715
+ }
716
+ }
717
+ catch {
718
+ // Skip inaccessible files
719
+ }
720
+ }
721
+ }
722
+ catch {
723
+ // Skip inaccessible directories
724
+ }
725
+ return count;
726
+ }
727
+ async findSampleMarkdownFiles(dir, limit) {
728
+ const files = [];
729
+ const findInDir = async (currentDir) => {
730
+ if (files.length >= limit)
731
+ return;
732
+ try {
733
+ const items = await readdir(currentDir);
734
+ for (const item of items) {
735
+ if (files.length >= limit)
736
+ break;
737
+ const itemPath = join(currentDir, item);
738
+ try {
739
+ const stats = await stat(itemPath);
740
+ if (stats.isDirectory()) {
741
+ await findInDir(itemPath);
742
+ }
743
+ else if (item.endsWith('.md')) {
744
+ files.push(itemPath);
745
+ }
746
+ }
747
+ catch {
748
+ // Skip inaccessible items
749
+ }
750
+ }
751
+ }
752
+ catch {
753
+ // Skip inaccessible directories
754
+ }
755
+ };
756
+ await findInDir(dir);
757
+ return files;
758
+ }
759
+ async validateMarkdownFile(filePath) {
760
+ try {
761
+ const { readFile } = await import('fs/promises');
762
+ const content = await readFile(filePath, 'utf-8');
763
+ // Check for YAML frontmatter
764
+ const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
765
+ if (!frontmatterMatch) {
766
+ return false;
767
+ }
768
+ // Basic validation - has some required fields
769
+ const frontmatter = frontmatterMatch[1];
770
+ return frontmatter.includes('title:') || frontmatter.includes('domain:');
771
+ }
772
+ catch {
773
+ return false;
774
+ }
775
+ }
776
+ generateLocalLayerRecommendations(tests) {
777
+ const recommendations = [];
778
+ const failedTests = tests.filter(t => !t.passed);
779
+ if (failedTests.length === 0) {
780
+ return ['All local layer checks passed! Layer should be loading correctly.'];
781
+ }
782
+ // Path doesn't exist
783
+ if (failedTests.some(t => t.name === 'Path Existence Check')) {
784
+ recommendations.push('Create the local layer directory before adding content');
785
+ recommendations.push('Use: mkdir -p ./bc-code-intel-overrides/domains');
786
+ }
787
+ // Permission issues
788
+ if (failedTests.some(t => t.name === 'Path Permissions Check')) {
789
+ recommendations.push('Fix directory permissions to allow read access');
790
+ recommendations.push('Check ownership and group permissions');
791
+ }
792
+ // No content
793
+ if (failedTests.some(t => t.name === 'Content Discovery')) {
794
+ recommendations.push('Add markdown files with BC knowledge to the directory');
795
+ recommendations.push('Organize in subdirectories: domains/, topics/, or overrides/');
796
+ recommendations.push('Each .md file should have YAML frontmatter with title, domain, tags, etc.');
797
+ }
798
+ // Invalid files
799
+ if (failedTests.some(t => t.name === 'Markdown File Validation')) {
800
+ recommendations.push('Ensure markdown files have proper YAML frontmatter (---...---)');
801
+ recommendations.push('Required frontmatter fields: title, domain');
802
+ recommendations.push('See embedded knowledge files for examples');
803
+ }
804
+ return recommendations;
805
+ }
806
+ async reloadLayers(args) {
807
+ const { layer_name, reload_config = true } = args;
808
+ const results = {
809
+ timestamp: new Date().toISOString(),
810
+ config_reloaded: false,
811
+ layers_reloaded: [],
812
+ errors: []
813
+ };
814
+ try {
815
+ // Step 1: Reload configuration if requested
816
+ if (reload_config && this.configLoader) {
817
+ try {
818
+ const configResult = await this.configLoader.loadConfiguration();
819
+ results.config_reloaded = true;
820
+ if (configResult.validation_errors.length > 0) {
821
+ results.errors.push(`Configuration has ${configResult.validation_errors.length} validation errors`);
822
+ for (const error of configResult.validation_errors) {
823
+ results.errors.push(` ${error.field}: ${error.message}`);
824
+ }
825
+ }
826
+ }
827
+ catch (error) {
828
+ results.errors.push(`Failed to reload configuration: ${error.message}`);
829
+ results.config_reloaded = false;
830
+ }
831
+ }
832
+ // Step 2: Refresh layer cache
833
+ try {
834
+ await this.layerService.refreshCache();
835
+ // Get updated layer statistics
836
+ const stats = this.layerService.getStatistics();
837
+ for (const stat of stats) {
838
+ if (layer_name && stat.name !== layer_name) {
839
+ continue;
840
+ }
841
+ results.layers_reloaded.push({
842
+ name: stat.name,
843
+ priority: stat.priority,
844
+ topic_count: stat.topicCount,
845
+ index_count: stat.indexCount,
846
+ load_time_ms: stat.loadTimeMs || 0,
847
+ status: stat.topicCount > 0 ? 'SUCCESS' : 'EMPTY_OR_FAILED'
848
+ });
849
+ }
850
+ if (layer_name && results.layers_reloaded.length === 0) {
851
+ results.errors.push(`Layer '${layer_name}' not found`);
852
+ }
853
+ }
854
+ catch (error) {
855
+ results.errors.push(`Failed to reload layers: ${error.message}`);
856
+ }
857
+ const success = results.errors.length === 0;
858
+ const message = success
859
+ ? `Successfully reloaded ${results.layers_reloaded.length} layer(s)`
860
+ : `Reload completed with ${results.errors.length} error(s)`;
861
+ return {
862
+ content: [{
863
+ type: 'text',
864
+ text: JSON.stringify({
865
+ ...results,
866
+ success,
867
+ message
868
+ }, null, 2)
869
+ }],
870
+ isError: !success
871
+ };
872
+ }
873
+ catch (error) {
874
+ return {
875
+ content: [{
876
+ type: 'text',
877
+ text: JSON.stringify({
878
+ error: `Fatal error during reload: ${error.message}`,
879
+ results
880
+ }, null, 2)
881
+ }],
882
+ isError: true
883
+ };
884
+ }
885
+ }
886
+ }
887
+ //# sourceMappingURL=config-diagnostic-tools.js.map