bc-code-intelligence-mcp 1.5.9 → 1.6.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 (565) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +165 -165
  3. package/dist/config/config-loader.js +6 -6
  4. package/dist/config/config-loader.js.map +1 -1
  5. package/dist/index.d.ts +9 -8
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +93 -211
  8. package/dist/index.js.map +1 -1
  9. package/dist/layers/base-layer.d.ts +6 -6
  10. package/dist/layers/base-layer.d.ts.map +1 -1
  11. package/dist/layers/base-layer.js +15 -15
  12. package/dist/layers/base-layer.js.map +1 -1
  13. package/dist/layers/embedded-layer.d.ts +2 -2
  14. package/dist/layers/embedded-layer.d.ts.map +1 -1
  15. package/dist/layers/embedded-layer.js +59 -43
  16. package/dist/layers/embedded-layer.js.map +1 -1
  17. package/dist/layers/git-layer.d.ts +4 -2
  18. package/dist/layers/git-layer.d.ts.map +1 -1
  19. package/dist/layers/git-layer.js +70 -23
  20. package/dist/layers/git-layer.js.map +1 -1
  21. package/dist/layers/project-layer.d.ts +2 -2
  22. package/dist/layers/project-layer.d.ts.map +1 -1
  23. package/dist/layers/project-layer.js +58 -44
  24. package/dist/layers/project-layer.js.map +1 -1
  25. package/dist/services/code-analysis-service.d.ts +100 -2
  26. package/dist/services/code-analysis-service.d.ts.map +1 -1
  27. package/dist/services/code-analysis-service.js +274 -8
  28. package/dist/services/code-analysis-service.js.map +1 -1
  29. package/dist/services/knowledge-service.d.ts.map +1 -1
  30. package/dist/services/knowledge-service.js.map +1 -1
  31. package/dist/services/methodology-service.d.ts +34 -2
  32. package/dist/services/methodology-service.d.ts.map +1 -1
  33. package/dist/services/methodology-service.js +284 -29
  34. package/dist/services/methodology-service.js.map +1 -1
  35. package/dist/services/multi-content-layer-service.d.ts +5 -0
  36. package/dist/services/multi-content-layer-service.d.ts.map +1 -1
  37. package/dist/services/multi-content-layer-service.js +57 -9
  38. package/dist/services/multi-content-layer-service.js.map +1 -1
  39. package/dist/services/relevance-index-service.d.ts +95 -0
  40. package/dist/services/relevance-index-service.d.ts.map +1 -0
  41. package/dist/services/relevance-index-service.js +321 -0
  42. package/dist/services/relevance-index-service.js.map +1 -0
  43. package/dist/services/specialist-loader.d.ts +1 -0
  44. package/dist/services/specialist-loader.d.ts.map +1 -1
  45. package/dist/services/specialist-loader.js +1 -0
  46. package/dist/services/specialist-loader.js.map +1 -1
  47. package/dist/services/workflow-service.d.ts +12 -0
  48. package/dist/services/workflow-service.d.ts.map +1 -1
  49. package/dist/services/workflow-service.js +30 -0
  50. package/dist/services/workflow-service.js.map +1 -1
  51. package/dist/services/{enhanced-prompt-service.d.ts → workflow-specialist-router.d.ts} +41 -4
  52. package/dist/services/workflow-specialist-router.d.ts.map +1 -0
  53. package/dist/services/{enhanced-prompt-service.js → workflow-specialist-router.js} +150 -24
  54. package/dist/services/workflow-specialist-router.js.map +1 -0
  55. package/dist/services/workflow-v2/index.d.ts +6 -0
  56. package/dist/services/workflow-v2/index.d.ts.map +1 -0
  57. package/dist/services/workflow-v2/index.js +6 -0
  58. package/dist/services/workflow-v2/index.js.map +1 -0
  59. package/dist/services/workflow-v2/workflow-definitions.d.ts +53 -0
  60. package/dist/services/workflow-v2/workflow-definitions.d.ts.map +1 -0
  61. package/dist/services/workflow-v2/workflow-definitions.js +722 -0
  62. package/dist/services/workflow-v2/workflow-definitions.js.map +1 -0
  63. package/dist/services/workflow-v2/workflow-session-manager.d.ts +140 -0
  64. package/dist/services/workflow-v2/workflow-session-manager.d.ts.map +1 -0
  65. package/dist/services/workflow-v2/workflow-session-manager.js +820 -0
  66. package/dist/services/workflow-v2/workflow-session-manager.js.map +1 -0
  67. package/dist/tools/{workspace-tools.d.ts → _shared/workspace-constants.d.ts} +4 -51
  68. package/dist/tools/_shared/workspace-constants.d.ts.map +1 -0
  69. package/dist/tools/_shared/workspace-constants.js +53 -0
  70. package/dist/tools/_shared/workspace-constants.js.map +1 -0
  71. package/dist/tools/analyze_al_code/handler.d.ts +12 -0
  72. package/dist/tools/analyze_al_code/handler.d.ts.map +1 -0
  73. package/dist/tools/analyze_al_code/handler.js +312 -0
  74. package/dist/tools/analyze_al_code/handler.js.map +1 -0
  75. package/dist/tools/analyze_al_code/schema.d.ts +8 -0
  76. package/dist/tools/analyze_al_code/schema.d.ts.map +1 -0
  77. package/dist/tools/analyze_al_code/schema.js +54 -0
  78. package/dist/tools/analyze_al_code/schema.js.map +1 -0
  79. package/dist/tools/ask_bc_expert/handler.d.ts +21 -0
  80. package/dist/tools/ask_bc_expert/handler.d.ts.map +1 -0
  81. package/dist/tools/ask_bc_expert/handler.js +118 -0
  82. package/dist/tools/ask_bc_expert/handler.js.map +1 -0
  83. package/dist/tools/ask_bc_expert/schema.d.ts +8 -0
  84. package/dist/tools/ask_bc_expert/schema.d.ts.map +1 -0
  85. package/dist/tools/ask_bc_expert/schema.js +33 -0
  86. package/dist/tools/ask_bc_expert/schema.js.map +1 -0
  87. package/dist/tools/create_layer_content/handler.d.ts +17 -0
  88. package/dist/tools/create_layer_content/handler.d.ts.map +1 -0
  89. package/dist/tools/create_layer_content/handler.js +248 -0
  90. package/dist/tools/create_layer_content/handler.js.map +1 -0
  91. package/dist/tools/create_layer_content/schema.d.ts +9 -0
  92. package/dist/tools/create_layer_content/schema.d.ts.map +1 -0
  93. package/dist/tools/create_layer_content/schema.js +42 -0
  94. package/dist/tools/create_layer_content/schema.js.map +1 -0
  95. package/dist/tools/debug/diagnose_git_layer/handler.d.ts +6 -0
  96. package/dist/tools/debug/diagnose_git_layer/handler.d.ts.map +1 -0
  97. package/dist/tools/debug/diagnose_git_layer/handler.js +286 -0
  98. package/dist/tools/debug/diagnose_git_layer/handler.js.map +1 -0
  99. package/dist/tools/debug/diagnose_git_layer/schema.d.ts +6 -0
  100. package/dist/tools/debug/diagnose_git_layer/schema.d.ts.map +1 -0
  101. package/dist/tools/debug/diagnose_git_layer/schema.js +35 -0
  102. package/dist/tools/debug/diagnose_git_layer/schema.js.map +1 -0
  103. package/dist/tools/debug/diagnose_local_layer/handler.d.ts +6 -0
  104. package/dist/tools/debug/diagnose_local_layer/handler.d.ts.map +1 -0
  105. package/dist/tools/debug/diagnose_local_layer/handler.js +285 -0
  106. package/dist/tools/debug/diagnose_local_layer/handler.js.map +1 -0
  107. package/dist/tools/debug/diagnose_local_layer/schema.d.ts +6 -0
  108. package/dist/tools/debug/diagnose_local_layer/schema.d.ts.map +1 -0
  109. package/dist/tools/debug/diagnose_local_layer/schema.js +16 -0
  110. package/dist/tools/debug/diagnose_local_layer/schema.js.map +1 -0
  111. package/dist/tools/debug/get_layer_diagnostics/handler.d.ts +7 -0
  112. package/dist/tools/debug/get_layer_diagnostics/handler.d.ts.map +1 -0
  113. package/dist/tools/debug/get_layer_diagnostics/handler.js +46 -0
  114. package/dist/tools/debug/get_layer_diagnostics/handler.js.map +1 -0
  115. package/dist/tools/debug/get_layer_diagnostics/schema.d.ts +6 -0
  116. package/dist/tools/debug/get_layer_diagnostics/schema.d.ts.map +1 -0
  117. package/dist/tools/debug/get_layer_diagnostics/schema.js +20 -0
  118. package/dist/tools/debug/get_layer_diagnostics/schema.js.map +1 -0
  119. package/dist/tools/debug/reload_layers/handler.d.ts +8 -0
  120. package/dist/tools/debug/reload_layers/handler.d.ts.map +1 -0
  121. package/dist/tools/debug/reload_layers/handler.js +83 -0
  122. package/dist/tools/debug/reload_layers/handler.js.map +1 -0
  123. package/dist/tools/debug/reload_layers/schema.d.ts +6 -0
  124. package/dist/tools/debug/reload_layers/schema.d.ts.map +1 -0
  125. package/dist/tools/debug/reload_layers/schema.js +20 -0
  126. package/dist/tools/debug/reload_layers/schema.js.map +1 -0
  127. package/dist/tools/debug/test_azure_devops_pat/handler.d.ts +6 -0
  128. package/dist/tools/debug/test_azure_devops_pat/handler.d.ts.map +1 -0
  129. package/dist/tools/debug/test_azure_devops_pat/handler.js +16 -0
  130. package/dist/tools/debug/test_azure_devops_pat/handler.js.map +1 -0
  131. package/dist/tools/debug/test_azure_devops_pat/schema.d.ts +6 -0
  132. package/dist/tools/debug/test_azure_devops_pat/schema.d.ts.map +1 -0
  133. package/dist/tools/debug/test_azure_devops_pat/schema.js +27 -0
  134. package/dist/tools/debug/test_azure_devops_pat/schema.js.map +1 -0
  135. package/dist/tools/debug/validate_layer_config/handler.d.ts +6 -0
  136. package/dist/tools/debug/validate_layer_config/handler.d.ts.map +1 -0
  137. package/dist/tools/debug/validate_layer_config/handler.js +17 -0
  138. package/dist/tools/debug/validate_layer_config/handler.js.map +1 -0
  139. package/dist/tools/debug/validate_layer_config/schema.d.ts +6 -0
  140. package/dist/tools/debug/validate_layer_config/schema.d.ts.map +1 -0
  141. package/dist/tools/debug/validate_layer_config/schema.js +21 -0
  142. package/dist/tools/debug/validate_layer_config/schema.js.map +1 -0
  143. package/dist/tools/find_bc_knowledge/handler.d.ts +21 -0
  144. package/dist/tools/find_bc_knowledge/handler.d.ts.map +1 -0
  145. package/dist/tools/find_bc_knowledge/handler.js +71 -0
  146. package/dist/tools/find_bc_knowledge/handler.js.map +1 -0
  147. package/dist/tools/find_bc_knowledge/schema.d.ts +8 -0
  148. package/dist/tools/find_bc_knowledge/schema.d.ts.map +1 -0
  149. package/dist/tools/find_bc_knowledge/schema.js +35 -0
  150. package/dist/tools/find_bc_knowledge/schema.js.map +1 -0
  151. package/dist/tools/get_bc_topic/handler.d.ts +12 -0
  152. package/dist/tools/get_bc_topic/handler.d.ts.map +1 -0
  153. package/dist/tools/get_bc_topic/handler.js +35 -0
  154. package/dist/tools/get_bc_topic/handler.js.map +1 -0
  155. package/dist/tools/get_bc_topic/schema.d.ts +8 -0
  156. package/dist/tools/get_bc_topic/schema.d.ts.map +1 -0
  157. package/dist/tools/get_bc_topic/schema.js +29 -0
  158. package/dist/tools/get_bc_topic/schema.js.map +1 -0
  159. package/dist/tools/get_codelens_mappings/handler.d.ts +8 -0
  160. package/dist/tools/get_codelens_mappings/handler.d.ts.map +1 -0
  161. package/dist/tools/get_codelens_mappings/handler.js +79 -0
  162. package/dist/tools/get_codelens_mappings/handler.js.map +1 -0
  163. package/dist/tools/get_codelens_mappings/schema.d.ts +9 -0
  164. package/dist/tools/get_codelens_mappings/schema.d.ts.map +1 -0
  165. package/dist/tools/get_codelens_mappings/schema.js +16 -0
  166. package/dist/tools/get_codelens_mappings/schema.js.map +1 -0
  167. package/dist/tools/get_workspace_info/handler.d.ts +16 -0
  168. package/dist/tools/get_workspace_info/handler.d.ts.map +1 -0
  169. package/dist/tools/get_workspace_info/handler.js +36 -0
  170. package/dist/tools/get_workspace_info/handler.js.map +1 -0
  171. package/dist/tools/get_workspace_info/schema.d.ts +8 -0
  172. package/dist/tools/get_workspace_info/schema.d.ts.map +1 -0
  173. package/dist/tools/get_workspace_info/schema.js +15 -0
  174. package/dist/tools/get_workspace_info/schema.js.map +1 -0
  175. package/dist/tools/handlers.d.ts +48 -0
  176. package/dist/tools/handlers.d.ts.map +1 -0
  177. package/dist/tools/handlers.js +81 -0
  178. package/dist/tools/handlers.js.map +1 -0
  179. package/dist/tools/index.d.ts +132 -38
  180. package/dist/tools/index.d.ts.map +1 -1
  181. package/dist/tools/index.js +184 -52
  182. package/dist/tools/index.js.map +1 -1
  183. package/dist/tools/list_prompts/handler.d.ts +11 -0
  184. package/dist/tools/list_prompts/handler.d.ts.map +1 -0
  185. package/dist/tools/list_prompts/handler.js +102 -0
  186. package/dist/tools/list_prompts/handler.js.map +1 -0
  187. package/dist/tools/list_prompts/schema.d.ts +9 -0
  188. package/dist/tools/list_prompts/schema.d.ts.map +1 -0
  189. package/dist/tools/list_prompts/schema.js +28 -0
  190. package/dist/tools/list_prompts/schema.js.map +1 -0
  191. package/dist/tools/list_specialists/handler.d.ts +12 -0
  192. package/dist/tools/list_specialists/handler.d.ts.map +1 -0
  193. package/dist/tools/list_specialists/handler.js +68 -0
  194. package/dist/tools/list_specialists/handler.js.map +1 -0
  195. package/dist/tools/list_specialists/schema.d.ts +8 -0
  196. package/dist/tools/list_specialists/schema.d.ts.map +1 -0
  197. package/dist/tools/list_specialists/schema.js +24 -0
  198. package/dist/tools/list_specialists/schema.js.map +1 -0
  199. package/dist/tools/scaffold_layer_repo/handler.d.ts +15 -0
  200. package/dist/tools/scaffold_layer_repo/handler.d.ts.map +1 -0
  201. package/dist/tools/scaffold_layer_repo/handler.js +410 -0
  202. package/dist/tools/scaffold_layer_repo/handler.js.map +1 -0
  203. package/dist/tools/scaffold_layer_repo/schema.d.ts +9 -0
  204. package/dist/tools/scaffold_layer_repo/schema.d.ts.map +1 -0
  205. package/dist/tools/scaffold_layer_repo/schema.js +35 -0
  206. package/dist/tools/scaffold_layer_repo/schema.js.map +1 -0
  207. package/dist/tools/set_workspace_info/handler.d.ts +22 -0
  208. package/dist/tools/set_workspace_info/handler.d.ts.map +1 -0
  209. package/dist/tools/set_workspace_info/handler.js +60 -0
  210. package/dist/tools/set_workspace_info/handler.js.map +1 -0
  211. package/dist/tools/set_workspace_info/schema.d.ts +8 -0
  212. package/dist/tools/set_workspace_info/schema.d.ts.map +1 -0
  213. package/dist/tools/set_workspace_info/schema.js +25 -0
  214. package/dist/tools/set_workspace_info/schema.js.map +1 -0
  215. package/dist/tools/validate_layer_repo/handler.d.ts +10 -0
  216. package/dist/tools/validate_layer_repo/handler.d.ts.map +1 -0
  217. package/dist/tools/validate_layer_repo/handler.js +148 -0
  218. package/dist/tools/validate_layer_repo/handler.js.map +1 -0
  219. package/dist/tools/validate_layer_repo/schema.d.ts +9 -0
  220. package/dist/tools/validate_layer_repo/schema.d.ts.map +1 -0
  221. package/dist/tools/validate_layer_repo/schema.js +21 -0
  222. package/dist/tools/validate_layer_repo/schema.js.map +1 -0
  223. package/dist/tools/workflow_batch/handler.d.ts +21 -0
  224. package/dist/tools/workflow_batch/handler.d.ts.map +1 -0
  225. package/dist/tools/workflow_batch/handler.js +304 -0
  226. package/dist/tools/workflow_batch/handler.js.map +1 -0
  227. package/dist/tools/workflow_batch/schema.d.ts +8 -0
  228. package/dist/tools/workflow_batch/schema.d.ts.map +1 -0
  229. package/dist/tools/workflow_batch/schema.js +76 -0
  230. package/dist/tools/workflow_batch/schema.js.map +1 -0
  231. package/dist/tools/workflow_cancel/handler.d.ts +21 -0
  232. package/dist/tools/workflow_cancel/handler.d.ts.map +1 -0
  233. package/dist/tools/workflow_cancel/handler.js +157 -0
  234. package/dist/tools/workflow_cancel/handler.js.map +1 -0
  235. package/dist/tools/workflow_cancel/schema.d.ts +8 -0
  236. package/dist/tools/workflow_cancel/schema.d.ts.map +1 -0
  237. package/dist/tools/workflow_cancel/schema.js +34 -0
  238. package/dist/tools/workflow_cancel/schema.js.map +1 -0
  239. package/dist/tools/workflow_complete/handler.d.ts +21 -0
  240. package/dist/tools/workflow_complete/handler.d.ts.map +1 -0
  241. package/dist/tools/workflow_complete/handler.js +124 -0
  242. package/dist/tools/workflow_complete/handler.js.map +1 -0
  243. package/dist/tools/workflow_complete/schema.d.ts +8 -0
  244. package/dist/tools/workflow_complete/schema.d.ts.map +1 -0
  245. package/dist/tools/workflow_complete/schema.js +45 -0
  246. package/dist/tools/workflow_complete/schema.js.map +1 -0
  247. package/dist/tools/workflow_list/handler.d.ts +19 -0
  248. package/dist/tools/workflow_list/handler.d.ts.map +1 -0
  249. package/dist/tools/workflow_list/handler.js +58 -0
  250. package/dist/tools/workflow_list/handler.js.map +1 -0
  251. package/dist/tools/workflow_list/schema.d.ts +8 -0
  252. package/dist/tools/workflow_list/schema.d.ts.map +1 -0
  253. package/dist/tools/workflow_list/schema.js +26 -0
  254. package/dist/tools/workflow_list/schema.js.map +1 -0
  255. package/dist/tools/workflow_next/handler.d.ts +21 -0
  256. package/dist/tools/workflow_next/handler.d.ts.map +1 -0
  257. package/dist/tools/workflow_next/handler.js +90 -0
  258. package/dist/tools/workflow_next/handler.js.map +1 -0
  259. package/dist/tools/workflow_next/schema.d.ts +8 -0
  260. package/dist/tools/workflow_next/schema.d.ts.map +1 -0
  261. package/dist/tools/workflow_next/schema.js +28 -0
  262. package/dist/tools/workflow_next/schema.js.map +1 -0
  263. package/dist/tools/workflow_progress/handler.d.ts +21 -0
  264. package/dist/tools/workflow_progress/handler.d.ts.map +1 -0
  265. package/dist/tools/workflow_progress/handler.js +147 -0
  266. package/dist/tools/workflow_progress/handler.js.map +1 -0
  267. package/dist/tools/workflow_progress/schema.d.ts +8 -0
  268. package/dist/tools/workflow_progress/schema.d.ts.map +1 -0
  269. package/dist/tools/workflow_progress/schema.js +111 -0
  270. package/dist/tools/workflow_progress/schema.js.map +1 -0
  271. package/dist/tools/workflow_start/handler.d.ts +21 -0
  272. package/dist/tools/workflow_start/handler.d.ts.map +1 -0
  273. package/dist/tools/workflow_start/handler.js +133 -0
  274. package/dist/tools/workflow_start/handler.js.map +1 -0
  275. package/dist/tools/workflow_start/schema.d.ts +8 -0
  276. package/dist/tools/workflow_start/schema.d.ts.map +1 -0
  277. package/dist/tools/workflow_start/schema.js +102 -0
  278. package/dist/tools/workflow_start/schema.js.map +1 -0
  279. package/dist/tools/workflow_status/handler.d.ts +21 -0
  280. package/dist/tools/workflow_status/handler.d.ts.map +1 -0
  281. package/dist/tools/workflow_status/handler.js +107 -0
  282. package/dist/tools/workflow_status/handler.js.map +1 -0
  283. package/dist/tools/workflow_status/schema.d.ts +8 -0
  284. package/dist/tools/workflow_status/schema.d.ts.map +1 -0
  285. package/dist/tools/workflow_status/schema.js +33 -0
  286. package/dist/tools/workflow_status/schema.js.map +1 -0
  287. package/dist/types/bc-knowledge.d.ts +64 -13
  288. package/dist/types/bc-knowledge.d.ts.map +1 -1
  289. package/dist/types/bc-knowledge.js +15 -0
  290. package/dist/types/bc-knowledge.js.map +1 -1
  291. package/dist/types/enhanced-layer-types.d.ts +3 -3
  292. package/dist/types/enhanced-layer-types.d.ts.map +1 -1
  293. package/dist/types/workflow-v2-types.d.ts +577 -0
  294. package/dist/types/workflow-v2-types.d.ts.map +1 -0
  295. package/dist/types/workflow-v2-types.js +10 -0
  296. package/dist/types/workflow-v2-types.js.map +1 -0
  297. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +23 -23
  298. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +23 -23
  299. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +29 -29
  300. package/embedded-knowledge/AGENTS.md +177 -177
  301. package/embedded-knowledge/CONTRIBUTING.md +57 -57
  302. package/embedded-knowledge/LICENSE +20 -20
  303. package/embedded-knowledge/README.md +31 -31
  304. package/embedded-knowledge/codelens-mappings.yaml +111 -0
  305. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +10 -0
  306. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +10 -0
  307. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +10 -0
  308. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +10 -0
  309. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +10 -0
  310. package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +10 -0
  311. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +10 -0
  312. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +10 -0
  313. package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +10 -0
  314. package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +10 -0
  315. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +12 -2
  316. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +12 -2
  317. package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +10 -0
  318. package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +10 -0
  319. package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +10 -0
  320. package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +10 -0
  321. package/embedded-knowledge/domains/chris-config/content-types-structure.md +10 -0
  322. package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +10 -0
  323. package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +10 -0
  324. package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +10 -0
  325. package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +10 -0
  326. package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +10 -0
  327. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +10 -0
  328. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +12 -2
  329. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +12 -2
  330. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +12 -2
  331. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +10 -0
  332. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +12 -2
  333. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +10 -0
  334. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +12 -2
  335. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +10 -0
  336. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +10 -0
  337. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +10 -0
  338. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +10 -0
  339. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +10 -0
  340. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +12 -2
  341. package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +10 -0
  342. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +12 -2
  343. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +12 -2
  344. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +10 -0
  345. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +10 -0
  346. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +12 -2
  347. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +12 -2
  348. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +12 -2
  349. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +10 -0
  350. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +12 -2
  351. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +12 -2
  352. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +12 -2
  353. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +12 -2
  354. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +12 -2
  355. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +12 -2
  356. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +12 -2
  357. package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +10 -0
  358. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +12 -2
  359. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +12 -2
  360. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +12 -2
  361. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +12 -2
  362. package/embedded-knowledge/domains/eva-errors/try-function-usage.md +10 -0
  363. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +10 -0
  364. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +12 -2
  365. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +10 -0
  366. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +12 -2
  367. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +12 -2
  368. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +12 -2
  369. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +10 -0
  370. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +12 -2
  371. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +12 -2
  372. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +12 -2
  373. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +12 -2
  374. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +12 -2
  375. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +12 -2
  376. package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +10 -0
  377. package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +10 -0
  378. package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +10 -0
  379. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +12 -2
  380. package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +10 -0
  381. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +12 -2
  382. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +12 -2
  383. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +12 -2
  384. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +10 -0
  385. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +10 -0
  386. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +10 -0
  387. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +10 -0
  388. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +12 -2
  389. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +10 -0
  390. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +10 -0
  391. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +10 -0
  392. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +10 -0
  393. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +10 -0
  394. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +10 -0
  395. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +10 -0
  396. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +10 -0
  397. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +10 -0
  398. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +10 -0
  399. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +10 -0
  400. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +10 -0
  401. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +12 -2
  402. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +10 -0
  403. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +12 -2
  404. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +12 -2
  405. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +10 -0
  406. package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +10 -0
  407. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +10 -0
  408. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +12 -2
  409. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +10 -0
  410. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +10 -0
  411. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +10 -0
  412. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +10 -0
  413. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +10 -0
  414. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +10 -0
  415. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +12 -2
  416. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +10 -0
  417. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +10 -0
  418. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +10 -0
  419. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +10 -0
  420. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +10 -0
  421. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +10 -0
  422. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +10 -0
  423. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +12 -2
  424. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +10 -0
  425. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +12 -2
  426. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +10 -0
  427. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +10 -0
  428. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +10 -0
  429. package/embedded-knowledge/domains/seth-security/api-permission-model.md +12 -2
  430. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +12 -2
  431. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +155 -145
  432. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +10 -0
  433. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +12 -2
  434. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +12 -2
  435. package/embedded-knowledge/scripts/frontmatter_validator.ps1 +330 -0
  436. package/embedded-knowledge/specialists/sam-coder.md +29 -20
  437. package/embedded-knowledge/workflows/bc-version-upgrade.yaml +160 -0
  438. package/embedded-knowledge/workflows/code-review.yaml +148 -0
  439. package/embedded-knowledge/workflows/error-to-errorinfo-migration.yaml +137 -0
  440. package/embedded-knowledge/workflows/onboarding.yaml +124 -0
  441. package/embedded-knowledge/workflows/performance-audit.yaml +148 -0
  442. package/embedded-knowledge/workflows/proposal-review.yaml +117 -0
  443. package/embedded-knowledge/workflows/security-audit.yaml +139 -0
  444. package/package.json +83 -81
  445. package/dist/cache/cache-manager.d.ts +0 -95
  446. package/dist/cache/cache-manager.d.ts.map +0 -1
  447. package/dist/cache/cache-manager.js +0 -328
  448. package/dist/cache/cache-manager.js.map +0 -1
  449. package/dist/cli/bc-code-intel-cli.d.ts +0 -9
  450. package/dist/cli/bc-code-intel-cli.d.ts.map +0 -1
  451. package/dist/cli/bc-code-intel-cli.js +0 -440
  452. package/dist/cli/bc-code-intel-cli.js.map +0 -1
  453. package/dist/config/test-config-loader.d.ts +0 -10
  454. package/dist/config/test-config-loader.d.ts.map +0 -1
  455. package/dist/config/test-config-loader.js +0 -135
  456. package/dist/config/test-config-loader.js.map +0 -1
  457. package/dist/config/test-enhanced-layer-service.d.ts +0 -7
  458. package/dist/config/test-enhanced-layer-service.d.ts.map +0 -1
  459. package/dist/config/test-enhanced-layer-service.js +0 -104
  460. package/dist/config/test-enhanced-layer-service.js.map +0 -1
  461. package/dist/config/test-git-layer.d.ts +0 -7
  462. package/dist/config/test-git-layer.d.ts.map +0 -1
  463. package/dist/config/test-git-layer.js +0 -68
  464. package/dist/config/test-git-layer.js.map +0 -1
  465. package/dist/dev/hot-reload.d.ts +0 -91
  466. package/dist/dev/hot-reload.d.ts.map +0 -1
  467. package/dist/dev/hot-reload.js +0 -358
  468. package/dist/dev/hot-reload.js.map +0 -1
  469. package/dist/layers/layer-service.d.ts +0 -135
  470. package/dist/layers/layer-service.d.ts.map +0 -1
  471. package/dist/layers/layer-service.js +0 -586
  472. package/dist/layers/layer-service.js.map +0 -1
  473. package/dist/monitoring/production-monitor.d.ts +0 -148
  474. package/dist/monitoring/production-monitor.d.ts.map +0 -1
  475. package/dist/monitoring/production-monitor.js +0 -463
  476. package/dist/monitoring/production-monitor.js.map +0 -1
  477. package/dist/performance/performance-monitor.d.ts +0 -99
  478. package/dist/performance/performance-monitor.d.ts.map +0 -1
  479. package/dist/performance/performance-monitor.js +0 -253
  480. package/dist/performance/performance-monitor.js.map +0 -1
  481. package/dist/sdk/bc-code-intel-client.d.ts +0 -175
  482. package/dist/sdk/bc-code-intel-client.d.ts.map +0 -1
  483. package/dist/sdk/bc-code-intel-client.js +0 -380
  484. package/dist/sdk/bc-code-intel-client.js.map +0 -1
  485. package/dist/search/intelligent-search.d.ts +0 -97
  486. package/dist/search/intelligent-search.d.ts.map +0 -1
  487. package/dist/search/intelligent-search.js +0 -358
  488. package/dist/search/intelligent-search.js.map +0 -1
  489. package/dist/security/access-control.d.ts +0 -110
  490. package/dist/security/access-control.d.ts.map +0 -1
  491. package/dist/security/access-control.js +0 -353
  492. package/dist/security/access-control.js.map +0 -1
  493. package/dist/services/enhanced-prompt-service.d.ts.map +0 -1
  494. package/dist/services/enhanced-prompt-service.js.map +0 -1
  495. package/dist/services/roleplay-engine.d.ts +0 -161
  496. package/dist/services/roleplay-engine.d.ts.map +0 -1
  497. package/dist/services/roleplay-engine.js +0 -994
  498. package/dist/services/roleplay-engine.js.map +0 -1
  499. package/dist/setup/post-install.d.ts +0 -12
  500. package/dist/setup/post-install.d.ts.map +0 -1
  501. package/dist/setup/post-install.js +0 -81
  502. package/dist/setup/post-install.js.map +0 -1
  503. package/dist/streamlined-handlers.d.ts +0 -87
  504. package/dist/streamlined-handlers.d.ts.map +0 -1
  505. package/dist/streamlined-handlers.js +0 -685
  506. package/dist/streamlined-handlers.js.map +0 -1
  507. package/dist/test-enhanced-mcp-server.d.ts +0 -7
  508. package/dist/test-enhanced-mcp-server.d.ts.map +0 -1
  509. package/dist/test-enhanced-mcp-server.js +0 -177
  510. package/dist/test-enhanced-mcp-server.js.map +0 -1
  511. package/dist/tools/config-diagnostic-tools.d.ts +0 -234
  512. package/dist/tools/config-diagnostic-tools.d.ts.map +0 -1
  513. package/dist/tools/config-diagnostic-tools.js +0 -887
  514. package/dist/tools/config-diagnostic-tools.js.map +0 -1
  515. package/dist/tools/core-tools.d.ts +0 -26
  516. package/dist/tools/core-tools.d.ts.map +0 -1
  517. package/dist/tools/core-tools.js +0 -245
  518. package/dist/tools/core-tools.js.map +0 -1
  519. package/dist/tools/handoff-tools.d.ts +0 -37
  520. package/dist/tools/handoff-tools.d.ts.map +0 -1
  521. package/dist/tools/handoff-tools.js +0 -265
  522. package/dist/tools/handoff-tools.js.map +0 -1
  523. package/dist/tools/onboarding-tools.d.ts +0 -43
  524. package/dist/tools/onboarding-tools.d.ts.map +0 -1
  525. package/dist/tools/onboarding-tools.js +0 -353
  526. package/dist/tools/onboarding-tools.js.map +0 -1
  527. package/dist/tools/specialist-discovery-tools.d.ts +0 -27
  528. package/dist/tools/specialist-discovery-tools.d.ts.map +0 -1
  529. package/dist/tools/specialist-discovery-tools.js +0 -281
  530. package/dist/tools/specialist-discovery-tools.js.map +0 -1
  531. package/dist/tools/specialist-tools.d.ts +0 -43
  532. package/dist/tools/specialist-tools.d.ts.map +0 -1
  533. package/dist/tools/specialist-tools.js +0 -378
  534. package/dist/tools/specialist-tools.js.map +0 -1
  535. package/dist/tools/workspace-tools.d.ts.map +0 -1
  536. package/dist/tools/workspace-tools.js +0 -188
  537. package/dist/tools/workspace-tools.js.map +0 -1
  538. package/dist/types/roleplay-types.d.ts +0 -156
  539. package/dist/types/roleplay-types.d.ts.map +0 -1
  540. package/dist/types/roleplay-types.js +0 -8
  541. package/dist/types/roleplay-types.js.map +0 -1
  542. package/dist/utils/path-utils.d.ts +0 -5
  543. package/dist/utils/path-utils.d.ts.map +0 -1
  544. package/dist/utils/path-utils.js +0 -14
  545. package/dist/utils/path-utils.js.map +0 -1
  546. package/dist/workflows/domain-workflows.d.ts +0 -8
  547. package/dist/workflows/domain-workflows.d.ts.map +0 -1
  548. package/dist/workflows/domain-workflows.js +0 -360
  549. package/dist/workflows/domain-workflows.js.map +0 -1
  550. package/embedded-knowledge/methodologies/index.json +0 -81
  551. package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
  552. package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
  553. package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
  554. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
  555. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
  556. package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
  557. package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
  558. package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
  559. package/embedded-knowledge/methodologies/phases/performance.md +0 -211
  560. package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
  561. package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
  562. package/embedded-knowledge/methodologies/phases/verification.md +0 -146
  563. package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
  564. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
  565. package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +0 -535
@@ -1,11 +1,21 @@
1
- ---
1
+ ---
2
2
  title: "Shortcut Key User Experience Design in Business Central Applications"
3
3
  domain: "uma-ux"
4
4
  difficulty: "intermediate"
5
5
  bc_versions: "14+"
6
6
  tags: ["user-experience", "shortcuts", "workflow-optimization", "productivity", "interface-design"]
7
7
  prerequisites: ["user-interface-design", "bc-actions"]
8
- ---
8
+
9
+ relevance_signals:
10
+ constructs: ["ShortcutKey", "ToolTip", "Caption", "ApplicationArea", "Promoted"]
11
+ keywords: ["user experience", "shortcut", "workflow optimization", "productivity", "keyboard navigation", "progressive disclosure", "cognitive load", "discoverability", "power user"]
12
+ anti_pattern_indicators: ["overcomplex combinations", "hidden functionality", "inconsistent behavior", "conflict creation", "no visual feedback"]
13
+ positive_pattern_indicators: ["workflow analysis", "frequency-based prioritization", "memorable patterns", "visual cues", "help integration", "progressive revelation"]
14
+
15
+ applicable_object_types: ["page", "pageextension"]
16
+
17
+ relevance_threshold: 0.4
18
+ ---
9
19
  # Shortcut Key User Experience Design in Business Central Applications
10
20
 
11
21
  ## Overview
@@ -0,0 +1,330 @@
1
+ # frontmatter_validator.ps1
2
+ # Validates knowledge file frontmatter against v2 schema requirements
3
+
4
+ param(
5
+ [string]$Path = "..\domains",
6
+ [switch]$ExcludeSamples = $true,
7
+ [switch]$V2Only = $false # Only check v2 fields, skip files without them
8
+ )
9
+
10
+ $script:ErrorCount = 0
11
+ $script:WarningCount = 0
12
+ $script:ValidCount = 0
13
+ $script:SkippedCount = 0
14
+
15
+ function Write-ValidationError {
16
+ param([string]$File, [string]$Message)
17
+ Write-Host " ERROR: $Message" -ForegroundColor Red
18
+ $script:ErrorCount++
19
+ }
20
+
21
+ function Write-ValidationWarning {
22
+ param([string]$File, [string]$Message)
23
+ Write-Host " WARN: $Message" -ForegroundColor Yellow
24
+ $script:WarningCount++
25
+ }
26
+
27
+ function Test-IsArray {
28
+ param($Value)
29
+ return $Value -is [System.Collections.IEnumerable] -and $Value -isnot [string]
30
+ }
31
+
32
+ function Test-IsArrayOfStrings {
33
+ param($Value)
34
+ if (-not (Test-IsArray $Value)) { return $false }
35
+ foreach ($item in $Value) {
36
+ if ($item -isnot [string]) { return $false }
37
+ }
38
+ return $true
39
+ }
40
+
41
+ function Parse-YamlFrontmatter {
42
+ param([string]$Content)
43
+
44
+ # Extract frontmatter between --- markers
45
+ if ($Content -notmatch '^---\s*\r?\n([\s\S]*?)\r?\n---') {
46
+ return $null
47
+ }
48
+
49
+ $yamlContent = $Matches[1]
50
+ $result = @{}
51
+ $currentKey = $null
52
+ $currentIndent = 0
53
+ $inArray = $false
54
+ $arrayKey = $null
55
+ $nestedObject = $null
56
+ $nestedKey = $null
57
+
58
+ foreach ($line in $yamlContent -split '\r?\n') {
59
+ # Skip comments only - blank lines reset nested context but don't skip
60
+ if ($line -match '^\s*#') { continue }
61
+
62
+ # Blank lines reset nested object context (back to top level)
63
+ if ($line -match '^\s*$') {
64
+ $nestedObject = $null
65
+ $nestedKey = $null
66
+ $currentKey = $null
67
+ $arrayKey = $null
68
+ continue
69
+ }
70
+
71
+ # Detect indent level
72
+ $indent = 0
73
+ if ($line -match '^(\s*)') {
74
+ $indent = $Matches[1].Length
75
+ }
76
+
77
+ $trimmedLine = $line.Trim()
78
+
79
+ # Array item
80
+ if ($trimmedLine -match '^-\s*(.*)$') {
81
+ $value = $Matches[1].Trim()
82
+ # Remove quotes if present
83
+ if ($value -match '^[''"](.*)[''"]\s*$') {
84
+ $value = $Matches[1]
85
+ }
86
+ if ($nestedKey -and $nestedObject) {
87
+ if (-not $nestedObject[$nestedKey]) {
88
+ $nestedObject[$nestedKey] = @()
89
+ }
90
+ $nestedObject[$nestedKey] += $value
91
+ } elseif ($arrayKey) {
92
+ if (-not $result[$arrayKey]) {
93
+ $result[$arrayKey] = @()
94
+ }
95
+ $result[$arrayKey] += $value
96
+ }
97
+ continue
98
+ }
99
+
100
+ # Key-value pair
101
+ if ($trimmedLine -match '^([^:]+):\s*(.*)$') {
102
+ $key = $Matches[1].Trim()
103
+ $value = $Matches[2].Trim()
104
+
105
+ # Remove quotes if present
106
+ if ($value -match '^[''"](.*)[''"]\s*$') {
107
+ $value = $Matches[1]
108
+ }
109
+
110
+ # Check if this is a nested object key (indented under another key)
111
+ if ($indent -gt 0 -and $currentKey) {
112
+ if (-not $result[$currentKey]) {
113
+ $result[$currentKey] = @{}
114
+ }
115
+ $nestedObject = $result[$currentKey]
116
+ $nestedKey = $key
117
+
118
+ if ($value -eq '' -or $value -match '^\[') {
119
+ # Empty value or inline array - prepare for array items
120
+ if ($value -match '^\[(.*)\]$') {
121
+ # Inline array
122
+ $items = $Matches[1] -split ',\s*' | ForEach-Object {
123
+ $_.Trim().Trim('"').Trim("'")
124
+ } | Where-Object { $_ -ne '' }
125
+ $nestedObject[$key] = @($items)
126
+ } else {
127
+ $nestedObject[$key] = @()
128
+ }
129
+ } else {
130
+ $nestedObject[$key] = $value
131
+ }
132
+ } else {
133
+ # Top-level key
134
+ $currentKey = $key
135
+ $nestedObject = $null
136
+ $nestedKey = $null
137
+
138
+ if ($value -eq '' -or $value -match '^\[') {
139
+ # Empty value means object or array follows, or inline array
140
+ if ($value -match '^\[(.*)\]$') {
141
+ # Inline array
142
+ $items = $Matches[1] -split ',\s*' | ForEach-Object {
143
+ $_.Trim().Trim('"').Trim("'")
144
+ } | Where-Object { $_ -ne '' }
145
+ $result[$key] = @($items)
146
+ } else {
147
+ $arrayKey = $key
148
+ }
149
+ } else {
150
+ $result[$key] = $value
151
+ $arrayKey = $null
152
+ }
153
+ }
154
+ }
155
+ }
156
+
157
+ return $result
158
+ }
159
+
160
+ function Validate-Frontmatter {
161
+ param(
162
+ [string]$FilePath,
163
+ [hashtable]$Frontmatter
164
+ )
165
+
166
+ $hasV2Fields = $Frontmatter.ContainsKey('relevance_signals') -or
167
+ $Frontmatter.ContainsKey('applicable_object_types') -or
168
+ $Frontmatter.ContainsKey('relevance_threshold')
169
+
170
+ if ($V2Only -and -not $hasV2Fields) {
171
+ $script:SkippedCount++
172
+ return $true
173
+ }
174
+
175
+ $isValid = $true
176
+ $fileName = Split-Path $FilePath -Leaf
177
+
178
+ Write-Host "`nValidating: $fileName" -ForegroundColor Cyan
179
+
180
+ # Check relevance_signals structure
181
+ if ($Frontmatter.ContainsKey('relevance_signals')) {
182
+ $rs = $Frontmatter['relevance_signals']
183
+
184
+ if ($rs -isnot [hashtable]) {
185
+ Write-ValidationError -File $FilePath -Message "relevance_signals must be an object"
186
+ $isValid = $false
187
+ } else {
188
+ # Check each sub-field
189
+ $arrayFields = @('constructs', 'keywords', 'anti_pattern_indicators', 'positive_pattern_indicators')
190
+ foreach ($field in $arrayFields) {
191
+ if ($rs.ContainsKey($field)) {
192
+ $value = $rs[$field]
193
+ if (-not (Test-IsArray $value)) {
194
+ Write-ValidationError -File $FilePath -Message "relevance_signals.$field must be an array"
195
+ $isValid = $false
196
+ } elseif ($value.Count -gt 0 -and -not (Test-IsArrayOfStrings $value)) {
197
+ Write-ValidationError -File $FilePath -Message "relevance_signals.$field must contain only strings"
198
+ $isValid = $false
199
+ }
200
+ }
201
+ }
202
+
203
+ # Warn if no signals defined
204
+ $hasAnySignals = $false
205
+ foreach ($field in $arrayFields) {
206
+ if ($rs.ContainsKey($field) -and $rs[$field].Count -gt 0) {
207
+ $hasAnySignals = $true
208
+ break
209
+ }
210
+ }
211
+ if (-not $hasAnySignals) {
212
+ Write-ValidationWarning -File $FilePath -Message "relevance_signals defined but no signals specified"
213
+ }
214
+ }
215
+ }
216
+
217
+ # Check applicable_object_types
218
+ if ($Frontmatter.ContainsKey('applicable_object_types')) {
219
+ $aot = $Frontmatter['applicable_object_types']
220
+ if (-not (Test-IsArray $aot)) {
221
+ Write-ValidationError -File $FilePath -Message "applicable_object_types must be an array"
222
+ $isValid = $false
223
+ } elseif ($aot.Count -gt 0 -and -not (Test-IsArrayOfStrings $aot)) {
224
+ Write-ValidationError -File $FilePath -Message "applicable_object_types must contain only strings"
225
+ $isValid = $false
226
+ }
227
+ }
228
+
229
+ # Check relevance_threshold
230
+ if ($Frontmatter.ContainsKey('relevance_threshold')) {
231
+ $rt = $Frontmatter['relevance_threshold']
232
+ $rtNum = 0
233
+ # Use InvariantCulture to handle decimal point regardless of system locale
234
+ if (-not [double]::TryParse($rt, [System.Globalization.NumberStyles]::Float, [System.Globalization.CultureInfo]::InvariantCulture, [ref]$rtNum)) {
235
+ Write-ValidationError -File $FilePath -Message "relevance_threshold must be a number"
236
+ $isValid = $false
237
+ } elseif ($rtNum -lt 0.0 -or $rtNum -gt 1.0) {
238
+ Write-ValidationError -File $FilePath -Message "relevance_threshold must be between 0.0 and 1.0 (got $rtNum)"
239
+ $isValid = $false
240
+ }
241
+ }
242
+
243
+ if ($isValid) {
244
+ if ($hasV2Fields) {
245
+ Write-Host " OK (v2 fields valid)" -ForegroundColor Green
246
+ } else {
247
+ Write-Host " OK (no v2 fields)" -ForegroundColor Gray
248
+ }
249
+ $script:ValidCount++
250
+ }
251
+
252
+ return $isValid
253
+ }
254
+
255
+ # Main execution
256
+ $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
257
+ $searchPath = Join-Path $scriptDir $Path
258
+
259
+ if (-not (Test-Path $searchPath)) {
260
+ # Try relative to current directory
261
+ $searchPath = $Path
262
+ }
263
+
264
+ if (-not (Test-Path $searchPath)) {
265
+ Write-Host "Error: Path not found: $searchPath" -ForegroundColor Red
266
+ exit 1
267
+ }
268
+
269
+ Write-Host "=" * 60 -ForegroundColor White
270
+ Write-Host "Frontmatter Validator - Knowledge Pattern V2" -ForegroundColor White
271
+ Write-Host "=" * 60 -ForegroundColor White
272
+ Write-Host "Scanning: $searchPath"
273
+ Write-Host "Exclude samples: $ExcludeSamples"
274
+ Write-Host "V2 fields only: $V2Only"
275
+ Write-Host ""
276
+
277
+ # Find all markdown files
278
+ $files = Get-ChildItem -Path $searchPath -Filter "*.md" -Recurse
279
+
280
+ if ($ExcludeSamples) {
281
+ $files = $files | Where-Object { $_.DirectoryName -notmatch '\\samples$' }
282
+ }
283
+
284
+ Write-Host "Found $($files.Count) files to validate`n"
285
+
286
+ foreach ($file in $files) {
287
+ $content = Get-Content -Path $file.FullName -Raw -ErrorAction SilentlyContinue
288
+
289
+ if (-not $content) {
290
+ Write-Host "`nValidating: $($file.Name)" -ForegroundColor Cyan
291
+ Write-ValidationError -File $file.FullName -Message "Could not read file"
292
+ continue
293
+ }
294
+
295
+ # Check for frontmatter
296
+ if ($content -notmatch '^---') {
297
+ Write-Host "`nValidating: $($file.Name)" -ForegroundColor Cyan
298
+ Write-ValidationWarning -File $file.FullName -Message "No YAML frontmatter found"
299
+ $script:SkippedCount++
300
+ continue
301
+ }
302
+
303
+ $frontmatter = Parse-YamlFrontmatter -Content $content
304
+
305
+ if (-not $frontmatter) {
306
+ Write-Host "`nValidating: $($file.Name)" -ForegroundColor Cyan
307
+ Write-ValidationError -File $file.FullName -Message "Failed to parse YAML frontmatter"
308
+ continue
309
+ }
310
+
311
+ Validate-Frontmatter -FilePath $file.FullName -Frontmatter $frontmatter | Out-Null
312
+ }
313
+
314
+ # Summary
315
+ Write-Host "`n" + ("=" * 60) -ForegroundColor White
316
+ Write-Host "VALIDATION SUMMARY" -ForegroundColor White
317
+ Write-Host "=" * 60 -ForegroundColor White
318
+ Write-Host "Valid: $script:ValidCount" -ForegroundColor Green
319
+ Write-Host "Warnings: $script:WarningCount" -ForegroundColor Yellow
320
+ Write-Host "Errors: $script:ErrorCount" -ForegroundColor Red
321
+ Write-Host "Skipped: $script:SkippedCount" -ForegroundColor Gray
322
+ Write-Host ""
323
+
324
+ if ($script:ErrorCount -gt 0) {
325
+ Write-Host "VALIDATION FAILED" -ForegroundColor Red
326
+ exit 1
327
+ } else {
328
+ Write-Host "VALIDATION PASSED" -ForegroundColor Green
329
+ exit 0
330
+ }
@@ -65,8 +65,8 @@ Welcome to focused development! I'm here to help experienced developers get thin
65
65
  **Sam's Implementation Protocol**:
66
66
  1. **PRE-CODE**: Inventory knowledge base for relevant BC patterns, standards, and best practices
67
67
  2. **APPLY**: Integrate findings into code composition
68
- 3. **POST-CODE**: Inventory knowledge base for missed improvements
69
- 4. **OPTIMIZE**: Generate complete to-do list of applicable enhancements
68
+ 3. **POST-CODE**: Validate generated code with `analyze_al_code` (operation='validate')
69
+ 4. **OPTIMIZE**: Apply fixes and generate enhancement to-do list from validation results
70
70
 
71
71
  ## Your Role in BC Development
72
72
 
@@ -136,6 +136,7 @@ Thorough understanding of requirements:
136
136
  1. **Pre-Code Knowledge Inventory**: Search BC knowledge base for relevant patterns, standards, and constraints
137
137
  2. **Pattern Application**: Apply knowledge findings to scenario recognition
138
138
  3. **Composition Planning**: Design implementation using knowledge-validated patterns
139
+ 4. **Post-Code Validation**: Use `analyze_al_code` to validate against organization standards
139
140
 
140
141
  ### **Focused Implementation** 🎯
141
142
  Systematic path to working solution:
@@ -143,7 +144,8 @@ Systematic path to working solution:
143
144
  1. **Knowledge-Informed Pattern Selection**: Choose patterns validated by knowledge base
144
145
  2. **Code Generation**: Implement systematically with knowledge-based best practices
145
146
  3. **Integration Points**: Handle necessary connections with proven approaches
146
- 4. **Validation**: Complete check that solution meets requirements and knowledge standards
147
+ 4. **Code Validation**: Use `analyze_al_code` (operation='validate') to check against organization standards
148
+ 5. **Fix & Optimize**: Apply validation findings before presenting code
147
149
 
148
150
  ### **Optional Deep Dive** 🔍
149
151
  Available when needed:
@@ -165,15 +167,18 @@ Available when needed:
165
167
  [Complete, compilable AL code with proper object structure]
166
168
  ```
167
169
 
168
- **Post-Code Knowledge Review:**
169
- [Using find_bc_knowledge for additional improvements]
170
+ **Post-Code Validation:**
171
+ [Using analyze_al_code operation='validate' to check code]
170
172
 
171
- **Enhancement To-Do List:**
172
- - [ ] [Specific improvement from knowledge base]
173
- - [ ] [Another specific optimization found]
174
- - [ ] [Performance pattern that could be applied]
173
+ **Validation Results:**
174
+ No organization standards violations found
175
+ All best practices applied
175
176
 
176
- This handles [key BC requirements] with knowledge-validated AL patterns. Need any adjustments for your specific BC constraints?"
177
+ **Enhancement Opportunities:**
178
+ - [ ] [Performance optimization from analysis]
179
+ - [ ] [Additional pattern that could be applied]
180
+
181
+ This handles [key BC requirements] with validated AL patterns. Need any adjustments for your specific BC constraints?"
177
182
 
178
183
  ### **For Complex AL Requirements**
179
184
  "⚡ Sam here! Let me inventory BC knowledge for this custom approach...
@@ -258,11 +263,15 @@ This will compile properly in your BC environment."
258
263
 
259
264
  ## Implementation Requirements ⚠️
260
265
 
261
- **⚠️ MANDATORY**: Always use `find_bc_knowledge` before AND after code generation.
262
- - **Pre-code**: Search for relevant patterns, standards, constraints
263
- - **Post-code**: Search for improvements, generate enhancement to-do list
266
+ **⚠️ MANDATORY**: Always validate code before presenting to users.
267
+ - **Pre-code**: Use `find_bc_knowledge` to search for relevant patterns, standards, constraints
268
+ - **Post-code**: Use `analyze_al_code` (operation='validate') to check generated code
269
+ - **Optimize**: Apply validation findings and fixes before presenting
264
270
 
265
- **CRITICAL**: Knowledge base contains authoritative BC standards that override general AI training.
271
+ **CRITICAL**:
272
+ - Knowledge base contains authoritative BC standards that override general AI training
273
+ - `analyze_al_code` checks organization standards from company + project layers
274
+ - Project layer standards may override company layer standards (higher priority)
266
275
 
267
276
  ## AL Code Generation Standards
268
277
 
@@ -311,9 +320,9 @@ Every systematic, knowledge-driven AL implementation helps the team deliver more
311
320
  - Results-focused but thorough—efficiency through systematic research
312
321
 
313
322
  **MY WORKFLOW:**
314
- - **Primary:** Knowledge-Driven Implementation (Pre-code inventory → Apply → Post-code check → Optimize)
323
+ - **Primary:** Knowledge-Driven Implementation (Pre-code inventory → Apply → Validate → Optimize)
315
324
  - **Suggest on first contact**, but can jump straight to coding if developer is ready
316
- - MANDATORY: `find_bc_knowledge` before and after code generation
325
+ - MANDATORY: `find_bc_knowledge` before coding, `analyze_al_code` after coding
317
326
 
318
327
  **MY VOICE:**
319
328
  - Action-oriented: "Here's the validated pattern"
@@ -322,12 +331,12 @@ Every systematic, knowledge-driven AL implementation helps the team deliver more
322
331
  - Excited about elegant, thoroughly-researched solutions
323
332
 
324
333
  **NON-NEGOTIABLES:**
325
- 1. **PRE-CODE**: Inventory knowledge base for relevant BC patterns, standards, best practices
334
+ 1. **PRE-CODE**: Use `find_bc_knowledge` for relevant BC patterns, standards, best practices
326
335
  2. **APPLY**: Integrate findings into code composition
327
- 3. **POST-CODE**: Inventory knowledge base for missed improvements
328
- 4. **OPTIMIZE**: Generate complete to-do list of applicable enhancements
336
+ 3. **POST-CODE**: Use `analyze_al_code` (operation='validate') to check generated code
337
+ 4. **OPTIMIZE**: Apply validation fixes before presenting code
329
338
  5. ALL code must be valid, compilable AL language
330
- 6. Knowledge base standards override general AI training
339
+ 6. Organization standards (company + project layers) override general AI training
331
340
 
332
341
  **WHEN TO HAND OFF:**
333
342
  - Need to learn concepts first → Maya Mentor
@@ -0,0 +1,160 @@
1
+ type: "bc-version-upgrade"
2
+ name: "BC Version Upgrade"
3
+ description: "Upgrade Business Central codebase between major versions, handling breaking changes and deprecated features"
4
+ specialist: "alex-architect"
5
+
6
+ file_patterns:
7
+ - "**/*.al"
8
+ - "**/app.json"
9
+ file_exclusions:
10
+ - "**/node_modules/**"
11
+ - "**/.altestrunner/**"
12
+
13
+ phases:
14
+ - id: "inventory"
15
+ name: "File Inventory"
16
+ description: "Enumerate all AL files and identify current BC version"
17
+ required: true
18
+ mode: "autonomous"
19
+ available_actions:
20
+ - "read_app_json"
21
+ - "identify_bc_version"
22
+ - "list_files"
23
+
24
+ - id: "breaking_changes_scan"
25
+ name: "Breaking Changes Scan"
26
+ description: "Scan for patterns affected by breaking changes between versions"
27
+ required: true
28
+ mode: "autonomous"
29
+ entry_conditions:
30
+ - "inventory phase completed"
31
+ available_actions:
32
+ - "scan_deprecated_apis"
33
+ - "scan_removed_features"
34
+ - "scan_changed_behavior"
35
+
36
+ - id: "dependency_review"
37
+ name: "Dependency Review"
38
+ description: "Review app dependencies and verify compatibility with target version"
39
+ required: true
40
+ mode: "guided"
41
+ entry_conditions:
42
+ - "inventory phase completed"
43
+ available_actions:
44
+ - "check_dependencies"
45
+ - "check_runtime_version"
46
+ - "check_symbol_references"
47
+
48
+ - id: "migration_planning"
49
+ name: "Migration Planning"
50
+ description: "Create migration plan for breaking changes and deprecated features"
51
+ required: true
52
+ mode: "agent_driven"
53
+ entry_conditions:
54
+ - "breaking_changes_scan phase completed"
55
+ - "dependency_review phase completed"
56
+ available_actions:
57
+ - "prioritize_changes"
58
+ - "identify_workarounds"
59
+ - "create_migration_tasks"
60
+
61
+ - id: "code_migration"
62
+ name: "Code Migration"
63
+ description: "Apply migrations for deprecated/removed features"
64
+ required: true
65
+ mode: "guided"
66
+ entry_conditions:
67
+ - "migration_planning phase completed"
68
+ available_actions:
69
+ - "migrate_file"
70
+ - "apply_transformation"
71
+ - "skip_migration"
72
+
73
+ - id: "verification"
74
+ name: "Verification"
75
+ description: "Compile and test migrated code against target version"
76
+ required: true
77
+ mode: "guided"
78
+ entry_conditions:
79
+ - "code_migration phase completed"
80
+ available_actions:
81
+ - "compile_check"
82
+ - "run_tests"
83
+ - "validate_functionality"
84
+
85
+ - id: "summary"
86
+ name: "Migration Report"
87
+ description: "Generate migration summary with statistics and remaining issues"
88
+ required: true
89
+ mode: "autonomous"
90
+ entry_conditions:
91
+ - "verification phase completed"
92
+
93
+ per_file_checklist:
94
+ - id: "scan"
95
+ type: "analysis"
96
+ description: "Scan for version-specific patterns"
97
+ required: true
98
+
99
+ - id: "deprecated_check"
100
+ type: "pattern_instance"
101
+ description: "Check for deprecated API usage"
102
+ required: true
103
+
104
+ - id: "migration_complete"
105
+ type: "validation"
106
+ description: "File migrated to target version"
107
+ required: true
108
+
109
+ topic_discovery:
110
+ enabled: true
111
+ tool: "find_bc_knowledge"
112
+ auto_expand_checklist: true
113
+ min_relevance_score: 0.6
114
+
115
+ pattern_discovery:
116
+ enabled: true
117
+ create_instance_items: true
118
+ group_identical: true
119
+ specialist: "alex-architect"
120
+ patterns:
121
+ - id: "obsolete-attribute"
122
+ name: "Obsolete Attribute"
123
+ description: "Code marked as obsolete that may be removed in target version"
124
+ regex: "\\[Obsolete\\([^)]*\\)\\]"
125
+ regex_flags: "gi"
126
+ context_lines: 3
127
+ specialist: "alex-architect"
128
+
129
+ - id: "deprecated-no-series"
130
+ name: "Deprecated No. Series Pattern"
131
+ description: "Legacy No. Series implementation that should use BC24+ module"
132
+ regex: "NoSeriesMgt\\.(InitSeries|GetNextNo|SetDefaultSeries)"
133
+ regex_flags: "gi"
134
+ context_lines: 2
135
+ instance_classifier:
136
+ rules:
137
+ - name: "init_series"
138
+ pattern: "InitSeries"
139
+ suggested_action: "Migrate to NoSeries.GetNextNo() or AreRelated()"
140
+ auto_fixable: false
141
+ - name: "get_next_no"
142
+ pattern: "GetNextNo"
143
+ suggested_action: "Migrate to NoSeries.GetNextNo()"
144
+ auto_fixable: false
145
+ specialist: "dean-debug"
146
+ topic_id: "dean-debug/bc24-no-series-conversion-guide"
147
+
148
+ - id: "removed-codeunit-run"
149
+ name: "Deprecated Codeunit.Run Pattern"
150
+ description: "Codeunit.Run patterns that may have changed behavior"
151
+ regex: "Codeunit\\.Run\\s*\\([^)]+\\)"
152
+ regex_flags: "gi"
153
+ context_lines: 2
154
+ specialist: "eva-errors"
155
+ topic_id: "eva-errors/codeunit-run-pattern"
156
+
157
+ completion_rules:
158
+ require_all_files: true
159
+ require_all_checklist_items: true
160
+ allow_skip_with_reason: true