bc-code-intelligence-mcp 1.5.9 → 1.6.0

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 (598) hide show
  1. package/dist/index.d.ts +9 -8
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +93 -211
  4. package/dist/index.js.map +1 -1
  5. package/dist/layers/base-layer.d.ts +6 -6
  6. package/dist/layers/base-layer.d.ts.map +1 -1
  7. package/dist/layers/base-layer.js +15 -15
  8. package/dist/layers/base-layer.js.map +1 -1
  9. package/dist/layers/embedded-layer.d.ts +2 -2
  10. package/dist/layers/embedded-layer.d.ts.map +1 -1
  11. package/dist/layers/embedded-layer.js +32 -16
  12. package/dist/layers/embedded-layer.js.map +1 -1
  13. package/dist/layers/git-layer.d.ts +2 -2
  14. package/dist/layers/git-layer.d.ts.map +1 -1
  15. package/dist/layers/git-layer.js +23 -9
  16. package/dist/layers/git-layer.js.map +1 -1
  17. package/dist/layers/project-layer.d.ts +2 -2
  18. package/dist/layers/project-layer.d.ts.map +1 -1
  19. package/dist/layers/project-layer.js +25 -11
  20. package/dist/layers/project-layer.js.map +1 -1
  21. package/dist/services/code-analysis-service.d.ts +100 -2
  22. package/dist/services/code-analysis-service.d.ts.map +1 -1
  23. package/dist/services/code-analysis-service.js +274 -8
  24. package/dist/services/code-analysis-service.js.map +1 -1
  25. package/dist/services/knowledge-service.d.ts.map +1 -1
  26. package/dist/services/knowledge-service.js.map +1 -1
  27. package/dist/services/methodology-service.d.ts +34 -2
  28. package/dist/services/methodology-service.d.ts.map +1 -1
  29. package/dist/services/methodology-service.js +279 -24
  30. package/dist/services/methodology-service.js.map +1 -1
  31. package/dist/services/multi-content-layer-service.d.ts.map +1 -1
  32. package/dist/services/multi-content-layer-service.js +26 -9
  33. package/dist/services/multi-content-layer-service.js.map +1 -1
  34. package/dist/services/relevance-index-service.d.ts +95 -0
  35. package/dist/services/relevance-index-service.d.ts.map +1 -0
  36. package/dist/services/relevance-index-service.js +321 -0
  37. package/dist/services/relevance-index-service.js.map +1 -0
  38. package/dist/services/roleplay-engine.d.ts +8 -0
  39. package/dist/services/roleplay-engine.d.ts.map +1 -1
  40. package/dist/services/roleplay-engine.js +35 -3
  41. package/dist/services/roleplay-engine.js.map +1 -1
  42. package/dist/services/specialist-loader.d.ts +1 -0
  43. package/dist/services/specialist-loader.d.ts.map +1 -1
  44. package/dist/services/specialist-loader.js +1 -0
  45. package/dist/services/specialist-loader.js.map +1 -1
  46. package/dist/services/workflow-service.d.ts +12 -0
  47. package/dist/services/workflow-service.d.ts.map +1 -1
  48. package/dist/services/workflow-service.js +30 -0
  49. package/dist/services/workflow-service.js.map +1 -1
  50. package/dist/services/{enhanced-prompt-service.d.ts → workflow-specialist-router.d.ts} +41 -4
  51. package/dist/services/workflow-specialist-router.d.ts.map +1 -0
  52. package/dist/services/{enhanced-prompt-service.js → workflow-specialist-router.js} +150 -24
  53. package/dist/services/workflow-specialist-router.js.map +1 -0
  54. package/dist/services/workflow-v2/index.d.ts +6 -0
  55. package/dist/services/workflow-v2/index.d.ts.map +1 -0
  56. package/dist/services/workflow-v2/index.js +6 -0
  57. package/dist/services/workflow-v2/index.js.map +1 -0
  58. package/dist/services/workflow-v2/workflow-definitions.d.ts +53 -0
  59. package/dist/services/workflow-v2/workflow-definitions.d.ts.map +1 -0
  60. package/dist/services/workflow-v2/workflow-definitions.js +722 -0
  61. package/dist/services/workflow-v2/workflow-definitions.js.map +1 -0
  62. package/dist/services/workflow-v2/workflow-session-manager.d.ts +140 -0
  63. package/dist/services/workflow-v2/workflow-session-manager.d.ts.map +1 -0
  64. package/dist/services/workflow-v2/workflow-session-manager.js +820 -0
  65. package/dist/services/workflow-v2/workflow-session-manager.js.map +1 -0
  66. package/dist/streamlined-handlers.d.ts +7 -86
  67. package/dist/streamlined-handlers.d.ts.map +1 -1
  68. package/dist/streamlined-handlers.js +23 -679
  69. package/dist/streamlined-handlers.js.map +1 -1
  70. package/dist/tools/_shared/workspace-constants.d.ts +49 -0
  71. package/dist/tools/_shared/workspace-constants.d.ts.map +1 -0
  72. package/dist/tools/_shared/workspace-constants.js +53 -0
  73. package/dist/tools/_shared/workspace-constants.js.map +1 -0
  74. package/dist/tools/advance_workflow/handler.d.ts +21 -0
  75. package/dist/tools/advance_workflow/handler.d.ts.map +1 -0
  76. package/dist/tools/advance_workflow/handler.js +58 -0
  77. package/dist/tools/advance_workflow/handler.js.map +1 -0
  78. package/dist/tools/advance_workflow/schema.d.ts +8 -0
  79. package/dist/tools/advance_workflow/schema.d.ts.map +1 -0
  80. package/dist/tools/advance_workflow/schema.js +28 -0
  81. package/dist/tools/advance_workflow/schema.js.map +1 -0
  82. package/dist/tools/analyze_al_code/handler.d.ts +12 -0
  83. package/dist/tools/analyze_al_code/handler.d.ts.map +1 -0
  84. package/dist/tools/analyze_al_code/handler.js +312 -0
  85. package/dist/tools/analyze_al_code/handler.js.map +1 -0
  86. package/dist/tools/analyze_al_code/schema.d.ts +8 -0
  87. package/dist/tools/analyze_al_code/schema.d.ts.map +1 -0
  88. package/dist/tools/analyze_al_code/schema.js +54 -0
  89. package/dist/tools/analyze_al_code/schema.js.map +1 -0
  90. package/dist/tools/ask_bc_expert/handler.d.ts +21 -0
  91. package/dist/tools/ask_bc_expert/handler.d.ts.map +1 -0
  92. package/dist/tools/ask_bc_expert/handler.js +118 -0
  93. package/dist/tools/ask_bc_expert/handler.js.map +1 -0
  94. package/dist/tools/ask_bc_expert/schema.d.ts +8 -0
  95. package/dist/tools/ask_bc_expert/schema.d.ts.map +1 -0
  96. package/dist/tools/ask_bc_expert/schema.js +33 -0
  97. package/dist/tools/ask_bc_expert/schema.js.map +1 -0
  98. package/dist/tools/context-snapshot/handler.d.ts +14 -0
  99. package/dist/tools/context-snapshot/handler.d.ts.map +1 -0
  100. package/dist/tools/context-snapshot/handler.js +143 -0
  101. package/dist/tools/context-snapshot/handler.js.map +1 -0
  102. package/dist/tools/context-snapshot/schema.d.ts +11 -0
  103. package/dist/tools/context-snapshot/schema.d.ts.map +1 -0
  104. package/dist/tools/context-snapshot/schema.js +46 -0
  105. package/dist/tools/context-snapshot/schema.js.map +1 -0
  106. package/dist/tools/core-tools.d.ts +1 -1
  107. package/dist/tools/core-tools.d.ts.map +1 -1
  108. package/dist/tools/core-tools.js +26 -9
  109. package/dist/tools/core-tools.js.map +1 -1
  110. package/dist/tools/create_layer_content/handler.d.ts +17 -0
  111. package/dist/tools/create_layer_content/handler.d.ts.map +1 -0
  112. package/dist/tools/create_layer_content/handler.js +248 -0
  113. package/dist/tools/create_layer_content/handler.js.map +1 -0
  114. package/dist/tools/create_layer_content/schema.d.ts +9 -0
  115. package/dist/tools/create_layer_content/schema.d.ts.map +1 -0
  116. package/dist/tools/create_layer_content/schema.js +42 -0
  117. package/dist/tools/create_layer_content/schema.js.map +1 -0
  118. package/dist/tools/debug/diagnose_git_layer/handler.d.ts +6 -0
  119. package/dist/tools/debug/diagnose_git_layer/handler.d.ts.map +1 -0
  120. package/dist/tools/debug/diagnose_git_layer/handler.js +286 -0
  121. package/dist/tools/debug/diagnose_git_layer/handler.js.map +1 -0
  122. package/dist/tools/debug/diagnose_git_layer/schema.d.ts +6 -0
  123. package/dist/tools/debug/diagnose_git_layer/schema.d.ts.map +1 -0
  124. package/dist/tools/debug/diagnose_git_layer/schema.js +35 -0
  125. package/dist/tools/debug/diagnose_git_layer/schema.js.map +1 -0
  126. package/dist/tools/debug/diagnose_local_layer/handler.d.ts +6 -0
  127. package/dist/tools/debug/diagnose_local_layer/handler.d.ts.map +1 -0
  128. package/dist/tools/debug/diagnose_local_layer/handler.js +285 -0
  129. package/dist/tools/debug/diagnose_local_layer/handler.js.map +1 -0
  130. package/dist/tools/debug/diagnose_local_layer/schema.d.ts +6 -0
  131. package/dist/tools/debug/diagnose_local_layer/schema.d.ts.map +1 -0
  132. package/dist/tools/debug/diagnose_local_layer/schema.js +16 -0
  133. package/dist/tools/debug/diagnose_local_layer/schema.js.map +1 -0
  134. package/dist/tools/debug/get_layer_diagnostics/handler.d.ts +7 -0
  135. package/dist/tools/debug/get_layer_diagnostics/handler.d.ts.map +1 -0
  136. package/dist/tools/debug/get_layer_diagnostics/handler.js +46 -0
  137. package/dist/tools/debug/get_layer_diagnostics/handler.js.map +1 -0
  138. package/dist/tools/debug/get_layer_diagnostics/schema.d.ts +6 -0
  139. package/dist/tools/debug/get_layer_diagnostics/schema.d.ts.map +1 -0
  140. package/dist/tools/debug/get_layer_diagnostics/schema.js +20 -0
  141. package/dist/tools/debug/get_layer_diagnostics/schema.js.map +1 -0
  142. package/dist/tools/debug/reload_layers/handler.d.ts +8 -0
  143. package/dist/tools/debug/reload_layers/handler.d.ts.map +1 -0
  144. package/dist/tools/debug/reload_layers/handler.js +83 -0
  145. package/dist/tools/debug/reload_layers/handler.js.map +1 -0
  146. package/dist/tools/debug/reload_layers/schema.d.ts +6 -0
  147. package/dist/tools/debug/reload_layers/schema.d.ts.map +1 -0
  148. package/dist/tools/debug/reload_layers/schema.js +20 -0
  149. package/dist/tools/debug/reload_layers/schema.js.map +1 -0
  150. package/dist/tools/debug/test_azure_devops_pat/handler.d.ts +6 -0
  151. package/dist/tools/debug/test_azure_devops_pat/handler.d.ts.map +1 -0
  152. package/dist/tools/debug/test_azure_devops_pat/handler.js +16 -0
  153. package/dist/tools/debug/test_azure_devops_pat/handler.js.map +1 -0
  154. package/dist/tools/debug/test_azure_devops_pat/schema.d.ts +6 -0
  155. package/dist/tools/debug/test_azure_devops_pat/schema.d.ts.map +1 -0
  156. package/dist/tools/debug/test_azure_devops_pat/schema.js +27 -0
  157. package/dist/tools/debug/test_azure_devops_pat/schema.js.map +1 -0
  158. package/dist/tools/debug/validate_layer_config/handler.d.ts +6 -0
  159. package/dist/tools/debug/validate_layer_config/handler.d.ts.map +1 -0
  160. package/dist/tools/debug/validate_layer_config/handler.js +17 -0
  161. package/dist/tools/debug/validate_layer_config/handler.js.map +1 -0
  162. package/dist/tools/debug/validate_layer_config/schema.d.ts +6 -0
  163. package/dist/tools/debug/validate_layer_config/schema.d.ts.map +1 -0
  164. package/dist/tools/debug/validate_layer_config/schema.js +21 -0
  165. package/dist/tools/debug/validate_layer_config/schema.js.map +1 -0
  166. package/dist/tools/find_bc_knowledge/handler.d.ts +21 -0
  167. package/dist/tools/find_bc_knowledge/handler.d.ts.map +1 -0
  168. package/dist/tools/find_bc_knowledge/handler.js +71 -0
  169. package/dist/tools/find_bc_knowledge/handler.js.map +1 -0
  170. package/dist/tools/find_bc_knowledge/schema.d.ts +8 -0
  171. package/dist/tools/find_bc_knowledge/schema.d.ts.map +1 -0
  172. package/dist/tools/find_bc_knowledge/schema.js +35 -0
  173. package/dist/tools/find_bc_knowledge/schema.js.map +1 -0
  174. package/dist/tools/get_bc_topic/handler.d.ts +12 -0
  175. package/dist/tools/get_bc_topic/handler.d.ts.map +1 -0
  176. package/dist/tools/get_bc_topic/handler.js +35 -0
  177. package/dist/tools/get_bc_topic/handler.js.map +1 -0
  178. package/dist/tools/get_bc_topic/schema.d.ts +8 -0
  179. package/dist/tools/get_bc_topic/schema.d.ts.map +1 -0
  180. package/dist/tools/get_bc_topic/schema.js +29 -0
  181. package/dist/tools/get_bc_topic/schema.js.map +1 -0
  182. package/dist/tools/get_codelens_mappings/handler.d.ts +8 -0
  183. package/dist/tools/get_codelens_mappings/handler.d.ts.map +1 -0
  184. package/dist/tools/get_codelens_mappings/handler.js +79 -0
  185. package/dist/tools/get_codelens_mappings/handler.js.map +1 -0
  186. package/dist/tools/get_codelens_mappings/schema.d.ts +9 -0
  187. package/dist/tools/get_codelens_mappings/schema.d.ts.map +1 -0
  188. package/dist/tools/get_codelens_mappings/schema.js +16 -0
  189. package/dist/tools/get_codelens_mappings/schema.js.map +1 -0
  190. package/dist/tools/get_workflow_help/handler.d.ts +12 -0
  191. package/dist/tools/get_workflow_help/handler.d.ts.map +1 -0
  192. package/dist/tools/get_workflow_help/handler.js +54 -0
  193. package/dist/tools/get_workflow_help/handler.js.map +1 -0
  194. package/dist/tools/get_workflow_help/schema.d.ts +8 -0
  195. package/dist/tools/get_workflow_help/schema.d.ts.map +1 -0
  196. package/dist/tools/get_workflow_help/schema.js +25 -0
  197. package/dist/tools/get_workflow_help/schema.js.map +1 -0
  198. package/dist/tools/get_workspace_info/handler.d.ts +16 -0
  199. package/dist/tools/get_workspace_info/handler.d.ts.map +1 -0
  200. package/dist/tools/get_workspace_info/handler.js +36 -0
  201. package/dist/tools/get_workspace_info/handler.js.map +1 -0
  202. package/dist/tools/get_workspace_info/schema.d.ts +8 -0
  203. package/dist/tools/get_workspace_info/schema.d.ts.map +1 -0
  204. package/dist/tools/get_workspace_info/schema.js +15 -0
  205. package/dist/tools/get_workspace_info/schema.js.map +1 -0
  206. package/dist/tools/handlers.d.ts +48 -0
  207. package/dist/tools/handlers.d.ts.map +1 -0
  208. package/dist/tools/handlers.js +81 -0
  209. package/dist/tools/handlers.js.map +1 -0
  210. package/dist/tools/index.d.ts +132 -38
  211. package/dist/tools/index.d.ts.map +1 -1
  212. package/dist/tools/index.js +184 -52
  213. package/dist/tools/index.js.map +1 -1
  214. package/dist/tools/knowledge-query/handler.d.ts +29 -0
  215. package/dist/tools/knowledge-query/handler.d.ts.map +1 -0
  216. package/dist/tools/knowledge-query/handler.js +85 -0
  217. package/dist/tools/knowledge-query/handler.js.map +1 -0
  218. package/dist/tools/knowledge-query/schema.d.ts +12 -0
  219. package/dist/tools/knowledge-query/schema.d.ts.map +1 -0
  220. package/dist/tools/knowledge-query/schema.js +64 -0
  221. package/dist/tools/knowledge-query/schema.js.map +1 -0
  222. package/dist/tools/list_prompts/handler.d.ts +11 -0
  223. package/dist/tools/list_prompts/handler.d.ts.map +1 -0
  224. package/dist/tools/list_prompts/handler.js +102 -0
  225. package/dist/tools/list_prompts/handler.js.map +1 -0
  226. package/dist/tools/list_prompts/schema.d.ts +9 -0
  227. package/dist/tools/list_prompts/schema.d.ts.map +1 -0
  228. package/dist/tools/list_prompts/schema.js +28 -0
  229. package/dist/tools/list_prompts/schema.js.map +1 -0
  230. package/dist/tools/list_specialists/handler.d.ts +12 -0
  231. package/dist/tools/list_specialists/handler.d.ts.map +1 -0
  232. package/dist/tools/list_specialists/handler.js +68 -0
  233. package/dist/tools/list_specialists/handler.js.map +1 -0
  234. package/dist/tools/list_specialists/schema.d.ts +8 -0
  235. package/dist/tools/list_specialists/schema.d.ts.map +1 -0
  236. package/dist/tools/list_specialists/schema.js +24 -0
  237. package/dist/tools/list_specialists/schema.js.map +1 -0
  238. package/dist/tools/scaffold_layer_repo/handler.d.ts +15 -0
  239. package/dist/tools/scaffold_layer_repo/handler.d.ts.map +1 -0
  240. package/dist/tools/scaffold_layer_repo/handler.js +410 -0
  241. package/dist/tools/scaffold_layer_repo/handler.js.map +1 -0
  242. package/dist/tools/scaffold_layer_repo/schema.d.ts +9 -0
  243. package/dist/tools/scaffold_layer_repo/schema.d.ts.map +1 -0
  244. package/dist/tools/scaffold_layer_repo/schema.js +35 -0
  245. package/dist/tools/scaffold_layer_repo/schema.js.map +1 -0
  246. package/dist/tools/set_workspace_info/handler.d.ts +22 -0
  247. package/dist/tools/set_workspace_info/handler.d.ts.map +1 -0
  248. package/dist/tools/set_workspace_info/handler.js +60 -0
  249. package/dist/tools/set_workspace_info/handler.js.map +1 -0
  250. package/dist/tools/set_workspace_info/schema.d.ts +8 -0
  251. package/dist/tools/set_workspace_info/schema.d.ts.map +1 -0
  252. package/dist/tools/set_workspace_info/schema.js +25 -0
  253. package/dist/tools/set_workspace_info/schema.js.map +1 -0
  254. package/dist/tools/specialist-consult/handler.d.ts +23 -0
  255. package/dist/tools/specialist-consult/handler.d.ts.map +1 -0
  256. package/dist/tools/specialist-consult/handler.js +120 -0
  257. package/dist/tools/specialist-consult/handler.js.map +1 -0
  258. package/dist/tools/specialist-consult/schema.d.ts +11 -0
  259. package/dist/tools/specialist-consult/schema.d.ts.map +1 -0
  260. package/dist/tools/specialist-consult/schema.js +47 -0
  261. package/dist/tools/specialist-consult/schema.js.map +1 -0
  262. package/dist/tools/specialist-list/handler.d.ts +14 -0
  263. package/dist/tools/specialist-list/handler.d.ts.map +1 -0
  264. package/dist/tools/specialist-list/handler.js +70 -0
  265. package/dist/tools/specialist-list/handler.js.map +1 -0
  266. package/dist/tools/specialist-list/schema.d.ts +11 -0
  267. package/dist/tools/specialist-list/schema.d.ts.map +1 -0
  268. package/dist/tools/specialist-list/schema.js +29 -0
  269. package/dist/tools/specialist-list/schema.js.map +1 -0
  270. package/dist/tools/start_bc_workflow/handler.d.ts +21 -0
  271. package/dist/tools/start_bc_workflow/handler.d.ts.map +1 -0
  272. package/dist/tools/start_bc_workflow/handler.js +237 -0
  273. package/dist/tools/start_bc_workflow/handler.js.map +1 -0
  274. package/dist/tools/start_bc_workflow/schema.d.ts +8 -0
  275. package/dist/tools/start_bc_workflow/schema.d.ts.map +1 -0
  276. package/dist/tools/start_bc_workflow/schema.js +43 -0
  277. package/dist/tools/start_bc_workflow/schema.js.map +1 -0
  278. package/dist/tools/validate_layer_repo/handler.d.ts +10 -0
  279. package/dist/tools/validate_layer_repo/handler.d.ts.map +1 -0
  280. package/dist/tools/validate_layer_repo/handler.js +148 -0
  281. package/dist/tools/validate_layer_repo/handler.js.map +1 -0
  282. package/dist/tools/validate_layer_repo/schema.d.ts +9 -0
  283. package/dist/tools/validate_layer_repo/schema.d.ts.map +1 -0
  284. package/dist/tools/validate_layer_repo/schema.js +21 -0
  285. package/dist/tools/validate_layer_repo/schema.js.map +1 -0
  286. package/dist/tools/workflow-execute/handler.d.ts +44 -0
  287. package/dist/tools/workflow-execute/handler.d.ts.map +1 -0
  288. package/dist/tools/workflow-execute/handler.js +333 -0
  289. package/dist/tools/workflow-execute/handler.js.map +1 -0
  290. package/dist/tools/workflow-execute/schema.d.ts +13 -0
  291. package/dist/tools/workflow-execute/schema.d.ts.map +1 -0
  292. package/dist/tools/workflow-execute/schema.js +108 -0
  293. package/dist/tools/workflow-execute/schema.js.map +1 -0
  294. package/dist/tools/workflow_batch/handler.d.ts +21 -0
  295. package/dist/tools/workflow_batch/handler.d.ts.map +1 -0
  296. package/dist/tools/workflow_batch/handler.js +304 -0
  297. package/dist/tools/workflow_batch/handler.js.map +1 -0
  298. package/dist/tools/workflow_batch/schema.d.ts +8 -0
  299. package/dist/tools/workflow_batch/schema.d.ts.map +1 -0
  300. package/dist/tools/workflow_batch/schema.js +76 -0
  301. package/dist/tools/workflow_batch/schema.js.map +1 -0
  302. package/dist/tools/workflow_cancel/handler.d.ts +21 -0
  303. package/dist/tools/workflow_cancel/handler.d.ts.map +1 -0
  304. package/dist/tools/workflow_cancel/handler.js +157 -0
  305. package/dist/tools/workflow_cancel/handler.js.map +1 -0
  306. package/dist/tools/workflow_cancel/schema.d.ts +8 -0
  307. package/dist/tools/workflow_cancel/schema.d.ts.map +1 -0
  308. package/dist/tools/workflow_cancel/schema.js +34 -0
  309. package/dist/tools/workflow_cancel/schema.js.map +1 -0
  310. package/dist/tools/workflow_complete/handler.d.ts +21 -0
  311. package/dist/tools/workflow_complete/handler.d.ts.map +1 -0
  312. package/dist/tools/workflow_complete/handler.js +124 -0
  313. package/dist/tools/workflow_complete/handler.js.map +1 -0
  314. package/dist/tools/workflow_complete/schema.d.ts +8 -0
  315. package/dist/tools/workflow_complete/schema.d.ts.map +1 -0
  316. package/dist/tools/workflow_complete/schema.js +45 -0
  317. package/dist/tools/workflow_complete/schema.js.map +1 -0
  318. package/dist/tools/workflow_list/handler.d.ts +19 -0
  319. package/dist/tools/workflow_list/handler.d.ts.map +1 -0
  320. package/dist/tools/workflow_list/handler.js +58 -0
  321. package/dist/tools/workflow_list/handler.js.map +1 -0
  322. package/dist/tools/workflow_list/schema.d.ts +8 -0
  323. package/dist/tools/workflow_list/schema.d.ts.map +1 -0
  324. package/dist/tools/workflow_list/schema.js +26 -0
  325. package/dist/tools/workflow_list/schema.js.map +1 -0
  326. package/dist/tools/workflow_next/handler.d.ts +21 -0
  327. package/dist/tools/workflow_next/handler.d.ts.map +1 -0
  328. package/dist/tools/workflow_next/handler.js +90 -0
  329. package/dist/tools/workflow_next/handler.js.map +1 -0
  330. package/dist/tools/workflow_next/schema.d.ts +8 -0
  331. package/dist/tools/workflow_next/schema.d.ts.map +1 -0
  332. package/dist/tools/workflow_next/schema.js +28 -0
  333. package/dist/tools/workflow_next/schema.js.map +1 -0
  334. package/dist/tools/workflow_progress/handler.d.ts +21 -0
  335. package/dist/tools/workflow_progress/handler.d.ts.map +1 -0
  336. package/dist/tools/workflow_progress/handler.js +147 -0
  337. package/dist/tools/workflow_progress/handler.js.map +1 -0
  338. package/dist/tools/workflow_progress/schema.d.ts +8 -0
  339. package/dist/tools/workflow_progress/schema.d.ts.map +1 -0
  340. package/dist/tools/workflow_progress/schema.js +111 -0
  341. package/dist/tools/workflow_progress/schema.js.map +1 -0
  342. package/dist/tools/workflow_start/handler.d.ts +21 -0
  343. package/dist/tools/workflow_start/handler.d.ts.map +1 -0
  344. package/dist/tools/workflow_start/handler.js +133 -0
  345. package/dist/tools/workflow_start/handler.js.map +1 -0
  346. package/dist/tools/workflow_start/schema.d.ts +8 -0
  347. package/dist/tools/workflow_start/schema.d.ts.map +1 -0
  348. package/dist/tools/workflow_start/schema.js +102 -0
  349. package/dist/tools/workflow_start/schema.js.map +1 -0
  350. package/dist/tools/workflow_start_v2/handler.d.ts +21 -0
  351. package/dist/tools/workflow_start_v2/handler.d.ts.map +1 -0
  352. package/dist/tools/workflow_start_v2/handler.js +133 -0
  353. package/dist/tools/workflow_start_v2/handler.js.map +1 -0
  354. package/dist/tools/workflow_start_v2/schema.d.ts +8 -0
  355. package/dist/tools/workflow_start_v2/schema.d.ts.map +1 -0
  356. package/dist/tools/workflow_start_v2/schema.js +102 -0
  357. package/dist/tools/workflow_start_v2/schema.js.map +1 -0
  358. package/dist/tools/workflow_status/handler.d.ts +21 -0
  359. package/dist/tools/workflow_status/handler.d.ts.map +1 -0
  360. package/dist/tools/workflow_status/handler.js +107 -0
  361. package/dist/tools/workflow_status/handler.js.map +1 -0
  362. package/dist/tools/workflow_status/schema.d.ts +8 -0
  363. package/dist/tools/workflow_status/schema.d.ts.map +1 -0
  364. package/dist/tools/workflow_status/schema.js +33 -0
  365. package/dist/tools/workflow_status/schema.js.map +1 -0
  366. package/dist/types/bc-knowledge.d.ts +64 -13
  367. package/dist/types/bc-knowledge.d.ts.map +1 -1
  368. package/dist/types/bc-knowledge.js +15 -0
  369. package/dist/types/bc-knowledge.js.map +1 -1
  370. package/dist/types/enhanced-layer-types.d.ts +3 -3
  371. package/dist/types/enhanced-layer-types.d.ts.map +1 -1
  372. package/dist/types/workflow-v2-types.d.ts +577 -0
  373. package/dist/types/workflow-v2-types.d.ts.map +1 -0
  374. package/dist/types/workflow-v2-types.js +10 -0
  375. package/dist/types/workflow-v2-types.js.map +1 -0
  376. package/embedded-knowledge/codelens-mappings.yaml +111 -0
  377. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +10 -0
  378. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +10 -0
  379. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +10 -0
  380. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +10 -0
  381. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +10 -0
  382. package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +10 -0
  383. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +10 -0
  384. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +10 -0
  385. package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +10 -0
  386. package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +10 -0
  387. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +12 -2
  388. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +12 -2
  389. package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +10 -0
  390. package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +10 -0
  391. package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +10 -0
  392. package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +10 -0
  393. package/embedded-knowledge/domains/chris-config/content-types-structure.md +10 -0
  394. package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +10 -0
  395. package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +10 -0
  396. package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +10 -0
  397. package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +10 -0
  398. package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +10 -0
  399. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +10 -0
  400. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +12 -2
  401. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +12 -2
  402. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +12 -2
  403. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +10 -0
  404. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +12 -2
  405. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +10 -0
  406. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +12 -2
  407. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +10 -0
  408. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +10 -0
  409. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +10 -0
  410. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +10 -0
  411. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +10 -0
  412. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +12 -2
  413. package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +10 -0
  414. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +12 -2
  415. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +12 -2
  416. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +10 -0
  417. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +10 -0
  418. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +12 -2
  419. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +12 -2
  420. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +12 -2
  421. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +10 -0
  422. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +12 -2
  423. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +12 -2
  424. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +12 -2
  425. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +12 -2
  426. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +12 -2
  427. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +12 -2
  428. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +12 -2
  429. package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +10 -0
  430. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +12 -2
  431. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +12 -2
  432. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +12 -2
  433. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +12 -2
  434. package/embedded-knowledge/domains/eva-errors/try-function-usage.md +10 -0
  435. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +10 -0
  436. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +12 -2
  437. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +10 -0
  438. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +12 -2
  439. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +12 -2
  440. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +12 -2
  441. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +10 -0
  442. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +12 -2
  443. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +12 -2
  444. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +12 -2
  445. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +12 -2
  446. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +12 -2
  447. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +12 -2
  448. package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +10 -0
  449. package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +10 -0
  450. package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +10 -0
  451. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +12 -2
  452. package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +10 -0
  453. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +12 -2
  454. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +12 -2
  455. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +12 -2
  456. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +10 -0
  457. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +10 -0
  458. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +10 -0
  459. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +10 -0
  460. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +12 -2
  461. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +10 -0
  462. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +10 -0
  463. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +10 -0
  464. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +10 -0
  465. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +10 -0
  466. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +10 -0
  467. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +10 -0
  468. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +10 -0
  469. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +10 -0
  470. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +10 -0
  471. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +10 -0
  472. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +10 -0
  473. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +12 -2
  474. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +10 -0
  475. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +12 -2
  476. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +12 -2
  477. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +10 -0
  478. package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +10 -0
  479. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +10 -0
  480. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +12 -2
  481. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +10 -0
  482. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +10 -0
  483. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +10 -0
  484. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +10 -0
  485. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +10 -0
  486. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +10 -0
  487. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +12 -2
  488. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +10 -0
  489. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +10 -0
  490. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +10 -0
  491. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +10 -0
  492. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +10 -0
  493. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +10 -0
  494. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +10 -0
  495. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +12 -2
  496. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +10 -0
  497. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +12 -2
  498. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +10 -0
  499. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +10 -0
  500. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +10 -0
  501. package/embedded-knowledge/domains/seth-security/api-permission-model.md +12 -2
  502. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +12 -2
  503. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +10 -0
  504. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +10 -0
  505. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +12 -2
  506. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +12 -2
  507. package/embedded-knowledge/scripts/frontmatter_validator.ps1 +330 -0
  508. package/embedded-knowledge/specialists/sam-coder.md +29 -20
  509. package/embedded-knowledge/workflows/bc-version-upgrade.yaml +160 -0
  510. package/embedded-knowledge/workflows/code-review.yaml +148 -0
  511. package/embedded-knowledge/workflows/error-to-errorinfo-migration.yaml +137 -0
  512. package/embedded-knowledge/workflows/onboarding.yaml +124 -0
  513. package/embedded-knowledge/workflows/performance-audit.yaml +148 -0
  514. package/embedded-knowledge/workflows/proposal-review.yaml +117 -0
  515. package/embedded-knowledge/workflows/security-audit.yaml +139 -0
  516. package/package.json +4 -2
  517. package/dist/cache/cache-manager.d.ts +0 -95
  518. package/dist/cache/cache-manager.d.ts.map +0 -1
  519. package/dist/cache/cache-manager.js +0 -328
  520. package/dist/cache/cache-manager.js.map +0 -1
  521. package/dist/cli/bc-code-intel-cli.d.ts +0 -9
  522. package/dist/cli/bc-code-intel-cli.d.ts.map +0 -1
  523. package/dist/cli/bc-code-intel-cli.js +0 -440
  524. package/dist/cli/bc-code-intel-cli.js.map +0 -1
  525. package/dist/config/test-config-loader.d.ts +0 -10
  526. package/dist/config/test-config-loader.d.ts.map +0 -1
  527. package/dist/config/test-config-loader.js +0 -135
  528. package/dist/config/test-config-loader.js.map +0 -1
  529. package/dist/config/test-enhanced-layer-service.d.ts +0 -7
  530. package/dist/config/test-enhanced-layer-service.d.ts.map +0 -1
  531. package/dist/config/test-enhanced-layer-service.js +0 -104
  532. package/dist/config/test-enhanced-layer-service.js.map +0 -1
  533. package/dist/config/test-git-layer.d.ts +0 -7
  534. package/dist/config/test-git-layer.d.ts.map +0 -1
  535. package/dist/config/test-git-layer.js +0 -68
  536. package/dist/config/test-git-layer.js.map +0 -1
  537. package/dist/dev/hot-reload.d.ts +0 -91
  538. package/dist/dev/hot-reload.d.ts.map +0 -1
  539. package/dist/dev/hot-reload.js +0 -358
  540. package/dist/dev/hot-reload.js.map +0 -1
  541. package/dist/layers/layer-service.d.ts +0 -135
  542. package/dist/layers/layer-service.d.ts.map +0 -1
  543. package/dist/layers/layer-service.js +0 -586
  544. package/dist/layers/layer-service.js.map +0 -1
  545. package/dist/monitoring/production-monitor.d.ts +0 -148
  546. package/dist/monitoring/production-monitor.d.ts.map +0 -1
  547. package/dist/monitoring/production-monitor.js +0 -463
  548. package/dist/monitoring/production-monitor.js.map +0 -1
  549. package/dist/performance/performance-monitor.d.ts +0 -99
  550. package/dist/performance/performance-monitor.d.ts.map +0 -1
  551. package/dist/performance/performance-monitor.js +0 -253
  552. package/dist/performance/performance-monitor.js.map +0 -1
  553. package/dist/sdk/bc-code-intel-client.d.ts +0 -175
  554. package/dist/sdk/bc-code-intel-client.d.ts.map +0 -1
  555. package/dist/sdk/bc-code-intel-client.js +0 -380
  556. package/dist/sdk/bc-code-intel-client.js.map +0 -1
  557. package/dist/search/intelligent-search.d.ts +0 -97
  558. package/dist/search/intelligent-search.d.ts.map +0 -1
  559. package/dist/search/intelligent-search.js +0 -358
  560. package/dist/search/intelligent-search.js.map +0 -1
  561. package/dist/security/access-control.d.ts +0 -110
  562. package/dist/security/access-control.d.ts.map +0 -1
  563. package/dist/security/access-control.js +0 -353
  564. package/dist/security/access-control.js.map +0 -1
  565. package/dist/services/enhanced-prompt-service.d.ts.map +0 -1
  566. package/dist/services/enhanced-prompt-service.js.map +0 -1
  567. package/dist/setup/post-install.d.ts +0 -12
  568. package/dist/setup/post-install.d.ts.map +0 -1
  569. package/dist/setup/post-install.js +0 -81
  570. package/dist/setup/post-install.js.map +0 -1
  571. package/dist/test-enhanced-mcp-server.d.ts +0 -7
  572. package/dist/test-enhanced-mcp-server.d.ts.map +0 -1
  573. package/dist/test-enhanced-mcp-server.js +0 -177
  574. package/dist/test-enhanced-mcp-server.js.map +0 -1
  575. package/dist/tools/specialist-tools.d.ts +0 -43
  576. package/dist/tools/specialist-tools.d.ts.map +0 -1
  577. package/dist/tools/specialist-tools.js +0 -378
  578. package/dist/tools/specialist-tools.js.map +0 -1
  579. package/dist/utils/path-utils.d.ts +0 -5
  580. package/dist/utils/path-utils.d.ts.map +0 -1
  581. package/dist/utils/path-utils.js +0 -14
  582. package/dist/utils/path-utils.js.map +0 -1
  583. package/embedded-knowledge/methodologies/index.json +0 -81
  584. package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
  585. package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
  586. package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
  587. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
  588. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
  589. package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
  590. package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
  591. package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
  592. package/embedded-knowledge/methodologies/phases/performance.md +0 -211
  593. package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
  594. package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
  595. package/embedded-knowledge/methodologies/phases/verification.md +0 -146
  596. package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
  597. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
  598. package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +0 -535
@@ -0,0 +1,820 @@
1
+ /**
2
+ * Workflow Session Manager
3
+ *
4
+ * Manages stateful workflow sessions with file-based persistence.
5
+ * Sessions are stored in .bc-workflows/ directory in the project root.
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import fg from 'fast-glob';
10
+ import { getWorkflowDefinition } from './workflow-definitions.js';
11
+ /**
12
+ * Generate a unique session ID
13
+ */
14
+ function generateSessionId(workflowType) {
15
+ const timestamp = new Date().toISOString().slice(0, 10);
16
+ const random = Math.random().toString(36).substring(2, 8);
17
+ return `wf-${workflowType}-${timestamp}-${random}`;
18
+ }
19
+ /**
20
+ * Generate a unique checklist item ID
21
+ */
22
+ function generateChecklistItemId(prefix) {
23
+ return `${prefix}-${Math.random().toString(36).substring(2, 8)}`;
24
+ }
25
+ /**
26
+ * In-memory workflow session storage with file backup
27
+ */
28
+ export class WorkflowSessionManager {
29
+ sessions = new Map();
30
+ workspaceRoot = null;
31
+ constructor() {
32
+ // No external state sync needed
33
+ }
34
+ /**
35
+ * Set the workspace root for file discovery and session storage
36
+ */
37
+ setWorkspaceRoot(workspaceRoot) {
38
+ this.workspaceRoot = workspaceRoot;
39
+ }
40
+ /**
41
+ * Get the sessions directory path
42
+ */
43
+ getSessionsDir() {
44
+ if (!this.workspaceRoot) {
45
+ throw new Error('Workspace root not set. Call setWorkspaceRoot first.');
46
+ }
47
+ return path.join(this.workspaceRoot, '.bc-workflows', 'sessions');
48
+ }
49
+ /**
50
+ * Get the reports directory path
51
+ */
52
+ getReportsDir() {
53
+ if (!this.workspaceRoot) {
54
+ throw new Error('Workspace root not set. Call setWorkspaceRoot first.');
55
+ }
56
+ return path.join(this.workspaceRoot, '.bc-workflows', 'reports');
57
+ }
58
+ /**
59
+ * Ensure the workflow directories exist
60
+ */
61
+ async ensureDirectories() {
62
+ const sessionsDir = this.getSessionsDir();
63
+ const reportsDir = this.getReportsDir();
64
+ await fs.mkdir(sessionsDir, { recursive: true });
65
+ await fs.mkdir(reportsDir, { recursive: true });
66
+ }
67
+ /**
68
+ * Create a new workflow session
69
+ */
70
+ async createSession(session) {
71
+ this.sessions.set(session.id, session);
72
+ await this.persistSession(session);
73
+ }
74
+ /**
75
+ * Get a session by ID
76
+ */
77
+ async getSession(sessionId) {
78
+ // Check in-memory first
79
+ let session = this.sessions.get(sessionId);
80
+ if (session) {
81
+ return session;
82
+ }
83
+ // Try loading from file
84
+ try {
85
+ session = await this.loadSession(sessionId);
86
+ if (session) {
87
+ this.sessions.set(sessionId, session);
88
+ return session;
89
+ }
90
+ }
91
+ catch (error) {
92
+ // Session file doesn't exist or is invalid
93
+ }
94
+ return null;
95
+ }
96
+ /**
97
+ * Update an existing session
98
+ */
99
+ async updateSession(session) {
100
+ session.updated_at = new Date().toISOString();
101
+ this.sessions.set(session.id, session);
102
+ await this.persistSession(session);
103
+ }
104
+ /**
105
+ * Delete a session
106
+ */
107
+ async deleteSession(sessionId) {
108
+ this.sessions.delete(sessionId);
109
+ try {
110
+ const sessionsDir = this.getSessionsDir();
111
+ const filePath = path.join(sessionsDir, `${sessionId}.json`);
112
+ await fs.unlink(filePath);
113
+ }
114
+ catch (error) {
115
+ // File might not exist
116
+ }
117
+ }
118
+ /**
119
+ * List all active sessions
120
+ */
121
+ async listActiveSessions() {
122
+ return Array.from(this.sessions.values())
123
+ .filter(s => s.status === 'in_progress' || s.status === 'initializing');
124
+ }
125
+ /**
126
+ * Cleanup expired sessions (older than 7 days)
127
+ */
128
+ async cleanupExpiredSessions() {
129
+ const cutoff = new Date();
130
+ cutoff.setDate(cutoff.getDate() - 7);
131
+ let cleaned = 0;
132
+ for (const [sessionId, session] of this.sessions.entries()) {
133
+ if (new Date(session.updated_at) < cutoff) {
134
+ await this.deleteSession(sessionId);
135
+ cleaned++;
136
+ }
137
+ }
138
+ return cleaned;
139
+ }
140
+ /**
141
+ * Persist session to file
142
+ */
143
+ async persistSession(session) {
144
+ if (!this.workspaceRoot)
145
+ return;
146
+ try {
147
+ await this.ensureDirectories();
148
+ const sessionsDir = this.getSessionsDir();
149
+ const filePath = path.join(sessionsDir, `${session.id}.json`);
150
+ await fs.writeFile(filePath, JSON.stringify(session, null, 2), 'utf-8');
151
+ }
152
+ catch (error) {
153
+ console.error('Failed to persist workflow session:', error);
154
+ }
155
+ }
156
+ /**
157
+ * Load session from file
158
+ */
159
+ async loadSession(sessionId) {
160
+ if (!this.workspaceRoot)
161
+ return null;
162
+ try {
163
+ const sessionsDir = this.getSessionsDir();
164
+ const filePath = path.join(sessionsDir, `${sessionId}.json`);
165
+ const content = await fs.readFile(filePath, 'utf-8');
166
+ return JSON.parse(content);
167
+ }
168
+ catch (error) {
169
+ return null;
170
+ }
171
+ }
172
+ /**
173
+ * Get display name for workflow type
174
+ */
175
+ getWorkflowDisplayName(type) {
176
+ const names = {
177
+ 'code-review': 'Code Review',
178
+ 'proposal-review': 'Proposal Review',
179
+ 'performance-audit': 'Performance Audit',
180
+ 'security-audit': 'Security Audit',
181
+ 'onboarding': 'Developer Onboarding',
182
+ 'error-to-errorinfo-migration': 'Error to ErrorInfo Migration',
183
+ 'bc-version-upgrade': 'BC Version Upgrade'
184
+ };
185
+ return names[type] || type;
186
+ }
187
+ // ==========================================================================
188
+ // WORKFLOW OPERATIONS
189
+ // ==========================================================================
190
+ /**
191
+ * Start a new workflow session
192
+ */
193
+ async startWorkflow(workflowType, scope, scopePath, options, initialProcessing) {
194
+ const startTime = Date.now();
195
+ if (!this.workspaceRoot) {
196
+ throw new Error('Workspace root not set');
197
+ }
198
+ // Get workflow definition
199
+ const definition = getWorkflowDefinition(workflowType);
200
+ // Create session
201
+ const session = {
202
+ id: generateSessionId(workflowType),
203
+ workflow_type: workflowType,
204
+ status: 'initializing',
205
+ created_at: new Date().toISOString(),
206
+ updated_at: new Date().toISOString(),
207
+ file_inventory: [],
208
+ file_glob_pattern: definition.file_patterns[0] || '**/*.al',
209
+ phases: definition.phases.map(p => ({
210
+ id: p.id,
211
+ name: p.name,
212
+ description: p.description,
213
+ status: 'pending',
214
+ mode: p.mode,
215
+ required: p.required,
216
+ entry_conditions: p.entry_conditions,
217
+ available_actions: p.available_actions
218
+ })),
219
+ current_phase: definition.phases[0]?.id || 'inventory',
220
+ current_file_index: 0,
221
+ files_completed: 0,
222
+ files_total: 0,
223
+ findings: [],
224
+ proposed_changes: [],
225
+ options
226
+ };
227
+ // Set version upgrade info if applicable
228
+ if (workflowType === 'bc-version-upgrade' && options.source_version && options.target_version) {
229
+ session.version_upgrade = {
230
+ source_version: options.source_version,
231
+ target_version: options.target_version,
232
+ guides_total: 0,
233
+ guides_completed: 0
234
+ };
235
+ }
236
+ // Discover files
237
+ const basePath = scope === 'directory' && scopePath ? scopePath : this.workspaceRoot;
238
+ const files = await this.discoverFiles(basePath, definition, options);
239
+ session.file_inventory = files;
240
+ session.files_total = files.length;
241
+ // Mark inventory phase as complete
242
+ const inventoryPhase = session.phases.find(p => p.id === 'inventory');
243
+ if (inventoryPhase) {
244
+ inventoryPhase.status = 'completed';
245
+ }
246
+ // Run autonomous phases if requested
247
+ let analysisSummary;
248
+ if (initialProcessing.run_autonomous_phases && definition.pattern_discovery?.enabled) {
249
+ analysisSummary = await this.runPatternScan(session, definition, initialProcessing.timeout_ms);
250
+ // Mark scan phase as complete
251
+ const scanPhase = session.phases.find(p => p.id === 'pattern_scan' || p.id === 'scan');
252
+ if (scanPhase) {
253
+ scanPhase.status = 'completed';
254
+ }
255
+ }
256
+ // Move to next phase
257
+ const nextPhase = session.phases.find(p => p.status === 'pending');
258
+ if (nextPhase) {
259
+ session.current_phase = nextPhase.id;
260
+ nextPhase.status = 'in_progress';
261
+ }
262
+ session.status = 'in_progress';
263
+ // Save session
264
+ await this.createSession(session);
265
+ return {
266
+ session,
267
+ analysisSummary,
268
+ duration_ms: Date.now() - startTime
269
+ };
270
+ }
271
+ /**
272
+ * Discover files matching the workflow pattern
273
+ */
274
+ async discoverFiles(basePath, definition, options) {
275
+ const includePatterns = options.include_patterns || definition.file_patterns;
276
+ const excludePatterns = options.exclude_patterns || definition.file_exclusions || [];
277
+ const files = [];
278
+ for (const pattern of includePatterns) {
279
+ const matches = await fg(pattern, {
280
+ cwd: basePath,
281
+ ignore: excludePatterns,
282
+ absolute: true,
283
+ onlyFiles: true
284
+ });
285
+ for (const filePath of matches) {
286
+ // Skip if already in inventory
287
+ if (files.some(f => f.path === filePath))
288
+ continue;
289
+ // Apply max_files limit
290
+ if (options.max_files && files.length >= options.max_files)
291
+ break;
292
+ const stat = await fs.stat(filePath);
293
+ const objectType = this.detectAlObjectType(filePath);
294
+ files.push({
295
+ path: filePath,
296
+ status: 'pending',
297
+ size: stat.size,
298
+ object_type: objectType,
299
+ checklist: this.createInitialChecklist(definition),
300
+ findings: [],
301
+ proposed_changes: []
302
+ });
303
+ }
304
+ }
305
+ // Sort by priority patterns if specified
306
+ if (options.priority_patterns && options.priority_patterns.length > 0) {
307
+ files.sort((a, b) => {
308
+ const aPriority = options.priority_patterns.findIndex(p => a.path.toLowerCase().includes(p.toLowerCase()));
309
+ const bPriority = options.priority_patterns.findIndex(p => b.path.toLowerCase().includes(p.toLowerCase()));
310
+ // -1 means no match, put those at the end
311
+ const aScore = aPriority === -1 ? 999 : aPriority;
312
+ const bScore = bPriority === -1 ? 999 : bPriority;
313
+ return aScore - bScore;
314
+ });
315
+ }
316
+ return files;
317
+ }
318
+ /**
319
+ * Detect AL object type from filename
320
+ */
321
+ detectAlObjectType(filePath) {
322
+ const filename = path.basename(filePath).toLowerCase();
323
+ if (filename.includes('.codeunit.'))
324
+ return 'Codeunit';
325
+ if (filename.includes('.page.'))
326
+ return 'Page';
327
+ if (filename.includes('.table.'))
328
+ return 'Table';
329
+ if (filename.includes('.report.'))
330
+ return 'Report';
331
+ if (filename.includes('.query.'))
332
+ return 'Query';
333
+ if (filename.includes('.xmlport.'))
334
+ return 'XMLport';
335
+ if (filename.includes('.enum.'))
336
+ return 'Enum';
337
+ if (filename.includes('.interface.'))
338
+ return 'Interface';
339
+ if (filename.includes('.controladdin.'))
340
+ return 'ControlAddIn';
341
+ if (filename.includes('.permissionset.'))
342
+ return 'PermissionSet';
343
+ if (filename.includes('.profile.'))
344
+ return 'Profile';
345
+ if (filename.includes('.pageextension.'))
346
+ return 'PageExtension';
347
+ if (filename.includes('.tableextension.'))
348
+ return 'TableExtension';
349
+ return undefined;
350
+ }
351
+ /**
352
+ * Create initial checklist from workflow definition
353
+ */
354
+ createInitialChecklist(definition) {
355
+ return definition.per_file_checklist.map(template => ({
356
+ id: generateChecklistItemId(template.id),
357
+ type: template.type,
358
+ description: template.description,
359
+ status: 'pending'
360
+ }));
361
+ }
362
+ /**
363
+ * Run pattern scan on all files (autonomous phase)
364
+ */
365
+ async runPatternScan(session, definition, timeoutMs) {
366
+ const patterns = definition.pattern_discovery?.patterns || [];
367
+ const byType = {};
368
+ let filesWithMatches = 0;
369
+ let totalInstances = 0;
370
+ for (const file of session.file_inventory) {
371
+ try {
372
+ const content = await fs.readFile(file.path, 'utf-8');
373
+ const fileInstances = [];
374
+ for (const pattern of patterns) {
375
+ const matches = this.findPatternMatches(content, pattern);
376
+ for (const match of matches) {
377
+ const instanceType = match.instance_type || 'other';
378
+ const rule = pattern.instance_classifier?.rules.find(r => r.name === instanceType);
379
+ const autoFixable = rule?.auto_fixable ?? false;
380
+ // Track by type
381
+ if (!byType[instanceType]) {
382
+ byType[instanceType] = {
383
+ count: 0,
384
+ auto_fixable: autoFixable,
385
+ needs: autoFixable ? undefined : 'review'
386
+ };
387
+ }
388
+ byType[instanceType].count++;
389
+ totalInstances++;
390
+ // Create checklist item for this instance
391
+ fileInstances.push({
392
+ id: generateChecklistItemId(`instance-${pattern.id}`),
393
+ type: 'pattern_instance',
394
+ description: `Line ${match.line_number}: ${match.match_text.substring(0, 50)}...`,
395
+ status: 'pending',
396
+ pattern_match: match
397
+ });
398
+ }
399
+ }
400
+ if (fileInstances.length > 0) {
401
+ filesWithMatches++;
402
+ // Add instance items to file's checklist
403
+ file.checklist.push(...fileInstances);
404
+ }
405
+ }
406
+ catch (error) {
407
+ console.error(`Error scanning file ${file.path}:`, error);
408
+ }
409
+ }
410
+ // Update session with instance counts
411
+ session.instances_total = totalInstances;
412
+ session.instances_completed = 0;
413
+ session.instances_auto_fixed = 0;
414
+ session.instances_manual_review = Object.entries(byType)
415
+ .filter(([_, info]) => !info.auto_fixable)
416
+ .reduce((sum, [_, info]) => sum + info.count, 0);
417
+ // Calculate batch options
418
+ const autoFixableCount = Object.entries(byType)
419
+ .filter(([_, info]) => info.auto_fixable)
420
+ .reduce((sum, [_, info]) => sum + info.count, 0);
421
+ const reviewCount = session.instances_manual_review || 0;
422
+ return {
423
+ files_scanned: session.file_inventory.length,
424
+ files_with_matches: filesWithMatches,
425
+ total_instances: totalInstances,
426
+ by_type: byType,
427
+ batch_options: [
428
+ {
429
+ action: 'apply_all_auto',
430
+ description: 'Apply auto-fixes to simple patterns',
431
+ instances: autoFixableCount,
432
+ files: filesWithMatches
433
+ },
434
+ {
435
+ action: 'review_complex',
436
+ description: 'Review patterns requiring judgment',
437
+ instances: reviewCount,
438
+ files: session.file_inventory.filter(f => f.checklist.some(c => c.pattern_match && !byType[c.pattern_match.instance_type || 'other']?.auto_fixable)).length
439
+ },
440
+ {
441
+ action: 'flag_manual',
442
+ description: 'Flag complex patterns for manual conversion',
443
+ instances: reviewCount,
444
+ files: session.file_inventory.filter(f => f.checklist.some(c => c.pattern_match?.requires_manual_review)).length
445
+ }
446
+ ]
447
+ };
448
+ }
449
+ /**
450
+ * Find pattern matches in file content
451
+ */
452
+ findPatternMatches(content, pattern) {
453
+ const matches = [];
454
+ const lines = content.split('\n');
455
+ try {
456
+ const regex = new RegExp(pattern.regex, pattern.regex_flags || 'g');
457
+ const excludeRegex = pattern.exclude_regex ? new RegExp(pattern.exclude_regex, 'g') : null;
458
+ let match;
459
+ while ((match = regex.exec(content)) !== null) {
460
+ // Check exclusion pattern
461
+ if (excludeRegex && excludeRegex.test(match[0])) {
462
+ continue;
463
+ }
464
+ // Calculate line number
465
+ const lineNumber = content.substring(0, match.index).split('\n').length;
466
+ // Get context lines
467
+ const contextStart = Math.max(0, lineNumber - (pattern.context_lines || 2) - 1);
468
+ const contextEnd = Math.min(lines.length, lineNumber + (pattern.context_lines || 2));
469
+ const context = lines.slice(contextStart, contextEnd).join('\n');
470
+ // Classify instance type
471
+ let instanceType;
472
+ let autoFixable = false;
473
+ let suggestedReplacement;
474
+ if (pattern.instance_classifier) {
475
+ for (const rule of pattern.instance_classifier.rules) {
476
+ const ruleRegex = new RegExp(rule.pattern, 'i');
477
+ if (ruleRegex.test(match[0])) {
478
+ instanceType = rule.name;
479
+ autoFixable = rule.auto_fixable;
480
+ break;
481
+ }
482
+ }
483
+ }
484
+ // Get suggested replacement if auto-fixable
485
+ if (autoFixable && pattern.transformations) {
486
+ const transformation = pattern.transformations.find(t => t.instance_type === instanceType);
487
+ if (transformation) {
488
+ // Simple template substitution (could be enhanced)
489
+ suggestedReplacement = transformation.template;
490
+ }
491
+ }
492
+ matches.push({
493
+ pattern_id: pattern.id,
494
+ line_number: lineNumber,
495
+ match_text: match[0],
496
+ match_context: context,
497
+ instance_type: instanceType,
498
+ suggested_replacement: suggestedReplacement,
499
+ requires_manual_review: !autoFixable
500
+ });
501
+ }
502
+ }
503
+ catch (error) {
504
+ console.error(`Error matching pattern ${pattern.id}:`, error);
505
+ }
506
+ return matches;
507
+ }
508
+ /**
509
+ * Get next action for the workflow
510
+ */
511
+ getNextAction(session) {
512
+ const currentPhase = session.phases.find(p => p.id === session.current_phase);
513
+ // Check if workflow is complete
514
+ if (session.files_completed >= session.files_total && !this.hasRemainingChecklist(session)) {
515
+ return {
516
+ type: 'complete_workflow',
517
+ instruction: 'All files have been processed. Call workflow_complete to generate the final report.',
518
+ tool_call: {
519
+ tool: 'workflow_complete',
520
+ args: {
521
+ session_id: session.id,
522
+ generate_report: true
523
+ }
524
+ }
525
+ };
526
+ }
527
+ // Get current file
528
+ const currentFile = session.file_inventory[session.current_file_index];
529
+ if (!currentFile) {
530
+ return {
531
+ type: 'complete_workflow',
532
+ instruction: 'No more files to process. Call workflow_complete to finish.',
533
+ tool_call: {
534
+ tool: 'workflow_complete',
535
+ args: {
536
+ session_id: session.id,
537
+ generate_report: true
538
+ }
539
+ }
540
+ };
541
+ }
542
+ // Find next pending checklist item
543
+ const pendingItem = currentFile.checklist.find(c => c.status === 'pending');
544
+ if (!pendingItem) {
545
+ // Move to next file
546
+ return this.getNextFileAction(session);
547
+ }
548
+ // Generate action based on checklist item type
549
+ switch (pendingItem.type) {
550
+ case 'analysis':
551
+ return {
552
+ type: 'analyze_file',
553
+ action: 'analyze_file',
554
+ file: currentFile.path,
555
+ instruction: `REQUIRED: Call analyze_al_code with the content of ${path.basename(currentFile.path)}. The result will expand this file's checklist with relevant topics that MUST be applied.`,
556
+ tool_call: {
557
+ tool: 'analyze_al_code',
558
+ args: {
559
+ code: '{{file_content}}',
560
+ analysis_type: 'comprehensive',
561
+ bc_version: session.options.bc_version || 'BC26',
562
+ suggest_workflows: true
563
+ }
564
+ }
565
+ };
566
+ case 'topic_application':
567
+ return {
568
+ type: 'apply_topic',
569
+ action: 'apply_topic',
570
+ file: currentFile.path,
571
+ topic_id: pendingItem.topic_id,
572
+ instruction: `REQUIRED: Call retrieve_bc_knowledge to get the full content of topic '${pendingItem.topic_id}'. Apply the guidance to ${path.basename(currentFile.path)}. Document any findings or proposed changes.`,
573
+ tool_call: {
574
+ tool: 'retrieve_bc_knowledge',
575
+ args: {
576
+ topic_id: pendingItem.topic_id,
577
+ include_related: false
578
+ }
579
+ }
580
+ };
581
+ case 'pattern_instance':
582
+ return {
583
+ type: 'convert_instance',
584
+ action: 'convert_instance',
585
+ file: currentFile.path,
586
+ instance: pendingItem.pattern_match,
587
+ instruction: `Review and convert the pattern instance at line ${pendingItem.pattern_match?.line_number}. ${pendingItem.pattern_match?.requires_manual_review ? 'This requires manual review.' : 'This can be auto-fixed.'}`,
588
+ tool_call: pendingItem.pattern_match?.requires_manual_review ? undefined : {
589
+ tool: 'workflow_batch',
590
+ args: {
591
+ session_id: session.id,
592
+ operation: 'apply_fixes',
593
+ filter: { instance_types: [pendingItem.pattern_match?.instance_type] },
594
+ dry_run: true
595
+ }
596
+ }
597
+ };
598
+ case 'validation':
599
+ return {
600
+ type: 'complete_workflow',
601
+ action: 'mark_complete',
602
+ file: currentFile.path,
603
+ instruction: `Mark the review of ${path.basename(currentFile.path)} as complete. Call workflow_progress to report completion and get the next file.`
604
+ };
605
+ default:
606
+ return {
607
+ type: 'complete_workflow',
608
+ action: 'unknown',
609
+ instruction: `Unknown checklist item type: ${pendingItem.type}. Call workflow_progress to skip and continue.`
610
+ };
611
+ }
612
+ }
613
+ /**
614
+ * Get action for moving to next file
615
+ */
616
+ getNextFileAction(session) {
617
+ // Find next pending file
618
+ const nextIndex = session.file_inventory.findIndex((f, i) => i > session.current_file_index && f.status === 'pending');
619
+ if (nextIndex === -1) {
620
+ return {
621
+ type: 'complete_workflow',
622
+ instruction: 'All files have been processed. Call workflow_complete to generate the final report.',
623
+ tool_call: {
624
+ tool: 'workflow_complete',
625
+ args: {
626
+ session_id: session.id,
627
+ generate_report: true
628
+ }
629
+ }
630
+ };
631
+ }
632
+ const nextFile = session.file_inventory[nextIndex];
633
+ return {
634
+ type: 'analyze_file',
635
+ action: 'analyze_file',
636
+ file: nextFile.path,
637
+ instruction: `Move to next file: ${path.basename(nextFile.path)}. Call workflow_progress to start processing.`
638
+ };
639
+ }
640
+ /**
641
+ * Check if there are remaining checklist items
642
+ */
643
+ hasRemainingChecklist(session) {
644
+ return session.file_inventory.some(f => f.checklist.some(c => c.status === 'pending' || c.status === 'in_progress'));
645
+ }
646
+ /**
647
+ * Expand a file's checklist with new topic items
648
+ */
649
+ expandChecklist(session, filePath, topics) {
650
+ const file = session.file_inventory.find(f => f.path === filePath);
651
+ if (!file)
652
+ return;
653
+ // Get workflow definition to check minimum relevance score
654
+ const definition = getWorkflowDefinition(session.workflow_type);
655
+ const minScore = definition.topic_discovery.min_relevance_score;
656
+ // Find the validation item (should be last)
657
+ const validationIndex = file.checklist.findIndex(c => c.type === 'validation');
658
+ // Add topic items before validation
659
+ const newItems = topics
660
+ .filter(t => t.relevance_score >= minScore)
661
+ .map(t => ({
662
+ id: generateChecklistItemId(`topic-${t.topic_id.replace(/\//g, '-')}`),
663
+ type: 'topic_application',
664
+ description: `Apply topic: ${t.description}`,
665
+ status: 'pending',
666
+ topic_id: t.topic_id,
667
+ topic_relevance_score: t.relevance_score
668
+ }));
669
+ if (validationIndex >= 0) {
670
+ file.checklist.splice(validationIndex, 0, ...newItems);
671
+ }
672
+ else {
673
+ file.checklist.push(...newItems);
674
+ }
675
+ }
676
+ /**
677
+ * Report progress on an action and get next action
678
+ */
679
+ async reportProgress(session, completedAction, findings, proposedChanges, expandChecklist) {
680
+ // Find the file
681
+ const file = completedAction.file
682
+ ? session.file_inventory.find(f => f.path === completedAction.file)
683
+ : session.file_inventory[session.current_file_index];
684
+ if (file) {
685
+ // Update checklist item status
686
+ if (completedAction.checklist_item_id) {
687
+ const item = file.checklist.find(c => c.id === completedAction.checklist_item_id);
688
+ if (item) {
689
+ item.status = completedAction.status;
690
+ if (completedAction.error) {
691
+ item.error = completedAction.error;
692
+ }
693
+ }
694
+ }
695
+ else {
696
+ // Find the first in-progress or pending item and mark it
697
+ const item = file.checklist.find(c => c.status === 'in_progress' || c.status === 'pending');
698
+ if (item) {
699
+ item.status = completedAction.status;
700
+ if (completedAction.error) {
701
+ item.error = completedAction.error;
702
+ }
703
+ }
704
+ }
705
+ // Add findings
706
+ if (findings && findings.length > 0) {
707
+ file.findings.push(...findings);
708
+ session.findings.push(...findings);
709
+ }
710
+ // Add proposed changes
711
+ if (proposedChanges && proposedChanges.length > 0) {
712
+ file.proposed_changes.push(...proposedChanges);
713
+ session.proposed_changes.push(...proposedChanges);
714
+ }
715
+ // Expand checklist with new topics
716
+ if (expandChecklist && expandChecklist.length > 0) {
717
+ this.expandChecklist(session, file.path, expandChecklist);
718
+ }
719
+ // Check if file is complete
720
+ const allComplete = file.checklist.every(c => c.status === 'completed' || c.status === 'skipped' || c.status === 'failed');
721
+ if (allComplete) {
722
+ file.status = 'completed';
723
+ session.files_completed++;
724
+ // Move to next file
725
+ const nextIndex = session.file_inventory.findIndex((f, i) => i > session.current_file_index && f.status === 'pending');
726
+ if (nextIndex >= 0) {
727
+ session.current_file_index = nextIndex;
728
+ session.file_inventory[nextIndex].status = 'in_progress';
729
+ }
730
+ }
731
+ }
732
+ // Update session
733
+ await this.updateSession(session);
734
+ // Return next action
735
+ return this.getNextAction(session);
736
+ }
737
+ /**
738
+ * Generate completion report
739
+ */
740
+ async generateReport(session, format) {
741
+ const durationMinutes = Math.round((new Date(session.updated_at).getTime() - new Date(session.created_at).getTime()) / 60000);
742
+ const findingsBySeverity = {
743
+ critical: 0,
744
+ error: 0,
745
+ warning: 0,
746
+ info: 0
747
+ };
748
+ session.findings.forEach(f => {
749
+ findingsBySeverity[f.severity] = (findingsBySeverity[f.severity] || 0) + 1;
750
+ });
751
+ if (format === 'json') {
752
+ return JSON.stringify({
753
+ session_id: session.id,
754
+ workflow_type: session.workflow_type,
755
+ completed_at: session.updated_at,
756
+ duration_minutes: durationMinutes,
757
+ files_reviewed: session.files_completed,
758
+ total_findings: session.findings.length,
759
+ findings_by_severity: findingsBySeverity,
760
+ proposed_changes: session.proposed_changes.length,
761
+ findings: session.findings,
762
+ proposed_changes_detail: session.proposed_changes
763
+ }, null, 2);
764
+ }
765
+ // Markdown report
766
+ let report = `# ${this.getWorkflowDisplayName(session.workflow_type)} Report\n\n`;
767
+ report += `## Summary\n\n`;
768
+ report += `- **Session ID**: ${session.id}\n`;
769
+ report += `- **Duration**: ${durationMinutes} minutes\n`;
770
+ report += `- **Files Reviewed**: ${session.files_completed}/${session.files_total}\n`;
771
+ report += `- **Total Findings**: ${session.findings.length}\n`;
772
+ report += ` - Critical: ${findingsBySeverity.critical}\n`;
773
+ report += ` - Error: ${findingsBySeverity.error}\n`;
774
+ report += ` - Warning: ${findingsBySeverity.warning}\n`;
775
+ report += ` - Info: ${findingsBySeverity.info}\n`;
776
+ report += `- **Proposed Changes**: ${session.proposed_changes.length}\n\n`;
777
+ if (session.instances_total) {
778
+ report += `### Instance Processing\n\n`;
779
+ report += `- Total Instances: ${session.instances_total}\n`;
780
+ report += `- Auto-Fixed: ${session.instances_auto_fixed || 0}\n`;
781
+ report += `- Manual Review: ${session.instances_manual_review || 0}\n\n`;
782
+ }
783
+ // Top issues
784
+ const criticalIssues = session.findings.filter(f => f.severity === 'critical' || f.severity === 'error');
785
+ if (criticalIssues.length > 0) {
786
+ report += `## Critical/Error Issues\n\n`;
787
+ for (const issue of criticalIssues.slice(0, 10)) {
788
+ report += `### ${path.basename(issue.file)}${issue.line ? `:${issue.line}` : ''}\n\n`;
789
+ report += `**${issue.severity.toUpperCase()}**: ${issue.description}\n\n`;
790
+ if (issue.suggestion) {
791
+ report += `**Suggestion**: ${issue.suggestion}\n\n`;
792
+ }
793
+ }
794
+ }
795
+ // Recommendations
796
+ report += `## Recommendations\n\n`;
797
+ if (findingsBySeverity.critical > 0) {
798
+ report += `1. Address ${findingsBySeverity.critical} critical issues before deployment\n`;
799
+ }
800
+ if (findingsBySeverity.error > 0) {
801
+ report += `2. Review ${findingsBySeverity.error} error-level findings for data integrity risks\n`;
802
+ }
803
+ if (session.proposed_changes.length > 0) {
804
+ report += `3. Review ${session.proposed_changes.length} proposed code changes\n`;
805
+ }
806
+ // Save report
807
+ try {
808
+ const reportsDir = this.getReportsDir();
809
+ const reportPath = path.join(reportsDir, `${session.id}-report.md`);
810
+ await fs.writeFile(reportPath, report, 'utf-8');
811
+ }
812
+ catch (error) {
813
+ console.error('Failed to save report:', error);
814
+ }
815
+ return report;
816
+ }
817
+ }
818
+ // Export singleton instance
819
+ export const workflowSessionManager = new WorkflowSessionManager();
820
+ //# sourceMappingURL=workflow-session-manager.js.map