@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
package/dist/index.js ADDED
@@ -0,0 +1,1211 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { fileURLToPath } from 'url';
6
+ import { dirname, join } from 'path';
7
+ import { readFileSync, existsSync } from 'fs';
8
+ import { getAllToolDefinitions, STREAMLINED_TOOL_NAMES, SpecialistTools, SpecialistDiscoveryTools, AgentOnboardingTools, SpecialistHandoffTools } from './tools/index.js';
9
+ import { createStreamlinedHandlers } from './streamlined-handlers.js';
10
+ import { KnowledgeService } from './services/knowledge-service.js';
11
+ import { CodeAnalysisService } from './services/code-analysis-service.js';
12
+ import { MethodologyService } from './services/methodology-service.js';
13
+ import { WorkflowService } from './services/workflow-service.js';
14
+ import { getDomainList } from './types/bc-knowledge.js';
15
+ import { MultiContentLayerService } from './services/multi-content-layer-service.js';
16
+ import { SpecialistSessionManager } from './services/specialist-session-manager.js';
17
+ import { SpecialistDiscoveryService } from './services/specialist-discovery.js';
18
+ import { EnhancedPromptService } from './services/enhanced-prompt-service.js';
19
+ import { ConfigurationLoader } from './config/config-loader.js';
20
+ import { ConfigurationValidator } from './config/config-validator.js';
21
+ import { ConfigDiagnosticTools } from './tools/config-diagnostic-tools.js';
22
+ import { domainWorkflows } from './workflows/domain-workflows.js';
23
+ import { LayerSourceType } from './types/index.js';
24
+ import { WorkspaceTools } from './tools/workspace-tools.js';
25
+ /**
26
+ * BC Code Intelligence MCP Server
27
+ *
28
+ * Business Central Code Intelligence Model Context Protocol Server
29
+ * Surfaces atomic BC knowledge topics for intelligent AI consumption
30
+ * via GitHub Copilot, Claude, and other LLM tools.
31
+ */
32
+ class BCCodeIntelligenceServer {
33
+ server;
34
+ knowledgeService;
35
+ codeAnalysisService;
36
+ methodologyService;
37
+ workflowService;
38
+ layerService;
39
+ specialistSessionManager;
40
+ specialistTools;
41
+ specialistDiscoveryService;
42
+ specialistDiscoveryTools;
43
+ enhancedPromptService;
44
+ agentOnboardingTools;
45
+ specialistHandoffTools;
46
+ configDiagnosticTools;
47
+ configuration;
48
+ configLoader;
49
+ workspaceRoot = null;
50
+ availableMcps = [];
51
+ hasWarnedAboutWorkspace = false;
52
+ workspaceTools;
53
+ servicesInitialized = false;
54
+ getPackageVersion() {
55
+ try {
56
+ const __filename = fileURLToPath(import.meta.url);
57
+ const __dirname = dirname(__filename);
58
+ const packagePath = join(__dirname, '..', 'package.json');
59
+ console.error(`🔍 Looking for package.json at: ${packagePath}`);
60
+ console.error(` Exists: ${existsSync(packagePath)}`);
61
+ if (!existsSync(packagePath)) {
62
+ console.error(`⚠️ package.json not found at expected location`);
63
+ return '1.0.0'; // fallback
64
+ }
65
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf8'));
66
+ const version = packageJson.version || '1.0.0';
67
+ console.error(` Version: ${version}`);
68
+ return version;
69
+ }
70
+ catch (error) {
71
+ console.error(`⚠️ Error reading package.json:`, error instanceof Error ? error.message : String(error));
72
+ return '1.0.0'; // fallback
73
+ }
74
+ }
75
+ constructor() {
76
+ // Log startup diagnostics
77
+ console.error(`[startup] MCP Server starting...`);
78
+ console.error(`[startup] Process CWD: ${process.cwd()}`);
79
+ console.error(`[startup] Node version: ${process.version}`);
80
+ // Initialize MCP server with capabilities declaration (required by SDK 1.x)
81
+ this.server = new Server({
82
+ name: 'bc-code-intelligence-mcp',
83
+ version: this.getPackageVersion(),
84
+ }, {
85
+ capabilities: {
86
+ tools: {},
87
+ prompts: {}
88
+ }
89
+ });
90
+ // Initialize configuration loader
91
+ this.configLoader = new ConfigurationLoader();
92
+ // Initialize workspace tools
93
+ const workspaceContext = {
94
+ setWorkspaceInfo: this.setWorkspaceInfo.bind(this),
95
+ getWorkspaceInfo: () => ({
96
+ workspace_root: this.workspaceRoot,
97
+ available_mcps: this.availableMcps
98
+ })
99
+ };
100
+ this.workspaceTools = new WorkspaceTools(workspaceContext);
101
+ // Services will be initialized asynchronously in run()
102
+ this.setupToolHandlers();
103
+ this.setupPrompts();
104
+ }
105
+ setupToolHandlers() {
106
+ // List available tools - now using centralized registry
107
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
108
+ const tools = getAllToolDefinitions({
109
+ specialistTools: this.specialistTools,
110
+ specialistDiscoveryTools: this.specialistDiscoveryTools,
111
+ onboardingTools: this.agentOnboardingTools,
112
+ handoffTools: this.specialistHandoffTools
113
+ });
114
+ // Add workspace tools (always available)
115
+ tools.push(...this.workspaceTools.getToolDefinitions());
116
+ // Add configuration diagnostic tools if available AND enabled
117
+ if (this.configDiagnosticTools) {
118
+ tools.push(...this.configDiagnosticTools.getToolDefinitions());
119
+ }
120
+ return { tools };
121
+ });
122
+ // Handle tool calls - now using centralized tool names
123
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
124
+ const { name, arguments: args } = request.params;
125
+ try {
126
+ // Workspace tools are always available (no interception)
127
+ if (['set_workspace_info', 'get_workspace_info', 'set_workspace_root', 'get_workspace_root'].includes(name)) {
128
+ return await this.workspaceTools.handleToolCall(request);
129
+ }
130
+ // Intercept all other tools if services not initialized
131
+ if (!this.servicesInitialized) {
132
+ return {
133
+ content: [{
134
+ type: 'text',
135
+ text: `⚠️ **Workspace Not Configured**
136
+
137
+ The BC Code Intelligence server needs workspace information to load project-specific configuration and knowledge layers.
138
+
139
+ **Option 1: Set workspace info** (recommended for project-specific layers and MCP ecosystem awareness)
140
+ \`\`\`
141
+ set_workspace_info({
142
+ workspace_root: "C:/your/project/path",
143
+ available_mcps: [] // REQUIRED: Examine your available tools and infer MCP servers (see tool description)
144
+ })
145
+ \`\`\`
146
+
147
+ **How to populate available_mcps:**
148
+ Check which tools you have available and add the corresponding MCP server IDs:
149
+ - Have \`search_telemetry_traces\`? Add "bc-telemetry-buddy"
150
+ - Have \`reserve_object_ids\`? Add "al-objid-mcp-server"
151
+ - Have \`analyze_dependencies\`? Add "al-dependency-mcp-server"
152
+ - Have \`get_lsp_diagnostics\`? Add "serena-mcp"
153
+ - Have \`create_work_item\`? Add "azure-devops-mcp"
154
+ - Have \`track_time_entry\`? Add "clockify-mcp"
155
+ - Have \`translate_xliff\`? Add "nab-al-tools-mcp"
156
+
157
+ **Option 2: Use user-level config** (works without workspace)
158
+ Place a configuration file at:
159
+ - Windows: \`%USERPROFILE%\\.bckb\\config.yml\`
160
+ - Linux/Mac: \`~/.bckb/config.yml\`
161
+
162
+ Use absolute paths in the config for git/local layers.
163
+
164
+ Currently only embedded knowledge is loaded. Call \`set_workspace_info\` to enable project layers and MCP ecosystem awareness.`
165
+ }]
166
+ };
167
+ }
168
+ // Check if it's a specialist tool
169
+ if (this.specialistTools && ['suggest_specialist', 'get_specialist_advice', 'list_specialists'].includes(name)) {
170
+ return await this.specialistTools.handleToolCall(request);
171
+ }
172
+ // Check if it's a specialist discovery tool
173
+ if (this.specialistDiscoveryTools && ['discover_specialists', 'browse_specialists', 'get_specialist_info'].includes(name)) {
174
+ return await this.specialistDiscoveryTools.handleToolCall(request);
175
+ }
176
+ // Check if it's an agent onboarding tool
177
+ if (this.agentOnboardingTools && ['introduce_bc_specialists', 'get_specialist_introduction', 'suggest_next_specialist'].includes(name)) {
178
+ return await this.agentOnboardingTools.handleToolCall(request);
179
+ }
180
+ // Check if it's a specialist handoff tool
181
+ if (this.specialistHandoffTools && ['handoff_to_specialist', 'bring_in_specialist', 'get_handoff_summary'].includes(name)) {
182
+ return await this.specialistHandoffTools.handleToolCall(request);
183
+ }
184
+ // Check if it's a configuration diagnostic tool
185
+ if (this.configDiagnosticTools && ['diagnose_git_layer', 'validate_layer_config', 'test_azure_devops_pat', 'get_layer_diagnostics', 'diagnose_local_layer', 'reload_layers'].includes(name)) {
186
+ return await this.configDiagnosticTools.handleToolCall(request);
187
+ }
188
+ // Create streamlined handlers with all services
189
+ const handlers = createStreamlinedHandlers(this.server, {
190
+ knowledgeService: this.knowledgeService,
191
+ codeAnalysisService: this.codeAnalysisService,
192
+ methodologyService: this.methodologyService,
193
+ workflowService: this.workflowService,
194
+ layerService: this.layerService
195
+ });
196
+ // Execute the appropriate handler
197
+ const handler = handlers[name];
198
+ if (!handler) {
199
+ throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
200
+ }
201
+ return await handler(args);
202
+ }
203
+ catch (error) {
204
+ if (error instanceof McpError) {
205
+ throw error;
206
+ }
207
+ throw new McpError(ErrorCode.InternalError, `Tool execution failed: ${error instanceof Error ? error.message : String(error)}`);
208
+ }
209
+ });
210
+ }
211
+ /**
212
+ * Setup prompts for workflow pipelines
213
+ */
214
+ setupPrompts() {
215
+ console.error('🎯 Setting up MCP Prompts for workflow pipelines...');
216
+ // Define workflow prompts that guide users through structured pipelines
217
+ const workflowPrompts = [
218
+ {
219
+ name: 'code_optimization',
220
+ description: 'Optimize existing Business Central code using systematic analysis phases',
221
+ arguments: [
222
+ {
223
+ name: 'code_location',
224
+ description: 'Path to the code file or description of the code to optimize',
225
+ required: false // No more required fields - specialist will ask conversationally
226
+ }
227
+ ]
228
+ },
229
+ {
230
+ name: 'architecture_review',
231
+ description: 'Conduct comprehensive architecture review of Business Central solution',
232
+ arguments: [
233
+ {
234
+ name: 'scope',
235
+ description: 'Scope of review (module, solution, or specific components)',
236
+ required: false // Specialist will ask about scope naturally
237
+ }
238
+ ]
239
+ },
240
+ {
241
+ name: 'security_audit',
242
+ description: 'Perform security analysis and compliance check for Business Central implementation',
243
+ arguments: [
244
+ {
245
+ name: 'audit_scope',
246
+ description: 'Security audit scope (permissions, data access, API security, etc.)',
247
+ required: false // Specialist will gather this in conversation
248
+ }
249
+ ]
250
+ },
251
+ {
252
+ name: 'perf_review',
253
+ description: 'Analyze and optimize Business Central performance issues',
254
+ arguments: [
255
+ {
256
+ name: 'performance_concern',
257
+ description: 'Description of performance issue or area to analyze',
258
+ required: false
259
+ }
260
+ ]
261
+ },
262
+ {
263
+ name: 'integration_design',
264
+ description: 'Design robust integration patterns for Business Central',
265
+ arguments: [
266
+ {
267
+ name: 'integration_type',
268
+ description: 'Type of integration (API, data sync, external service, etc.)',
269
+ required: false
270
+ }
271
+ ]
272
+ },
273
+ {
274
+ name: 'upgrade_planning',
275
+ description: 'Plan Business Central version upgrade with risk assessment',
276
+ arguments: [
277
+ {
278
+ name: 'current_version',
279
+ description: 'Current Business Central version',
280
+ required: false
281
+ },
282
+ {
283
+ name: 'target_version',
284
+ description: 'Target Business Central version',
285
+ required: false
286
+ }
287
+ ]
288
+ },
289
+ {
290
+ name: 'testing_strategy',
291
+ description: 'Develop comprehensive testing strategy for Business Central solutions',
292
+ arguments: [
293
+ {
294
+ name: 'testing_scope',
295
+ description: 'Scope of testing (unit, integration, user acceptance, etc.)',
296
+ required: false
297
+ }
298
+ ]
299
+ },
300
+ {
301
+ name: 'dev_onboarding',
302
+ description: 'Guide new developer through Business Central development onboarding',
303
+ arguments: [
304
+ {
305
+ name: 'experience_level',
306
+ description: 'Developer experience level (beginner, intermediate, expert)',
307
+ required: false
308
+ },
309
+ {
310
+ name: 'focus_area',
311
+ description: 'Primary focus area for onboarding (development, customization, integration)',
312
+ required: false
313
+ }
314
+ ]
315
+ },
316
+ {
317
+ name: 'app_takeover',
318
+ description: 'Analyze and orient developer taking over an unfamiliar Business Central app',
319
+ arguments: [
320
+ {
321
+ name: 'app_source',
322
+ description: 'Source of the app (path, repository, AppSource, or description)',
323
+ required: false
324
+ },
325
+ {
326
+ name: 'takeover_context',
327
+ description: 'Context for takeover (maintenance, enhancement, migration, or handoff scenario)',
328
+ required: false
329
+ }
330
+ ]
331
+ },
332
+ {
333
+ name: 'spec_analysis',
334
+ description: 'Analyze requirements and specifications to determine development readiness',
335
+ arguments: [
336
+ {
337
+ name: 'spec_source',
338
+ description: 'Source of specifications (document, user story, requirements, or description)',
339
+ required: false
340
+ },
341
+ {
342
+ name: 'analysis_focus',
343
+ description: 'Analysis focus (completeness, feasibility, technical-gaps, or dependencies)',
344
+ required: false
345
+ }
346
+ ]
347
+ },
348
+ {
349
+ name: 'bug_investigation',
350
+ description: 'Systematically investigate and resolve Business Central bugs and issues',
351
+ arguments: [
352
+ {
353
+ name: 'bug_context',
354
+ description: 'Available context (call-stack, repro-steps, snapshot, sandbox-access, or description)',
355
+ required: false
356
+ },
357
+ {
358
+ name: 'issue_severity',
359
+ description: 'Issue severity level (critical, high, medium, low)',
360
+ required: false
361
+ }
362
+ ]
363
+ },
364
+ {
365
+ name: 'monolith_to_modules',
366
+ description: 'Refactor monolithic Business Central code into modular architecture using SOLID principles',
367
+ arguments: [
368
+ {
369
+ name: 'current_structure',
370
+ description: 'Current code structure (monolithic-object, large-codeunit, tightly-coupled, or description)',
371
+ required: false
372
+ },
373
+ {
374
+ name: 'modularization_goal',
375
+ description: 'Modularization goal (dependency-injection, interface-patterns, loose-coupling, or testability)',
376
+ required: false
377
+ }
378
+ ]
379
+ },
380
+ {
381
+ name: 'data_flow_tracing',
382
+ description: 'Trace data flow and dependencies across Business Central objects and codeunits',
383
+ arguments: [
384
+ {
385
+ name: 'trace_target',
386
+ description: 'What to trace (field-usage, table-relationships, posting-flow, or process-chain)',
387
+ required: false
388
+ },
389
+ {
390
+ name: 'trace_scope',
391
+ description: 'Tracing scope (single-object, module-level, cross-module, or end-to-end)',
392
+ required: false
393
+ }
394
+ ]
395
+ },
396
+ {
397
+ name: 'full_review',
398
+ description: 'Conduct comprehensive review and analysis without implementation changes',
399
+ arguments: [
400
+ {
401
+ name: 'review_target',
402
+ description: 'What to review (code, architecture, documentation, processes)',
403
+ required: false
404
+ },
405
+ {
406
+ name: 'review_depth',
407
+ description: 'Review depth (surface, detailed, comprehensive)',
408
+ required: false
409
+ }
410
+ ]
411
+ }
412
+ ];
413
+ // Register prompt list handler
414
+ this.server.setRequestHandler(ListPromptsRequestSchema, async () => ({
415
+ prompts: workflowPrompts.map(p => ({
416
+ name: p.name,
417
+ description: p.description,
418
+ arguments: p.arguments
419
+ }))
420
+ }));
421
+ // Register get prompt handler for all workflows
422
+ this.server.setRequestHandler(GetPromptRequestSchema, async (request) => {
423
+ const { name, arguments: args } = request.params;
424
+ const prompt = workflowPrompts.find(p => p.name === name);
425
+ if (!prompt) {
426
+ throw new McpError(ErrorCode.InvalidRequest, `Unknown prompt: ${name}`);
427
+ }
428
+ try {
429
+ // Convert workflow name to type and create start request
430
+ const workflowTypeMap = {
431
+ 'code_optimization': 'new-bc-app',
432
+ 'architecture_review': 'enhance-bc-app',
433
+ 'security_audit': 'debug-bc-issues',
434
+ 'perf_review': 'debug-bc-issues',
435
+ 'integration_design': 'add-ecosystem-features',
436
+ 'upgrade_planning': 'upgrade-bc-version',
437
+ 'testing_strategy': 'modernize-bc-code',
438
+ 'dev_onboarding': 'onboard-developer',
439
+ 'app_takeover': 'enhance-bc-app',
440
+ 'spec_analysis': 'review-bc-code',
441
+ 'bug_investigation': 'debug-bc-issues',
442
+ 'monolith_to_modules': 'modernize-bc-code',
443
+ 'data_flow_tracing': 'review-bc-code',
444
+ 'full_review': 'review-bc-code'
445
+ };
446
+ const workflowType = workflowTypeMap[name];
447
+ if (!workflowType) {
448
+ throw new Error(`Unknown workflow type: ${name}`);
449
+ }
450
+ const startRequest = {
451
+ workflow_type: workflowType,
452
+ project_context: args?.code_location || args?.scope || args?.audit_scope ||
453
+ args?.performance_concern || args?.integration_type ||
454
+ args?.testing_scope || args?.review_target ||
455
+ 'General workflow request',
456
+ bc_version: args?.target_version || args?.current_version,
457
+ additional_context: args
458
+ };
459
+ // Start the workflow session
460
+ const session = await this.workflowService.startWorkflow(startRequest);
461
+ // Get the initial guidance for this workflow
462
+ const initialGuidance = await this.workflowService.getPhaseGuidance(session.id);
463
+ // Enhance with specialist routing
464
+ const userContext = args?.code_location || args?.scope || args?.audit_scope ||
465
+ args?.performance_concern || args?.integration_type ||
466
+ args?.testing_scope || args?.review_target ||
467
+ 'General workflow request';
468
+ const enhancedResult = await this.enhancedPromptService.enhanceWorkflowPrompt(name, userContext, initialGuidance);
469
+ // Construct explicit prompt that bypasses VS Code prompt creation
470
+ const promptContent = `# ${prompt.description}
471
+
472
+ **IMPORTANT: This is a complete, ready-to-use prompt. Do not create additional prompts or ask for more information. Proceed directly with the requested workflow.**
473
+
474
+ ${enhancedResult.enhancedContent}
475
+
476
+ ## 🎯 Next Actions
477
+
478
+ **Use these MCP tools immediately to proceed:**
479
+ ${enhancedResult.routingOptions.map(option => `- ${option.replace('🎯 Start session with', '**Use MCP tool:**')}`).join('\n')}
480
+
481
+ **Remember:** You have access to 20+ MCP tools from bc-code-intelligence-mcp. Use them actively for specialist consultation and knowledge access.`;
482
+ return {
483
+ description: `Starting ${workflowType} workflow with specialist guidance`,
484
+ messages: [
485
+ {
486
+ role: 'user',
487
+ content: {
488
+ type: 'text',
489
+ text: promptContent
490
+ }
491
+ }
492
+ ]
493
+ };
494
+ }
495
+ catch (error) {
496
+ throw new McpError(ErrorCode.InternalError, `Failed to start workflow: ${error instanceof Error ? error.message : String(error)}`);
497
+ }
498
+ });
499
+ console.error('✅ MCP Prompts configured for workflow orchestration');
500
+ }
501
+ /**
502
+ * Initialize all services with configuration
503
+ */
504
+ async initializeServices(configResult) {
505
+ // Store configuration
506
+ this.configuration = configResult.config;
507
+ // Initialize layer service with configuration
508
+ this.layerService = new MultiContentLayerService();
509
+ let totalTopics = 0;
510
+ // Initialize legacy knowledge service for backward compatibility
511
+ const __filename = fileURLToPath(import.meta.url);
512
+ const __dirname = dirname(__filename);
513
+ const legacyConfig = {
514
+ knowledge_base_path: process.env['BCKB_KB_PATH'] || join(__dirname, '../embedded-knowledge'),
515
+ indexes_path: process.env['BCKB_INDEXES_PATH'] || join(__dirname, '../embedded-knowledge/indexes'),
516
+ methodologies_path: process.env['BCKB_METHODOLOGIES_PATH'] || join(__dirname, '../embedded-knowledge/methodologies'),
517
+ cache_size: this.configuration.cache.max_size_mb * 1024, // Convert MB to entries approximation
518
+ max_search_results: 20,
519
+ default_bc_version: 'BC22',
520
+ enable_fuzzy_search: true,
521
+ search_threshold: 0.6
522
+ };
523
+ // Initialize specialist services using a dedicated MultiContentLayerService FIRST
524
+ this.layerService = new MultiContentLayerService();
525
+ // Iterate over configured layers and instantiate each based on type
526
+ for (const layerConfig of this.configuration.layers) {
527
+ if (!layerConfig.enabled) {
528
+ console.error(`⏭️ Skipping disabled layer: ${layerConfig.name}`);
529
+ continue;
530
+ }
531
+ let layer;
532
+ try {
533
+ switch (layerConfig.source.type) {
534
+ case LayerSourceType.EMBEDDED: {
535
+ // Embedded layer - ALWAYS use the server's embedded knowledge directory
536
+ // The 'path' field is ignored for embedded layers since they reference the built-in knowledge
537
+ const embeddedPath = join(__dirname, '../embedded-knowledge');
538
+ console.error(`📋 Embedded layer using built-in knowledge: ${embeddedPath}`);
539
+ const { EmbeddedKnowledgeLayer } = await import('./layers/embedded-layer.js');
540
+ layer = new EmbeddedKnowledgeLayer(embeddedPath);
541
+ break;
542
+ }
543
+ case LayerSourceType.LOCAL: {
544
+ // Local filesystem layer - use ProjectKnowledgeLayer
545
+ const { ProjectKnowledgeLayer } = await import('./layers/project-layer.js');
546
+ layer = new ProjectKnowledgeLayer(layerConfig.source.path);
547
+ // Override name and priority from config
548
+ layer.name = layerConfig.name;
549
+ layer.priority = layerConfig.priority;
550
+ break;
551
+ }
552
+ case LayerSourceType.GIT: {
553
+ // Git repository layer
554
+ const { GitKnowledgeLayer } = await import('./layers/git-layer.js');
555
+ const gitSource = layerConfig.source; // GitLayerSource
556
+ layer = new GitKnowledgeLayer(layerConfig.name, layerConfig.priority, {
557
+ type: LayerSourceType.GIT,
558
+ url: gitSource.url,
559
+ branch: gitSource.branch,
560
+ subpath: gitSource.subpath
561
+ }, layerConfig.auth);
562
+ break;
563
+ }
564
+ case LayerSourceType.HTTP:
565
+ case LayerSourceType.NPM: {
566
+ // Future layer types - not yet implemented
567
+ // HTTP: Would load knowledge from HTTP endpoints (ZIP/tarball downloads)
568
+ // NPM: Would load knowledge from NPM packages
569
+ console.warn(`⚠️ Layer type '${layerConfig.source.type}' not yet implemented - skipping ${layerConfig.name}`);
570
+ continue;
571
+ }
572
+ default:
573
+ console.error(`❌ Unknown layer type: ${layerConfig.source.type} - skipping ${layerConfig.name}`);
574
+ continue;
575
+ }
576
+ console.error(`📋 Successfully instantiated layer: ${layerConfig.name}`);
577
+ this.layerService.addLayer(layer);
578
+ }
579
+ catch (layerError) {
580
+ // CRITICAL FIX: Handle individual layer instantiation failures gracefully
581
+ // This prevents one failing layer (e.g. git auth issues) from breaking the entire service
582
+ console.error(`❌ Failed to instantiate layer '${layerConfig.name}': ${layerError instanceof Error ? layerError.message : String(layerError)}`);
583
+ if (layerConfig.source.type === LayerSourceType.GIT) {
584
+ console.error(`💡 Git layer '${layerConfig.name}' failed - check repository URL, authentication, or network connection`);
585
+ }
586
+ else if (layerConfig.source.type === LayerSourceType.LOCAL) {
587
+ console.error(`💡 Local layer '${layerConfig.name}' failed - check that path '${layerConfig.source.path}' exists and is readable`);
588
+ }
589
+ // Continue to next layer instead of aborting entire initialization
590
+ continue;
591
+ }
592
+ }
593
+ await this.layerService.initialize();
594
+ // Now create KnowledgeService with the initialized layerService
595
+ this.knowledgeService = new KnowledgeService(legacyConfig, this.layerService);
596
+ await this.knowledgeService.initialize();
597
+ this.codeAnalysisService = new CodeAnalysisService(this.knowledgeService);
598
+ this.methodologyService = new MethodologyService(this.knowledgeService, legacyConfig.methodologies_path);
599
+ // Report layer-by-layer counts after initialization
600
+ const layerStats = this.layerService.getStatistics();
601
+ for (const stats of layerStats) {
602
+ console.error(`📁 Layer '${stats.name}': ${stats.topicCount} topics`);
603
+ totalTopics += stats.topicCount;
604
+ }
605
+ // Get session storage configuration from layer service
606
+ const sessionStorageConfig = this.layerService.getSessionStorageConfig();
607
+ this.specialistSessionManager = new SpecialistSessionManager(this.layerService, sessionStorageConfig);
608
+ this.specialistTools = new SpecialistTools(this.layerService, this.specialistSessionManager, this.knowledgeService);
609
+ // Initialize specialist discovery service and tools
610
+ this.specialistDiscoveryService = new SpecialistDiscoveryService(this.layerService);
611
+ this.specialistDiscoveryTools = new SpecialistDiscoveryTools(this.specialistDiscoveryService, this.specialistSessionManager, this.layerService);
612
+ // Initialize enhanced prompt service for specialist routing
613
+ this.enhancedPromptService = new EnhancedPromptService(this.specialistDiscoveryService, this.specialistSessionManager, this.workflowService);
614
+ // Initialize agent onboarding tools for natural specialist introduction
615
+ this.agentOnboardingTools = new AgentOnboardingTools(this.specialistDiscoveryService, this.layerService);
616
+ // Initialize specialist handoff tools for seamless transitions
617
+ this.specialistHandoffTools = new SpecialistHandoffTools(this.specialistSessionManager, this.specialistDiscoveryService, this.layerService);
618
+ // Initialize configuration diagnostic tools ONLY if enabled (reduces token overhead)
619
+ if (this.configuration.developer.enable_diagnostic_tools) {
620
+ this.configDiagnosticTools = new ConfigDiagnosticTools(this.layerService, this.configLoader);
621
+ console.error('🔧 Configuration diagnostic tools enabled');
622
+ }
623
+ else {
624
+ console.error('💡 Tip: Set developer.enable_diagnostic_tools=true for git layer diagnostics');
625
+ }
626
+ // Initialize workflow service with specialist discovery
627
+ const specialistDiscoveryService = new SpecialistDiscoveryService(this.layerService);
628
+ this.workflowService = new WorkflowService(this.knowledgeService, this.methodologyService, specialistDiscoveryService);
629
+ // Report final totals
630
+ const specialists = await this.layerService.getAllSpecialists();
631
+ console.error(`📊 Total: ${totalTopics} topics, ${specialists.length} specialists`);
632
+ // Validate tool contracts at startup
633
+ await this.validateToolContracts();
634
+ }
635
+ /**
636
+ * Validate that all tool schemas match service implementations
637
+ */
638
+ async validateToolContracts() {
639
+ try {
640
+ const handlers = createStreamlinedHandlers(this.server, {
641
+ knowledgeService: this.knowledgeService,
642
+ codeAnalysisService: this.codeAnalysisService,
643
+ methodologyService: this.methodologyService,
644
+ workflowService: this.workflowService,
645
+ layerService: this.layerService
646
+ });
647
+ const tools = getAllToolDefinitions({
648
+ specialistTools: this.specialistTools,
649
+ specialistDiscoveryTools: this.specialistDiscoveryTools,
650
+ onboardingTools: this.agentOnboardingTools,
651
+ handoffTools: this.specialistHandoffTools
652
+ });
653
+ let hasIssues = false;
654
+ for (const tool of tools) {
655
+ // Only validate core streamlined tools (others handle their own routing)
656
+ if (Object.values(STREAMLINED_TOOL_NAMES).includes(tool.name)) {
657
+ if (!handlers[tool.name]) {
658
+ console.error(`❌ No handler found for core tool: ${tool.name}`);
659
+ hasIssues = true;
660
+ }
661
+ }
662
+ }
663
+ if (hasIssues) {
664
+ console.error('💥 Contract validation failed! Server may have dead ends.');
665
+ // Don't fail startup, but warn loudly
666
+ }
667
+ }
668
+ catch (error) {
669
+ console.error(`⚠️ Contract validation error: ${error}`);
670
+ // Don't fail startup for validation errors
671
+ }
672
+ }
673
+ /**
674
+ * Generate comprehensive system analytics
675
+ */
676
+ async generateSystemAnalytics(includeTopicAnalytics, includeLayerPerformance, includeConfigurationInsights) {
677
+ const analytics = {
678
+ timestamp: new Date().toISOString(),
679
+ system_overview: {
680
+ server_version: this.getPackageVersion(),
681
+ layers_active: this.layerService?.getLayers().length || 0,
682
+ configuration_loaded: !!this.configuration,
683
+ total_topics: this.layerService?.getAllTopicIds().length || 0
684
+ }
685
+ };
686
+ if (includeTopicAnalytics && this.layerService) {
687
+ analytics.topic_analytics = await this.generateTopicAnalytics();
688
+ }
689
+ if (includeLayerPerformance && this.layerService) {
690
+ analytics.layer_performance = this.generateLayerPerformanceAnalytics();
691
+ }
692
+ if (includeConfigurationInsights && this.configuration) {
693
+ analytics.configuration_insights = await this.generateConfigurationInsights();
694
+ }
695
+ return analytics;
696
+ }
697
+ /**
698
+ * Generate topic distribution and coverage analytics
699
+ */
700
+ async generateTopicAnalytics() {
701
+ const allTopicIds = this.layerService.getAllTopicIds();
702
+ const domainDistribution = {};
703
+ const difficultyDistribution = {};
704
+ const overrideStats = this.layerService.getOverriddenTopics();
705
+ // Analyze a sample of topics for domain/difficulty distribution
706
+ const sampleSize = Math.min(50, allTopicIds.length);
707
+ const sampleTopics = allTopicIds.slice(0, sampleSize);
708
+ for (const topicId of sampleTopics) {
709
+ const resolution = await this.layerService.resolveTopic(topicId);
710
+ if (resolution) {
711
+ const domains = getDomainList(resolution.topic.frontmatter.domain);
712
+ const difficulty = resolution.topic.frontmatter.difficulty;
713
+ // Count each domain the topic belongs to
714
+ for (const domain of domains) {
715
+ domainDistribution[domain] = (domainDistribution[domain] || 0) + 1;
716
+ }
717
+ if (difficulty) {
718
+ difficultyDistribution[difficulty] = (difficultyDistribution[difficulty] || 0) + 1;
719
+ }
720
+ }
721
+ }
722
+ return {
723
+ total_topics: allTopicIds.length,
724
+ analyzed_sample: sampleSize,
725
+ domain_distribution: domainDistribution,
726
+ difficulty_distribution: difficultyDistribution,
727
+ override_statistics: {
728
+ total_overrides: Object.keys(overrideStats).length,
729
+ override_percentage: allTopicIds.length > 0
730
+ ? ((Object.keys(overrideStats).length / allTopicIds.length) * 100).toFixed(1) + '%'
731
+ : '0%'
732
+ },
733
+ coverage_insights: {
734
+ domains_covered: Object.keys(domainDistribution).length,
735
+ difficulty_levels: Object.keys(difficultyDistribution).length,
736
+ most_common_domain: Object.entries(domainDistribution).sort(([, a], [, b]) => b - a)[0]?.[0] || 'N/A',
737
+ most_common_difficulty: Object.entries(difficultyDistribution).sort(([, a], [, b]) => b - a)[0]?.[0] || 'N/A'
738
+ }
739
+ };
740
+ }
741
+ /**
742
+ * Generate layer performance analytics
743
+ */
744
+ generateLayerPerformanceAnalytics() {
745
+ const layerStats = this.layerService.getLayerStatistics();
746
+ const layerMetrics = this.layerService.getStatistics();
747
+ const formattedMetrics = layerMetrics.map(stats => {
748
+ return {
749
+ name: stats.name,
750
+ priority: stats.priority,
751
+ enabled: stats.enabled,
752
+ topic_count: stats.topicCount,
753
+ index_count: stats.indexCount,
754
+ memory_usage_mb: stats.memoryUsage?.total ? (stats.memoryUsage.total / (1024 * 1024)).toFixed(2) : 'N/A',
755
+ load_time_ms: stats.loadTimeMs || 0,
756
+ type: 'MultiContentLayer'
757
+ };
758
+ });
759
+ const totalTopics = layerMetrics.reduce((sum, stats) => sum + stats.topicCount, 0);
760
+ return {
761
+ system_totals: {
762
+ total_layers: layerMetrics.length,
763
+ total_topics: totalTopics,
764
+ total_indexes: layerMetrics.reduce((sum, stats) => sum + stats.indexCount, 0),
765
+ total_memory_mb: 'N/A' // Memory tracking not implemented in new system
766
+ },
767
+ layer_metrics: formattedMetrics,
768
+ performance_insights: {
769
+ fastest_layer: formattedMetrics.sort((a, b) => a.load_time_ms - b.load_time_ms)[0]?.name || 'N/A',
770
+ most_topics: formattedMetrics.sort((a, b) => b.topic_count - a.topic_count)[0]?.name || 'N/A',
771
+ layer_efficiency: layerMetrics.length > 0
772
+ ? (totalTopics / layerMetrics.length).toFixed(1) + ' topics/layer avg'
773
+ : 'N/A'
774
+ }
775
+ };
776
+ }
777
+ /**
778
+ * Generate configuration optimization insights
779
+ */
780
+ async generateConfigurationInsights() {
781
+ const validator = new ConfigurationValidator();
782
+ const validation = await validator.validate(this.configuration);
783
+ const insights = {
784
+ configuration_quality: {
785
+ overall_score: validation.score,
786
+ is_valid: validation.valid,
787
+ error_count: validation.errors.length,
788
+ warning_count: validation.warnings.length
789
+ },
790
+ layer_configuration: {
791
+ total_layers: this.configuration.layers.length,
792
+ enabled_layers: this.configuration.layers.filter(l => l.enabled).length,
793
+ layer_types: this.configuration.layers.reduce((acc, layer) => {
794
+ acc[layer.source.type] = (acc[layer.source.type] || 0) + 1;
795
+ return acc;
796
+ }, {}),
797
+ priority_distribution: this.configuration.layers.map(l => l.priority).sort((a, b) => a - b)
798
+ },
799
+ optimization_recommendations: []
800
+ };
801
+ // Generate optimization recommendations
802
+ if (this.configuration.layers.filter(l => l.enabled).length < 2) {
803
+ insights.optimization_recommendations.push({
804
+ type: 'layer_diversity',
805
+ message: 'Consider adding more layer types (git, local overrides) for better customization',
806
+ impact: 'medium'
807
+ });
808
+ }
809
+ if (this.configuration.performance.max_concurrent_loads < 3) {
810
+ insights.optimization_recommendations.push({
811
+ type: 'performance',
812
+ message: 'Increase max_concurrent_loads for better performance on modern systems',
813
+ impact: 'low'
814
+ });
815
+ }
816
+ if (!this.configuration.security.validate_sources) {
817
+ insights.optimization_recommendations.push({
818
+ type: 'security',
819
+ message: 'Enable source validation for better security',
820
+ impact: 'high'
821
+ });
822
+ }
823
+ if (validation.warnings.length > 0) {
824
+ insights.optimization_recommendations.push({
825
+ type: 'configuration',
826
+ message: `Address ${validation.warnings.length} configuration warnings`,
827
+ impact: 'medium'
828
+ });
829
+ }
830
+ return insights;
831
+ }
832
+ async generateOptimizationWorkflow(params) {
833
+ // Use domain workflows for comprehensive scenario coverage
834
+ const baseWorkflows = domainWorkflows;
835
+ // Additional legacy workflow mapping
836
+ const legacyWorkflows = {
837
+ 'slow report': {
838
+ steps: [
839
+ {
840
+ step_number: 1,
841
+ title: 'Analyze Current Data Access Patterns',
842
+ description: 'Review report dataset access, joins, and aggregations to identify bottlenecks',
843
+ related_topics: ['query-performance-patterns', 'sift-technology-fundamentals'],
844
+ validation_criteria: ['Query execution times documented', 'Data volume assessed'],
845
+ estimated_time: '30 minutes'
846
+ },
847
+ {
848
+ step_number: 2,
849
+ title: 'Implement SIFT Indexes',
850
+ description: 'Add SIFT indexes for aggregation operations and enable MaintainSIFTIndex',
851
+ related_topics: ['sift-index-fundamentals', 'maintainsiftindex-property-behavior'],
852
+ validation_criteria: ['SIFT keys created', 'MaintainSIFTIndex enabled', 'Aggregations use CalcSums'],
853
+ estimated_time: '45 minutes'
854
+ },
855
+ {
856
+ step_number: 3,
857
+ title: 'Optimize Field Loading',
858
+ description: 'Use SetLoadFields to reduce memory usage and network traffic',
859
+ related_topics: ['setloadfields-optimization', 'memory-optimization'],
860
+ validation_criteria: ['SetLoadFields implemented', 'Only required fields loaded'],
861
+ estimated_time: '20 minutes'
862
+ },
863
+ {
864
+ step_number: 4,
865
+ title: 'Performance Testing and Validation',
866
+ description: 'Measure performance improvements and validate against targets',
867
+ related_topics: ['performance-monitoring', 'performance-best-practices'],
868
+ validation_criteria: ['Performance metrics collected', 'Target response time achieved'],
869
+ estimated_time: '30 minutes'
870
+ }
871
+ ],
872
+ learning_path: ['sift-technology-fundamentals', 'query-performance-patterns', 'performance-monitoring'],
873
+ success_metrics: ['Report execution time reduced by 70%+', 'Memory usage optimized', 'User satisfaction improved'],
874
+ common_pitfalls: ['Not enabling MaintainSIFTIndex', 'Loading unnecessary fields', 'Missing performance baselines']
875
+ }
876
+ };
877
+ // Merge domain workflows with legacy workflows
878
+ const allWorkflows = { ...baseWorkflows, ...legacyWorkflows };
879
+ // Find matching workflow or create generic one
880
+ const scenario = params.scenario.toLowerCase();
881
+ let workflow = null;
882
+ for (const [key, value] of Object.entries(allWorkflows)) {
883
+ if (scenario.includes(key)) {
884
+ workflow = value;
885
+ break;
886
+ }
887
+ }
888
+ if (!workflow) {
889
+ // Generate generic optimization workflow
890
+ workflow = {
891
+ steps: [
892
+ {
893
+ step_number: 1,
894
+ title: 'Identify Performance Bottlenecks',
895
+ description: 'Analyze the scenario to pinpoint specific performance issues',
896
+ related_topics: ['performance-monitoring', 'query-performance-patterns'],
897
+ validation_criteria: ['Bottlenecks identified', 'Performance baseline established'],
898
+ estimated_time: '30 minutes'
899
+ },
900
+ {
901
+ step_number: 2,
902
+ title: 'Apply Targeted Optimizations',
903
+ description: 'Implement specific BC optimization patterns based on identified issues',
904
+ related_topics: ['performance-best-practices', 'memory-optimization'],
905
+ validation_criteria: ['Optimizations implemented', 'Code patterns improved'],
906
+ estimated_time: '60 minutes'
907
+ },
908
+ {
909
+ step_number: 3,
910
+ title: 'Validate and Monitor',
911
+ description: 'Test improvements and establish ongoing monitoring',
912
+ related_topics: ['performance-monitoring'],
913
+ validation_criteria: ['Performance improved', 'Monitoring established'],
914
+ estimated_time: '20 minutes'
915
+ }
916
+ ],
917
+ learning_path: ['performance-best-practices', 'performance-monitoring'],
918
+ success_metrics: ['Measurable performance improvement', 'Sustainable solution implemented'],
919
+ common_pitfalls: ['Premature optimization', 'Insufficient testing', 'Missing monitoring']
920
+ };
921
+ }
922
+ return {
923
+ scenario: params.scenario,
924
+ workflow,
925
+ constraints: params.constraints || [],
926
+ target_performance: params.target_performance
927
+ };
928
+ }
929
+ async run() {
930
+ try {
931
+ // Ultra-early diagnostics for platform issues
932
+ console.error('=== BC Code Intelligence MCP Server Startup Diagnostics ===');
933
+ console.error(`Platform: ${process.platform}`);
934
+ console.error(`Node version: ${process.version}`);
935
+ console.error(`Architecture: ${process.arch}`);
936
+ console.error(`Working directory: ${process.cwd()}`);
937
+ console.error(`Script path: ${process.argv[1]}`);
938
+ const version = this.getPackageVersion();
939
+ console.error(`🚀 BC Code Intelligence MCP Server v${version} starting...`);
940
+ // Verify embedded knowledge path BEFORE any service initialization
941
+ const __filename = fileURLToPath(import.meta.url);
942
+ const __dirname = dirname(__filename);
943
+ const embeddedPath = join(__dirname, '..', 'embedded-knowledge');
944
+ console.error(`Embedded knowledge path: ${embeddedPath}`);
945
+ console.error(`Embedded knowledge exists: ${existsSync(embeddedPath)}`);
946
+ if (existsSync(embeddedPath)) {
947
+ const expectedDirs = ['domains', 'specialists', 'methodologies'];
948
+ for (const dir of expectedDirs) {
949
+ const dirPath = join(embeddedPath, dir);
950
+ console.error(` ${dir}/: ${existsSync(dirPath)}`);
951
+ }
952
+ }
953
+ // Try to load user-level configuration first (company layers)
954
+ // If no user config exists, fall back to embedded-only mode
955
+ console.error('📦 Checking for user-level configuration (company layers)...');
956
+ try {
957
+ const userConfigResult = await this.configLoader.loadConfiguration();
958
+ if (userConfigResult.config.layers && userConfigResult.config.layers.length > 1) {
959
+ // User has configured layers (embedded + company/git layers)
960
+ console.error(`✅ Found user-level configuration with ${userConfigResult.config.layers.length} layers`);
961
+ this.configuration = userConfigResult.config;
962
+ try {
963
+ await this.initializeWithConfiguration(userConfigResult);
964
+ }
965
+ catch (configError) {
966
+ // CRITICAL FIX: If user config initialization fails (e.g. git layer auth failure),
967
+ // fall back to embedded-only mode instead of crashing the server
968
+ console.error('❌ Failed to initialize with user configuration:', configError instanceof Error ? configError.message : String(configError));
969
+ console.error('🔄 Falling back to embedded-only mode...');
970
+ await this.initializeEmbeddedOnly();
971
+ }
972
+ }
973
+ else {
974
+ // No user config or only embedded layer - use embedded-only mode
975
+ console.error('📦 No user-level configuration found, loading embedded knowledge only...');
976
+ await this.initializeEmbeddedOnly();
977
+ }
978
+ }
979
+ catch (error) {
980
+ console.error('⚠️ Failed to load user configuration, falling back to embedded-only:', error instanceof Error ? error.message : String(error));
981
+ await this.initializeEmbeddedOnly();
982
+ } // Start MCP server
983
+ const transport = new StdioServerTransport();
984
+ await this.server.connect(transport);
985
+ console.error(`✅ BC Code Intelligence MCP Server v${this.getPackageVersion()} started successfully`);
986
+ console.error(`💡 To enable project-specific layers, call set_workspace_info with your project path`);
987
+ }
988
+ catch (error) {
989
+ console.error('💥 Fatal error during server startup:', error);
990
+ console.error('Error stack:', error instanceof Error ? error.stack : 'No stack trace');
991
+ process.exit(1);
992
+ }
993
+ }
994
+ /**
995
+ * Initialize only embedded knowledge layer at startup
996
+ */
997
+ async initializeEmbeddedOnly() {
998
+ const __filename = fileURLToPath(import.meta.url);
999
+ const __dirname = dirname(__filename);
1000
+ const embeddedPath = join(__dirname, '../embedded-knowledge');
1001
+ // Initialize minimal layer service with only embedded
1002
+ this.layerService = new MultiContentLayerService();
1003
+ const { EmbeddedKnowledgeLayer } = await import('./layers/embedded-layer.js');
1004
+ const embeddedLayer = new EmbeddedKnowledgeLayer(embeddedPath);
1005
+ this.layerService.addLayer(embeddedLayer);
1006
+ await this.layerService.initialize();
1007
+ // Initialize minimal services for embedded-only mode
1008
+ const legacyConfig = {
1009
+ knowledge_base_path: embeddedPath,
1010
+ indexes_path: join(embeddedPath, 'indexes'),
1011
+ methodologies_path: join(embeddedPath, 'methodologies'),
1012
+ cache_size: 1000,
1013
+ max_search_results: 20,
1014
+ default_bc_version: 'BC22',
1015
+ enable_fuzzy_search: true,
1016
+ search_threshold: 0.6
1017
+ };
1018
+ this.knowledgeService = new KnowledgeService(legacyConfig);
1019
+ await this.knowledgeService.initialize();
1020
+ this.codeAnalysisService = new CodeAnalysisService(this.knowledgeService);
1021
+ this.methodologyService = new MethodologyService(this.knowledgeService);
1022
+ const specialistDiscoveryService = new SpecialistDiscoveryService(this.layerService);
1023
+ this.workflowService = new WorkflowService(this.knowledgeService, this.methodologyService, specialistDiscoveryService);
1024
+ // Initialize tool classes (but servicesInitialized = false will intercept them)
1025
+ // We need these initialized so they appear in the tool list, but they won't execute
1026
+ const sessionStorageConfig = this.layerService.getSessionStorageConfig();
1027
+ this.specialistSessionManager = new SpecialistSessionManager(this.layerService, sessionStorageConfig);
1028
+ this.specialistTools = new SpecialistTools(this.layerService, this.specialistSessionManager, this.knowledgeService);
1029
+ this.specialistDiscoveryService = new SpecialistDiscoveryService(this.layerService);
1030
+ this.specialistDiscoveryTools = new SpecialistDiscoveryTools(this.specialistDiscoveryService, this.specialistSessionManager, this.layerService);
1031
+ this.agentOnboardingTools = new AgentOnboardingTools(this.specialistDiscoveryService, this.layerService);
1032
+ this.specialistHandoffTools = new SpecialistHandoffTools(this.specialistSessionManager, this.specialistDiscoveryService, this.layerService);
1033
+ // Note: Services and tools are initialized, but servicesInitialized = false
1034
+ // This prevents tools from being called until workspace is set
1035
+ console.error('✅ Embedded knowledge loaded. Workspace-specific services pending set_workspace_info.');
1036
+ }
1037
+ /**
1038
+ * Initialize with user-level configuration (company layers from ~/.bc-code-intel/config.yaml)
1039
+ */
1040
+ async initializeWithConfiguration(configResult) {
1041
+ console.error(`🚀 Initializing with user-level configuration...`);
1042
+ this.configuration = configResult.config; // Initialize services with the loaded configuration
1043
+ await this.initializeServices(configResult);
1044
+ this.servicesInitialized = true;
1045
+ const specialists = await this.layerService.getAllSpecialists();
1046
+ const topics = this.layerService.getAllTopicIds();
1047
+ const layers = this.layerService.getLayers();
1048
+ console.error(`✅ User configuration loaded: ${topics.length} topics from ${layers.length} layers, ${specialists.length} specialists`);
1049
+ layers.forEach(layer => {
1050
+ const topicCount = layer.getTopicIds().length;
1051
+ console.error(` 📚 ${layer.name}: ${topicCount} topics (priority ${layer.priority})`);
1052
+ });
1053
+ }
1054
+ /**
1055
+ * Set workspace root and MCP ecosystem info, initialize full services
1056
+ */
1057
+ async setWorkspaceInfo(path, availableMcps = []) {
1058
+ try {
1059
+ // Normalize and validate path
1060
+ const { resolve } = await import('path');
1061
+ const { existsSync } = await import('fs');
1062
+ const resolvedPath = resolve(path);
1063
+ if (!existsSync(resolvedPath)) {
1064
+ return {
1065
+ success: false,
1066
+ message: `Path does not exist: ${resolvedPath}`,
1067
+ reloaded: false
1068
+ };
1069
+ }
1070
+ // Check if this is the same workspace
1071
+ if (this.workspaceRoot === resolvedPath) {
1072
+ // Update availableMcps even if workspace unchanged
1073
+ this.availableMcps = availableMcps;
1074
+ // Update layer service with new MCP availability (dynamic filtering)
1075
+ if (this.layerService) {
1076
+ this.layerService.setAvailableMcps(availableMcps);
1077
+ }
1078
+ return {
1079
+ success: true,
1080
+ message: `Workspace root already set to: ${resolvedPath}${availableMcps.length > 0 ? ` | Updated MCP ecosystem: ${availableMcps.length} servers` : ''}`,
1081
+ reloaded: false
1082
+ };
1083
+ }
1084
+ console.error(`📁 Setting workspace root to: ${resolvedPath}`);
1085
+ if (availableMcps.length > 0) {
1086
+ console.error(`🔧 MCP Ecosystem: ${availableMcps.join(', ')}`);
1087
+ }
1088
+ // Change working directory
1089
+ process.chdir(resolvedPath);
1090
+ this.workspaceRoot = resolvedPath;
1091
+ this.availableMcps = availableMcps;
1092
+ // Update layer service with available MCPs for conditional topic filtering
1093
+ if (this.layerService) {
1094
+ this.layerService.setAvailableMcps(availableMcps);
1095
+ }
1096
+ // Load configuration with workspace context (merges user + project configs)
1097
+ const configResult = await this.configLoader.loadConfiguration(resolvedPath);
1098
+ if (configResult.validation_errors.length > 0) {
1099
+ console.error('⚠️ Configuration validation errors:');
1100
+ configResult.validation_errors.forEach(error => {
1101
+ console.error(` - ${error.field}: ${error.message}`);
1102
+ });
1103
+ }
1104
+ // Initialize full services with configuration
1105
+ await this.initializeServices(configResult);
1106
+ this.servicesInitialized = true;
1107
+ const specialists = await this.layerService.getAllSpecialists();
1108
+ const topics = this.layerService.getAllTopicIds();
1109
+ const mcpInfo = availableMcps.length > 0 ? ` | MCP Ecosystem: ${availableMcps.length} servers` : '';
1110
+ return {
1111
+ success: true,
1112
+ message: `Workspace configured successfully. Loaded ${topics.length} topics from ${this.layerService.getLayers().length} layers, ${specialists.length} specialists available.${mcpInfo}`,
1113
+ reloaded: true
1114
+ };
1115
+ }
1116
+ catch (error) {
1117
+ console.error('❌ Error setting workspace info:', error);
1118
+ return {
1119
+ success: false,
1120
+ message: `Failed to set workspace info: ${error instanceof Error ? error.message : String(error)}`,
1121
+ reloaded: false
1122
+ };
1123
+ }
1124
+ }
1125
+ /**
1126
+ * Get configuration quality score for startup diagnostics
1127
+ */
1128
+ async getConfigurationQuality() {
1129
+ if (!this.configuration)
1130
+ return 0;
1131
+ try {
1132
+ const validator = new ConfigurationValidator();
1133
+ const validation = await validator.validate(this.configuration);
1134
+ return validation.score;
1135
+ }
1136
+ catch {
1137
+ return 0;
1138
+ }
1139
+ }
1140
+ }
1141
+ // Start the server
1142
+ async function main() {
1143
+ try {
1144
+ // Ultra-early platform diagnostics (before any server initialization)
1145
+ console.error('=== Pre-Initialization Platform Check ===');
1146
+ console.error(`Node.js: ${process.version}`);
1147
+ console.error(`Platform: ${process.platform} (${process.arch})`);
1148
+ console.error(`PWD: ${process.cwd()}`);
1149
+ console.error(`Script: ${process.argv[1]}`);
1150
+ // Check for workspace root argument (e.g., "." passed from MCP client)
1151
+ const workspaceArg = process.argv[2];
1152
+ if (workspaceArg) {
1153
+ console.error(`Workspace argument provided: "${workspaceArg}"`);
1154
+ const { resolve } = await import('path');
1155
+ const resolvedPath = resolve(workspaceArg);
1156
+ console.error(`Resolved to: ${resolvedPath}`);
1157
+ // Override process.cwd() for config/layer discovery
1158
+ process.chdir(resolvedPath);
1159
+ console.error(`Changed working directory to: ${process.cwd()}`);
1160
+ }
1161
+ const server = new BCCodeIntelligenceServer();
1162
+ await server.run();
1163
+ }
1164
+ catch (error) {
1165
+ console.error('💥 Fatal error in main():', error);
1166
+ console.error('Error details:', {
1167
+ name: error instanceof Error ? error.name : 'Unknown',
1168
+ message: error instanceof Error ? error.message : String(error),
1169
+ stack: error instanceof Error ? error.stack : 'No stack trace'
1170
+ });
1171
+ process.exit(1);
1172
+ }
1173
+ }
1174
+ // Handle process termination
1175
+ process.on('SIGINT', async () => {
1176
+ console.error('BC Code Intelligence MCP Server shutting down (SIGINT)...');
1177
+ process.exit(0);
1178
+ });
1179
+ process.on('SIGTERM', async () => {
1180
+ console.error('BC Code Intelligence MCP Server shutting down (SIGTERM)...');
1181
+ process.exit(0);
1182
+ });
1183
+ // Catch unhandled promise rejections (common cause of silent crashes)
1184
+ process.on('unhandledRejection', (reason, promise) => {
1185
+ console.error('💥 Unhandled Promise Rejection:');
1186
+ console.error('Reason:', reason);
1187
+ console.error('Promise:', promise);
1188
+ if (reason instanceof Error) {
1189
+ console.error('Stack:', reason.stack);
1190
+ }
1191
+ process.exit(1);
1192
+ });
1193
+ // Catch uncaught exceptions
1194
+ process.on('uncaughtException', (error) => {
1195
+ console.error('💥 Uncaught Exception:');
1196
+ console.error('Error:', error);
1197
+ console.error('Stack:', error.stack);
1198
+ process.exit(1);
1199
+ });
1200
+ // Run server if this is the main module
1201
+ // Check both direct execution (index.js) and binary execution (bc-code-intelligence-mcp, bc-code-intel-server)
1202
+ if (process.argv[1]?.endsWith('index.js') ||
1203
+ process.argv[1]?.endsWith('bc-code-intelligence-mcp') ||
1204
+ process.argv[1]?.endsWith('bc-code-intel-server')) {
1205
+ main().catch((error) => {
1206
+ console.error('Fatal error in BC Code Intelligence MCP Server:', error);
1207
+ process.exit(1);
1208
+ });
1209
+ }
1210
+ export { BCCodeIntelligenceServer };
1211
+ //# sourceMappingURL=index.js.map