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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (753) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/dist/cache/cache-manager.d.ts +95 -0
  4. package/dist/cache/cache-manager.d.ts.map +1 -0
  5. package/dist/cache/cache-manager.js +328 -0
  6. package/dist/cache/cache-manager.js.map +1 -0
  7. package/dist/cli/bc-code-intel-cli.d.ts +9 -0
  8. package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
  9. package/dist/cli/bc-code-intel-cli.js +440 -0
  10. package/dist/cli/bc-code-intel-cli.js.map +1 -0
  11. package/dist/config/config-loader.d.ts +28 -0
  12. package/dist/config/config-loader.d.ts.map +1 -0
  13. package/dist/config/config-loader.js +497 -0
  14. package/dist/config/config-loader.js.map +1 -0
  15. package/dist/config/config-validator.d.ts +84 -0
  16. package/dist/config/config-validator.d.ts.map +1 -0
  17. package/dist/config/config-validator.js +608 -0
  18. package/dist/config/config-validator.js.map +1 -0
  19. package/dist/config/test-config-loader.d.ts +10 -0
  20. package/dist/config/test-config-loader.d.ts.map +1 -0
  21. package/dist/config/test-config-loader.js +135 -0
  22. package/dist/config/test-config-loader.js.map +1 -0
  23. package/dist/config/test-enhanced-layer-service.d.ts +7 -0
  24. package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
  25. package/dist/config/test-enhanced-layer-service.js +104 -0
  26. package/dist/config/test-enhanced-layer-service.js.map +1 -0
  27. package/dist/config/test-git-layer.d.ts +7 -0
  28. package/dist/config/test-git-layer.d.ts.map +1 -0
  29. package/dist/config/test-git-layer.js +68 -0
  30. package/dist/config/test-git-layer.js.map +1 -0
  31. package/dist/dev/hot-reload.d.ts +91 -0
  32. package/dist/dev/hot-reload.d.ts.map +1 -0
  33. package/dist/dev/hot-reload.js +358 -0
  34. package/dist/dev/hot-reload.js.map +1 -0
  35. package/dist/index.d.ts +82 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1211 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/layers/base-layer.d.ts +133 -0
  40. package/dist/layers/base-layer.d.ts.map +1 -0
  41. package/dist/layers/base-layer.js +290 -0
  42. package/dist/layers/base-layer.js.map +1 -0
  43. package/dist/layers/embedded-layer.d.ts +130 -0
  44. package/dist/layers/embedded-layer.d.ts.map +1 -0
  45. package/dist/layers/embedded-layer.js +612 -0
  46. package/dist/layers/embedded-layer.js.map +1 -0
  47. package/dist/layers/git-layer.d.ts +77 -0
  48. package/dist/layers/git-layer.d.ts.map +1 -0
  49. package/dist/layers/git-layer.js +529 -0
  50. package/dist/layers/git-layer.js.map +1 -0
  51. package/dist/layers/index.d.ts +12 -0
  52. package/dist/layers/index.d.ts.map +1 -0
  53. package/dist/layers/index.js +11 -0
  54. package/dist/layers/index.js.map +1 -0
  55. package/dist/layers/layer-service.d.ts +135 -0
  56. package/dist/layers/layer-service.d.ts.map +1 -0
  57. package/dist/layers/layer-service.js +586 -0
  58. package/dist/layers/layer-service.js.map +1 -0
  59. package/dist/layers/project-layer.d.ts +58 -0
  60. package/dist/layers/project-layer.d.ts.map +1 -0
  61. package/dist/layers/project-layer.js +286 -0
  62. package/dist/layers/project-layer.js.map +1 -0
  63. package/dist/monitoring/production-monitor.d.ts +148 -0
  64. package/dist/monitoring/production-monitor.d.ts.map +1 -0
  65. package/dist/monitoring/production-monitor.js +463 -0
  66. package/dist/monitoring/production-monitor.js.map +1 -0
  67. package/dist/performance/performance-monitor.d.ts +99 -0
  68. package/dist/performance/performance-monitor.d.ts.map +1 -0
  69. package/dist/performance/performance-monitor.js +253 -0
  70. package/dist/performance/performance-monitor.js.map +1 -0
  71. package/dist/sdk/bc-code-intel-client.d.ts +175 -0
  72. package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
  73. package/dist/sdk/bc-code-intel-client.js +380 -0
  74. package/dist/sdk/bc-code-intel-client.js.map +1 -0
  75. package/dist/search/intelligent-search.d.ts +97 -0
  76. package/dist/search/intelligent-search.d.ts.map +1 -0
  77. package/dist/search/intelligent-search.js +358 -0
  78. package/dist/search/intelligent-search.js.map +1 -0
  79. package/dist/security/access-control.d.ts +110 -0
  80. package/dist/security/access-control.d.ts.map +1 -0
  81. package/dist/security/access-control.js +353 -0
  82. package/dist/security/access-control.js.map +1 -0
  83. package/dist/services/code-analysis-service.d.ts +72 -0
  84. package/dist/services/code-analysis-service.d.ts.map +1 -0
  85. package/dist/services/code-analysis-service.js +818 -0
  86. package/dist/services/code-analysis-service.js.map +1 -0
  87. package/dist/services/enhanced-prompt-service.d.ts +56 -0
  88. package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
  89. package/dist/services/enhanced-prompt-service.js +165 -0
  90. package/dist/services/enhanced-prompt-service.js.map +1 -0
  91. package/dist/services/knowledge-service.d.ts +90 -0
  92. package/dist/services/knowledge-service.d.ts.map +1 -0
  93. package/dist/services/knowledge-service.js +342 -0
  94. package/dist/services/knowledge-service.js.map +1 -0
  95. package/dist/services/methodology-service.d.ts +91 -0
  96. package/dist/services/methodology-service.d.ts.map +1 -0
  97. package/dist/services/methodology-service.js +423 -0
  98. package/dist/services/methodology-service.js.map +1 -0
  99. package/dist/services/multi-content-layer-service.d.ts +198 -0
  100. package/dist/services/multi-content-layer-service.d.ts.map +1 -0
  101. package/dist/services/multi-content-layer-service.js +991 -0
  102. package/dist/services/multi-content-layer-service.js.map +1 -0
  103. package/dist/services/roleplay-engine.d.ts +161 -0
  104. package/dist/services/roleplay-engine.d.ts.map +1 -0
  105. package/dist/services/roleplay-engine.js +994 -0
  106. package/dist/services/roleplay-engine.js.map +1 -0
  107. package/dist/services/session-storage/file-storage.d.ts +30 -0
  108. package/dist/services/session-storage/file-storage.d.ts.map +1 -0
  109. package/dist/services/session-storage/file-storage.js +229 -0
  110. package/dist/services/session-storage/file-storage.js.map +1 -0
  111. package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
  112. package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
  113. package/dist/services/session-storage/in-memory-storage.js +142 -0
  114. package/dist/services/session-storage/in-memory-storage.js.map +1 -0
  115. package/dist/services/specialist-discovery.d.ts +98 -0
  116. package/dist/services/specialist-discovery.d.ts.map +1 -0
  117. package/dist/services/specialist-discovery.js +387 -0
  118. package/dist/services/specialist-discovery.js.map +1 -0
  119. package/dist/services/specialist-loader.d.ts +101 -0
  120. package/dist/services/specialist-loader.d.ts.map +1 -0
  121. package/dist/services/specialist-loader.js +256 -0
  122. package/dist/services/specialist-loader.js.map +1 -0
  123. package/dist/services/specialist-session-manager.d.ts +76 -0
  124. package/dist/services/specialist-session-manager.d.ts.map +1 -0
  125. package/dist/services/specialist-session-manager.js +255 -0
  126. package/dist/services/specialist-session-manager.js.map +1 -0
  127. package/dist/services/workflow-service.d.ts +146 -0
  128. package/dist/services/workflow-service.d.ts.map +1 -0
  129. package/dist/services/workflow-service.js +409 -0
  130. package/dist/services/workflow-service.js.map +1 -0
  131. package/dist/setup/post-install.d.ts +12 -0
  132. package/dist/setup/post-install.d.ts.map +1 -0
  133. package/dist/setup/post-install.js +81 -0
  134. package/dist/setup/post-install.js.map +1 -0
  135. package/dist/streamlined-handlers.d.ts +94 -0
  136. package/dist/streamlined-handlers.d.ts.map +1 -0
  137. package/dist/streamlined-handlers.js +665 -0
  138. package/dist/streamlined-handlers.js.map +1 -0
  139. package/dist/test-enhanced-mcp-server.d.ts +7 -0
  140. package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
  141. package/dist/test-enhanced-mcp-server.js +177 -0
  142. package/dist/test-enhanced-mcp-server.js.map +1 -0
  143. package/dist/tools/config-diagnostic-tools.d.ts +234 -0
  144. package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
  145. package/dist/tools/config-diagnostic-tools.js +887 -0
  146. package/dist/tools/config-diagnostic-tools.js.map +1 -0
  147. package/dist/tools/core-tools.d.ts +26 -0
  148. package/dist/tools/core-tools.d.ts.map +1 -0
  149. package/dist/tools/core-tools.js +241 -0
  150. package/dist/tools/core-tools.js.map +1 -0
  151. package/dist/tools/handoff-tools.d.ts +37 -0
  152. package/dist/tools/handoff-tools.d.ts.map +1 -0
  153. package/dist/tools/handoff-tools.js +265 -0
  154. package/dist/tools/handoff-tools.js.map +1 -0
  155. package/dist/tools/index.d.ts +61 -0
  156. package/dist/tools/index.d.ts.map +1 -0
  157. package/dist/tools/index.js +75 -0
  158. package/dist/tools/index.js.map +1 -0
  159. package/dist/tools/onboarding-tools.d.ts +43 -0
  160. package/dist/tools/onboarding-tools.d.ts.map +1 -0
  161. package/dist/tools/onboarding-tools.js +353 -0
  162. package/dist/tools/onboarding-tools.js.map +1 -0
  163. package/dist/tools/specialist-discovery-tools.d.ts +27 -0
  164. package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
  165. package/dist/tools/specialist-discovery-tools.js +275 -0
  166. package/dist/tools/specialist-discovery-tools.js.map +1 -0
  167. package/dist/tools/specialist-tools.d.ts +43 -0
  168. package/dist/tools/specialist-tools.d.ts.map +1 -0
  169. package/dist/tools/specialist-tools.js +372 -0
  170. package/dist/tools/specialist-tools.js.map +1 -0
  171. package/dist/tools/workspace-tools.d.ts +96 -0
  172. package/dist/tools/workspace-tools.d.ts.map +1 -0
  173. package/dist/tools/workspace-tools.js +188 -0
  174. package/dist/tools/workspace-tools.js.map +1 -0
  175. package/dist/types/bc-knowledge.d.ts +303 -0
  176. package/dist/types/bc-knowledge.d.ts.map +1 -0
  177. package/dist/types/bc-knowledge.js +69 -0
  178. package/dist/types/bc-knowledge.js.map +1 -0
  179. package/dist/types/config-types.d.ts +186 -0
  180. package/dist/types/config-types.d.ts.map +1 -0
  181. package/dist/types/config-types.js +109 -0
  182. package/dist/types/config-types.js.map +1 -0
  183. package/dist/types/enhanced-layer-types.d.ts +193 -0
  184. package/dist/types/enhanced-layer-types.d.ts.map +1 -0
  185. package/dist/types/enhanced-layer-types.js +9 -0
  186. package/dist/types/enhanced-layer-types.js.map +1 -0
  187. package/dist/types/index.d.ts +5 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +7 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/layer-types.d.ts +173 -0
  192. package/dist/types/layer-types.d.ts.map +1 -0
  193. package/dist/types/layer-types.js +27 -0
  194. package/dist/types/layer-types.js.map +1 -0
  195. package/dist/types/roleplay-types.d.ts +156 -0
  196. package/dist/types/roleplay-types.d.ts.map +1 -0
  197. package/dist/types/roleplay-types.js +8 -0
  198. package/dist/types/roleplay-types.js.map +1 -0
  199. package/dist/types/session-types.d.ts +127 -0
  200. package/dist/types/session-types.d.ts.map +1 -0
  201. package/dist/types/session-types.js +8 -0
  202. package/dist/types/session-types.js.map +1 -0
  203. package/dist/utils/path-utils.d.ts +5 -0
  204. package/dist/utils/path-utils.d.ts.map +1 -0
  205. package/dist/utils/path-utils.js +14 -0
  206. package/dist/utils/path-utils.js.map +1 -0
  207. package/dist/workflows/domain-workflows.d.ts +8 -0
  208. package/dist/workflows/domain-workflows.d.ts.map +1 -0
  209. package/dist/workflows/domain-workflows.js +360 -0
  210. package/dist/workflows/domain-workflows.js.map +1 -0
  211. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
  212. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
  213. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
  214. package/embedded-knowledge/AGENTS.md +178 -0
  215. package/embedded-knowledge/CONTRIBUTING.md +58 -0
  216. package/embedded-knowledge/LICENSE +21 -0
  217. package/embedded-knowledge/README.md +32 -0
  218. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
  219. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
  220. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
  221. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
  222. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
  223. package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +371 -0
  224. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
  225. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
  226. package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +281 -0
  227. package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -0
  228. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
  229. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
  230. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
  231. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
  232. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
  233. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
  234. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
  235. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
  236. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
  237. package/embedded-knowledge/domains/alex-architect/samples/testability-design-patterns.md +223 -0
  238. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
  239. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
  240. package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +77 -0
  241. package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
  242. package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
  243. package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
  244. package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
  245. package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
  246. package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
  247. package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
  248. package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
  249. package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
  250. package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
  251. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -0
  252. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
  253. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
  254. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
  255. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
  256. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
  257. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
  258. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
  259. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
  260. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
  261. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
  262. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
  263. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
  264. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
  265. package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +160 -0
  266. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
  267. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
  268. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
  269. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
  270. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
  271. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
  272. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
  273. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
  274. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
  275. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
  276. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
  277. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
  278. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
  279. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
  280. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
  281. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
  282. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
  283. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
  284. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
  285. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
  286. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
  287. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
  288. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
  289. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
  290. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
  291. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
  292. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
  293. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
  294. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
  295. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
  296. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
  297. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
  298. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
  299. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
  300. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
  301. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
  302. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
  303. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
  304. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
  305. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
  306. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
  307. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
  308. package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +159 -0
  309. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
  310. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
  311. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
  312. package/embedded-knowledge/domains/eva-errors/samples/codeunit-run-pattern.md +239 -0
  313. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
  314. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
  315. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
  316. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
  317. package/embedded-knowledge/domains/eva-errors/samples/try-function-usage.md +195 -0
  318. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
  319. package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -0
  320. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
  321. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
  322. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
  323. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
  324. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
  325. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
  326. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
  327. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
  328. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
  329. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
  330. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
  331. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
  332. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
  333. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
  334. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
  335. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
  336. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
  337. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
  338. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
  339. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
  340. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
  341. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
  342. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
  343. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
  344. package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +201 -0
  345. package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
  346. package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
  347. package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
  348. package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
  349. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
  350. package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -0
  351. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
  352. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
  353. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
  354. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
  355. package/embedded-knowledge/domains/quinn-tester/samples/isolation-testing-patterns.md +424 -0
  356. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
  357. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
  358. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
  359. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
  360. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
  361. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
  362. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
  363. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
  364. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
  365. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
  366. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
  367. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
  368. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
  369. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
  370. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
  371. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
  372. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
  373. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
  374. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
  375. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
  376. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
  377. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
  378. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
  379. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
  380. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
  381. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
  382. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
  383. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
  384. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
  385. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
  386. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
  387. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
  388. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
  389. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
  390. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
  391. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
  392. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
  393. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
  394. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
  395. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
  396. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
  397. package/embedded-knowledge/domains/roger-reviewer/samples/testability-code-smells.md +256 -0
  398. package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -0
  399. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
  400. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
  401. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
  402. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
  403. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
  404. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
  405. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
  406. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
  407. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
  408. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
  409. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
  410. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
  411. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
  412. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
  413. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
  414. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
  415. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
  416. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
  417. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
  418. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
  419. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
  420. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
  421. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
  422. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
  423. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
  424. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
  425. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
  426. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
  427. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
  428. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
  429. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
  430. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
  431. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
  432. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
  433. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
  434. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
  435. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
  436. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
  437. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
  438. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
  439. package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
  440. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
  441. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
  442. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
  443. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +146 -0
  444. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
  445. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
  446. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
  447. package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
  448. package/embedded-knowledge/indexes/domain-catalog.json +106 -0
  449. package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
  450. package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
  451. package/embedded-knowledge/indexes/tags/access-control.json +1 -0
  452. package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
  453. package/embedded-knowledge/indexes/tags/actions.json +1 -0
  454. package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
  455. package/embedded-knowledge/indexes/tags/advanced.json +1 -0
  456. package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
  457. package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
  458. package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
  459. package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
  460. package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
  461. package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
  462. package/embedded-knowledge/indexes/tags/analytics.json +1 -0
  463. package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
  464. package/embedded-knowledge/indexes/tags/api-design.json +1 -0
  465. package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
  466. package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
  467. package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
  468. package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
  469. package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
  470. package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
  471. package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
  472. package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
  473. package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
  474. package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
  475. package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
  476. package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
  477. package/embedded-knowledge/indexes/tags/api.json +1 -0
  478. package/embedded-knowledge/indexes/tags/architecture.json +1 -0
  479. package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
  480. package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
  481. package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
  482. package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
  483. package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
  484. package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
  485. package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
  486. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
  487. package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
  488. package/embedded-knowledge/indexes/tags/binding.json +1 -0
  489. package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
  490. package/embedded-knowledge/indexes/tags/blocks.json +1 -0
  491. package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
  492. package/embedded-knowledge/indexes/tags/branching.json +1 -0
  493. package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
  494. package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
  495. package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
  496. package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
  497. package/embedded-knowledge/indexes/tags/business-process.json +1 -0
  498. package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
  499. package/embedded-knowledge/indexes/tags/caching.json +1 -0
  500. package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
  501. package/embedded-knowledge/indexes/tags/case.json +1 -0
  502. package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
  503. package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
  504. package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
  505. package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
  506. package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
  507. package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
  508. package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
  509. package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
  510. package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
  511. package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
  512. package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
  513. package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
  514. package/embedded-knowledge/indexes/tags/code-style.json +1 -0
  515. package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
  516. package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
  517. package/embedded-knowledge/indexes/tags/comments.json +1 -0
  518. package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
  519. package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
  520. package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
  521. package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
  522. package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
  523. package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
  524. package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
  525. package/embedded-knowledge/indexes/tags/conditional.json +1 -0
  526. package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
  527. package/embedded-knowledge/indexes/tags/consistency.json +1 -0
  528. package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
  529. package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
  530. package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
  531. package/embedded-knowledge/indexes/tags/correlation.json +1 -0
  532. package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
  533. package/embedded-knowledge/indexes/tags/data-access.json +1 -0
  534. package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
  535. package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
  536. package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
  537. package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
  538. package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
  539. package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
  540. package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
  541. package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
  542. package/embedded-knowledge/indexes/tags/database.json +1 -0
  543. package/embedded-knowledge/indexes/tags/debugging.json +1 -0
  544. package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
  545. package/embedded-knowledge/indexes/tags/declaration.json +1 -0
  546. package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
  547. package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
  548. package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
  549. package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
  550. package/embedded-knowledge/indexes/tags/deployment.json +1 -0
  551. package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
  552. package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
  553. package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
  554. package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
  555. package/embedded-knowledge/indexes/tags/documentation.json +1 -0
  556. package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
  557. package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
  558. package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
  559. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
  560. package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
  561. package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
  562. package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
  563. package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
  564. package/embedded-knowledge/indexes/tags/error-text.json +1 -0
  565. package/embedded-knowledge/indexes/tags/etag.json +1 -0
  566. package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
  567. package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
  568. package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
  569. package/embedded-knowledge/indexes/tags/events.json +1 -0
  570. package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
  571. package/embedded-knowledge/indexes/tags/expressions.json +1 -0
  572. package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
  573. package/embedded-knowledge/indexes/tags/extensions.json +1 -0
  574. package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
  575. package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
  576. package/embedded-knowledge/indexes/tags/field-control.json +1 -0
  577. package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
  578. package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
  579. package/embedded-knowledge/indexes/tags/field-state.json +1 -0
  580. package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
  581. package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
  582. package/embedded-knowledge/indexes/tags/fields.json +1 -0
  583. package/embedded-knowledge/indexes/tags/filtering.json +1 -0
  584. package/embedded-knowledge/indexes/tags/filters.json +1 -0
  585. package/embedded-knowledge/indexes/tags/formatting.json +1 -0
  586. package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
  587. package/embedded-knowledge/indexes/tags/http-status.json +1 -0
  588. package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
  589. package/embedded-knowledge/indexes/tags/implementation.json +1 -0
  590. package/embedded-knowledge/indexes/tags/indentation.json +1 -0
  591. package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
  592. package/embedded-knowledge/indexes/tags/indexing.json +1 -0
  593. package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
  594. package/embedded-knowledge/indexes/tags/integration.json +1 -0
  595. package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
  596. package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
  597. package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
  598. package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
  599. package/embedded-knowledge/indexes/tags/isolation.json +1 -0
  600. package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
  601. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
  602. package/embedded-knowledge/indexes/tags/keywords.json +1 -0
  603. package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
  604. package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
  605. package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
  606. package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
  607. package/embedded-knowledge/indexes/tags/localization.json +1 -0
  608. package/embedded-knowledge/indexes/tags/logging.json +1 -0
  609. package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
  610. package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
  611. package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
  612. package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
  613. package/embedded-knowledge/indexes/tags/memory.json +1 -0
  614. package/embedded-knowledge/indexes/tags/message-design.json +1 -0
  615. package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
  616. package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
  617. package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
  618. package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
  619. package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
  620. package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
  621. package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
  622. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
  623. package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
  624. package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
  625. package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
  626. package/embedded-knowledge/indexes/tags/naming.json +1 -0
  627. package/embedded-knowledge/indexes/tags/navigation.json +1 -0
  628. package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
  629. package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
  630. package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
  631. package/embedded-knowledge/indexes/tags/no-series.json +1 -0
  632. package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
  633. package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
  634. package/embedded-knowledge/indexes/tags/odata.json +1 -0
  635. package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
  636. package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
  637. package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
  638. package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
  639. package/embedded-knowledge/indexes/tags/operators.json +1 -0
  640. package/embedded-knowledge/indexes/tags/optimization.json +1 -0
  641. package/embedded-knowledge/indexes/tags/order.json +1 -0
  642. package/embedded-knowledge/indexes/tags/organization.json +1 -0
  643. package/embedded-knowledge/indexes/tags/pages.json +1 -0
  644. package/embedded-knowledge/indexes/tags/parameters.json +1 -0
  645. package/embedded-knowledge/indexes/tags/patterns.json +1 -0
  646. package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
  647. package/embedded-knowledge/indexes/tags/performance.json +1 -0
  648. package/embedded-knowledge/indexes/tags/placement.json +1 -0
  649. package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
  650. package/embedded-knowledge/indexes/tags/posting.json +1 -0
  651. package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
  652. package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
  653. package/embedded-knowledge/indexes/tags/privacy.json +1 -0
  654. package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
  655. package/embedded-knowledge/indexes/tags/production.json +1 -0
  656. package/embedded-knowledge/indexes/tags/productivity.json +1 -0
  657. package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
  658. package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
  659. package/embedded-knowledge/indexes/tags/ranges.json +1 -0
  660. package/embedded-knowledge/indexes/tags/readability.json +1 -0
  661. package/embedded-knowledge/indexes/tags/record-access.json +1 -0
  662. package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
  663. package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
  664. package/embedded-knowledge/indexes/tags/reference.json +1 -0
  665. package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
  666. package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
  667. package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
  668. package/embedded-knowledge/indexes/tags/runtime.json +1 -0
  669. package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
  670. package/embedded-knowledge/indexes/tags/security.json +1 -0
  671. package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
  672. package/embedded-knowledge/indexes/tags/serialization.json +1 -0
  673. package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
  674. package/embedded-knowledge/indexes/tags/session.json +1 -0
  675. package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
  676. package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
  677. package/embedded-knowledge/indexes/tags/sift.json +1 -0
  678. package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
  679. package/embedded-knowledge/indexes/tags/spacing.json +1 -0
  680. package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
  681. package/embedded-knowledge/indexes/tags/standards.json +1 -0
  682. package/embedded-knowledge/indexes/tags/statements.json +1 -0
  683. package/embedded-knowledge/indexes/tags/streaming.json +1 -0
  684. package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
  685. package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
  686. package/embedded-knowledge/indexes/tags/structure.json +1 -0
  687. package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
  688. package/embedded-knowledge/indexes/tags/switch.json +1 -0
  689. package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
  690. package/embedded-knowledge/indexes/tags/syntax.json +1 -0
  691. package/embedded-knowledge/indexes/tags/systemid.json +1 -0
  692. package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
  693. package/embedded-knowledge/indexes/tags/table-events.json +1 -0
  694. package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
  695. package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
  696. package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
  697. package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
  698. package/embedded-knowledge/indexes/tags/template-method.json +1 -0
  699. package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
  700. package/embedded-knowledge/indexes/tags/testfield.json +1 -0
  701. package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
  702. package/embedded-knowledge/indexes/tags/triggers.json +1 -0
  703. package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
  704. package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
  705. package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
  706. package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
  707. package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
  708. package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
  709. package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
  710. package/embedded-knowledge/indexes/tags/validation.json +1 -0
  711. package/embedded-knowledge/indexes/tags/variables.json +1 -0
  712. package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
  713. package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
  714. package/embedded-knowledge/indexes/tags/web-services.json +1 -0
  715. package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
  716. package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
  717. package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
  718. package/embedded-knowledge/indexes/tags/workspace.json +1 -0
  719. package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
  720. package/embedded-knowledge/indexes/topic-relationships.json +128 -0
  721. package/embedded-knowledge/methodologies/index.json +81 -0
  722. package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
  723. package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
  724. package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
  725. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
  726. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
  727. package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
  728. package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
  729. package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
  730. package/embedded-knowledge/methodologies/phases/performance.md +211 -0
  731. package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
  732. package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
  733. package/embedded-knowledge/methodologies/phases/verification.md +146 -0
  734. package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
  735. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
  736. package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
  737. package/embedded-knowledge/specialists/alex-architect.md +305 -0
  738. package/embedded-knowledge/specialists/casey-copilot.md +314 -0
  739. package/embedded-knowledge/specialists/chris-config.md +226 -0
  740. package/embedded-knowledge/specialists/dean-debug.md +365 -0
  741. package/embedded-knowledge/specialists/eva-errors.md +291 -0
  742. package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
  743. package/embedded-knowledge/specialists/logan-legacy.md +265 -0
  744. package/embedded-knowledge/specialists/maya-mentor.md +299 -0
  745. package/embedded-knowledge/specialists/morgan-market.md +281 -0
  746. package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
  747. package/embedded-knowledge/specialists/quinn-tester.md +323 -0
  748. package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
  749. package/embedded-knowledge/specialists/sam-coder.md +342 -0
  750. package/embedded-knowledge/specialists/seth-security.md +290 -0
  751. package/embedded-knowledge/specialists/taylor-docs.md +312 -0
  752. package/embedded-knowledge/specialists/uma-ux.md +291 -0
  753. package/package.json +82 -0
@@ -0,0 +1,994 @@
1
+ /**
2
+ * BC Specialist Roleplay Engine
3
+ *
4
+ * Brings specialist personas to life through personality-driven responses,
5
+ * consistent character adoption, and context-aware knowledge integration.
6
+ */
7
+ export class BCSpecialistRoleplayEngine {
8
+ layerService;
9
+ knowledgeService;
10
+ config;
11
+ responseTemplates = new Map();
12
+ knowledgeRetriever;
13
+ constructor(layerService, knowledgeService, config) {
14
+ this.layerService = layerService;
15
+ this.knowledgeService = knowledgeService;
16
+ this.config = {
17
+ personality_strength: 'moderate',
18
+ response_length: 'adaptive',
19
+ knowledge_integration: 'balanced',
20
+ suggest_handoffs: true,
21
+ suggest_collaborations: true,
22
+ learn_user_preferences: true,
23
+ adapt_communication_style: true,
24
+ ...config
25
+ };
26
+ this.knowledgeRetriever = new BCKnowledgeRetriever(layerService, knowledgeService);
27
+ this.initializeResponseTemplates();
28
+ }
29
+ /**
30
+ * Generate a methodology-contextual response from a specialist
31
+ */
32
+ async generateResponse(context) {
33
+ const { specialist, userMessage, session } = context;
34
+ // Check if methodology context is established
35
+ if (!session.methodology_context?.confirmed_by_user) {
36
+ return await this.establishMethodologyContext(specialist, userMessage, session);
37
+ }
38
+ // Apply knowledge within established methodology context
39
+ return await this.applyKnowledgeInMethodology(specialist, userMessage, session);
40
+ }
41
+ /**
42
+ * Establish methodology context before applying domain knowledge
43
+ */
44
+ async establishMethodologyContext(specialist, userMessage, session) {
45
+ const personality = this.analyzePersonality(specialist);
46
+ // Check if user is asking a direct question or wants immediate help
47
+ const isDirectQuestion = this.isDirectQuestion(userMessage);
48
+ if (isDirectQuestion) {
49
+ // Provide immediate specialist response without methodology onboarding
50
+ return await this.provideDirectSpecialistResponse(specialist, userMessage, session);
51
+ }
52
+ // Suggest appropriate methodologies based on user request and specialist expertise
53
+ const suggestedMethodologies = await this.suggestMethodologies(userMessage, specialist);
54
+ // Build methodology onboarding response
55
+ const response = await this.buildMethodologyOnboardingResponse(specialist, personality, userMessage, suggestedMethodologies);
56
+ return {
57
+ content: response.content,
58
+ specialist_id: specialist.specialist_id,
59
+ personality_elements: response.personality_elements,
60
+ topics_referenced: [],
61
+ knowledge_applied: [],
62
+ suggested_handoffs: [],
63
+ context_updates: { methodology_suggested: true },
64
+ recommendations_added: response.recommendations || [],
65
+ response_type: 'methodology_onboarding',
66
+ confidence_level: 'high'
67
+ };
68
+ }
69
+ /**
70
+ * Check if user message is a direct question that should get immediate response
71
+ */
72
+ isDirectQuestion(userMessage) {
73
+ const message = userMessage.toLowerCase().trim();
74
+ // Patterns that indicate broader learning/guidance requests (should get methodology)
75
+ const methodologyPatterns = [
76
+ /^(i want to learn|i'd like to learn|teach me|i'm new to|can you guide me|guide me through|walk me through)/i,
77
+ /^(i need help with my.*project|i need guidance|i need training)/i,
78
+ /learn about.*in general/i,
79
+ /get started with/i,
80
+ /introduction to/i
81
+ ];
82
+ // If it matches methodology patterns, it's not a direct question
83
+ if (methodologyPatterns.some(pattern => pattern.test(message))) {
84
+ return false;
85
+ }
86
+ // Patterns that indicate direct questions (should get immediate response)
87
+ const directPatterns = [
88
+ /^(how|what|when|where|why|which|can|could|should|would|is|are|do|does|did)/i,
89
+ /\?/,
90
+ /tell me about.*specific/i,
91
+ /explain.*this/i,
92
+ /help me with.*\b(debug|fix|solve|resolve|optimize|review|analyze|check)\b/i,
93
+ /I need to (fix|debug|solve|resolve|optimize|review|analyze|check)/i,
94
+ /show me/i,
95
+ /review/i,
96
+ /analyze/i,
97
+ /check/i,
98
+ /look at/i,
99
+ /fix/i,
100
+ /debug/i
101
+ ];
102
+ return directPatterns.some(pattern => pattern.test(message));
103
+ }
104
+ /**
105
+ * Provide immediate specialist response without methodology onboarding
106
+ */
107
+ async provideDirectSpecialistResponse(specialist, userMessage, session) {
108
+ const personality = this.analyzePersonality(specialist);
109
+ // Search for relevant knowledge topics based on user's question and specialist's expertise
110
+ const relevantTopics = await this.knowledgeRetriever.findRelevantTopics(userMessage, specialist.expertise.primary.concat(specialist.expertise.secondary || []), 5);
111
+ // Create a minimal methodology context for the direct response
112
+ const directMethodologyContext = {
113
+ confirmed_by_user: true,
114
+ methodology_id: 'direct_consultation',
115
+ title: 'Direct Specialist Consultation',
116
+ current_phase: 'analysis',
117
+ next_steps: []
118
+ };
119
+ // Update session with direct context
120
+ session.methodology_context = directMethodologyContext;
121
+ // Generate direct response using existing machinery
122
+ const response = await this.buildMethodologyResponse(specialist, personality, userMessage, directMethodologyContext, relevantTopics);
123
+ // Apply session context updates
124
+ const contextUpdates = this.generateContextUpdates({ specialist, userMessage, session, conversationHistory: [] }, relevantTopics);
125
+ // Check for collaboration opportunities
126
+ const suggestedHandoffs = await this.suggestCollaborations({ specialist, userMessage, session, conversationHistory: [] }, relevantTopics);
127
+ return {
128
+ content: response.content,
129
+ specialist_id: specialist.specialist_id,
130
+ personality_elements: response.personality_elements,
131
+ topics_referenced: relevantTopics.map(t => t.id),
132
+ knowledge_applied: relevantTopics.map(topic => ({
133
+ topic_id: topic.id,
134
+ application_context: this.getApplicationContext(topic, userMessage)
135
+ })),
136
+ suggested_handoffs: suggestedHandoffs,
137
+ context_updates: contextUpdates,
138
+ recommendations_added: response.recommendations,
139
+ response_type: 'direct_specialist_response',
140
+ confidence_level: response.confidence_level
141
+ };
142
+ }
143
+ /**
144
+ * Apply knowledge within established methodology context
145
+ */
146
+ async applyKnowledgeInMethodology(specialist, userMessage, session) {
147
+ const personality = this.analyzePersonality(specialist);
148
+ // Search for relevant knowledge topics based on user's question and specialist's expertise
149
+ const relevantTopics = await this.knowledgeRetriever.findRelevantTopics(userMessage, specialist.expertise.primary.concat(specialist.expertise.secondary || []), 5);
150
+ // Generate methodology-contextual response
151
+ const response = await this.buildMethodologyResponse(specialist, personality, userMessage, session.methodology_context, relevantTopics);
152
+ // Apply session context updates
153
+ const contextUpdates = this.generateContextUpdates({ specialist, userMessage, session, conversationHistory: [] }, relevantTopics);
154
+ // Check for collaboration opportunities
155
+ const suggestedHandoffs = await this.suggestCollaborations({ specialist, userMessage, session, conversationHistory: [] }, relevantTopics);
156
+ return {
157
+ content: response.content,
158
+ specialist_id: specialist.specialist_id,
159
+ personality_elements: response.personality_elements,
160
+ topics_referenced: relevantTopics.map(t => t.id),
161
+ knowledge_applied: relevantTopics.map(topic => ({
162
+ topic_id: topic.id,
163
+ application_context: this.getApplicationContext(topic, userMessage)
164
+ })),
165
+ suggested_handoffs: suggestedHandoffs,
166
+ context_updates: contextUpdates,
167
+ recommendations_added: response.recommendations,
168
+ response_type: response.response_type,
169
+ confidence_level: response.confidence_level
170
+ };
171
+ }
172
+ /**
173
+ * Suggest appropriate methodologies based on user request and specialist expertise
174
+ */
175
+ async suggestMethodologies(userMessage, specialist) {
176
+ // Analyze user message for methodology keywords and patterns
177
+ const methodologyKeywords = this.extractMethodologyKeywords(userMessage);
178
+ const specialistMethodologies = await this.getSpecialistMethodologies(specialist);
179
+ // Return suggested methodologies with confidence scores
180
+ return specialistMethodologies.filter(methodology => methodologyKeywords.some(keyword => methodology.title.toLowerCase().includes(keyword) ||
181
+ methodology.description.toLowerCase().includes(keyword))).slice(0, 3); // Top 3 suggestions
182
+ }
183
+ /**
184
+ * Build methodology onboarding response
185
+ */
186
+ async buildMethodologyOnboardingResponse(specialist, personality, userMessage, suggestedMethodologies) {
187
+ const greeting = specialist.persona.greeting;
188
+ if (suggestedMethodologies.length === 0) {
189
+ return {
190
+ content: `${greeting} I'd love to help! Before we dive in, could you tell me more about what you're trying to accomplish? This will help me suggest the best approach for our work together.`,
191
+ personality_elements: {},
192
+ recommendations: [],
193
+ response_type: 'clarification_needed',
194
+ confidence_level: 'medium'
195
+ };
196
+ }
197
+ const primaryMethodology = suggestedMethodologies[0];
198
+ const content = `${greeting} I can see you're interested in ${this.extractUserIntent(userMessage)}.
199
+
200
+ **Suggested Approach: "${primaryMethodology.title}"**
201
+ ${primaryMethodology.description}
202
+
203
+ This methodology will help us work through this systematically. Does this approach sound right for your goals? Once we confirm this framework, I can provide targeted guidance with relevant knowledge applied in context.
204
+
205
+ What's your current experience level so I can tailor the approach accordingly?`;
206
+ return {
207
+ content,
208
+ personality_elements: { methodology_suggested: primaryMethodology.methodology_id },
209
+ recommendations: [`Follow ${primaryMethodology.title} methodology`],
210
+ response_type: 'methodology_suggestion',
211
+ confidence_level: 'high'
212
+ };
213
+ }
214
+ /**
215
+ * Build response within established methodology context
216
+ */
217
+ async buildMethodologyResponse(specialist, personality, userMessage, methodologyContext, relevantTopics) {
218
+ // Create a proper session context for the existing method
219
+ const sessionWithContext = {
220
+ sessionId: 'temp',
221
+ specialistId: specialist.specialist_id,
222
+ userId: 'temp',
223
+ startTime: new Date(),
224
+ lastActivity: new Date(),
225
+ messageCount: 1,
226
+ status: 'active',
227
+ messages: [],
228
+ context: {
229
+ methodology_context: methodologyContext,
230
+ solutions: [],
231
+ recommendations: [],
232
+ nextSteps: [],
233
+ userPreferences: {}
234
+ }
235
+ };
236
+ // Use existing buildPersonalityResponse with methodology context
237
+ return await this.buildPersonalityResponse(specialist, personality, { specialist, userMessage, session: sessionWithContext, conversationHistory: [] }, relevantTopics);
238
+ }
239
+ /**
240
+ * Extract methodology keywords from user message
241
+ */
242
+ extractMethodologyKeywords(userMessage) {
243
+ const keywords = [];
244
+ const message = userMessage.toLowerCase();
245
+ const patterns = {
246
+ 'fundamentals': ['fundamental', 'basics', 'introduction', 'getting started', 'onboarding'],
247
+ 'development': ['development', 'coding', 'programming', 'building'],
248
+ 'architecture': ['architecture', 'design', 'structure', 'pattern'],
249
+ 'performance': ['performance', 'optimization', 'speed', 'efficiency'],
250
+ 'testing': ['testing', 'quality', 'validation', 'debugging'],
251
+ 'workflow': ['workflow', 'methodology', 'process', 'approach']
252
+ };
253
+ for (const [category, terms] of Object.entries(patterns)) {
254
+ if (terms.some(term => message.includes(term))) {
255
+ keywords.push(category);
256
+ }
257
+ }
258
+ return keywords;
259
+ }
260
+ /**
261
+ * Get methodologies relevant to specialist
262
+ */
263
+ async getSpecialistMethodologies(specialist) {
264
+ // Map specialists to their preferred methodologies
265
+ const specialistMethodologies = {
266
+ 'maya-mentor': [
267
+ { methodology_id: 'developer-introduction', title: 'BC Development Fundamentals', description: 'Introduction to Business Central development fundamentals and environment setup' },
268
+ { methodology_id: 'skill-building', title: 'Skill Development Methodology', description: 'Structured approach to building BC development skills' }
269
+ ],
270
+ 'sam-coder': [
271
+ { methodology_id: 'implementation', title: 'Implementation Methodology', description: 'Efficient code implementation and development practices' }
272
+ ],
273
+ 'alex-architect': [
274
+ { methodology_id: 'architecture-design', title: 'Architecture Design Methodology', description: 'Systematic approach to BC solution architecture' }
275
+ ],
276
+ 'dean-debug': [
277
+ { methodology_id: 'troubleshooting', title: 'Diagnostic Methodology', description: 'Systematic problem diagnosis and performance analysis' }
278
+ ]
279
+ };
280
+ return specialistMethodologies[specialist.specialist_id] || [];
281
+ }
282
+ /**
283
+ * Extract user intent from message
284
+ */
285
+ extractUserIntent(userMessage) {
286
+ // Simple intent extraction - could be made more sophisticated
287
+ const message = userMessage.toLowerCase();
288
+ if (message.includes('fundamental') || message.includes('getting started')) {
289
+ return 'learning fundamentals';
290
+ }
291
+ if (message.includes('workflow') || message.includes('methodology')) {
292
+ return 'following a structured approach';
293
+ }
294
+ return 'getting help with BC development';
295
+ }
296
+ /**
297
+ * Analyze user message to suggest appropriate specialist
298
+ */
299
+ async suggestSpecialist(userMessage, currentContext) {
300
+ const specialists = await this.layerService.getAllSpecialists();
301
+ const suggestions = [];
302
+ for (const specialist of specialists) {
303
+ const confidence = await this.calculateSpecialistConfidence(userMessage, specialist, currentContext);
304
+ if (confidence > 0.15) { // Lowered threshold for token-based matching (Issue #17)
305
+ suggestions.push({
306
+ specialist_id: specialist.specialist_id,
307
+ confidence,
308
+ reasoning: this.generateSuggestionReasoning(userMessage, specialist, confidence)
309
+ });
310
+ }
311
+ }
312
+ return suggestions.sort((a, b) => b.confidence - a.confidence).slice(0, 3);
313
+ }
314
+ /**
315
+ * Generate a specialist greeting for session start
316
+ */
317
+ async generateGreeting(specialist, context) {
318
+ const personality = this.analyzePersonality(specialist);
319
+ const greeting = this.buildGreeting(specialist, personality, context);
320
+ return {
321
+ content: greeting,
322
+ specialist_id: specialist.specialist_id,
323
+ personality_elements: {
324
+ greeting_used: true,
325
+ characteristic_phrases: [specialist.persona.greeting],
326
+ expertise_demonstrated: specialist.expertise.primary.slice(0, 2),
327
+ communication_style_applied: specialist.persona.communication_style
328
+ },
329
+ topics_referenced: [],
330
+ knowledge_applied: [],
331
+ response_type: 'greeting',
332
+ confidence_level: 'high'
333
+ };
334
+ }
335
+ /**
336
+ * Generate handoff message when transferring between specialists
337
+ */
338
+ async generateHandoff(fromSpecialist, toSpecialist, context) {
339
+ const fromPersonality = this.analyzePersonality(fromSpecialist);
340
+ const toPersonality = this.analyzePersonality(toSpecialist);
341
+ const farewell = this.buildHandoffFarewell(fromSpecialist, toSpecialist, context);
342
+ const introduction = this.buildHandoffIntroduction(toSpecialist, fromSpecialist, context);
343
+ return {
344
+ farewell: {
345
+ content: farewell,
346
+ specialist_id: fromSpecialist.specialist_id,
347
+ personality_elements: {
348
+ greeting_used: false,
349
+ characteristic_phrases: [],
350
+ expertise_demonstrated: [],
351
+ communication_style_applied: fromSpecialist.persona.communication_style
352
+ },
353
+ topics_referenced: [],
354
+ knowledge_applied: [],
355
+ response_type: 'handoff',
356
+ confidence_level: 'high'
357
+ },
358
+ introduction: {
359
+ content: introduction,
360
+ specialist_id: toSpecialist.specialist_id,
361
+ personality_elements: {
362
+ greeting_used: true,
363
+ characteristic_phrases: [toSpecialist.persona.greeting],
364
+ expertise_demonstrated: toSpecialist.expertise.primary.slice(0, 2),
365
+ communication_style_applied: toSpecialist.persona.communication_style
366
+ },
367
+ topics_referenced: [],
368
+ knowledge_applied: [],
369
+ response_type: 'handoff',
370
+ confidence_level: 'high'
371
+ }
372
+ };
373
+ }
374
+ /**
375
+ * Update configuration
376
+ */
377
+ updateConfig(config) {
378
+ this.config = { ...this.config, ...config };
379
+ }
380
+ /**
381
+ * Get personality analysis for a specialist
382
+ */
383
+ analyzePersonality(specialist) {
384
+ return {
385
+ communication_style: specialist.persona.communication_style,
386
+ expertise_focus: specialist.expertise.primary,
387
+ problem_approach: this.extractProblemApproach(specialist),
388
+ collaboration_style: this.extractCollaborationStyle(specialist),
389
+ characteristic_phrases: [
390
+ specialist.persona.greeting,
391
+ ...this.extractCharacteristicPhrases(specialist)
392
+ ]
393
+ };
394
+ }
395
+ /**
396
+ * Build personality-driven response
397
+ */
398
+ async buildPersonalityResponse(specialist, personality, context, relevantTopics) {
399
+ const { userMessage, session } = context;
400
+ // Start with specialist greeting if it's a new conversation
401
+ let response = session.messageCount <= 1 ? `${specialist.persona.greeting} ` : '';
402
+ // Apply personality-driven response patterns
403
+ response += await this.generatePersonalityContent(specialist, personality, userMessage, relevantTopics, context);
404
+ // Add recommendations based on knowledge
405
+ const recommendations = this.generateRecommendations(relevantTopics, userMessage);
406
+ // Determine response type and confidence
407
+ const responseType = this.determineResponseType(userMessage, relevantTopics);
408
+ const confidenceLevel = this.calculateConfidenceLevel(specialist, userMessage, relevantTopics);
409
+ return {
410
+ content: response,
411
+ personality_elements: {
412
+ greeting_used: session.messageCount <= 1,
413
+ characteristic_phrases: personality.characteristic_phrases.slice(0, 2),
414
+ expertise_demonstrated: personality.expertise_focus.slice(0, 3),
415
+ communication_style_applied: personality.communication_style
416
+ },
417
+ recommendations,
418
+ response_type: responseType,
419
+ confidence_level: confidenceLevel
420
+ };
421
+ }
422
+ /**
423
+ * Generate personality-driven content
424
+ */
425
+ async generatePersonalityContent(specialist, personality, userMessage, relevantTopics, context) {
426
+ // This is where we'd integrate with the actual BC knowledge to generate responses
427
+ // For now, let's create template-based responses that demonstrate personality
428
+ const templates = this.getResponseTemplates(specialist.specialist_id);
429
+ const selectedTemplate = this.selectBestTemplate(templates, userMessage, relevantTopics);
430
+ if (selectedTemplate) {
431
+ return this.fillTemplate(selectedTemplate, specialist, userMessage, relevantTopics, context);
432
+ }
433
+ // Fallback to basic personality-driven response
434
+ return this.generateBasicPersonalityResponse(specialist, userMessage, relevantTopics, context);
435
+ }
436
+ /**
437
+ * Generate agent roleplay instructions (NOT direct user response)
438
+ */
439
+ generateBasicPersonalityResponse(specialist, userMessage, relevantTopics, context) {
440
+ // Generate AGENT INSTRUCTIONS using the FULL specialist instruction content
441
+ let instructions = `You are ${specialist.title} (${specialist.specialist_id}). Below are your complete instructions:\n\n`;
442
+ // **CRITICAL FIX**: Include the full specialist instruction content
443
+ instructions += `# SPECIALIST INSTRUCTIONS:\n${specialist.content}\n\n`;
444
+ instructions += `---\n\n# CURRENT REQUEST CONTEXT:\n`;
445
+ instructions += `**User Message**: "${userMessage}"\n\n`;
446
+ // **NO PRE-SELECTED KNOWLEDGE** - provide YAML-based hints instead
447
+ instructions += `**Knowledge Search Hints** (based on your YAML configuration):\n`;
448
+ instructions += `- Your Primary Expertise: ${specialist.expertise.primary.join(', ')}\n`;
449
+ instructions += `- Your Domains: ${specialist.domains.join(', ')}\n`;
450
+ instructions += `- Suggested find_bc_knowledge searches: "${specialist.expertise.primary.join('", "')}", "${specialist.domains.join('", "')}"\n\n`;
451
+ // Add introduction instructions if this is a new session or handoff
452
+ if (context.requiresIntroduction) {
453
+ instructions += `**Session Info**: This is a new session - introduce yourself using your greeting and explain your expertise.\n\n`;
454
+ }
455
+ instructions += `**CRITICAL REMINDER**: NO knowledge has been pre-selected for you. Follow your "Implementation Requirements" section exactly - you MUST use find_bc_knowledge to search for relevant information yourself.\n\n`;
456
+ instructions += `Now respond as ${specialist.title} following your complete instruction set above.`;
457
+ return instructions;
458
+ }
459
+ /**
460
+ * Generate style-appropriate opening
461
+ */
462
+ getStyleApproach(specialist) {
463
+ const communication = specialist.persona.communication_style.toLowerCase();
464
+ if (communication.includes('technical')) {
465
+ return "Let's dive into the technical details.";
466
+ }
467
+ else if (communication.includes('business')) {
468
+ return "Let's think about this from a business perspective.";
469
+ }
470
+ else if (communication.includes('practical')) {
471
+ return "Here's a practical approach to your question.";
472
+ }
473
+ else if (communication.includes('teaching')) {
474
+ return "Let me walk you through this step by step.";
475
+ }
476
+ return "I'd be happy to help with this!";
477
+ }
478
+ /**
479
+ * Generate knowledge-based guidance
480
+ */
481
+ generateKnowledgeBasedGuidance(specialist, topic, userMessage) {
482
+ // Create specialist-specific framing of the knowledge
483
+ const specialistLens = this.getSpecialistPerspective(specialist, topic);
484
+ // Extract key points from the topic content
485
+ const keyPoints = this.extractKeyGuidancePoints(topic);
486
+ return `${specialistLens} Looking at **${topic.title}**, ${keyPoints}. This ${topic.frontmatter.difficulty === 'advanced' ? 'advanced' : topic.frontmatter.difficulty} pattern applies directly to your situation.`;
487
+ }
488
+ /**
489
+ * Get specialist-specific perspective on a topic
490
+ */
491
+ getSpecialistPerspective(specialist, topic) {
492
+ const specialistId = specialist.specialist_id;
493
+ if (specialistId.includes('performance') || specialistId.includes('debug')) {
494
+ return `From a performance optimization standpoint,`;
495
+ }
496
+ else if (specialistId.includes('security')) {
497
+ return `From a security perspective,`;
498
+ }
499
+ else if (specialistId.includes('architect')) {
500
+ return `From an architectural design perspective,`;
501
+ }
502
+ else if (specialistId.includes('test')) {
503
+ return `From a testing and quality standpoint,`;
504
+ }
505
+ else if (specialistId.includes('mentor') || specialistId.includes('docs')) {
506
+ return `Let me explain this step by step:`;
507
+ }
508
+ return `Based on my expertise in ${specialist.expertise.primary[0]},`;
509
+ }
510
+ /**
511
+ * Extract key guidance points from topic content
512
+ */
513
+ extractKeyGuidancePoints(topic) {
514
+ const content = topic.content;
515
+ // Look for key implementation patterns
516
+ if (content.includes('## Implementation') || content.includes('## How to')) {
517
+ return `the key implementation approach focuses on ${this.extractImplementationFocus(content)}`;
518
+ }
519
+ // Look for best practices
520
+ if (content.includes('## Best Practices') || content.includes('### Best Practices')) {
521
+ return `the best practices emphasize ${this.extractBestPractices(content)}`;
522
+ }
523
+ // Look for common pitfalls
524
+ if (content.includes('## Common Pitfalls') || content.includes('### Pitfalls')) {
525
+ return `it's important to avoid ${this.extractPitfalls(content)}`;
526
+ }
527
+ // Default to title-based guidance
528
+ return `this pattern provides essential guidance for ${topic.title.toLowerCase()}`;
529
+ }
530
+ /**
531
+ * Extract implementation focus from content
532
+ */
533
+ extractImplementationFocus(content) {
534
+ // Find implementation section and extract first few points
535
+ const lines = content.split('\n');
536
+ const implIndex = lines.findIndex(line => line.includes('## Implementation') || line.includes('## How to'));
537
+ if (implIndex >= 0 && implIndex < lines.length - 1) {
538
+ const nextFewLines = lines.slice(implIndex + 1, implIndex + 4)
539
+ .filter(line => line.trim() && !line.startsWith('#'))
540
+ .join(' ');
541
+ return this.summarizeIntoPhrase(nextFewLines);
542
+ }
543
+ return 'proper implementation patterns';
544
+ }
545
+ /**
546
+ * Extract best practices from content
547
+ */
548
+ extractBestPractices(content) {
549
+ const lines = content.split('\n');
550
+ const practicesIndex = lines.findIndex(line => line.includes('Best Practices'));
551
+ if (practicesIndex >= 0 && practicesIndex < lines.length - 1) {
552
+ const nextFewLines = lines.slice(practicesIndex + 1, practicesIndex + 3)
553
+ .filter(line => line.trim() && !line.startsWith('#'))
554
+ .join(' ');
555
+ return this.summarizeIntoPhrase(nextFewLines);
556
+ }
557
+ return 'following established patterns and maintaining code quality';
558
+ }
559
+ /**
560
+ * Extract pitfalls from content
561
+ */
562
+ extractPitfalls(content) {
563
+ const lines = content.split('\n');
564
+ const pitfallsIndex = lines.findIndex(line => line.includes('Pitfalls') || line.includes('Common Issues'));
565
+ if (pitfallsIndex >= 0 && pitfallsIndex < lines.length - 1) {
566
+ const nextFewLines = lines.slice(pitfallsIndex + 1, pitfallsIndex + 3)
567
+ .filter(line => line.trim() && !line.startsWith('#'))
568
+ .join(' ');
569
+ return this.summarizeIntoPhrase(nextFewLines);
570
+ }
571
+ return 'common implementation mistakes';
572
+ }
573
+ /**
574
+ * Summarize content into a concise phrase
575
+ */
576
+ summarizeIntoPhrase(text) {
577
+ // Clean up the text and create a concise summary
578
+ const cleaned = text
579
+ .replace(/[*#-]/g, '')
580
+ .replace(/\s+/g, ' ')
581
+ .trim();
582
+ // Take first sentence or first 60 characters
583
+ const firstSentence = cleaned.split('.')[0];
584
+ const truncated = firstSentence.length > 60
585
+ ? firstSentence.substring(0, 60) + '...'
586
+ : firstSentence;
587
+ return truncated.toLowerCase();
588
+ }
589
+ /**
590
+ * Generate general guidance when no specific topics match
591
+ */
592
+ generateGeneralGuidance(specialist, userMessage) {
593
+ return `I'd suggest we start by understanding the specific requirements and then I can point you toward the right specialist or resources that would be most helpful.`;
594
+ }
595
+ // Additional helper methods...
596
+ initializeResponseTemplates() {
597
+ // Initialize with basic templates - these could be loaded from configuration
598
+ this.responseTemplates.set('performance', [
599
+ {
600
+ trigger_keywords: ['slow', 'performance', 'optimize', 'speed'],
601
+ specialist_types: ['dean-debug'],
602
+ template_pattern: "🔧 Dean here! Performance issues are my specialty. {problem_analysis} {solution_approach} {next_steps}",
603
+ personality_emphasis: ['technical', 'systematic', 'thorough'],
604
+ knowledge_domains: ['performance', 'optimization']
605
+ }
606
+ ]);
607
+ }
608
+ getResponseTemplates(specialistId) {
609
+ // Return templates relevant to this specialist
610
+ return Array.from(this.responseTemplates.values()).flat()
611
+ .filter(template => template.specialist_types.includes(specialistId));
612
+ }
613
+ selectBestTemplate(templates, userMessage, relevantTopics) {
614
+ // Simple keyword matching for now
615
+ const messageLower = userMessage.toLowerCase();
616
+ for (const template of templates) {
617
+ if (template.trigger_keywords.some(keyword => messageLower.includes(keyword))) {
618
+ return template;
619
+ }
620
+ }
621
+ return null;
622
+ }
623
+ fillTemplate(template, specialist, userMessage, relevantTopics, context) {
624
+ // Basic template filling - would be more sophisticated in practice
625
+ let content = template.template_pattern;
626
+ content = content.replace('{problem_analysis}', 'Let me analyze this issue systematically.');
627
+ content = content.replace('{solution_approach}', 'Here\'s how I\'d approach solving this:');
628
+ content = content.replace('{next_steps}', 'Next steps would be to examine the specific implementation details.');
629
+ return content;
630
+ }
631
+ extractProblemApproach(specialist) {
632
+ // Extract problem-solving approach from specialist definition
633
+ return specialist.persona.communication_style;
634
+ }
635
+ extractCollaborationStyle(specialist) {
636
+ // Extract collaboration preferences
637
+ return specialist.collaboration?.natural_handoffs?.length > 0 ? 'collaborative' : 'independent';
638
+ }
639
+ extractCharacteristicPhrases(specialist) {
640
+ // Extract characteristic phrases from the content
641
+ return []; // Would parse from the specialist's content
642
+ }
643
+ buildGreeting(specialist, personality, context) {
644
+ let greeting = specialist.persona.greeting;
645
+ if (context?.problem) {
646
+ greeting += ` I understand you're working on ${context.problem}. `;
647
+ }
648
+ greeting += ` I'm here to help with ${specialist.expertise.primary.join(', ')}. What specific challenge are you facing?`;
649
+ return greeting;
650
+ }
651
+ buildHandoffFarewell(fromSpecialist, toSpecialist, context) {
652
+ return `I think ${toSpecialist.persona.greeting.replace('!', '')} would be perfect for this! They're our expert in ${toSpecialist.expertise.primary.join(' and ')}. Let me hand you over to them.`;
653
+ }
654
+ buildHandoffIntroduction(toSpecialist, fromSpecialist, context) {
655
+ return `${toSpecialist.persona.greeting} ${fromSpecialist.specialist_id.split('-')[0]} filled me in on what you're working on. I'm excited to help with ${toSpecialist.expertise.primary[0]}! Let's dive in.`;
656
+ }
657
+ async calculateSpecialistConfidence(userMessage, specialist, context) {
658
+ const messageLower = userMessage.toLowerCase();
659
+ // Tokenize the user message into individual keywords (filter out short words)
660
+ const messageTokens = messageLower
661
+ .split(/[\s,]+/)
662
+ .filter(token => token.length > 3)
663
+ .map(token => token.replace(/[^a-z0-9]/g, ''));
664
+ let confidence = 0;
665
+ const matchedTokens = new Set(); // Track matched tokens to avoid double-counting
666
+ // Check against primary expertise with token-based matching
667
+ for (const expertise of specialist.expertise.primary) {
668
+ const expertiseTokens = expertise
669
+ .toLowerCase()
670
+ .replace(/[-_]/g, ' ')
671
+ .split(/\s+/)
672
+ .filter(t => t.length > 3);
673
+ // Award points for any token match (bidirectional partial matching)
674
+ for (const msgToken of messageTokens) {
675
+ if (matchedTokens.has(msgToken))
676
+ continue; // Skip already matched tokens
677
+ for (const expToken of expertiseTokens) {
678
+ if (expToken.includes(msgToken) || msgToken.includes(expToken)) {
679
+ confidence += 0.15; // Lower increment for more granular scoring
680
+ matchedTokens.add(msgToken);
681
+ break; // Found a match for this message token
682
+ }
683
+ }
684
+ }
685
+ }
686
+ // Check against secondary expertise with token-based matching
687
+ for (const expertise of specialist.expertise.secondary) {
688
+ const expertiseTokens = expertise
689
+ .toLowerCase()
690
+ .replace(/[-_]/g, ' ')
691
+ .split(/\s+/)
692
+ .filter(t => t.length > 3);
693
+ for (const msgToken of messageTokens) {
694
+ if (matchedTokens.has(msgToken))
695
+ continue;
696
+ for (const expToken of expertiseTokens) {
697
+ if (expToken.includes(msgToken) || msgToken.includes(expToken)) {
698
+ confidence += 0.1;
699
+ matchedTokens.add(msgToken);
700
+ break;
701
+ }
702
+ }
703
+ }
704
+ }
705
+ // Check against domains with token-based matching
706
+ for (const domain of specialist.domains) {
707
+ const domainTokens = domain
708
+ .toLowerCase()
709
+ .replace(/[-_]/g, ' ')
710
+ .split(/\s+/)
711
+ .filter(t => t.length > 3);
712
+ for (const msgToken of messageTokens) {
713
+ if (matchedTokens.has(msgToken))
714
+ continue;
715
+ for (const domToken of domainTokens) {
716
+ if (domToken.includes(msgToken) || msgToken.includes(domToken)) {
717
+ confidence += 0.05;
718
+ matchedTokens.add(msgToken);
719
+ break;
720
+ }
721
+ }
722
+ }
723
+ }
724
+ return Math.min(confidence, 1.0);
725
+ }
726
+ generateSuggestionReasoning(userMessage, specialist, confidence) {
727
+ return `${specialist.specialist_id} specializes in ${specialist.expertise.primary.join(', ')} which aligns with your question about ${userMessage.substring(0, 50)}...`;
728
+ }
729
+ generateContextUpdates(context, relevantTopics) {
730
+ return {
731
+ // Add discovered topics to context
732
+ // Update problem understanding
733
+ // Track user preferences
734
+ };
735
+ }
736
+ async suggestCollaborations(context, relevantTopics) {
737
+ const suggestions = [];
738
+ // Check if other specialists might be helpful
739
+ const { specialist } = context;
740
+ if (specialist.collaboration?.natural_handoffs) {
741
+ for (const handoffId of specialist.collaboration.natural_handoffs) {
742
+ suggestions.push({
743
+ specialist_id: handoffId,
744
+ reason: `Natural collaboration partner for ${specialist.expertise.primary[0]}`
745
+ });
746
+ }
747
+ }
748
+ return suggestions.slice(0, 2); // Limit suggestions
749
+ }
750
+ getApplicationContext(topic, userMessage) {
751
+ const messageWords = userMessage.toLowerCase().split(' ');
752
+ const topicTags = topic.frontmatter.tags || [];
753
+ // Identify context based on user message and topic
754
+ let context = `Applied ${topic.title} to address`;
755
+ if (messageWords.some(word => ['performance', 'slow', 'optimize', 'speed'].includes(word))) {
756
+ context += ` performance concerns in ${this.extractEntityFromMessage(userMessage)}`;
757
+ }
758
+ else if (messageWords.some(word => ['security', 'permission', 'access'].includes(word))) {
759
+ context += ` security requirements for ${this.extractEntityFromMessage(userMessage)}`;
760
+ }
761
+ else if (messageWords.some(word => ['integration', 'api', 'connect'].includes(word))) {
762
+ context += ` integration challenges with ${this.extractEntityFromMessage(userMessage)}`;
763
+ }
764
+ else if (messageWords.some(word => ['test', 'testing', 'validation'].includes(word))) {
765
+ context += ` testing strategy for ${this.extractEntityFromMessage(userMessage)}`;
766
+ }
767
+ else {
768
+ context += ` the development challenge in ${userMessage.substring(0, 50)}...`;
769
+ }
770
+ // Add BC version context if available
771
+ if (topic.frontmatter.bc_versions) {
772
+ context += ` (BC ${topic.frontmatter.bc_versions} compatible)`;
773
+ }
774
+ return context;
775
+ }
776
+ /**
777
+ * Extract business entity or object from user message
778
+ */
779
+ extractEntityFromMessage(message) {
780
+ const commonEntities = [
781
+ 'table', 'page', 'report', 'codeunit', 'api', 'service',
782
+ 'customer', 'vendor', 'item', 'purchase', 'sales', 'inventory'
783
+ ];
784
+ const messageLower = message.toLowerCase();
785
+ for (const entity of commonEntities) {
786
+ if (messageLower.includes(entity)) {
787
+ return entity;
788
+ }
789
+ }
790
+ return 'your BC implementation';
791
+ }
792
+ generateRecommendations(topics, userMessage) {
793
+ const recommendations = [];
794
+ for (const topic of topics.slice(0, 3)) {
795
+ // Create actionable recommendations based on the topic
796
+ if (topic.frontmatter.bc_versions) {
797
+ recommendations.push(`Apply **${topic.title}** patterns (compatible with ${topic.frontmatter.bc_versions})`);
798
+ }
799
+ else {
800
+ recommendations.push(`Consider implementing **${topic.title}** best practices`);
801
+ }
802
+ // Add specific action based on topic type
803
+ if (topic.frontmatter.tags?.includes('performance')) {
804
+ recommendations.push(`Measure performance impact of ${topic.title.toLowerCase()} implementation`);
805
+ }
806
+ else if (topic.frontmatter.tags?.includes('security')) {
807
+ recommendations.push(`Review security implications when applying ${topic.title.toLowerCase()}`);
808
+ }
809
+ else if (topic.frontmatter.tags?.includes('testing')) {
810
+ recommendations.push(`Create test cases to validate ${topic.title.toLowerCase()} implementation`);
811
+ }
812
+ }
813
+ return recommendations.slice(0, 4); // Limit to 4 recommendations
814
+ }
815
+ determineResponseType(userMessage, topics) {
816
+ const messageLower = userMessage.toLowerCase();
817
+ if (messageLower.includes('how') || messageLower.includes('help')) {
818
+ return 'guidance';
819
+ }
820
+ else if (messageLower.includes('fix') || messageLower.includes('solve')) {
821
+ return 'solution';
822
+ }
823
+ else if (messageLower.includes('?')) {
824
+ return 'question';
825
+ }
826
+ return 'guidance';
827
+ }
828
+ calculateConfidenceLevel(specialist, userMessage, topics) {
829
+ if (topics.length >= 2)
830
+ return 'high';
831
+ if (topics.length === 1)
832
+ return 'medium';
833
+ return 'low';
834
+ }
835
+ }
836
+ /**
837
+ * Knowledge retriever implementation for BC topics
838
+ */
839
+ class BCKnowledgeRetriever {
840
+ layerService;
841
+ knowledgeService;
842
+ constructor(layerService, knowledgeService) {
843
+ this.layerService = layerService;
844
+ this.knowledgeService = knowledgeService;
845
+ }
846
+ async findRelevantTopics(userMessage, specialistExpertise, limit = 5) {
847
+ try {
848
+ // Convert specialist expertise to broader search terms that match topic content
849
+ const broadSearchTerms = specialistExpertise.map(exp => {
850
+ // Map specific expertise terms to broader, more searchable terms
851
+ const mappings = {
852
+ 'performance-analysis': 'performance',
853
+ 'error-diagnosis': 'error',
854
+ 'system-monitoring': 'monitoring',
855
+ 'optimization-implementation': 'optimization',
856
+ 'query-optimization': 'query performance',
857
+ 'memory-management': 'memory',
858
+ 'integration-performance': 'integration',
859
+ 'user-experience-optimization': 'user experience'
860
+ };
861
+ return mappings[exp] || exp.replace('-', ' ');
862
+ });
863
+ // Search for topics using the user's message in code_context field
864
+ const searchParams = {
865
+ code_context: `${userMessage} ${broadSearchTerms.join(' ')}`, // Combine user message with expertise terms
866
+ limit,
867
+ bc_version: 'BC22' // Default - could be made configurable
868
+ };
869
+ // Use the existing knowledge service to find relevant topics
870
+ const searchResults = await this.knowledgeService.searchTopics(searchParams);
871
+ // Get full topic details for each search result
872
+ if (searchResults && Array.isArray(searchResults)) {
873
+ const topics = [];
874
+ for (const result of searchResults.slice(0, limit)) {
875
+ const topic = await this.knowledgeService.getTopic(result.id);
876
+ if (topic) {
877
+ topics.push(topic);
878
+ }
879
+ }
880
+ return topics;
881
+ }
882
+ return [];
883
+ }
884
+ catch (error) {
885
+ console.error('Error finding relevant topics:', error);
886
+ return [];
887
+ }
888
+ }
889
+ /**
890
+ * Find relevant topics within methodology context
891
+ */
892
+ async findRelevantTopicsInMethodology(userMessage, methodologyContext, specialistExpertise, limit = 5) {
893
+ try {
894
+ // Focus search on methodology-specific topics and current phase context
895
+ const methodologyTerms = [
896
+ methodologyContext.methodology_id,
897
+ methodologyContext.current_phase,
898
+ ...specialistExpertise
899
+ ];
900
+ const searchParams = {
901
+ code_context: `${userMessage} ${methodologyTerms.join(' ')}`,
902
+ limit,
903
+ bc_version: 'BC22'
904
+ };
905
+ const searchResults = await this.knowledgeService.searchTopics(searchParams);
906
+ if (searchResults && Array.isArray(searchResults)) {
907
+ const topics = [];
908
+ for (const result of searchResults.slice(0, limit)) {
909
+ const topic = await this.knowledgeService.getTopic(result.id);
910
+ if (topic) {
911
+ topics.push(topic);
912
+ }
913
+ }
914
+ return topics;
915
+ }
916
+ return [];
917
+ }
918
+ catch (error) {
919
+ console.error('Error finding methodology-relevant topics:', error);
920
+ return [];
921
+ }
922
+ }
923
+ async getRelatedTopics(topicId, limit = 3) {
924
+ try {
925
+ // Get the main topic first
926
+ const mainTopic = await this.knowledgeService.getTopic(topicId);
927
+ if (!mainTopic) {
928
+ return [];
929
+ }
930
+ // Use domain-based search to find related topics
931
+ const searchParams = {
932
+ query: mainTopic.frontmatter.domain,
933
+ search_type: 'fuzzy',
934
+ limit: limit + 1, // Get one extra to exclude the main topic
935
+ bc_version: 'BC22',
936
+ domains: [mainTopic.frontmatter.domain]
937
+ };
938
+ const searchResults = await this.knowledgeService.searchTopics(searchParams);
939
+ const relatedTopics = [];
940
+ for (const result of searchResults) {
941
+ if (result.id !== topicId && relatedTopics.length < limit) {
942
+ const topic = await this.knowledgeService.getTopic(result.id);
943
+ if (topic) {
944
+ relatedTopics.push(topic);
945
+ }
946
+ }
947
+ }
948
+ return relatedTopics;
949
+ }
950
+ catch (error) {
951
+ console.error('Error getting related topics:', error);
952
+ return [];
953
+ }
954
+ }
955
+ async searchSolutions(problemDescription, domains, limit = 5) {
956
+ try {
957
+ // Search for solution-oriented topics in the specified domains
958
+ const searchParams = {
959
+ query: `${problemDescription} solution implementation fix pattern`,
960
+ search_type: 'hybrid',
961
+ limit: limit * 2, // Get more results to filter
962
+ bc_version: 'BC22',
963
+ domains
964
+ };
965
+ const searchResults = await this.knowledgeService.searchTopics(searchParams);
966
+ const solutionTopics = [];
967
+ for (const result of searchResults) {
968
+ if (solutionTopics.length >= limit)
969
+ break;
970
+ const topic = await this.knowledgeService.getTopic(result.id);
971
+ if (topic) {
972
+ // Filter for topics that are more solution-oriented
973
+ const content = topic.content.toLowerCase();
974
+ const title = topic.title.toLowerCase();
975
+ if (content.includes('solution') ||
976
+ content.includes('implementation') ||
977
+ content.includes('fix') ||
978
+ content.includes('pattern') ||
979
+ title.includes('pattern') ||
980
+ title.includes('optimization') ||
981
+ title.includes('best practice')) {
982
+ solutionTopics.push(topic);
983
+ }
984
+ }
985
+ }
986
+ return solutionTopics;
987
+ }
988
+ catch (error) {
989
+ console.error('Error searching solutions:', error);
990
+ return [];
991
+ }
992
+ }
993
+ }
994
+ //# sourceMappingURL=roleplay-engine.js.map