d365fo-mcp 1.0.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 (1055) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +205 -0
  3. package/dist/bridge/bridgeAdapter.d.ts +319 -0
  4. package/dist/bridge/bridgeAdapter.d.ts.map +1 -0
  5. package/dist/bridge/bridgeAdapter.js +2003 -0
  6. package/dist/bridge/bridgeAdapter.js.map +1 -0
  7. package/dist/bridge/bridgeClient.d.ts +255 -0
  8. package/dist/bridge/bridgeClient.d.ts.map +1 -0
  9. package/dist/bridge/bridgeClient.js +741 -0
  10. package/dist/bridge/bridgeClient.js.map +1 -0
  11. package/dist/bridge/bridgeTypes.d.ts +561 -0
  12. package/dist/bridge/bridgeTypes.d.ts.map +1 -0
  13. package/dist/bridge/bridgeTypes.js +6 -0
  14. package/dist/bridge/bridgeTypes.js.map +1 -0
  15. package/dist/bridge/debouncedRefresh.d.ts +16 -0
  16. package/dist/bridge/debouncedRefresh.d.ts.map +1 -0
  17. package/dist/bridge/debouncedRefresh.js +77 -0
  18. package/dist/bridge/debouncedRefresh.js.map +1 -0
  19. package/dist/bridge/index.d.ts +21 -0
  20. package/dist/bridge/index.d.ts.map +1 -0
  21. package/dist/bridge/index.js +20 -0
  22. package/dist/bridge/index.js.map +1 -0
  23. package/dist/cli/commands/config.d.ts +8 -0
  24. package/dist/cli/commands/config.d.ts.map +1 -0
  25. package/dist/cli/commands/config.js +77 -0
  26. package/dist/cli/commands/config.js.map +1 -0
  27. package/dist/cli/commands/doctor.d.ts +2 -0
  28. package/dist/cli/commands/doctor.d.ts.map +1 -0
  29. package/dist/cli/commands/doctor.js +177 -0
  30. package/dist/cli/commands/doctor.js.map +1 -0
  31. package/dist/cli/commands/indexCmd.d.ts +8 -0
  32. package/dist/cli/commands/indexCmd.d.ts.map +1 -0
  33. package/dist/cli/commands/indexCmd.js +78 -0
  34. package/dist/cli/commands/indexCmd.js.map +1 -0
  35. package/dist/cli/commands/instance.d.ts +4 -0
  36. package/dist/cli/commands/instance.d.ts.map +1 -0
  37. package/dist/cli/commands/instance.js +183 -0
  38. package/dist/cli/commands/instance.js.map +1 -0
  39. package/dist/cli/commands/setup.d.ts +4 -0
  40. package/dist/cli/commands/setup.d.ts.map +1 -0
  41. package/dist/cli/commands/setup.js +246 -0
  42. package/dist/cli/commands/setup.js.map +1 -0
  43. package/dist/cli/commands/start.d.ts +2 -0
  44. package/dist/cli/commands/start.d.ts.map +1 -0
  45. package/dist/cli/commands/start.js +49 -0
  46. package/dist/cli/commands/start.js.map +1 -0
  47. package/dist/cli/commands/update.d.ts +4 -0
  48. package/dist/cli/commands/update.d.ts.map +1 -0
  49. package/dist/cli/commands/update.js +55 -0
  50. package/dist/cli/commands/update.js.map +1 -0
  51. package/dist/cli/context.d.ts +26 -0
  52. package/dist/cli/context.d.ts.map +1 -0
  53. package/dist/cli/context.js +38 -0
  54. package/dist/cli/context.js.map +1 -0
  55. package/dist/cli/envFile.d.ts +23 -0
  56. package/dist/cli/envFile.d.ts.map +1 -0
  57. package/dist/cli/envFile.js +79 -0
  58. package/dist/cli/envFile.js.map +1 -0
  59. package/dist/cli/exec.d.ts +13 -0
  60. package/dist/cli/exec.d.ts.map +1 -0
  61. package/dist/cli/exec.js +47 -0
  62. package/dist/cli/exec.js.map +1 -0
  63. package/dist/cli/index.d.ts +3 -0
  64. package/dist/cli/index.d.ts.map +1 -0
  65. package/dist/cli/index.js +122 -0
  66. package/dist/cli/index.js.map +1 -0
  67. package/dist/cli/instances.d.ts +19 -0
  68. package/dist/cli/instances.d.ts.map +1 -0
  69. package/dist/cli/instances.js +60 -0
  70. package/dist/cli/instances.js.map +1 -0
  71. package/dist/cli/mcpJson.d.ts +15 -0
  72. package/dist/cli/mcpJson.d.ts.map +1 -0
  73. package/dist/cli/mcpJson.js +44 -0
  74. package/dist/cli/mcpJson.js.map +1 -0
  75. package/dist/cli/settingsPrompt.d.ts +20 -0
  76. package/dist/cli/settingsPrompt.d.ts.map +1 -0
  77. package/dist/cli/settingsPrompt.js +150 -0
  78. package/dist/cli/settingsPrompt.js.map +1 -0
  79. package/dist/cli/settingsStore.d.ts +47 -0
  80. package/dist/cli/settingsStore.d.ts.map +1 -0
  81. package/dist/cli/settingsStore.js +144 -0
  82. package/dist/cli/settingsStore.js.map +1 -0
  83. package/dist/cli/target.d.ts +23 -0
  84. package/dist/cli/target.d.ts.map +1 -0
  85. package/dist/cli/target.js +62 -0
  86. package/dist/cli/target.js.map +1 -0
  87. package/dist/cli/ui.d.ts +26 -0
  88. package/dist/cli/ui.d.ts.map +1 -0
  89. package/dist/cli/ui.js +48 -0
  90. package/dist/cli/ui.js.map +1 -0
  91. package/dist/cli/xppConfig.d.ts +35 -0
  92. package/dist/cli/xppConfig.d.ts.map +1 -0
  93. package/dist/cli/xppConfig.js +97 -0
  94. package/dist/cli/xppConfig.js.map +1 -0
  95. package/dist/config/configFile.d.ts +50 -0
  96. package/dist/config/configFile.d.ts.map +1 -0
  97. package/dist/config/configFile.js +152 -0
  98. package/dist/config/configFile.js.map +1 -0
  99. package/dist/config/settings.d.ts +58 -0
  100. package/dist/config/settings.d.ts.map +1 -0
  101. package/dist/config/settings.js +641 -0
  102. package/dist/config/settings.js.map +1 -0
  103. package/dist/database/download.d.ts +27 -0
  104. package/dist/database/download.d.ts.map +1 -0
  105. package/dist/database/download.js +241 -0
  106. package/dist/database/download.js.map +1 -0
  107. package/dist/eval/audit/knowledgeAudit.d.ts +66 -0
  108. package/dist/eval/audit/knowledgeAudit.d.ts.map +1 -0
  109. package/dist/eval/audit/knowledgeAudit.js +117 -0
  110. package/dist/eval/audit/knowledgeAudit.js.map +1 -0
  111. package/dist/eval/audit/knowledgeAuditCli.d.ts +17 -0
  112. package/dist/eval/audit/knowledgeAuditCli.d.ts.map +1 -0
  113. package/dist/eval/audit/knowledgeAuditCli.js +83 -0
  114. package/dist/eval/audit/knowledgeAuditCli.js.map +1 -0
  115. package/dist/eval/audit/knowledgeRefs.d.ts +37 -0
  116. package/dist/eval/audit/knowledgeRefs.d.ts.map +1 -0
  117. package/dist/eval/audit/knowledgeRefs.js +150 -0
  118. package/dist/eval/audit/knowledgeRefs.js.map +1 -0
  119. package/dist/eval/audit/symbolLookup.d.ts +23 -0
  120. package/dist/eval/audit/symbolLookup.d.ts.map +1 -0
  121. package/dist/eval/audit/symbolLookup.js +80 -0
  122. package/dist/eval/audit/symbolLookup.js.map +1 -0
  123. package/dist/eval/coverage/coverage.d.ts +65 -0
  124. package/dist/eval/coverage/coverage.d.ts.map +1 -0
  125. package/dist/eval/coverage/coverage.js +136 -0
  126. package/dist/eval/coverage/coverage.js.map +1 -0
  127. package/dist/eval/coverage/coverageCli.d.ts +13 -0
  128. package/dist/eval/coverage/coverageCli.d.ts.map +1 -0
  129. package/dist/eval/coverage/coverageCli.js +106 -0
  130. package/dist/eval/coverage/coverageCli.js.map +1 -0
  131. package/dist/eval/coverage/sources.d.ts +17 -0
  132. package/dist/eval/coverage/sources.d.ts.map +1 -0
  133. package/dist/eval/coverage/sources.js +40 -0
  134. package/dist/eval/coverage/sources.js.map +1 -0
  135. package/dist/eval/coverage/taxonomy.d.ts +59 -0
  136. package/dist/eval/coverage/taxonomy.d.ts.map +1 -0
  137. package/dist/eval/coverage/taxonomy.js +400 -0
  138. package/dist/eval/coverage/taxonomy.js.map +1 -0
  139. package/dist/eval/improver/caseMining.d.ts +55 -0
  140. package/dist/eval/improver/caseMining.d.ts.map +1 -0
  141. package/dist/eval/improver/caseMining.js +64 -0
  142. package/dist/eval/improver/caseMining.js.map +1 -0
  143. package/dist/eval/improver/caseMiningCli.d.ts +10 -0
  144. package/dist/eval/improver/caseMiningCli.d.ts.map +1 -0
  145. package/dist/eval/improver/caseMiningCli.js +50 -0
  146. package/dist/eval/improver/caseMiningCli.js.map +1 -0
  147. package/dist/eval/improver/cli.d.ts +11 -0
  148. package/dist/eval/improver/cli.d.ts.map +1 -0
  149. package/dist/eval/improver/cli.js +73 -0
  150. package/dist/eval/improver/cli.js.map +1 -0
  151. package/dist/eval/improver/cluster.d.ts +47 -0
  152. package/dist/eval/improver/cluster.d.ts.map +1 -0
  153. package/dist/eval/improver/cluster.js +0 -0
  154. package/dist/eval/improver/cluster.js.map +1 -0
  155. package/dist/eval/improver/corpusIO.d.ts +26 -0
  156. package/dist/eval/improver/corpusIO.d.ts.map +1 -0
  157. package/dist/eval/improver/corpusIO.js +50 -0
  158. package/dist/eval/improver/corpusIO.js.map +1 -0
  159. package/dist/eval/improver/fixBrief.d.ts +34 -0
  160. package/dist/eval/improver/fixBrief.d.ts.map +1 -0
  161. package/dist/eval/improver/fixBrief.js +69 -0
  162. package/dist/eval/improver/fixBrief.js.map +1 -0
  163. package/dist/eval/improver/fixBriefCli.d.ts +11 -0
  164. package/dist/eval/improver/fixBriefCli.d.ts.map +1 -0
  165. package/dist/eval/improver/fixBriefCli.js +46 -0
  166. package/dist/eval/improver/fixBriefCli.js.map +1 -0
  167. package/dist/eval/improver/flakeDetection.d.ts +50 -0
  168. package/dist/eval/improver/flakeDetection.d.ts.map +1 -0
  169. package/dist/eval/improver/flakeDetection.js +0 -0
  170. package/dist/eval/improver/flakeDetection.js.map +1 -0
  171. package/dist/eval/improver/flakeDetectionCli.d.ts +8 -0
  172. package/dist/eval/improver/flakeDetectionCli.d.ts.map +1 -0
  173. package/dist/eval/improver/flakeDetectionCli.js +27 -0
  174. package/dist/eval/improver/flakeDetectionCli.js.map +1 -0
  175. package/dist/eval/improver/heldout.d.ts +44 -0
  176. package/dist/eval/improver/heldout.d.ts.map +1 -0
  177. package/dist/eval/improver/heldout.js +52 -0
  178. package/dist/eval/improver/heldout.js.map +1 -0
  179. package/dist/eval/improver/knowledgeFeedback.d.ts +56 -0
  180. package/dist/eval/improver/knowledgeFeedback.d.ts.map +1 -0
  181. package/dist/eval/improver/knowledgeFeedback.js +88 -0
  182. package/dist/eval/improver/knowledgeFeedback.js.map +1 -0
  183. package/dist/eval/improver/knowledgeFeedbackCli.d.ts +8 -0
  184. package/dist/eval/improver/knowledgeFeedbackCli.d.ts.map +1 -0
  185. package/dist/eval/improver/knowledgeFeedbackCli.js +28 -0
  186. package/dist/eval/improver/knowledgeFeedbackCli.js.map +1 -0
  187. package/dist/eval/improver/report.d.ts +36 -0
  188. package/dist/eval/improver/report.d.ts.map +1 -0
  189. package/dist/eval/improver/report.js +61 -0
  190. package/dist/eval/improver/report.js.map +1 -0
  191. package/dist/eval/improver/reportCli.d.ts +7 -0
  192. package/dist/eval/improver/reportCli.d.ts.map +1 -0
  193. package/dist/eval/improver/reportCli.js +27 -0
  194. package/dist/eval/improver/reportCli.js.map +1 -0
  195. package/dist/eval/oracle/actualArtifactResolution.d.ts +49 -0
  196. package/dist/eval/oracle/actualArtifactResolution.d.ts.map +1 -0
  197. package/dist/eval/oracle/actualArtifactResolution.js +73 -0
  198. package/dist/eval/oracle/actualArtifactResolution.js.map +1 -0
  199. package/dist/eval/oracle/cli.d.ts +30 -0
  200. package/dist/eval/oracle/cli.d.ts.map +1 -0
  201. package/dist/eval/oracle/cli.js +179 -0
  202. package/dist/eval/oracle/cli.js.map +1 -0
  203. package/dist/eval/oracle/diff.d.ts +26 -0
  204. package/dist/eval/oracle/diff.d.ts.map +1 -0
  205. package/dist/eval/oracle/diff.js +51 -0
  206. package/dist/eval/oracle/diff.js.map +1 -0
  207. package/dist/eval/oracle/index.d.ts +81 -0
  208. package/dist/eval/oracle/index.d.ts.map +1 -0
  209. package/dist/eval/oracle/index.js +55 -0
  210. package/dist/eval/oracle/index.js.map +1 -0
  211. package/dist/eval/oracle/normalize.d.ts +85 -0
  212. package/dist/eval/oracle/normalize.d.ts.map +1 -0
  213. package/dist/eval/oracle/normalize.js +321 -0
  214. package/dist/eval/oracle/normalize.js.map +1 -0
  215. package/dist/eval/oracle/score.d.ts +26 -0
  216. package/dist/eval/oracle/score.d.ts.map +1 -0
  217. package/dist/eval/oracle/score.js +15 -0
  218. package/dist/eval/oracle/score.js.map +1 -0
  219. package/dist/eval/oracle/systest.d.ts +30 -0
  220. package/dist/eval/oracle/systest.d.ts.map +1 -0
  221. package/dist/eval/oracle/systest.js +98 -0
  222. package/dist/eval/oracle/systest.js.map +1 -0
  223. package/dist/index.d.ts +6 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +753 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.d.ts +10 -0
  228. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.d.ts.map +1 -0
  229. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.js +38 -0
  230. package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.js.map +1 -0
  231. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.d.ts +21 -0
  232. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.d.ts.map +1 -0
  233. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.js +168 -0
  234. package/dist/knowledge/formPatterns/catalog/subPatterns/fields.js.map +1 -0
  235. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.d.ts +9 -0
  236. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.d.ts.map +1 -0
  237. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.js +47 -0
  238. package/dist/knowledge/formPatterns/catalog/subPatterns/panels.js.map +1 -0
  239. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.d.ts +16 -0
  240. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.d.ts.map +1 -0
  241. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.js +124 -0
  242. package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.js.map +1 -0
  243. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.d.ts +12 -0
  244. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.d.ts.map +1 -0
  245. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.js +36 -0
  246. package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.js.map +1 -0
  247. package/dist/knowledge/formPatterns/catalog/topLevel/common.d.ts +11 -0
  248. package/dist/knowledge/formPatterns/catalog/topLevel/common.d.ts.map +1 -0
  249. package/dist/knowledge/formPatterns/catalog/topLevel/common.js +37 -0
  250. package/dist/knowledge/formPatterns/catalog/topLevel/common.js.map +1 -0
  251. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.d.ts +8 -0
  252. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.d.ts.map +1 -0
  253. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.js +86 -0
  254. package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.js.map +1 -0
  255. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.d.ts +7 -0
  256. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.d.ts.map +1 -0
  257. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.js +69 -0
  258. package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.js.map +1 -0
  259. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.d.ts +14 -0
  260. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.d.ts.map +1 -0
  261. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.js +187 -0
  262. package/dist/knowledge/formPatterns/catalog/topLevel/dialog.js.map +1 -0
  263. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.d.ts +10 -0
  264. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.d.ts.map +1 -0
  265. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.js +54 -0
  266. package/dist/knowledge/formPatterns/catalog/topLevel/factBox.js.map +1 -0
  267. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.d.ts +7 -0
  268. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.d.ts.map +1 -0
  269. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.js +33 -0
  270. package/dist/knowledge/formPatterns/catalog/topLevel/listPage.js.map +1 -0
  271. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.d.ts +10 -0
  272. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.d.ts.map +1 -0
  273. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.js +95 -0
  274. package/dist/knowledge/formPatterns/catalog/topLevel/lookup.js.map +1 -0
  275. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.d.ts +16 -0
  276. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.d.ts.map +1 -0
  277. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.js +158 -0
  278. package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.js.map +1 -0
  279. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.d.ts +7 -0
  280. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.d.ts.map +1 -0
  281. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.js +34 -0
  282. package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.js.map +1 -0
  283. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.d.ts +9 -0
  284. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.d.ts.map +1 -0
  285. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.js +99 -0
  286. package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.js.map +1 -0
  287. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.d.ts +8 -0
  288. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.d.ts.map +1 -0
  289. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.js +95 -0
  290. package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.js.map +1 -0
  291. package/dist/knowledge/formPatterns/catalog/topLevel/task.d.ts +9 -0
  292. package/dist/knowledge/formPatterns/catalog/topLevel/task.d.ts.map +1 -0
  293. package/dist/knowledge/formPatterns/catalog/topLevel/task.js +42 -0
  294. package/dist/knowledge/formPatterns/catalog/topLevel/task.js.map +1 -0
  295. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.d.ts +7 -0
  296. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.d.ts.map +1 -0
  297. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.js +42 -0
  298. package/dist/knowledge/formPatterns/catalog/topLevel/wizard.js.map +1 -0
  299. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.d.ts +17 -0
  300. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.d.ts.map +1 -0
  301. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.js +157 -0
  302. package/dist/knowledge/formPatterns/catalog/topLevel/workspace.js.map +1 -0
  303. package/dist/knowledge/formPatterns/crossCheck.d.ts +44 -0
  304. package/dist/knowledge/formPatterns/crossCheck.d.ts.map +1 -0
  305. package/dist/knowledge/formPatterns/crossCheck.js +109 -0
  306. package/dist/knowledge/formPatterns/crossCheck.js.map +1 -0
  307. package/dist/knowledge/formPatterns/index.d.ts +30 -0
  308. package/dist/knowledge/formPatterns/index.d.ts.map +1 -0
  309. package/dist/knowledge/formPatterns/index.js +158 -0
  310. package/dist/knowledge/formPatterns/index.js.map +1 -0
  311. package/dist/knowledge/formPatterns/methodStubs.d.ts +45 -0
  312. package/dist/knowledge/formPatterns/methodStubs.d.ts.map +1 -0
  313. package/dist/knowledge/formPatterns/methodStubs.js +257 -0
  314. package/dist/knowledge/formPatterns/methodStubs.js.map +1 -0
  315. package/dist/knowledge/formPatterns/types.d.ts +115 -0
  316. package/dist/knowledge/formPatterns/types.d.ts.map +1 -0
  317. package/dist/knowledge/formPatterns/types.js +44 -0
  318. package/dist/knowledge/formPatterns/types.js.map +1 -0
  319. package/dist/metadata/enhancedParser.d.ts +91 -0
  320. package/dist/metadata/enhancedParser.d.ts.map +1 -0
  321. package/dist/metadata/enhancedParser.js +379 -0
  322. package/dist/metadata/enhancedParser.js.map +1 -0
  323. package/dist/metadata/formPatternMiner.d.ts +78 -0
  324. package/dist/metadata/formPatternMiner.d.ts.map +1 -0
  325. package/dist/metadata/formPatternMiner.js +220 -0
  326. package/dist/metadata/formPatternMiner.js.map +1 -0
  327. package/dist/metadata/labelParser.d.ts +71 -0
  328. package/dist/metadata/labelParser.d.ts.map +1 -0
  329. package/dist/metadata/labelParser.js +258 -0
  330. package/dist/metadata/labelParser.js.map +1 -0
  331. package/dist/metadata/symbolCountsWorker.d.ts +16 -0
  332. package/dist/metadata/symbolCountsWorker.d.ts.map +1 -0
  333. package/dist/metadata/symbolCountsWorker.js +42 -0
  334. package/dist/metadata/symbolCountsWorker.js.map +1 -0
  335. package/dist/metadata/symbolIndex.d.ts +474 -0
  336. package/dist/metadata/symbolIndex.d.ts.map +1 -0
  337. package/dist/metadata/symbolIndex.js +3152 -0
  338. package/dist/metadata/symbolIndex.js.map +1 -0
  339. package/dist/metadata/types.d.ts +267 -0
  340. package/dist/metadata/types.d.ts.map +1 -0
  341. package/dist/metadata/types.js +5 -0
  342. package/dist/metadata/types.js.map +1 -0
  343. package/dist/metadata/xmlParser.d.ts +232 -0
  344. package/dist/metadata/xmlParser.d.ts.map +1 -0
  345. package/dist/metadata/xmlParser.js +1021 -0
  346. package/dist/metadata/xmlParser.js.map +1 -0
  347. package/dist/metadata/xppDeclaration.d.ts +116 -0
  348. package/dist/metadata/xppDeclaration.d.ts.map +1 -0
  349. package/dist/metadata/xppDeclaration.js +350 -0
  350. package/dist/metadata/xppDeclaration.js.map +1 -0
  351. package/dist/middleware/apiKeyAuth.d.ts +7 -0
  352. package/dist/middleware/apiKeyAuth.d.ts.map +1 -0
  353. package/dist/middleware/apiKeyAuth.js +70 -0
  354. package/dist/middleware/apiKeyAuth.js.map +1 -0
  355. package/dist/middleware/rateLimiter.d.ts +7 -0
  356. package/dist/middleware/rateLimiter.d.ts.map +1 -0
  357. package/dist/middleware/rateLimiter.js +78 -0
  358. package/dist/middleware/rateLimiter.js.map +1 -0
  359. package/dist/prompts/codeReview.d.ts +8 -0
  360. package/dist/prompts/codeReview.d.ts.map +1 -0
  361. package/dist/prompts/codeReview.js +619 -0
  362. package/dist/prompts/codeReview.js.map +1 -0
  363. package/dist/prompts/index.d.ts +6 -0
  364. package/dist/prompts/index.d.ts.map +1 -0
  365. package/dist/prompts/index.js +6 -0
  366. package/dist/prompts/index.js.map +1 -0
  367. package/dist/prompts/systemInstructions.d.ts +33 -0
  368. package/dist/prompts/systemInstructions.d.ts.map +1 -0
  369. package/dist/prompts/systemInstructions.js +154 -0
  370. package/dist/prompts/systemInstructions.js.map +1 -0
  371. package/dist/resources/classResource.d.ts +17 -0
  372. package/dist/resources/classResource.d.ts.map +1 -0
  373. package/dist/resources/classResource.js +33 -0
  374. package/dist/resources/classResource.js.map +1 -0
  375. package/dist/resources/index.d.ts +20 -0
  376. package/dist/resources/index.d.ts.map +1 -0
  377. package/dist/resources/index.js +154 -0
  378. package/dist/resources/index.js.map +1 -0
  379. package/dist/server/mcpServer.d.ts +11 -0
  380. package/dist/server/mcpServer.d.ts.map +1 -0
  381. package/dist/server/mcpServer.js +185 -0
  382. package/dist/server/mcpServer.js.map +1 -0
  383. package/dist/server/serverMode.d.ts +53 -0
  384. package/dist/server/serverMode.d.ts.map +1 -0
  385. package/dist/server/serverMode.js +72 -0
  386. package/dist/server/serverMode.js.map +1 -0
  387. package/dist/server/toolAnnotations.d.ts +28 -0
  388. package/dist/server/toolAnnotations.d.ts.map +1 -0
  389. package/dist/server/toolAnnotations.js +70 -0
  390. package/dist/server/toolAnnotations.js.map +1 -0
  391. package/dist/server/toolSchemas/analyzeCode.d.ts +71 -0
  392. package/dist/server/toolSchemas/analyzeCode.d.ts.map +1 -0
  393. package/dist/server/toolSchemas/analyzeCode.js +50 -0
  394. package/dist/server/toolSchemas/analyzeCode.js.map +1 -0
  395. package/dist/server/toolSchemas/batchGetInfo.d.ts +32 -0
  396. package/dist/server/toolSchemas/batchGetInfo.d.ts.map +1 -0
  397. package/dist/server/toolSchemas/batchGetInfo.js +35 -0
  398. package/dist/server/toolSchemas/batchGetInfo.js.map +1 -0
  399. package/dist/server/toolSchemas/buildD365foProject.d.ts +44 -0
  400. package/dist/server/toolSchemas/buildD365foProject.d.ts.map +1 -0
  401. package/dist/server/toolSchemas/buildD365foProject.js +47 -0
  402. package/dist/server/toolSchemas/buildD365foProject.js.map +1 -0
  403. package/dist/server/toolSchemas/d365foFile.d.ts +99 -0
  404. package/dist/server/toolSchemas/d365foFile.d.ts.map +1 -0
  405. package/dist/server/toolSchemas/d365foFile.js +163 -0
  406. package/dist/server/toolSchemas/d365foFile.js.map +1 -0
  407. package/dist/server/toolSchemas/extensionInfo.d.ts +65 -0
  408. package/dist/server/toolSchemas/extensionInfo.d.ts.map +1 -0
  409. package/dist/server/toolSchemas/extensionInfo.js +73 -0
  410. package/dist/server/toolSchemas/extensionInfo.js.map +1 -0
  411. package/dist/server/toolSchemas/findReferences.d.ts +35 -0
  412. package/dist/server/toolSchemas/findReferences.d.ts.map +1 -0
  413. package/dist/server/toolSchemas/findReferences.js +35 -0
  414. package/dist/server/toolSchemas/findReferences.js.map +1 -0
  415. package/dist/server/toolSchemas/generateObject.d.ts +246 -0
  416. package/dist/server/toolSchemas/generateObject.d.ts.map +1 -0
  417. package/dist/server/toolSchemas/generateObject.js +158 -0
  418. package/dist/server/toolSchemas/generateObject.js.map +1 -0
  419. package/dist/server/toolSchemas/getKnowledge.d.ts +39 -0
  420. package/dist/server/toolSchemas/getKnowledge.d.ts.map +1 -0
  421. package/dist/server/toolSchemas/getKnowledge.js +46 -0
  422. package/dist/server/toolSchemas/getKnowledge.js.map +1 -0
  423. package/dist/server/toolSchemas/getMethod.d.ts +30 -0
  424. package/dist/server/toolSchemas/getMethod.d.ts.map +1 -0
  425. package/dist/server/toolSchemas/getMethod.js +34 -0
  426. package/dist/server/toolSchemas/getMethod.js.map +1 -0
  427. package/dist/server/toolSchemas/getObjectInfo.d.ts +24 -0
  428. package/dist/server/toolSchemas/getObjectInfo.d.ts.map +1 -0
  429. package/dist/server/toolSchemas/getObjectInfo.js +30 -0
  430. package/dist/server/toolSchemas/getObjectInfo.js.map +1 -0
  431. package/dist/server/toolSchemas/getWorkspaceInfo.d.ts +29 -0
  432. package/dist/server/toolSchemas/getWorkspaceInfo.d.ts.map +1 -0
  433. package/dist/server/toolSchemas/getWorkspaceInfo.js +29 -0
  434. package/dist/server/toolSchemas/getWorkspaceInfo.js.map +1 -0
  435. package/dist/server/toolSchemas/index.d.ts +1142 -0
  436. package/dist/server/toolSchemas/index.d.ts.map +1 -0
  437. package/dist/server/toolSchemas/index.js +60 -0
  438. package/dist/server/toolSchemas/index.js.map +1 -0
  439. package/dist/server/toolSchemas/labels.d.ts +172 -0
  440. package/dist/server/toolSchemas/labels.d.ts.map +1 -0
  441. package/dist/server/toolSchemas/labels.js +159 -0
  442. package/dist/server/toolSchemas/labels.js.map +1 -0
  443. package/dist/server/toolSchemas/objectPatterns.d.ts +93 -0
  444. package/dist/server/toolSchemas/objectPatterns.d.ts.map +1 -0
  445. package/dist/server/toolSchemas/objectPatterns.js +104 -0
  446. package/dist/server/toolSchemas/objectPatterns.js.map +1 -0
  447. package/dist/server/toolSchemas/prepare.d.ts +49 -0
  448. package/dist/server/toolSchemas/prepare.d.ts.map +1 -0
  449. package/dist/server/toolSchemas/prepare.js +57 -0
  450. package/dist/server/toolSchemas/prepare.js.map +1 -0
  451. package/dist/server/toolSchemas/reviewWorkspaceChanges.d.ts +20 -0
  452. package/dist/server/toolSchemas/reviewWorkspaceChanges.d.ts.map +1 -0
  453. package/dist/server/toolSchemas/reviewWorkspaceChanges.js +19 -0
  454. package/dist/server/toolSchemas/reviewWorkspaceChanges.js.map +1 -0
  455. package/dist/server/toolSchemas/runBpCheck.d.ts +36 -0
  456. package/dist/server/toolSchemas/runBpCheck.d.ts.map +1 -0
  457. package/dist/server/toolSchemas/runBpCheck.js +21 -0
  458. package/dist/server/toolSchemas/runBpCheck.js.map +1 -0
  459. package/dist/server/toolSchemas/runSystestClass.d.ts +32 -0
  460. package/dist/server/toolSchemas/runSystestClass.d.ts.map +1 -0
  461. package/dist/server/toolSchemas/runSystestClass.js +20 -0
  462. package/dist/server/toolSchemas/runSystestClass.js.map +1 -0
  463. package/dist/server/toolSchemas/search.d.ts +109 -0
  464. package/dist/server/toolSchemas/search.d.ts.map +1 -0
  465. package/dist/server/toolSchemas/search.js +123 -0
  466. package/dist/server/toolSchemas/search.js.map +1 -0
  467. package/dist/server/toolSchemas/securityInfo.d.ts +45 -0
  468. package/dist/server/toolSchemas/securityInfo.d.ts.map +1 -0
  469. package/dist/server/toolSchemas/securityInfo.js +39 -0
  470. package/dist/server/toolSchemas/securityInfo.js.map +1 -0
  471. package/dist/server/toolSchemas/suggestEdt.d.ts +29 -0
  472. package/dist/server/toolSchemas/suggestEdt.d.ts.map +1 -0
  473. package/dist/server/toolSchemas/suggestEdt.js +29 -0
  474. package/dist/server/toolSchemas/suggestEdt.js.map +1 -0
  475. package/dist/server/toolSchemas/triggerDbSync.d.ts +47 -0
  476. package/dist/server/toolSchemas/triggerDbSync.d.ts.map +1 -0
  477. package/dist/server/toolSchemas/triggerDbSync.js +31 -0
  478. package/dist/server/toolSchemas/triggerDbSync.js.map +1 -0
  479. package/dist/server/toolSchemas/undoLastModification.d.ts +20 -0
  480. package/dist/server/toolSchemas/undoLastModification.d.ts.map +1 -0
  481. package/dist/server/toolSchemas/undoLastModification.js +17 -0
  482. package/dist/server/toolSchemas/undoLastModification.js.map +1 -0
  483. package/dist/server/toolSchemas/updateSymbolIndex.d.ts +19 -0
  484. package/dist/server/toolSchemas/updateSymbolIndex.d.ts.map +1 -0
  485. package/dist/server/toolSchemas/updateSymbolIndex.js +18 -0
  486. package/dist/server/toolSchemas/updateSymbolIndex.js.map +1 -0
  487. package/dist/server/toolSchemas/validateCode.d.ts +35 -0
  488. package/dist/server/toolSchemas/validateCode.d.ts.map +1 -0
  489. package/dist/server/toolSchemas/validateCode.js +38 -0
  490. package/dist/server/toolSchemas/validateCode.js.map +1 -0
  491. package/dist/server/toolSchemas/validateObjectNaming.d.ts +33 -0
  492. package/dist/server/toolSchemas/validateObjectNaming.d.ts.map +1 -0
  493. package/dist/server/toolSchemas/validateObjectNaming.js +32 -0
  494. package/dist/server/toolSchemas/validateObjectNaming.js.map +1 -0
  495. package/dist/server/toolSchemas/verifyD365foProject.d.ts +50 -0
  496. package/dist/server/toolSchemas/verifyD365foProject.d.ts.map +1 -0
  497. package/dist/server/toolSchemas/verifyD365foProject.js +46 -0
  498. package/dist/server/toolSchemas/verifyD365foProject.js.map +1 -0
  499. package/dist/server/transport.d.ts +30 -0
  500. package/dist/server/transport.d.ts.map +1 -0
  501. package/dist/server/transport.js +391 -0
  502. package/dist/server/transport.js.map +1 -0
  503. package/dist/tools/analyzeCode.d.ts +17 -0
  504. package/dist/tools/analyzeCode.d.ts.map +1 -0
  505. package/dist/tools/analyzeCode.js +63 -0
  506. package/dist/tools/analyzeCode.js.map +1 -0
  507. package/dist/tools/analyzeCompleteness.d.ts +20 -0
  508. package/dist/tools/analyzeCompleteness.d.ts.map +1 -0
  509. package/dist/tools/analyzeCompleteness.js +103 -0
  510. package/dist/tools/analyzeCompleteness.js.map +1 -0
  511. package/dist/tools/analyzeExtensionPoints.d.ts +21 -0
  512. package/dist/tools/analyzeExtensionPoints.d.ts.map +1 -0
  513. package/dist/tools/analyzeExtensionPoints.js +343 -0
  514. package/dist/tools/analyzeExtensionPoints.js.map +1 -0
  515. package/dist/tools/analyzePatterns.d.ts +20 -0
  516. package/dist/tools/analyzePatterns.d.ts.map +1 -0
  517. package/dist/tools/analyzePatterns.js +71 -0
  518. package/dist/tools/analyzePatterns.js.map +1 -0
  519. package/dist/tools/apiUsagePatterns.d.ts +20 -0
  520. package/dist/tools/apiUsagePatterns.d.ts.map +1 -0
  521. package/dist/tools/apiUsagePatterns.js +136 -0
  522. package/dist/tools/apiUsagePatterns.js.map +1 -0
  523. package/dist/tools/batchGetInfo.d.ts +50 -0
  524. package/dist/tools/batchGetInfo.d.ts.map +1 -0
  525. package/dist/tools/batchGetInfo.js +52 -0
  526. package/dist/tools/batchGetInfo.js.map +1 -0
  527. package/dist/tools/batchSearch.d.ts +64 -0
  528. package/dist/tools/batchSearch.d.ts.map +1 -0
  529. package/dist/tools/batchSearch.js +265 -0
  530. package/dist/tools/batchSearch.js.map +1 -0
  531. package/dist/tools/buildProject.d.ts +28 -0
  532. package/dist/tools/buildProject.d.ts.map +1 -0
  533. package/dist/tools/buildProject.js +929 -0
  534. package/dist/tools/buildProject.js.map +1 -0
  535. package/dist/tools/classInfo.d.ts +8 -0
  536. package/dist/tools/classInfo.d.ts.map +1 -0
  537. package/dist/tools/classInfo.js +235 -0
  538. package/dist/tools/classInfo.js.map +1 -0
  539. package/dist/tools/codeGen.d.ts +19 -0
  540. package/dist/tools/codeGen.d.ts.map +1 -0
  541. package/dist/tools/codeGen.js +1956 -0
  542. package/dist/tools/codeGen.js.map +1 -0
  543. package/dist/tools/completion.d.ts +8 -0
  544. package/dist/tools/completion.d.ts.map +1 -0
  545. package/dist/tools/completion.js +272 -0
  546. package/dist/tools/completion.js.map +1 -0
  547. package/dist/tools/configKeyInfo.d.ts +22 -0
  548. package/dist/tools/configKeyInfo.d.ts.map +1 -0
  549. package/dist/tools/configKeyInfo.js +74 -0
  550. package/dist/tools/configKeyInfo.js.map +1 -0
  551. package/dist/tools/createD365File.d.ts +479 -0
  552. package/dist/tools/createD365File.d.ts.map +1 -0
  553. package/dist/tools/createD365File.js +4185 -0
  554. package/dist/tools/createD365File.js.map +1 -0
  555. package/dist/tools/createLabel.d.ts +51 -0
  556. package/dist/tools/createLabel.d.ts.map +1 -0
  557. package/dist/tools/createLabel.js +761 -0
  558. package/dist/tools/createLabel.js.map +1 -0
  559. package/dist/tools/d365foErrorHelp.d.ts +29 -0
  560. package/dist/tools/d365foErrorHelp.d.ts.map +1 -0
  561. package/dist/tools/d365foErrorHelp.js +389 -0
  562. package/dist/tools/d365foErrorHelp.js.map +1 -0
  563. package/dist/tools/d365foFile.d.ts +20 -0
  564. package/dist/tools/d365foFile.d.ts.map +1 -0
  565. package/dist/tools/d365foFile.js +58 -0
  566. package/dist/tools/d365foFile.js.map +1 -0
  567. package/dist/tools/d365foFileOpSpecs.d.ts +41 -0
  568. package/dist/tools/d365foFileOpSpecs.d.ts.map +1 -0
  569. package/dist/tools/d365foFileOpSpecs.js +336 -0
  570. package/dist/tools/d365foFileOpSpecs.js.map +1 -0
  571. package/dist/tools/dataEntityInfo.d.ts +23 -0
  572. package/dist/tools/dataEntityInfo.d.ts.map +1 -0
  573. package/dist/tools/dataEntityInfo.js +45 -0
  574. package/dist/tools/dataEntityInfo.js.map +1 -0
  575. package/dist/tools/dataEntityXml.d.ts +31 -0
  576. package/dist/tools/dataEntityXml.d.ts.map +1 -0
  577. package/dist/tools/dataEntityXml.js +131 -0
  578. package/dist/tools/dataEntityXml.js.map +1 -0
  579. package/dist/tools/dbSync.d.ts +8 -0
  580. package/dist/tools/dbSync.d.ts.map +1 -0
  581. package/dist/tools/dbSync.js +285 -0
  582. package/dist/tools/dbSync.js.map +1 -0
  583. package/dist/tools/edtInfo.d.ts +23 -0
  584. package/dist/tools/edtInfo.d.ts.map +1 -0
  585. package/dist/tools/edtInfo.js +122 -0
  586. package/dist/tools/edtInfo.js.map +1 -0
  587. package/dist/tools/enumInfo.d.ts +17 -0
  588. package/dist/tools/enumInfo.d.ts.map +1 -0
  589. package/dist/tools/enumInfo.js +44 -0
  590. package/dist/tools/enumInfo.js.map +1 -0
  591. package/dist/tools/extensionInfo.d.ts +26 -0
  592. package/dist/tools/extensionInfo.d.ts.map +1 -0
  593. package/dist/tools/extensionInfo.js +73 -0
  594. package/dist/tools/extensionInfo.js.map +1 -0
  595. package/dist/tools/extensionSearch.d.ts +20 -0
  596. package/dist/tools/extensionSearch.d.ts.map +1 -0
  597. package/dist/tools/extensionSearch.js +72 -0
  598. package/dist/tools/extensionSearch.js.map +1 -0
  599. package/dist/tools/extensionStrategyAdvisor.d.ts +15 -0
  600. package/dist/tools/extensionStrategyAdvisor.d.ts.map +1 -0
  601. package/dist/tools/extensionStrategyAdvisor.js +519 -0
  602. package/dist/tools/extensionStrategyAdvisor.js.map +1 -0
  603. package/dist/tools/findCocExtensions.d.ts +20 -0
  604. package/dist/tools/findCocExtensions.d.ts.map +1 -0
  605. package/dist/tools/findCocExtensions.js +285 -0
  606. package/dist/tools/findCocExtensions.js.map +1 -0
  607. package/dist/tools/findEventHandlers.d.ts +21 -0
  608. package/dist/tools/findEventHandlers.d.ts.map +1 -0
  609. package/dist/tools/findEventHandlers.js +196 -0
  610. package/dist/tools/findEventHandlers.js.map +1 -0
  611. package/dist/tools/findReferences.d.ts +30 -0
  612. package/dist/tools/findReferences.d.ts.map +1 -0
  613. package/dist/tools/findReferences.js +551 -0
  614. package/dist/tools/findReferences.js.map +1 -0
  615. package/dist/tools/formInfo.d.ts +13 -0
  616. package/dist/tools/formInfo.d.ts.map +1 -0
  617. package/dist/tools/formInfo.js +407 -0
  618. package/dist/tools/formInfo.js.map +1 -0
  619. package/dist/tools/formPattern.d.ts +19 -0
  620. package/dist/tools/formPattern.d.ts.map +1 -0
  621. package/dist/tools/formPattern.js +52 -0
  622. package/dist/tools/formPattern.js.map +1 -0
  623. package/dist/tools/generateD365Xml.d.ts +12 -0
  624. package/dist/tools/generateD365Xml.d.ts.map +1 -0
  625. package/dist/tools/generateD365Xml.js +1454 -0
  626. package/dist/tools/generateD365Xml.js.map +1 -0
  627. package/dist/tools/generateFindMethods.d.ts +69 -0
  628. package/dist/tools/generateFindMethods.d.ts.map +1 -0
  629. package/dist/tools/generateFindMethods.js +207 -0
  630. package/dist/tools/generateFindMethods.js.map +1 -0
  631. package/dist/tools/generateMetadata.d.ts +37 -0
  632. package/dist/tools/generateMetadata.d.ts.map +1 -0
  633. package/dist/tools/generateMetadata.js +213 -0
  634. package/dist/tools/generateMetadata.js.map +1 -0
  635. package/dist/tools/generateObject.d.ts +34 -0
  636. package/dist/tools/generateObject.d.ts.map +1 -0
  637. package/dist/tools/generateObject.js +47 -0
  638. package/dist/tools/generateObject.js.map +1 -0
  639. package/dist/tools/generateRelationXpp.d.ts +45 -0
  640. package/dist/tools/generateRelationXpp.d.ts.map +1 -0
  641. package/dist/tools/generateRelationXpp.js +129 -0
  642. package/dist/tools/generateRelationXpp.js.map +1 -0
  643. package/dist/tools/generateSmart.d.ts +32 -0
  644. package/dist/tools/generateSmart.d.ts.map +1 -0
  645. package/dist/tools/generateSmart.js +52 -0
  646. package/dist/tools/generateSmart.js.map +1 -0
  647. package/dist/tools/generateSmartForm.d.ts +82 -0
  648. package/dist/tools/generateSmartForm.d.ts.map +1 -0
  649. package/dist/tools/generateSmartForm.js +996 -0
  650. package/dist/tools/generateSmartForm.js.map +1 -0
  651. package/dist/tools/generateSmartReport.d.ts +90 -0
  652. package/dist/tools/generateSmartReport.d.ts.map +1 -0
  653. package/dist/tools/generateSmartReport.js +1254 -0
  654. package/dist/tools/generateSmartReport.js.map +1 -0
  655. package/dist/tools/generateSmartTable.d.ts +138 -0
  656. package/dist/tools/generateSmartTable.d.ts.map +1 -0
  657. package/dist/tools/generateSmartTable.js +1305 -0
  658. package/dist/tools/generateSmartTable.js.map +1 -0
  659. package/dist/tools/generateTableFields.d.ts +48 -0
  660. package/dist/tools/generateTableFields.d.ts.map +1 -0
  661. package/dist/tools/generateTableFields.js +186 -0
  662. package/dist/tools/generateTableFields.js.map +1 -0
  663. package/dist/tools/generateTableRelation.d.ts +35 -0
  664. package/dist/tools/generateTableRelation.d.ts.map +1 -0
  665. package/dist/tools/generateTableRelation.js +161 -0
  666. package/dist/tools/generateTableRelation.js.map +1 -0
  667. package/dist/tools/getFormPatternSpec.d.ts +13 -0
  668. package/dist/tools/getFormPatternSpec.d.ts.map +1 -0
  669. package/dist/tools/getFormPatternSpec.js +290 -0
  670. package/dist/tools/getFormPatternSpec.js.map +1 -0
  671. package/dist/tools/getFormPatterns.d.ts +68 -0
  672. package/dist/tools/getFormPatterns.d.ts.map +1 -0
  673. package/dist/tools/getFormPatterns.js +471 -0
  674. package/dist/tools/getFormPatterns.js.map +1 -0
  675. package/dist/tools/getKnowledge.d.ts +27 -0
  676. package/dist/tools/getKnowledge.d.ts.map +1 -0
  677. package/dist/tools/getKnowledge.js +50 -0
  678. package/dist/tools/getKnowledge.js.map +1 -0
  679. package/dist/tools/getLabelInfo.d.ts +21 -0
  680. package/dist/tools/getLabelInfo.d.ts.map +1 -0
  681. package/dist/tools/getLabelInfo.js +138 -0
  682. package/dist/tools/getLabelInfo.js.map +1 -0
  683. package/dist/tools/getMethod.d.ts +19 -0
  684. package/dist/tools/getMethod.d.ts.map +1 -0
  685. package/dist/tools/getMethod.js +77 -0
  686. package/dist/tools/getMethod.js.map +1 -0
  687. package/dist/tools/getMethodSource.d.ts +17 -0
  688. package/dist/tools/getMethodSource.d.ts.map +1 -0
  689. package/dist/tools/getMethodSource.js +161 -0
  690. package/dist/tools/getMethodSource.js.map +1 -0
  691. package/dist/tools/getObjectInfo.d.ts +17 -0
  692. package/dist/tools/getObjectInfo.d.ts.map +1 -0
  693. package/dist/tools/getObjectInfo.js +88 -0
  694. package/dist/tools/getObjectInfo.js.map +1 -0
  695. package/dist/tools/getTablePatterns.d.ts +45 -0
  696. package/dist/tools/getTablePatterns.d.ts.map +1 -0
  697. package/dist/tools/getTablePatterns.js +235 -0
  698. package/dist/tools/getTablePatterns.js.map +1 -0
  699. package/dist/tools/index.d.ts +11 -0
  700. package/dist/tools/index.d.ts.map +1 -0
  701. package/dist/tools/index.js +11 -0
  702. package/dist/tools/index.js.map +1 -0
  703. package/dist/tools/labels.d.ts +25 -0
  704. package/dist/tools/labels.d.ts.map +1 -0
  705. package/dist/tools/labels.js +111 -0
  706. package/dist/tools/labels.js.map +1 -0
  707. package/dist/tools/macroInfo.d.ts +23 -0
  708. package/dist/tools/macroInfo.d.ts.map +1 -0
  709. package/dist/tools/macroInfo.js +62 -0
  710. package/dist/tools/macroInfo.js.map +1 -0
  711. package/dist/tools/mapInfo.d.ts +21 -0
  712. package/dist/tools/mapInfo.d.ts.map +1 -0
  713. package/dist/tools/mapInfo.js +54 -0
  714. package/dist/tools/mapInfo.js.map +1 -0
  715. package/dist/tools/mapXml.d.ts +26 -0
  716. package/dist/tools/mapXml.d.ts.map +1 -0
  717. package/dist/tools/mapXml.js +88 -0
  718. package/dist/tools/mapXml.js.map +1 -0
  719. package/dist/tools/menuItemInfo.d.ts +20 -0
  720. package/dist/tools/menuItemInfo.d.ts.map +1 -0
  721. package/dist/tools/menuItemInfo.js +185 -0
  722. package/dist/tools/menuItemInfo.js.map +1 -0
  723. package/dist/tools/methodSignature.d.ts +33 -0
  724. package/dist/tools/methodSignature.d.ts.map +1 -0
  725. package/dist/tools/methodSignature.js +348 -0
  726. package/dist/tools/methodSignature.js.map +1 -0
  727. package/dist/tools/modifyD365File.d.ts +130 -0
  728. package/dist/tools/modifyD365File.d.ts.map +1 -0
  729. package/dist/tools/modifyD365File.js +2179 -0
  730. package/dist/tools/modifyD365File.js.map +1 -0
  731. package/dist/tools/objectInfoRegistry.d.ts +36 -0
  732. package/dist/tools/objectInfoRegistry.d.ts.map +1 -0
  733. package/dist/tools/objectInfoRegistry.js +98 -0
  734. package/dist/tools/objectInfoRegistry.js.map +1 -0
  735. package/dist/tools/objectPatterns.d.ts +16 -0
  736. package/dist/tools/objectPatterns.d.ts.map +1 -0
  737. package/dist/tools/objectPatterns.js +84 -0
  738. package/dist/tools/objectPatterns.js.map +1 -0
  739. package/dist/tools/prepare.d.ts +18 -0
  740. package/dist/tools/prepare.d.ts.map +1 -0
  741. package/dist/tools/prepare.js +47 -0
  742. package/dist/tools/prepare.js.map +1 -0
  743. package/dist/tools/prepareChange.d.ts +43 -0
  744. package/dist/tools/prepareChange.d.ts.map +1 -0
  745. package/dist/tools/prepareChange.js +327 -0
  746. package/dist/tools/prepareChange.js.map +1 -0
  747. package/dist/tools/prepareCreate.d.ts +45 -0
  748. package/dist/tools/prepareCreate.d.ts.map +1 -0
  749. package/dist/tools/prepareCreate.js +263 -0
  750. package/dist/tools/prepareCreate.js.map +1 -0
  751. package/dist/tools/queryInfo.d.ts +17 -0
  752. package/dist/tools/queryInfo.d.ts.map +1 -0
  753. package/dist/tools/queryInfo.js +46 -0
  754. package/dist/tools/queryInfo.js.map +1 -0
  755. package/dist/tools/queryViewXml.d.ts +36 -0
  756. package/dist/tools/queryViewXml.d.ts.map +1 -0
  757. package/dist/tools/queryViewXml.js +129 -0
  758. package/dist/tools/queryViewXml.js.map +1 -0
  759. package/dist/tools/renameLabel.d.ts +29 -0
  760. package/dist/tools/renameLabel.d.ts.map +1 -0
  761. package/dist/tools/renameLabel.js +377 -0
  762. package/dist/tools/renameLabel.js.map +1 -0
  763. package/dist/tools/repairFormControls.d.ts +21 -0
  764. package/dist/tools/repairFormControls.d.ts.map +1 -0
  765. package/dist/tools/repairFormControls.js +151 -0
  766. package/dist/tools/repairFormControls.js.map +1 -0
  767. package/dist/tools/reportInfo.d.ts +14 -0
  768. package/dist/tools/reportInfo.d.ts.map +1 -0
  769. package/dist/tools/reportInfo.js +302 -0
  770. package/dist/tools/reportInfo.js.map +1 -0
  771. package/dist/tools/resolveReferences.d.ts +89 -0
  772. package/dist/tools/resolveReferences.d.ts.map +1 -0
  773. package/dist/tools/resolveReferences.js +791 -0
  774. package/dist/tools/resolveReferences.js.map +1 -0
  775. package/dist/tools/reviewWorkspaceChanges.d.ts +14 -0
  776. package/dist/tools/reviewWorkspaceChanges.d.ts.map +1 -0
  777. package/dist/tools/reviewWorkspaceChanges.js +73 -0
  778. package/dist/tools/reviewWorkspaceChanges.js.map +1 -0
  779. package/dist/tools/runBpCheck.d.ts +14 -0
  780. package/dist/tools/runBpCheck.d.ts.map +1 -0
  781. package/dist/tools/runBpCheck.js +241 -0
  782. package/dist/tools/runBpCheck.js.map +1 -0
  783. package/dist/tools/search.d.ts +20 -0
  784. package/dist/tools/search.d.ts.map +1 -0
  785. package/dist/tools/search.js +246 -0
  786. package/dist/tools/search.js.map +1 -0
  787. package/dist/tools/searchLabels.d.ts +26 -0
  788. package/dist/tools/searchLabels.d.ts.map +1 -0
  789. package/dist/tools/searchLabels.js +91 -0
  790. package/dist/tools/searchLabels.js.map +1 -0
  791. package/dist/tools/searchUnified.d.ts +28 -0
  792. package/dist/tools/searchUnified.d.ts.map +1 -0
  793. package/dist/tools/searchUnified.js +48 -0
  794. package/dist/tools/searchUnified.js.map +1 -0
  795. package/dist/tools/securityArtifactInfo.d.ts +14 -0
  796. package/dist/tools/securityArtifactInfo.d.ts.map +1 -0
  797. package/dist/tools/securityArtifactInfo.js +192 -0
  798. package/dist/tools/securityArtifactInfo.js.map +1 -0
  799. package/dist/tools/securityCoverageInfo.d.ts +21 -0
  800. package/dist/tools/securityCoverageInfo.d.ts.map +1 -0
  801. package/dist/tools/securityCoverageInfo.js +248 -0
  802. package/dist/tools/securityCoverageInfo.js.map +1 -0
  803. package/dist/tools/securityInfo.d.ts +22 -0
  804. package/dist/tools/securityInfo.d.ts.map +1 -0
  805. package/dist/tools/securityInfo.js +43 -0
  806. package/dist/tools/securityInfo.js.map +1 -0
  807. package/dist/tools/securityPolicyInfo.d.ts +22 -0
  808. package/dist/tools/securityPolicyInfo.d.ts.map +1 -0
  809. package/dist/tools/securityPolicyInfo.js +49 -0
  810. package/dist/tools/securityPolicyInfo.js.map +1 -0
  811. package/dist/tools/securityPrivilegeXml.d.ts +21 -0
  812. package/dist/tools/securityPrivilegeXml.d.ts.map +1 -0
  813. package/dist/tools/securityPrivilegeXml.js +61 -0
  814. package/dist/tools/securityPrivilegeXml.js.map +1 -0
  815. package/dist/tools/serviceInfo.d.ts +25 -0
  816. package/dist/tools/serviceInfo.d.ts.map +1 -0
  817. package/dist/tools/serviceInfo.js +93 -0
  818. package/dist/tools/serviceInfo.js.map +1 -0
  819. package/dist/tools/suggestEdt.d.ts +15 -0
  820. package/dist/tools/suggestEdt.d.ts.map +1 -0
  821. package/dist/tools/suggestEdt.js +348 -0
  822. package/dist/tools/suggestEdt.js.map +1 -0
  823. package/dist/tools/suggestImplementation.d.ts +20 -0
  824. package/dist/tools/suggestImplementation.d.ts.map +1 -0
  825. package/dist/tools/suggestImplementation.js +144 -0
  826. package/dist/tools/suggestImplementation.js.map +1 -0
  827. package/dist/tools/sysTestRunner.d.ts +14 -0
  828. package/dist/tools/sysTestRunner.d.ts.map +1 -0
  829. package/dist/tools/sysTestRunner.js +145 -0
  830. package/dist/tools/sysTestRunner.js.map +1 -0
  831. package/dist/tools/tableExtensionInfo.d.ts +91 -0
  832. package/dist/tools/tableExtensionInfo.d.ts.map +1 -0
  833. package/dist/tools/tableExtensionInfo.js +305 -0
  834. package/dist/tools/tableExtensionInfo.js.map +1 -0
  835. package/dist/tools/tableInfo.d.ts +23 -0
  836. package/dist/tools/tableInfo.d.ts.map +1 -0
  837. package/dist/tools/tableInfo.js +125 -0
  838. package/dist/tools/tableInfo.js.map +1 -0
  839. package/dist/tools/toolHandler.d.ts +4 -0
  840. package/dist/tools/toolHandler.d.ts.map +1 -0
  841. package/dist/tools/toolHandler.js +508 -0
  842. package/dist/tools/toolHandler.js.map +1 -0
  843. package/dist/tools/undoLastModification.d.ts +15 -0
  844. package/dist/tools/undoLastModification.d.ts.map +1 -0
  845. package/dist/tools/undoLastModification.js +147 -0
  846. package/dist/tools/undoLastModification.js.map +1 -0
  847. package/dist/tools/updateSymbolIndex.d.ts +15 -0
  848. package/dist/tools/updateSymbolIndex.d.ts.map +1 -0
  849. package/dist/tools/updateSymbolIndex.js +520 -0
  850. package/dist/tools/updateSymbolIndex.js.map +1 -0
  851. package/dist/tools/validateCode.d.ts +24 -0
  852. package/dist/tools/validateCode.d.ts.map +1 -0
  853. package/dist/tools/validateCode.js +201 -0
  854. package/dist/tools/validateCode.js.map +1 -0
  855. package/dist/tools/validateFormPattern.d.ts +51 -0
  856. package/dist/tools/validateFormPattern.d.ts.map +1 -0
  857. package/dist/tools/validateFormPattern.js +201 -0
  858. package/dist/tools/validateFormPattern.js.map +1 -0
  859. package/dist/tools/validateObjectNaming.d.ts +21 -0
  860. package/dist/tools/validateObjectNaming.d.ts.map +1 -0
  861. package/dist/tools/validateObjectNaming.js +319 -0
  862. package/dist/tools/validateObjectNaming.js.map +1 -0
  863. package/dist/tools/validateXpp.d.ts +79 -0
  864. package/dist/tools/validateXpp.d.ts.map +1 -0
  865. package/dist/tools/validateXpp.js +705 -0
  866. package/dist/tools/validateXpp.js.map +1 -0
  867. package/dist/tools/verifyD365Project.d.ts +21 -0
  868. package/dist/tools/verifyD365Project.d.ts.map +1 -0
  869. package/dist/tools/verifyD365Project.js +299 -0
  870. package/dist/tools/verifyD365Project.js.map +1 -0
  871. package/dist/tools/viewInfo.d.ts +17 -0
  872. package/dist/tools/viewInfo.d.ts.map +1 -0
  873. package/dist/tools/viewInfo.js +46 -0
  874. package/dist/tools/viewInfo.js.map +1 -0
  875. package/dist/tools/xppKnowledge.d.ts +45 -0
  876. package/dist/tools/xppKnowledge.d.ts.map +1 -0
  877. package/dist/tools/xppKnowledge.js +2815 -0
  878. package/dist/tools/xppKnowledge.js.map +1 -0
  879. package/dist/types/context.d.ts +56 -0
  880. package/dist/types/context.d.ts.map +1 -0
  881. package/dist/types/context.js +5 -0
  882. package/dist/types/context.js.map +1 -0
  883. package/dist/utils/callDedup.d.ts +29 -0
  884. package/dist/utils/callDedup.d.ts.map +1 -0
  885. package/dist/utils/callDedup.js +87 -0
  886. package/dist/utils/callDedup.js.map +1 -0
  887. package/dist/utils/configManager.d.ts +307 -0
  888. package/dist/utils/configManager.d.ts.map +1 -0
  889. package/dist/utils/configManager.js +1169 -0
  890. package/dist/utils/configManager.js.map +1 -0
  891. package/dist/utils/d365XmlNormalizer.d.ts +9 -0
  892. package/dist/utils/d365XmlNormalizer.d.ts.map +1 -0
  893. package/dist/utils/d365XmlNormalizer.js +24 -0
  894. package/dist/utils/d365XmlNormalizer.js.map +1 -0
  895. package/dist/utils/edtExtensionValidator.d.ts +110 -0
  896. package/dist/utils/edtExtensionValidator.d.ts.map +1 -0
  897. package/dist/utils/edtExtensionValidator.js +367 -0
  898. package/dist/utils/edtExtensionValidator.js.map +1 -0
  899. package/dist/utils/eolUtils.d.ts +15 -0
  900. package/dist/utils/eolUtils.d.ts.map +1 -0
  901. package/dist/utils/eolUtils.js +21 -0
  902. package/dist/utils/eolUtils.js.map +1 -0
  903. package/dist/utils/extractManifest.d.ts +34 -0
  904. package/dist/utils/extractManifest.d.ts.map +1 -0
  905. package/dist/utils/extractManifest.js +43 -0
  906. package/dist/utils/extractManifest.js.map +1 -0
  907. package/dist/utils/fieldControlTypes.d.ts +44 -0
  908. package/dist/utils/fieldControlTypes.d.ts.map +1 -0
  909. package/dist/utils/fieldControlTypes.js +97 -0
  910. package/dist/utils/fieldControlTypes.js.map +1 -0
  911. package/dist/utils/formCloner.d.ts +77 -0
  912. package/dist/utils/formCloner.d.ts.map +1 -0
  913. package/dist/utils/formCloner.js +364 -0
  914. package/dist/utils/formCloner.js.map +1 -0
  915. package/dist/utils/formControlExpander.d.ts +68 -0
  916. package/dist/utils/formControlExpander.d.ts.map +1 -0
  917. package/dist/utils/formControlExpander.js +207 -0
  918. package/dist/utils/formControlExpander.js.map +1 -0
  919. package/dist/utils/formControlRepair.d.ts +81 -0
  920. package/dist/utils/formControlRepair.d.ts.map +1 -0
  921. package/dist/utils/formControlRepair.js +203 -0
  922. package/dist/utils/formControlRepair.js.map +1 -0
  923. package/dist/utils/formExtensionShapeValidator.d.ts +44 -0
  924. package/dist/utils/formExtensionShapeValidator.d.ts.map +1 -0
  925. package/dist/utils/formExtensionShapeValidator.js +99 -0
  926. package/dist/utils/formExtensionShapeValidator.js.map +1 -0
  927. package/dist/utils/formPatternTemplates.d.ts +77 -0
  928. package/dist/utils/formPatternTemplates.d.ts.map +1 -0
  929. package/dist/utils/formPatternTemplates.js +1917 -0
  930. package/dist/utils/formPatternTemplates.js.map +1 -0
  931. package/dist/utils/fsExtensionScanner.d.ts +76 -0
  932. package/dist/utils/fsExtensionScanner.d.ts.map +1 -0
  933. package/dist/utils/fsExtensionScanner.js +271 -0
  934. package/dist/utils/fsExtensionScanner.js.map +1 -0
  935. package/dist/utils/fuzzyMatching.d.ts +41 -0
  936. package/dist/utils/fuzzyMatching.d.ts.map +1 -0
  937. package/dist/utils/fuzzyMatching.js +186 -0
  938. package/dist/utils/fuzzyMatching.js.map +1 -0
  939. package/dist/utils/indexStaleness.d.ts +30 -0
  940. package/dist/utils/indexStaleness.d.ts.map +1 -0
  941. package/dist/utils/indexStaleness.js +104 -0
  942. package/dist/utils/indexStaleness.js.map +1 -0
  943. package/dist/utils/loadEnv.d.ts +32 -0
  944. package/dist/utils/loadEnv.d.ts.map +1 -0
  945. package/dist/utils/loadEnv.js +83 -0
  946. package/dist/utils/loadEnv.js.map +1 -0
  947. package/dist/utils/logger.d.ts +4 -0
  948. package/dist/utils/logger.d.ts.map +1 -0
  949. package/dist/utils/logger.js +11 -0
  950. package/dist/utils/logger.js.map +1 -0
  951. package/dist/utils/metadataResolver.d.ts +155 -0
  952. package/dist/utils/metadataResolver.d.ts.map +1 -0
  953. package/dist/utils/metadataResolver.js +277 -0
  954. package/dist/utils/metadataResolver.js.map +1 -0
  955. package/dist/utils/modelClassifier.d.ts +180 -0
  956. package/dist/utils/modelClassifier.d.ts.map +1 -0
  957. package/dist/utils/modelClassifier.js +373 -0
  958. package/dist/utils/modelClassifier.js.map +1 -0
  959. package/dist/utils/operationLocks.d.ts +26 -0
  960. package/dist/utils/operationLocks.d.ts.map +1 -0
  961. package/dist/utils/operationLocks.js +182 -0
  962. package/dist/utils/operationLocks.js.map +1 -0
  963. package/dist/utils/packageResolver.d.ts +52 -0
  964. package/dist/utils/packageResolver.d.ts.map +1 -0
  965. package/dist/utils/packageResolver.js +174 -0
  966. package/dist/utils/packageResolver.js.map +1 -0
  967. package/dist/utils/pathContainment.d.ts +60 -0
  968. package/dist/utils/pathContainment.d.ts.map +1 -0
  969. package/dist/utils/pathContainment.js +270 -0
  970. package/dist/utils/pathContainment.js.map +1 -0
  971. package/dist/utils/projectUtils.d.ts +14 -0
  972. package/dist/utils/projectUtils.d.ts.map +1 -0
  973. package/dist/utils/projectUtils.js +48 -0
  974. package/dist/utils/projectUtils.js.map +1 -0
  975. package/dist/utils/provenanceStore.d.ts +54 -0
  976. package/dist/utils/provenanceStore.d.ts.map +1 -0
  977. package/dist/utils/provenanceStore.js +203 -0
  978. package/dist/utils/provenanceStore.js.map +1 -0
  979. package/dist/utils/richContext.d.ts +45 -0
  980. package/dist/utils/richContext.d.ts.map +1 -0
  981. package/dist/utils/richContext.js +316 -0
  982. package/dist/utils/richContext.js.map +1 -0
  983. package/dist/utils/smartXmlBuilder.d.ts +187 -0
  984. package/dist/utils/smartXmlBuilder.d.ts.map +1 -0
  985. package/dist/utils/smartXmlBuilder.js +504 -0
  986. package/dist/utils/smartXmlBuilder.js.map +1 -0
  987. package/dist/utils/stdioSessionInfo.d.ts +53 -0
  988. package/dist/utils/stdioSessionInfo.d.ts.map +1 -0
  989. package/dist/utils/stdioSessionInfo.js +47 -0
  990. package/dist/utils/stdioSessionInfo.js.map +1 -0
  991. package/dist/utils/suggestionEngine.d.ts +20 -0
  992. package/dist/utils/suggestionEngine.d.ts.map +1 -0
  993. package/dist/utils/suggestionEngine.js +145 -0
  994. package/dist/utils/suggestionEngine.js.map +1 -0
  995. package/dist/utils/symbolLookup.d.ts +60 -0
  996. package/dist/utils/symbolLookup.d.ts.map +1 -0
  997. package/dist/utils/symbolLookup.js +0 -0
  998. package/dist/utils/symbolLookup.js.map +1 -0
  999. package/dist/utils/terminalUi.d.ts +85 -0
  1000. package/dist/utils/terminalUi.d.ts.map +1 -0
  1001. package/dist/utils/terminalUi.js +182 -0
  1002. package/dist/utils/terminalUi.js.map +1 -0
  1003. package/dist/utils/toolMetrics.d.ts +32 -0
  1004. package/dist/utils/toolMetrics.d.ts.map +1 -0
  1005. package/dist/utils/toolMetrics.js +89 -0
  1006. package/dist/utils/toolMetrics.js.map +1 -0
  1007. package/dist/utils/toolProgressMessage.d.ts +8 -0
  1008. package/dist/utils/toolProgressMessage.d.ts.map +1 -0
  1009. package/dist/utils/toolProgressMessage.js +182 -0
  1010. package/dist/utils/toolProgressMessage.js.map +1 -0
  1011. package/dist/utils/workspaceDetector.d.ts +51 -0
  1012. package/dist/utils/workspaceDetector.d.ts.map +1 -0
  1013. package/dist/utils/workspaceDetector.js +328 -0
  1014. package/dist/utils/workspaceDetector.js.map +1 -0
  1015. package/dist/utils/xppConfigProvider.d.ts +48 -0
  1016. package/dist/utils/xppConfigProvider.d.ts.map +1 -0
  1017. package/dist/utils/xppConfigProvider.js +121 -0
  1018. package/dist/utils/xppConfigProvider.js.map +1 -0
  1019. package/dist/utils/xppDocGen.d.ts +39 -0
  1020. package/dist/utils/xppDocGen.d.ts.map +1 -0
  1021. package/dist/utils/xppDocGen.js +518 -0
  1022. package/dist/utils/xppDocGen.js.map +1 -0
  1023. package/dist/utils/xppFormat.d.ts +21 -0
  1024. package/dist/utils/xppFormat.d.ts.map +1 -0
  1025. package/dist/utils/xppFormat.js +102 -0
  1026. package/dist/utils/xppFormat.js.map +1 -0
  1027. package/dist/utils/xppSelectLint.d.ts +18 -0
  1028. package/dist/utils/xppSelectLint.d.ts.map +1 -0
  1029. package/dist/utils/xppSelectLint.js +80 -0
  1030. package/dist/utils/xppSelectLint.js.map +1 -0
  1031. package/dist/validation/formPatternValidator.d.ts +53 -0
  1032. package/dist/validation/formPatternValidator.d.ts.map +1 -0
  1033. package/dist/validation/formPatternValidator.js +454 -0
  1034. package/dist/validation/formPatternValidator.js.map +1 -0
  1035. package/dist/workspace/contextRanker.d.ts +58 -0
  1036. package/dist/workspace/contextRanker.d.ts.map +1 -0
  1037. package/dist/workspace/contextRanker.js +216 -0
  1038. package/dist/workspace/contextRanker.js.map +1 -0
  1039. package/dist/workspace/contextSnapshot.d.ts +68 -0
  1040. package/dist/workspace/contextSnapshot.d.ts.map +1 -0
  1041. package/dist/workspace/contextSnapshot.js +193 -0
  1042. package/dist/workspace/contextSnapshot.js.map +1 -0
  1043. package/dist/workspace/hybridSearch.d.ts +39 -0
  1044. package/dist/workspace/hybridSearch.d.ts.map +1 -0
  1045. package/dist/workspace/hybridSearch.js +96 -0
  1046. package/dist/workspace/hybridSearch.js.map +1 -0
  1047. package/dist/workspace/workspaceScanner.d.ts +95 -0
  1048. package/dist/workspace/workspaceScanner.d.ts.map +1 -0
  1049. package/dist/workspace/workspaceScanner.js +247 -0
  1050. package/dist/workspace/workspaceScanner.js.map +1 -0
  1051. package/dist/workspace/workspaceUtils.d.ts +23 -0
  1052. package/dist/workspace/workspaceUtils.d.ts.map +1 -0
  1053. package/dist/workspace/workspaceUtils.js +77 -0
  1054. package/dist/workspace/workspaceUtils.js.map +1 -0
  1055. package/package.json +94 -0
@@ -0,0 +1,1169 @@
1
+ /**
2
+ * MCP Configuration Manager
3
+ * Loads and provides access to .mcp.json configuration
4
+ */
5
+ import * as fs from 'fs/promises';
6
+ import { existsSync, realpathSync } from 'fs';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ import { AsyncLocalStorage } from 'node:async_hooks';
10
+ import { autoDetectD365Project, detectD365Project, scanAllD365Projects, extractModelNameFromProject, detectGitBranch, isMicrosoftDemoModel } from './workspaceDetector.js';
11
+ import { registerCustomModel, getCustomModels } from './modelClassifier.js';
12
+ import { XppConfigProvider } from './xppConfigProvider.js';
13
+ import { debugLog } from './logger.js';
14
+ /**
15
+ * Resolve the actual on-disk casing of a path.
16
+ * On Windows the filesystem is case-insensitive but VS Code and Copilot compare
17
+ * paths case-sensitively, causing "Couldn't find file" errors when casing in
18
+ * .mcp.json / .rnrproj differs from the real directory name (e.g. AOSService vs AosService).
19
+ * Falls back to the original string when the path does not exist yet.
20
+ */
21
+ function normalizePath(p) {
22
+ try {
23
+ return realpathSync(p);
24
+ }
25
+ catch {
26
+ return p;
27
+ }
28
+ }
29
+ class ConfigManager {
30
+ config = null;
31
+ configPath;
32
+ runtimeContext = {};
33
+ // Guards one-time registration of configured custom models in ensureLoaded().
34
+ configuredModelsRegistered = false;
35
+ /**
36
+ * Per-request context storage — isolates each HTTP request's workspace path
37
+ * from concurrent requests. Populated via runWithRequestContext() in transport.ts.
38
+ * Takes priority over runtimeContext in getContext().
39
+ */
40
+ requestContextStorage = new AsyncLocalStorage();
41
+ autoDetectedProject = null;
42
+ autoDetectionAttempted = false;
43
+ // Auto-detection results cached per workspace path.
44
+ autoDetectionCache = new Map();
45
+ // All projects found when D365FO_SOLUTIONS_PATH is configured.
46
+ allDetectedProjects = [];
47
+ // Monotonically-increasing counter identifying each background detection call;
48
+ // a scan whose generation is stale by the time it finishes is discarded so it
49
+ // can't overwrite a more recent, more specific scan's result.
50
+ detectionGeneration = 0;
51
+ // Resolves once the D365FO_SOLUTIONS_PATH eager scan completes; awaited by
52
+ // setRuntimeContextFromRoots() before matchProjectForWorkspace() runs.
53
+ allDetectedProjectsReady = null;
54
+ // Promise for the in-progress background autoDetectProject() call, awaited by
55
+ // getWorkspaceInfoDiagnostics() when autoDetectedProject is still null.
56
+ detectionInProgress = null;
57
+ xppConfigProvider = null;
58
+ xppConfig = null;
59
+ xppConfigLoaded = false;
60
+ constructor(configPath) {
61
+ // Default to .mcp.json in current directory or parent directories
62
+ this.configPath = configPath || this.findConfigFile();
63
+ }
64
+ /**
65
+ * Start scanning D365FO_SOLUTIONS_PATH immediately at startup (fire-and-forget).
66
+ * Stores a Promise so setRuntimeContextFromRoots() can await it, guaranteeing
67
+ * allDetectedProjects is populated before the first roots/list notification.
68
+ * Safe to call multiple times; subsequent calls are no-ops.
69
+ */
70
+ initEagerScan() {
71
+ const solutionsRoot = process.env.D365FO_SOLUTIONS_PATH;
72
+ if (!solutionsRoot || this.allDetectedProjectsReady)
73
+ return;
74
+ debugLog(`[ConfigManager] 🔍 Eager project scan starting: ${solutionsRoot}`);
75
+ this.allDetectedProjectsReady = (async () => {
76
+ try {
77
+ const all = await scanAllD365Projects(solutionsRoot);
78
+ if (all.length > 0) {
79
+ this.allDetectedProjects = all;
80
+ // Group by model for a compact summary; gated behind DEBUG_LOGGING.
81
+ const byModel = new Map();
82
+ for (const p of all) {
83
+ const list = byModel.get(p.modelName) ?? [];
84
+ if (p.projectPath)
85
+ list.push(p.projectPath);
86
+ byModel.set(p.modelName, list);
87
+ }
88
+ debugLog(`[ConfigManager] 🔍 Eager scan complete: ${all.length} project(s) across ${byModel.size} model(s)`);
89
+ for (const [model, paths] of byModel) {
90
+ debugLog(` ${model}: ${paths.length} project(s) (first: ${paths[0]})`);
91
+ }
92
+ }
93
+ else {
94
+ debugLog(`[ConfigManager] 🔍 Eager scan: no projects found under ${solutionsRoot}`);
95
+ }
96
+ }
97
+ catch (err) {
98
+ console.error(`[ConfigManager] 🔍 Eager scan failed:`, err);
99
+ }
100
+ })();
101
+ }
102
+ /**
103
+ * Auto-detect D365FO project from workspace.
104
+ * Called automatically when projectPath/solutionPath is requested but not configured.
105
+ * Results are cached per workspace path.
106
+ */
107
+ async autoDetectProject(workspacePath, generation) {
108
+ if (this.autoDetectionAttempted) {
109
+ return; // Only attempt once per workspace
110
+ }
111
+ this.autoDetectionAttempted = true;
112
+ // .rnrproj files only exist on Windows D365FO VMs — skip scan on Azure/Linux
113
+ if (process.platform !== 'win32') {
114
+ console.error('[ConfigManager] Non-Windows platform — skipping .rnrproj auto-detection');
115
+ this.autoDetectionCache.set(workspacePath || 'default', null);
116
+ return;
117
+ }
118
+ const cacheKey = workspacePath || 'default';
119
+ if (this.autoDetectionCache.has(cacheKey)) {
120
+ this.autoDetectedProject = this.autoDetectionCache.get(cacheKey) || null;
121
+ if (this.autoDetectedProject) {
122
+ console.error(`[ConfigManager] ⚡ Using cached auto-detection for: ${cacheKey}`);
123
+ }
124
+ return;
125
+ }
126
+ console.error('[ConfigManager] Auto-detecting D365FO project from workspace...');
127
+ // Try to detect from provided workspace path or current directory
128
+ let detectedProject = await autoDetectD365Project(workspacePath);
129
+ // Fallback: if no .rnrproj was found (workspace is the MCP server dir, not the D365FO solution),
130
+ // scan the configured packagePath directly.
131
+ // In standard D365FO layout the .rnrproj lives inside:
132
+ // PackagesLocalDirectory\<package>\<model>\<model>.rnrproj
133
+ if (!detectedProject?.projectPath) {
134
+ const packagePathHint = this.runtimeContext.packagePath ||
135
+ this.config?.servers?.context?.packagePath;
136
+ if (packagePathHint) {
137
+ console.error(`[ConfigManager] No .rnrproj in workspace — scanning packagePath: ${packagePathHint}`);
138
+ const pkgScan = await detectD365Project(packagePathHint, 4);
139
+ if (pkgScan?.projectPath) {
140
+ detectedProject = {
141
+ ...pkgScan,
142
+ // Prefer model name already resolved via Priority 4 (from PackagesLocalDirectory regex)
143
+ modelName: detectedProject?.modelName || pkgScan.modelName,
144
+ packagePath: packagePathHint,
145
+ };
146
+ console.error(`[ConfigManager] ✅ Found .rnrproj via packagePath scan: ${pkgScan.projectPath}`);
147
+ }
148
+ else {
149
+ console.error(`[ConfigManager] No .rnrproj found in packagePath either`);
150
+ }
151
+ }
152
+ }
153
+ // Store in cache (PERFORMANCE FIX)
154
+ this.autoDetectionCache.set(cacheKey, detectedProject);
155
+ // Guard: if a newer setRuntimeContext call has already started a fresher detection,
156
+ // discard this (now stale) result so we never overwrite a more recent correct answer.
157
+ const isStale = generation !== undefined && generation < this.detectionGeneration;
158
+ if (isStale) {
159
+ // Benign race-guard: a newer detection (e.g. roots/list arriving after the
160
+ // initial workspace seed) superseded this one, so we discard the stale result.
161
+ // Expected during normal startup — gated behind DEBUG_LOGGING so it doesn't
162
+ // surface as a client-facing warning.
163
+ debugLog(`[ConfigManager] ⚠️ Stale workspace detection (gen ${generation} < current ${this.detectionGeneration}) — skipping project assignment`);
164
+ // Do NOT return early: D365FO_SOLUTIONS_PATH scan below must still run so
165
+ // that allDetectedProjects is populated for future matchProjectForWorkspace calls.
166
+ }
167
+ else if (detectedProject) {
168
+ this.autoDetectedProject = detectedProject;
169
+ console.error('[ConfigManager] ✅ Auto-detection successful:');
170
+ console.error(` ProjectPath: ${detectedProject.projectPath}`);
171
+ console.error(` ModelName: ${detectedProject.modelName}`);
172
+ console.error(` SolutionPath: ${detectedProject.solutionPath}`);
173
+ // ✨ Register the auto-detected model as custom
174
+ registerCustomModel(detectedProject.modelName);
175
+ }
176
+ else {
177
+ console.error('[ConfigManager] ⚠️ Auto-detection failed - no .rnrproj files found');
178
+ }
179
+ // Scan D365FO_SOLUTIONS_PATH for all available projects (for solution-switching support).
180
+ // ALWAYS runs — even on stale scans — because allDetectedProjects must be ready for
181
+ // matchProjectForWorkspace() which is called from setRuntimeContextFromRoots().
182
+ const solutionsRoot = process.env.D365FO_SOLUTIONS_PATH;
183
+ if (solutionsRoot) {
184
+ // Skip re-scan if initEagerScan() already populated the list (avoids duplicate log output).
185
+ const needsScan = this.allDetectedProjects.length === 0;
186
+ if (needsScan) {
187
+ const all = await scanAllD365Projects(solutionsRoot);
188
+ if (all.length > 0) {
189
+ this.allDetectedProjects = all;
190
+ const byModel = new Map();
191
+ for (const p of all)
192
+ byModel.set(p.modelName, (byModel.get(p.modelName) ?? 0) + 1);
193
+ console.error(`[ConfigManager] Found ${all.length} project(s) across ${byModel.size} model(s) under D365FO_SOLUTIONS_PATH`);
194
+ }
195
+ }
196
+ const all = this.allDetectedProjects;
197
+ // Re-check staleness: time has passed since the initial check above.
198
+ const isNowStale = generation !== undefined && generation < this.detectionGeneration;
199
+ // Use first found as primary if workspace detection yielded nothing and scan is current.
200
+ // Skip Microsoft demo/tutorial model names (e.g. FleetManagement) — these appear when
201
+ // a developer creates a new VS project and leaves the default model name unchanged.
202
+ // Prefer the first custom (non-demo) model; only fall back to demo models when that
203
+ // is ALL that was found (unusual, but possible in purely tutorial repos).
204
+ if (all.length > 0 && !this.autoDetectedProject && !isNowStale) {
205
+ const primary = all.find(p => !isMicrosoftDemoModel(p.modelName)) ?? all[0];
206
+ if (isMicrosoftDemoModel(primary.modelName)) {
207
+ console.error(`[ConfigManager] ⚠️ All detected projects are Microsoft demo models — using "${primary.modelName}" as fallback.`, `This usually means the VS project wizard default model was not changed.`);
208
+ }
209
+ this.autoDetectedProject = primary;
210
+ registerCustomModel(primary.modelName);
211
+ console.error(`[ConfigManager] ✅ Using first found project as primary: ${primary.modelName}`);
212
+ }
213
+ }
214
+ }
215
+ /**
216
+ * Set runtime context (e.g., from GitHub Copilot workspace detection)
217
+ * This allows dynamic context that overrides .mcp.json configuration
218
+ * PERFORMANCE: Uses cache, only resets when workspace differs from cached value.
219
+ */
220
+ setRuntimeContext(context) {
221
+ const workspaceChanged = context.workspacePath &&
222
+ context.workspacePath !== this.runtimeContext.workspacePath;
223
+ const projectChanged = context.projectPath &&
224
+ context.projectPath !== this.runtimeContext.projectPath;
225
+ this.runtimeContext = { ...this.runtimeContext, ...context };
226
+ // Only reset if workspace changed AND not in cache (PERFORMANCE FIX)
227
+ if (workspaceChanged || projectChanged) {
228
+ const cacheKey = context.workspacePath || context.projectPath || 'default';
229
+ if (!this.autoDetectionCache.has(cacheKey)) {
230
+ this.autoDetectionAttempted = false;
231
+ this.autoDetectedProject = null;
232
+ // Fast-path: try exact or close match against known projects.
233
+ // Falls through to BFS only when nothing specific is found.
234
+ if (this.allDetectedProjects.length > 0 && context.workspacePath) {
235
+ const matched = this.matchProjectForWorkspace(context.workspacePath);
236
+ if (matched) {
237
+ // Increment generation so any in-flight BFS (started earlier) treats
238
+ // its result as stale and will not overwrite this fast-path assignment.
239
+ ++this.detectionGeneration;
240
+ this.autoDetectedProject = matched;
241
+ this.autoDetectionAttempted = true;
242
+ this.autoDetectionCache.set(cacheKey, matched);
243
+ console.error(`[ConfigManager] ⚡ Workspace matched known project: ${matched.modelName} (gen ${this.detectionGeneration})`);
244
+ return;
245
+ }
246
+ }
247
+ console.error(`[ConfigManager] New workspace — eager auto-detect starting: ${cacheKey}`);
248
+ // Increment generation so any previous background scan that finishes later
249
+ // will recognise its result as stale and discard it.
250
+ const gen = ++this.detectionGeneration;
251
+ // Eager: kick off detection immediately (background) so the result is
252
+ // ready in cache before the first tool call arrives.
253
+ // Store the promise so getWorkspaceInfoDiagnostics() can await it when
254
+ // autoDetectedProject is still null (fixes "null on first call" race).
255
+ this.detectionInProgress = this.autoDetectProject(context.workspacePath, gen);
256
+ this.detectionInProgress.catch(() => { });
257
+ }
258
+ else {
259
+ // Cache hit — recycle result without re-scanning disk
260
+ this.autoDetectedProject = this.autoDetectionCache.get(cacheKey) || null;
261
+ this.autoDetectionAttempted = true;
262
+ if (this.autoDetectedProject) {
263
+ console.error(`[ConfigManager] ⚡ Cache hit — recycled detection for: ${cacheKey}`);
264
+ }
265
+ }
266
+ }
267
+ }
268
+ /**
269
+ * Called by mcpServer when roots/list arrives (all roots from VS 2022 / VS Code).
270
+ * Tries every root path to find an unambiguous project match.
271
+ *
272
+ * Detection order:
273
+ * 1. Exact/contained path match (workspace IS or is INSIDE a project dir)
274
+ * 2. Git branch name → project name substring match
275
+ * (handles VS 2022 sending solution root K:\repos\Contoso for ALL projects;
276
+ * branch feature/4105-ContosoBankPaymProposal → matches model "ContosoBank")
277
+ * 3. BFS fallback
278
+ */
279
+ async setRuntimeContextFromRoots(rootPaths) {
280
+ // Increment generation upfront so any in-flight BFS scan started earlier
281
+ // will recognise its result as stale and discard it.
282
+ const gen = ++this.detectionGeneration;
283
+ // Await the eager D365FO_SOLUTIONS_PATH scan so allDetectedProjects is populated
284
+ // before we try matchProjectForWorkspace (otherwise it always returns null).
285
+ // Cap at 5 s — consistent with the timeout used in getAutoDetectedProject().
286
+ if (this.allDetectedProjectsReady) {
287
+ await Promise.race([
288
+ this.allDetectedProjectsReady,
289
+ new Promise(resolve => setTimeout(resolve, 5_000)),
290
+ ]);
291
+ }
292
+ // Priority 1: exact / unambiguous path match
293
+ for (const rootPath of rootPaths) {
294
+ const match = this.matchProjectForWorkspace(rootPath);
295
+ if (match) {
296
+ this.runtimeContext = { ...this.runtimeContext, workspacePath: rootPath };
297
+ this.autoDetectedProject = match;
298
+ this.autoDetectionAttempted = true;
299
+ this.autoDetectionCache.set(rootPath, match);
300
+ registerCustomModel(match.modelName);
301
+ console.error(`[ConfigManager] ⚡ Root matched project: ${match.modelName} (gen ${gen}, ${match.projectPath})`);
302
+ return;
303
+ }
304
+ }
305
+ // Priority 2: git branch name → project name fuzzy match.
306
+ // VS 2022 always sends the solution root (ancestor of ALL projects) so path
307
+ // matching is always ambiguous. The git branch, however, usually encodes the
308
+ // feature/project being worked on, e.g. "feature/4105-ContosoBankPaymProposal".
309
+ if (this.allDetectedProjects.length > 0 && rootPaths.length > 0) {
310
+ for (const rootPath of rootPaths) {
311
+ const branch = await detectGitBranch(rootPath);
312
+ if (branch) {
313
+ const gitMatch = this.findProjectByBranchName(branch);
314
+ if (gitMatch) {
315
+ this.runtimeContext = { ...this.runtimeContext, workspacePath: rootPath };
316
+ this.autoDetectedProject = gitMatch;
317
+ this.autoDetectionAttempted = true;
318
+ this.autoDetectionCache.set(rootPath, gitMatch);
319
+ registerCustomModel(gitMatch.modelName);
320
+ console.error(`[ConfigManager] 🌿 Git branch "${branch}" → project: ${gitMatch.modelName} (gen ${gen})`);
321
+ return;
322
+ }
323
+ console.error(`[ConfigManager] 🌿 Git branch "${branch}" — no project name match (gen ${gen})`);
324
+ break; // only try git on the first root that has a branch
325
+ }
326
+ }
327
+ }
328
+ // Priority 3: BFS fallback — only when no cached result exists.
329
+ // We deliberately do NOT delete the cache here: if forceProject() stored a
330
+ // specific project for this workspace path, we want to honour that choice
331
+ // across roots/list notifications (e.g. git branch switch that produces no
332
+ // project-name match). The user can always call get_workspace_info with
333
+ // projectPath to explicitly override.
334
+ if (rootPaths.length > 0) {
335
+ const firstPath = rootPaths[0];
336
+ const normalizedFirst = normalizePath(firstPath);
337
+ if (this.autoDetectionCache.has(normalizedFirst)) {
338
+ // Use the cached (possibly user-forced) result instead of running BFS.
339
+ const cached = this.autoDetectionCache.get(normalizedFirst);
340
+ this.runtimeContext = { ...this.runtimeContext, workspacePath: firstPath };
341
+ this.autoDetectedProject = cached ?? null;
342
+ this.autoDetectionAttempted = true;
343
+ if (cached) {
344
+ console.error(`[ConfigManager] ⚡ BFS skipped — cache hit for workspace: ${cached.modelName} (gen ${gen})`);
345
+ registerCustomModel(cached.modelName);
346
+ }
347
+ return;
348
+ }
349
+ console.error(`[ConfigManager] Roots ambiguous (gen ${gen}) — BFS fallback on: ${firstPath}`);
350
+ // If stored workspace already equals firstPath, setRuntimeContext sees
351
+ // workspaceChanged=false and skips detection — prevent that.
352
+ if (this.runtimeContext.workspacePath === firstPath) {
353
+ this.runtimeContext = { ...this.runtimeContext, workspacePath: undefined };
354
+ }
355
+ this.autoDetectionAttempted = false;
356
+ this.autoDetectedProject = null;
357
+ this.setRuntimeContext({ workspacePath: firstPath });
358
+ }
359
+ }
360
+ /**
361
+ * Find the project whose model name appears as a substring of the git branch name.
362
+ * Prefer the LONGEST match to avoid short-prefix false positives
363
+ * (e.g. "Con" would match everything; "ContosoBank" is more specific than "Contoso").
364
+ *
365
+ * Examples:
366
+ * branch "feature/4105-ContosoBankPaymProposal" → model "ContosoBank" (prefix of "ContosoBankPaymProposal")
367
+ * branch "feature/ContosoEDS-cleanup" → model "ContosoEDS"
368
+ */
369
+ findProjectByBranchName(branchName) {
370
+ const lowerBranch = branchName.toLowerCase();
371
+ let bestMatch = null;
372
+ let bestMatchLength = 0;
373
+ for (const project of this.allDetectedProjects) {
374
+ const lowerModel = project.modelName.toLowerCase();
375
+ // Require at least 4 characters to avoid accidental single-letter matches
376
+ if (lowerModel.length >= 4 && lowerBranch.includes(lowerModel) && lowerModel.length > bestMatchLength) {
377
+ bestMatch = project;
378
+ bestMatchLength = lowerModel.length;
379
+ }
380
+ }
381
+ if (bestMatch) {
382
+ console.error(`[ConfigManager] 🌿 Branch "${branchName}" → longest model match: "${bestMatch.modelName}" (${bestMatchLength} chars)`);
383
+ }
384
+ return bestMatch;
385
+ }
386
+ /**
387
+ * Find the single unambiguous project that corresponds to a workspace path.
388
+ * Returns null when:
389
+ * - no known projects (allDetectedProjects is empty)
390
+ * - workspace is a BROAD ancestor that contains MULTIPLE projects (ambiguous)
391
+ *
392
+ * Only returns a project when the match is specific:
393
+ * a) workspace == project directory (exact)
394
+ * b) workspace is INSIDE the project directory (workspace is a sub-folder)
395
+ * c) workspace is DIRECT parent of EXACTLY ONE project (unambiguous ancestor)
396
+ */
397
+ matchProjectForWorkspace(workspacePath) {
398
+ if (!this.allDetectedProjects.length)
399
+ return null;
400
+ const normalizedWp = path.normalize(workspacePath).toLowerCase();
401
+ // Priority A: workspace IS or is INSIDE a project directory
402
+ // (most specific — unambiguous by definition)
403
+ for (const p of this.allDetectedProjects) {
404
+ if (!p.projectPath)
405
+ continue;
406
+ const projectDir = path.normalize(path.dirname(p.projectPath)).toLowerCase();
407
+ if (normalizedWp === projectDir || normalizedWp.startsWith(projectDir + path.sep)) {
408
+ return p;
409
+ }
410
+ }
411
+ // Priority B: workspace is an ancestor — but only if EXACTLY ONE project lives under it
412
+ const children = this.allDetectedProjects.filter(p => {
413
+ if (!p.projectPath)
414
+ return false;
415
+ const projectDir = path.normalize(path.dirname(p.projectPath)).toLowerCase();
416
+ return projectDir.startsWith(normalizedWp + path.sep);
417
+ });
418
+ if (children.length === 1) {
419
+ console.error(`[ConfigManager] Single project under workspace — using: ${children[0].modelName}`);
420
+ return children[0];
421
+ }
422
+ if (children.length > 1) {
423
+ // Priority C: D365FO convention — the "primary" project in a solution folder
424
+ // usually has the SAME NAME as the solution folder itself.
425
+ // e.g. VS 2022 sends root "ContosoCore - FeatureManagement/" which contains
426
+ // ContosoReports - FeatureManagement/, ContosoCore - FeatureManagement/, …
427
+ // → prefer the project whose own folder name matches the workspace base name.
428
+ const wpBase = path.basename(workspacePath).toLowerCase();
429
+ const nameMatch = children.find(p => {
430
+ const projectFolderName = path.basename(path.dirname(p.projectPath)).toLowerCase();
431
+ return projectFolderName === wpBase;
432
+ });
433
+ if (nameMatch) {
434
+ console.error(`[ConfigManager] ⚡ Solution-name match (${children.length} candidates): ${nameMatch.modelName}`);
435
+ return nameMatch;
436
+ }
437
+ console.error(`[ConfigManager] Workspace is ancestor of ${children.length} projects — ambiguous, not switching`);
438
+ }
439
+ return null;
440
+ }
441
+ /**
442
+ * Clear runtime context
443
+ */
444
+ clearRuntimeContext() {
445
+ this.runtimeContext = {};
446
+ }
447
+ /**
448
+ * Find .mcp.json file.
449
+ * Priority:
450
+ * 1. MCP_CONFIG_PATH env var (explicit override)
451
+ * 2. User home directory — single canonical config location (~/.mcp.json)
452
+ * 3. Current directory and up to 5 parent directories (project-specific override, rare)
453
+ * 4. Current directory fallback (file may not exist yet)
454
+ */
455
+ findConfigFile() {
456
+ // Step 1: Explicit override via MCP_CONFIG_PATH env var
457
+ const envConfigPath = process.env.MCP_CONFIG_PATH;
458
+ if (envConfigPath && existsSync(envConfigPath)) {
459
+ console.error(`[ConfigManager] Using MCP_CONFIG_PATH: ${envConfigPath}`);
460
+ return envConfigPath;
461
+ }
462
+ // Step 2: User home directory — primary location, use os.homedir() which is reliable
463
+ // even when USERPROFILE / HOME env vars are not set in the server process.
464
+ const homeDir = os.homedir();
465
+ if (homeDir) {
466
+ const homeConfigPath = path.join(homeDir, '.mcp.json');
467
+ try {
468
+ if (existsSync(homeConfigPath)) {
469
+ console.error(`[ConfigManager] Using config from home directory: ${homeConfigPath}`);
470
+ return homeConfigPath;
471
+ }
472
+ }
473
+ catch {
474
+ // Continue searching
475
+ }
476
+ }
477
+ // Step 3: Search in current directory and parent directories (project-specific override)
478
+ let currentDir = process.cwd();
479
+ const maxDepth = 5;
480
+ let depth = 0;
481
+ while (depth < maxDepth) {
482
+ const configPath = path.join(currentDir, '.mcp.json');
483
+ try {
484
+ if (existsSync(configPath)) {
485
+ console.error(`[ConfigManager] Using project config: ${configPath}`);
486
+ return configPath;
487
+ }
488
+ }
489
+ catch {
490
+ // Continue searching
491
+ }
492
+ const parentDir = path.dirname(currentDir);
493
+ if (parentDir === currentDir) {
494
+ break; // Reached root
495
+ }
496
+ currentDir = parentDir;
497
+ depth++;
498
+ }
499
+ // Step 4: Fallback to current directory (file may not exist yet)
500
+ return path.join(process.cwd(), '.mcp.json');
501
+ }
502
+ /**
503
+ * Load configuration from .mcp.json file.
504
+ * Idempotent — skips re-reading if config is already loaded.
505
+ * Call ensureLoaded() for lazy initialization.
506
+ */
507
+ async load() {
508
+ if (this.config) {
509
+ return this.config; // Already loaded — skip
510
+ }
511
+ try {
512
+ console.error(`[ConfigManager] Loading config from: ${this.configPath}`);
513
+ const content = await fs.readFile(this.configPath, 'utf-8');
514
+ this.config = JSON.parse(content);
515
+ console.error('[ConfigManager] Config loaded successfully');
516
+ return this.config;
517
+ }
518
+ catch (error) {
519
+ if (error?.code === 'ENOENT') {
520
+ // .mcp.json is optional — not present on Azure/cloud deployments, only on local Windows VM.
521
+ console.error(`[ConfigManager] .mcp.json not found at ${this.configPath} — running without local config (expected on Azure)`);
522
+ }
523
+ else {
524
+ console.error('[ConfigManager] Failed to load .mcp.json:', error);
525
+ }
526
+ return null;
527
+ }
528
+ }
529
+ /**
530
+ * Ensure config is loaded — lazy initializer.
531
+ * Safe to call multiple times; loads only once.
532
+ */
533
+ async ensureLoaded() {
534
+ await this.load();
535
+ // Register the explicitly-configured custom models exactly once. The target
536
+ // model resolved from configuration (D365FO_MODEL_NAME env var or a modelName
537
+ // key in .mcp.json) is custom by definition, as are any CUSTOM_MODELS entries.
538
+ // Registering them here makes isCustomModel() deterministic regardless of call
539
+ // ordering — without it, a long model name whose ISV prefix is only an
540
+ // abbreviation (e.g. prefix "CR" for "ContosoRobotics") is misclassified as a
541
+ // Microsoft standard model until some later operation happens to register it.
542
+ if (!this.configuredModelsRegistered) {
543
+ this.configuredModelsRegistered = true;
544
+ const configuredModel = this.getContext()?.modelName?.trim();
545
+ if (configuredModel) {
546
+ registerCustomModel(configuredModel);
547
+ }
548
+ // CUSTOM_MODELS literals (wildcard patterns are matched directly by
549
+ // isCustomModel, so they don't need to be registered as exact names).
550
+ for (const entry of getCustomModels()) {
551
+ if (!entry.includes('*')) {
552
+ registerCustomModel(entry);
553
+ }
554
+ }
555
+ }
556
+ }
557
+ /**
558
+ * Get context configuration
559
+ * Merges .mcp.json config with runtime context (runtime takes priority)
560
+ */
561
+ getContext() {
562
+ // Prefer top-level context (doesn't clash with VS 2022 server discovery).
563
+ // Fall back to servers.context for backward compatibility.
564
+ const fileContext = this.config?.context || this.config?.servers?.context || null;
565
+ // Environment variables (D365FO_* prefix) — safe in .mcp.json env{} blocks
566
+ // because VS 2022 passes them to the server subprocess without side effects.
567
+ const envContext = {};
568
+ if (process.env.D365FO_WORKSPACE_PATH)
569
+ envContext.workspacePath = process.env.D365FO_WORKSPACE_PATH;
570
+ if (process.env.D365FO_PACKAGE_PATH)
571
+ envContext.packagePath = process.env.D365FO_PACKAGE_PATH;
572
+ if (process.env.D365FO_MODEL_NAME)
573
+ envContext.modelName = process.env.D365FO_MODEL_NAME;
574
+ if (process.env.D365FO_CUSTOM_PACKAGES_PATH)
575
+ envContext.customPackagesPath = process.env.D365FO_CUSTOM_PACKAGES_PATH;
576
+ if (process.env.D365FO_MICROSOFT_PACKAGES_PATH)
577
+ envContext.microsoftPackagesPath = process.env.D365FO_MICROSOFT_PACKAGES_PATH;
578
+ if (process.env.D365FO_PROJECT_PATH)
579
+ envContext.projectPath = process.env.D365FO_PROJECT_PATH;
580
+ if (process.env.D365FO_SOLUTION_PATH)
581
+ envContext.solutionPath = process.env.D365FO_SOLUTION_PATH;
582
+ if (process.env.D365FO_DEV_ENVIRONMENT_TYPE)
583
+ envContext.devEnvironmentType = process.env.D365FO_DEV_ENVIRONMENT_TYPE;
584
+ if (process.env.D365FO_BRIDGE_LOG_FILE)
585
+ envContext.bridgeLogFile = process.env.D365FO_BRIDGE_LOG_FILE;
586
+ // Per-request context (AsyncLocalStorage) takes priority over the shared
587
+ // runtimeContext singleton — this prevents workspace paths from bleeding
588
+ // between concurrent HTTP requests from different users.
589
+ const requestCtx = this.requestContextStorage.getStore() ?? {};
590
+ const effectiveRuntime = Object.keys(requestCtx).length > 0
591
+ ? { ...this.runtimeContext, ...requestCtx }
592
+ : this.runtimeContext;
593
+ const hasEnvContext = Object.keys(envContext).length > 0;
594
+ if (!fileContext && !hasEnvContext && Object.keys(effectiveRuntime).length === 0) {
595
+ return null;
596
+ }
597
+ // Priority: runtime > env vars > file config
598
+ return {
599
+ ...fileContext,
600
+ ...envContext,
601
+ ...effectiveRuntime,
602
+ };
603
+ }
604
+ /**
605
+ * Run fn inside an isolated per-request AsyncLocalStorage context.
606
+ * All calls to getContext() within fn (and any awaited Promises it starts)
607
+ * will see ctx merged over runtimeContext, without mutating shared state.
608
+ */
609
+ runWithRequestContext(ctx, fn) {
610
+ return this.requestContextStorage.run(ctx, fn);
611
+ }
612
+ /**
613
+ * Returns true when the current async call stack runs inside a request-scoped
614
+ * AsyncLocalStorage context. HTTP transport uses this for per-request
615
+ * isolation, so callers should avoid mutating the shared runtimeContext.
616
+ */
617
+ hasRequestContext() {
618
+ return this.requestContextStorage.getStore() !== undefined;
619
+ }
620
+ /**
621
+ * Returns true when the static configuration (`.mcp.json` + `D365FO_*` env vars)
622
+ * already provides enough workspace context to work without calling `roots/list`.
623
+ *
624
+ * In instanced mode every project has its own dedicated server instance whose
625
+ * config contains both a model name and at least one path. Calling `roots/list`
626
+ * is then unnecessary and causes a -32001 timeout when `mcp-remote` is the
627
+ * transport (it has a hard-coded 60 s request timeout and cannot complete a
628
+ * server-initiated request over HTTP). In instanced mode the workspace is also
629
+ * immutable per instance, so `roots_list_changed` notifications are irrelevant.
630
+ *
631
+ * Awaits `ensureLoaded()` so it is safe to call before the first tool invocation.
632
+ */
633
+ async isStaticallyConfigured() {
634
+ await this.ensureLoaded();
635
+ const ctx = this.getContext();
636
+ const hasModelName = !!ctx?.modelName;
637
+ const hasPath = !!(ctx?.workspacePath ||
638
+ ctx?.packagePath ||
639
+ ctx?.customPackagesPath ||
640
+ ctx?.projectPath ||
641
+ ctx?.solutionPath);
642
+ return hasModelName && hasPath;
643
+ }
644
+ /**
645
+ * Get workspace path from configuration
646
+ * Returns the base PackagesLocalDirectory path if workspacePath contains it
647
+ */
648
+ getPackagePath() {
649
+ const context = this.getContext();
650
+ // If packagePath is explicitly set, use it
651
+ if (context?.packagePath) {
652
+ const resolved = normalizePath(context.packagePath);
653
+ console.error(`[ConfigManager] Using explicit packagePath: ${resolved}`);
654
+ return resolved;
655
+ }
656
+ // If workspacePath contains PackagesLocalDirectory, extract the base path.
657
+ // Supports both one-level and two-level paths:
658
+ // K:\AosService\PackagesLocalDirectory\MyPackage\MyModel → K:\AosService\PackagesLocalDirectory
659
+ // K:\AosService\PackagesLocalDirectory\MyModel → K:\AosService\PackagesLocalDirectory
660
+ if (context?.workspacePath) {
661
+ const normalized = path.normalize(context.workspacePath);
662
+ const match = normalized.match(/^(.+[\\\/]PackagesLocalDirectory)(?:[\\\/]|$)/i);
663
+ if (match) {
664
+ // Normalize path separators: D365FO paths are always Windows paths (backslashes)
665
+ const extracted = match[1].replace(/\//g, '\\');
666
+ const resolved = normalizePath(extracted);
667
+ console.error(`[ConfigManager] Extracted packagePath from workspacePath: ${resolved}`);
668
+ return resolved;
669
+ }
670
+ }
671
+ // Fallback: check if auto-detection already ran and found packagePath
672
+ if (this.autoDetectedProject?.packagePath) {
673
+ return normalizePath(this.autoDetectedProject.packagePath);
674
+ }
675
+ // UDE mode: prefer customPackagesPath from XPP config over well-known path probes.
676
+ // On UDE boxes, C:\AosService\PackagesLocalDirectory may exist but be empty.
677
+ if (this.xppConfig?.customPackagesPath && existsSync(this.xppConfig.customPackagesPath)) {
678
+ if (!this._packagePathLoggedOnce) {
679
+ console.error(`[ConfigManager] ✅ UDE customPackagesPath: ${this.xppConfig.customPackagesPath}`);
680
+ this._packagePathLoggedOnce = true;
681
+ }
682
+ return normalizePath(this.xppConfig.customPackagesPath);
683
+ }
684
+ // Last resort (Windows only): probe well-known PackagesLocalDirectory locations.
685
+ // Covers the two standard D365FO installation scenarios without requiring .mcp.json config:
686
+ // C:\AosService\PackagesLocalDirectory → VHD / local developer machine
687
+ // K:\AosService\PackagesLocalDirectory → cloud-hosted VM (standard Azure Dev/Test image)
688
+ if (process.platform === 'win32') {
689
+ const wellKnownCandidates = [
690
+ 'C:\\AosService\\PackagesLocalDirectory',
691
+ 'J:\\AosService\\PackagesLocalDirectory',
692
+ 'K:\\AosService\\PackagesLocalDirectory',
693
+ ];
694
+ for (const candidate of wellKnownCandidates) {
695
+ if (existsSync(candidate)) {
696
+ if (!this._packagePathLoggedOnce) {
697
+ console.error(`[ConfigManager] ✅ Auto-probed packagePath: ${candidate}`);
698
+ this._packagePathLoggedOnce = true;
699
+ }
700
+ return candidate;
701
+ }
702
+ }
703
+ }
704
+ return null;
705
+ }
706
+ /**
707
+ * Get workspace path (specific model path)
708
+ */
709
+ getWorkspacePath() {
710
+ const context = this.getContext();
711
+ return context?.workspacePath || null;
712
+ }
713
+ /**
714
+ * Get model name from the last segment of workspacePath.
715
+ * Supports both path formats:
716
+ * K:\AOSService\PackagesLocalDirectory\MyPackage\MyModel → "MyModel"
717
+ * K:\AOSService\PackagesLocalDirectory\MyModel → "MyModel"
718
+ * This allows automatic model detection on non-Windows (Azure) without D365FO_MODEL_NAME env var.
719
+ */
720
+ getModelNameFromWorkspacePath() {
721
+ const workspacePath = this.getContext()?.workspacePath;
722
+ if (!workspacePath)
723
+ return null;
724
+ // Handle Windows paths on non-Windows: normalize both slash types and strip trailing slashes
725
+ const normalized = workspacePath.replace(/\\/g, '/').replace(/\/+$/, '');
726
+ const segment = normalized.split('/').pop() || null;
727
+ return segment || null;
728
+ }
729
+ /**
730
+ * Get package name from workspacePath when it follows the two-level format:
731
+ * K:\AOSService\PackagesLocalDirectory\YourPackageName\YourModelName → "YourPackageName"
732
+ * Returns null for one-level paths or when workspacePath is not set.
733
+ */
734
+ getPackageNameFromWorkspacePath() {
735
+ const workspacePath = this.getContext()?.workspacePath;
736
+ if (!workspacePath)
737
+ return null;
738
+ const normalized = path.normalize(workspacePath);
739
+ const twoLevel = normalized.match(/^.+[\\\/]PackagesLocalDirectory[\\\/]([^\\\/]+)[\\\/][^\\\/]+\\?\/?$/i);
740
+ return twoLevel ? twoLevel[1] : null;
741
+ }
742
+ /**
743
+ * Get model name from configuration.
744
+ * Priority:
745
+ * 1) Explicit modelName in mcp.json context
746
+ * 2) Last segment of workspacePath — ONLY when path contains PackagesLocalDirectory
747
+ * (AOT paths like K:\AosService\PackagesLocalDirectory\MyModel).
748
+ * Skipped for solution/repo paths like K:\repos\Contoso — those would wrongly
749
+ * return "Contoso" instead of the real model name from the .rnrproj file.
750
+ * 3) Auto-detected model name from .rnrproj scan
751
+ * 4) D365FO_MODEL_NAME env var
752
+ */
753
+ getModelName() {
754
+ const context = this.getContext();
755
+ // 1. Explicit config always wins
756
+ if (context?.modelName)
757
+ return context.modelName;
758
+ // 2. WorkspacePath derivation ONLY for AOT paths inside PackagesLocalDirectory
759
+ const wp = context?.workspacePath;
760
+ if (wp && /PackagesLocalDirectory/i.test(wp)) {
761
+ const fromWp = this.getModelNameFromWorkspacePath();
762
+ // Skip kebab-case names (repo slugs, not D365FO package names)
763
+ if (fromWp && !fromWp.includes('-'))
764
+ return fromWp;
765
+ }
766
+ // 3. Result from background auto-detection (.rnrproj scan)
767
+ if (this.autoDetectedProject?.modelName) {
768
+ return this.autoDetectedProject.modelName;
769
+ }
770
+ // 4. Env var fallback
771
+ return process.env.D365FO_MODEL_NAME || null;
772
+ }
773
+ /**
774
+ * Get model name together with its detection source for diagnostics.
775
+ * Mirrors the exact priority chain of getModelName() but also returns
776
+ * a human-readable source string for display in get_workspace_info.
777
+ */
778
+ getModelNameWithSource() {
779
+ const context = this.getContext();
780
+ if (context?.modelName) {
781
+ // getContext() merges three sources with precedence runtime > env var > file.
782
+ // Report the one that actually produced the value, so the diagnostics don't
783
+ // send the developer looking in .mcp.json for a value that came from the
784
+ // D365FO_MODEL_NAME environment variable.
785
+ const fileContext = this.config?.context || this.config?.servers?.context || null;
786
+ const requestModel = this.requestContextStorage.getStore()?.modelName;
787
+ const runtimeModel = requestModel ?? this.runtimeContext.modelName;
788
+ const envModel = process.env.D365FO_MODEL_NAME?.trim() || undefined;
789
+ let source = '.mcp.json';
790
+ if (runtimeModel) {
791
+ source = 'runtime context (from VS / VS Code)';
792
+ }
793
+ else if (envModel) {
794
+ source = 'D365FO_MODEL_NAME env var';
795
+ }
796
+ else if (fileContext?.modelName) {
797
+ source = '.mcp.json';
798
+ }
799
+ return { modelName: context.modelName, source };
800
+ }
801
+ const wp = context?.workspacePath;
802
+ if (wp && /PackagesLocalDirectory/i.test(wp)) {
803
+ const fromWp = this.getModelNameFromWorkspacePath();
804
+ if (fromWp && !fromWp.includes('-')) {
805
+ return { modelName: fromWp, source: 'workspacePath segment' };
806
+ }
807
+ }
808
+ if (this.autoDetectedProject?.modelName) {
809
+ return { modelName: this.autoDetectedProject.modelName, source: 'auto-detected from .rnrproj' };
810
+ }
811
+ return { modelName: null, source: '(not configured)' };
812
+ }
813
+ /**
814
+ * Returns all workspace-info diagnostics in one async call, including
815
+ * the human-readable source for each resolved value.
816
+ * Used by the get_workspace_info tool to produce the Phase-5 diagnostics output.
817
+ */
818
+ async getWorkspaceInfoDiagnostics() {
819
+ // Ensure config is loaded and auto-detection has had a chance to run
820
+ await this.ensureLoaded();
821
+ // If the D365FO_SOLUTIONS_PATH eager scan is still running, wait for it
822
+ // first — that scan populates allDetectedProjects which setRuntimeContextFromRoots
823
+ // needs to do a path-match. Cap at 5 s so we never block Copilot past its timeout.
824
+ if (this.allDetectedProjectsReady) {
825
+ await Promise.race([
826
+ this.allDetectedProjectsReady,
827
+ new Promise(resolve => setTimeout(resolve, 5_000)),
828
+ ]);
829
+ }
830
+ if (!this.autoDetectionAttempted) {
831
+ const ctx = this.config?.servers?.context;
832
+ await this.autoDetectProject(this.runtimeContext.workspacePath || ctx?.workspacePath);
833
+ }
834
+ else if (!this.autoDetectedProject && this.detectionInProgress) {
835
+ // autoDetectionAttempted was set immediately when background scan started,
836
+ // but the scan hasn't finished yet — wait up to 5 s for the result.
837
+ await Promise.race([
838
+ this.detectionInProgress,
839
+ new Promise(resolve => setTimeout(resolve, 5_000)),
840
+ ]);
841
+ this.detectionInProgress = null;
842
+ }
843
+ // Model name
844
+ const { modelName, source: modelSource } = this.getModelNameWithSource();
845
+ // Project path
846
+ let projectPath = null;
847
+ let projectSource = '(not detected)';
848
+ if (this.runtimeContext.projectPath) {
849
+ projectPath = this.runtimeContext.projectPath;
850
+ projectSource = 'runtime context (from VS Code)';
851
+ }
852
+ else if (this.config?.servers?.context?.projectPath) {
853
+ projectPath = this.config?.servers?.context?.projectPath ?? null;
854
+ projectSource = '.mcp.json';
855
+ }
856
+ else if (this.autoDetectedProject?.projectPath) {
857
+ projectPath = this.autoDetectedProject.projectPath;
858
+ projectSource = 'auto-detected from .rnrproj';
859
+ }
860
+ // Package path (MS framework / standard packages — read-only reference root)
861
+ const packagePath = this.getPackagePath();
862
+ let packageSource = '(not configured)';
863
+ const context = this.getContext();
864
+ const fileContext = this.config?.context || this.config?.servers?.context || null;
865
+ if (context?.packagePath) {
866
+ // getContext() merges env vars with higher priority than .mcp.json.
867
+ // Report the actual source so diagnostics don't mislead the developer.
868
+ if (process.env.D365FO_PACKAGE_PATH?.trim()) {
869
+ packageSource = 'D365FO_PACKAGE_PATH env var';
870
+ }
871
+ else if (fileContext?.packagePath) {
872
+ packageSource = '.mcp.json';
873
+ }
874
+ else {
875
+ packageSource = 'env var';
876
+ }
877
+ }
878
+ else if (context?.workspacePath && /PackagesLocalDirectory/i.test(context.workspacePath)) {
879
+ packageSource = 'workspacePath';
880
+ }
881
+ else if (this.autoDetectedProject?.packagePath) {
882
+ packageSource = 'auto-detected from .rnrproj';
883
+ }
884
+ else if (packagePath) {
885
+ packageSource = 'well-known path probe';
886
+ }
887
+ // Custom write path (D365FO_CUSTOM_PACKAGES_PATH / customPackagesPath in context)
888
+ // — this is the repo working tree where custom model XML is written and tracked by git.
889
+ const customPackagesPath = await this.getCustomPackagesPath();
890
+ let customPackagesSource = '(not configured)';
891
+ if (customPackagesPath) {
892
+ if (process.env.D365FO_CUSTOM_PACKAGES_PATH?.trim()) {
893
+ customPackagesSource = 'D365FO_CUSTOM_PACKAGES_PATH env var';
894
+ }
895
+ else if (fileContext?.customPackagesPath) {
896
+ customPackagesSource = '.mcp.json';
897
+ }
898
+ else {
899
+ customPackagesSource = 'XPP config auto-detection';
900
+ }
901
+ }
902
+ const isModelSourceAutoDetected = modelSource.includes('auto-detected');
903
+ return {
904
+ modelName, modelSource, isModelSourceAutoDetected,
905
+ projectPath, projectSource,
906
+ packagePath, packageSource,
907
+ customPackagesPath, customPackagesSource,
908
+ };
909
+ }
910
+ /**
911
+ * Returns all projects discovered by the D365FO_SOLUTIONS_PATH scan.
912
+ * Used by get_workspace_info to list available projects for solution switching.
913
+ */
914
+ getAllDetectedProjects() {
915
+ return this.allDetectedProjects;
916
+ }
917
+ /**
918
+ * Explicitly force a specific .rnrproj as the active project.
919
+ * Called when the user passes projectPath to get_workspace_info() to switch solutions.
920
+ * Bypasses the auto-detection cache — takes effect immediately.
921
+ */
922
+ async forceProject(projectPath) {
923
+ try {
924
+ const normalizedPath = path.normalize(projectPath);
925
+ const modelName = await extractModelNameFromProject(normalizedPath);
926
+ if (!modelName) {
927
+ console.error(`[ConfigManager] forceProject: could not read model name from ${projectPath}`);
928
+ return null;
929
+ }
930
+ const project = {
931
+ projectPath: normalizedPath,
932
+ modelName,
933
+ solutionPath: path.dirname(path.dirname(normalizedPath)),
934
+ };
935
+ this.autoDetectedProject = project;
936
+ this.autoDetectionAttempted = true;
937
+ // Cache under the project path key so direct lookups work.
938
+ this.autoDetectionCache.set(normalizedPath, project);
939
+ // ALSO cache under the current workspace path key.
940
+ // setRuntimeContext() (called per HTTP request with the VS 2022 workspace path)
941
+ // does a cache lookup by workspace path. Without this, it would overwrite
942
+ // autoDetectedProject with the OLD cached value on the very next request.
943
+ const currentWorkspace = this.runtimeContext.workspacePath;
944
+ if (currentWorkspace) {
945
+ this.autoDetectionCache.set(normalizePath(currentWorkspace), project);
946
+ }
947
+ // Persist projectPath in runtimeContext so getWorkspaceInfoDiagnostics()
948
+ // displays the correct project path even if autoDetectedProject is later
949
+ // overridden by automatic detection (git branch / roots/list).
950
+ // NOTE: we intentionally do NOT pin modelName here — automatic detection
951
+ // (setRuntimeContextFromRoots) should be able to override the model when
952
+ // the user switches git branches or opens a different workspace.
953
+ this.runtimeContext = { ...this.runtimeContext, projectPath: normalizedPath };
954
+ registerCustomModel(modelName);
955
+ console.error(`[ConfigManager] ✅ forceProject: switched to ${modelName} (${normalizedPath})`);
956
+ return project;
957
+ }
958
+ catch (err) {
959
+ console.error(`[ConfigManager] forceProject error:`, err);
960
+ return null;
961
+ }
962
+ }
963
+ /**
964
+ * Get project path
965
+ * Priority: 1) Runtime context 2) .mcp.json config 3) Auto-detection from workspace
966
+ */
967
+ async getProjectPath() {
968
+ // Priority 1: Runtime context
969
+ if (this.runtimeContext.projectPath) {
970
+ return this.runtimeContext.projectPath;
971
+ }
972
+ // Priority 2: Config file
973
+ const context = this.config?.servers?.context;
974
+ if (context?.projectPath) {
975
+ return context.projectPath;
976
+ }
977
+ // Priority 3: Auto-detection
978
+ if (!this.autoDetectionAttempted) {
979
+ await this.autoDetectProject(this.runtimeContext.workspacePath || context?.workspacePath);
980
+ }
981
+ return this.autoDetectedProject?.projectPath || null;
982
+ }
983
+ /**
984
+ * Get solution path
985
+ * Priority: 1) Runtime context 2) .mcp.json config 3) Auto-detection from workspace
986
+ */
987
+ async getSolutionPath() {
988
+ // Priority 1: Runtime context
989
+ if (this.runtimeContext.solutionPath) {
990
+ return this.runtimeContext.solutionPath;
991
+ }
992
+ // Priority 2: Config file
993
+ const context = this.config?.servers?.context;
994
+ if (context?.solutionPath) {
995
+ return context.solutionPath;
996
+ }
997
+ // Priority 3: Auto-detection
998
+ if (!this.autoDetectionAttempted) {
999
+ await this.autoDetectProject(this.runtimeContext.workspacePath || context?.workspacePath);
1000
+ }
1001
+ return this.autoDetectedProject?.solutionPath || null;
1002
+ }
1003
+ /**
1004
+ * Returns a snapshot of the currently detected project for diagnostic logging.
1005
+ * All fields are resolved synchronously from the in-memory state — no async I/O.
1006
+ */
1007
+ getDetectionSummary() {
1008
+ const { modelName, source } = this.getModelNameWithSource();
1009
+ return {
1010
+ modelName,
1011
+ source,
1012
+ projectPath: this.runtimeContext.projectPath ??
1013
+ this.autoDetectedProject?.projectPath ??
1014
+ this.config?.servers?.context?.projectPath ?? null,
1015
+ solutionPath: this.runtimeContext.solutionPath ??
1016
+ this.autoDetectedProject?.solutionPath ??
1017
+ this.config?.servers?.context?.solutionPath ?? null,
1018
+ workspacePath: this.runtimeContext.workspacePath ??
1019
+ this.config?.servers?.context?.workspacePath ?? null,
1020
+ };
1021
+ }
1022
+ /**
1023
+ * Returns ONLY the model name found by scanning .rnrproj files on disk,
1024
+ * ignoring whatever is written in .mcp.json / env vars.
1025
+ * Useful when the configured modelName is a placeholder and we want to suggest
1026
+ * the real model to the user.
1027
+ */
1028
+ async getRawAutoDetectedModelName() {
1029
+ if (!this.autoDetectionAttempted) {
1030
+ const context = this.config?.servers?.context;
1031
+ await this.autoDetectProject(this.runtimeContext.workspacePath || context?.workspacePath);
1032
+ }
1033
+ return this.autoDetectedProject?.modelName || null;
1034
+ }
1035
+ /**
1036
+ * Get auto-detected model name
1037
+ * Returns the model name discovered through auto-detection.
1038
+ * Skips the scan when modelName is already configured — avoids needless filesystem traversal.
1039
+ */
1040
+ async getAutoDetectedModelName() {
1041
+ // Short-circuit: if .mcp.json / env already provides a model name, skip the disk scan entirely.
1042
+ const alreadyKnown = this.getModelName();
1043
+ if (alreadyKnown) {
1044
+ return alreadyKnown;
1045
+ }
1046
+ if (!this.autoDetectionAttempted) {
1047
+ const context = this.config?.servers?.context;
1048
+ await this.autoDetectProject(this.runtimeContext.workspacePath || context?.workspacePath);
1049
+ }
1050
+ return this.autoDetectedProject?.modelName || null;
1051
+ }
1052
+ /**
1053
+ * Get the resolved dev environment type.
1054
+ * Priority: 1) Explicit env var 2) .mcp.json context 3) Auto-detect
1055
+ */
1056
+ async getDevEnvironmentType() {
1057
+ const explicit = process.env.DEV_ENVIRONMENT_TYPE || this.getContext()?.devEnvironmentType;
1058
+ if (explicit === 'ude')
1059
+ return 'ude';
1060
+ if (explicit === 'traditional')
1061
+ return 'traditional';
1062
+ // Auto-detect: check if XPP configs exist
1063
+ await this.ensureXppConfig();
1064
+ return this.xppConfig ? 'ude' : 'traditional';
1065
+ }
1066
+ /**
1067
+ * Get the custom packages path (UDE: ModelStoreFolder).
1068
+ */
1069
+ async getCustomPackagesPath() {
1070
+ // Priority 1: .mcp.json context
1071
+ const ctx = this.getContext();
1072
+ if (ctx?.customPackagesPath)
1073
+ return ctx.customPackagesPath;
1074
+ // Priority 2: XPP config auto-detection
1075
+ await this.ensureXppConfig();
1076
+ return this.xppConfig?.customPackagesPath || null;
1077
+ }
1078
+ /**
1079
+ * Get the Microsoft packages path (UDE: FrameworkDirectory).
1080
+ */
1081
+ async getMicrosoftPackagesPath() {
1082
+ // Priority 1: .mcp.json context
1083
+ const ctx = this.getContext();
1084
+ if (ctx?.microsoftPackagesPath)
1085
+ return ctx.microsoftPackagesPath;
1086
+ // Priority 2: XPP config auto-detection
1087
+ await this.ensureXppConfig();
1088
+ return this.xppConfig?.microsoftPackagesPath || null;
1089
+ }
1090
+ /**
1091
+ * Get the full active XPP environment config, including ReferencePackagesPaths.
1092
+ * Returns null when no XPP config exists (CHE / non-UDE environment).
1093
+ */
1094
+ async getActiveXppConfig() {
1095
+ await this.ensureXppConfig();
1096
+ return this.xppConfig;
1097
+ }
1098
+ /**
1099
+ * Get the cross-reference database server (UDE: CrossReferencesDbServerName).
1100
+ */
1101
+ async getXrefDbServer() {
1102
+ await this.ensureXppConfig();
1103
+ return this.xppConfig?.xrefDbServer || null;
1104
+ }
1105
+ /**
1106
+ * Get the cross-reference database name (UDE: CrossReferencesDatabaseName).
1107
+ */
1108
+ async getXrefDbName() {
1109
+ await this.ensureXppConfig();
1110
+ return this.xppConfig?.xrefDbName || null;
1111
+ }
1112
+ async ensureXppConfig() {
1113
+ if (this.xppConfigLoaded)
1114
+ return;
1115
+ this.xppConfigLoaded = true;
1116
+ this.xppConfigProvider = new XppConfigProvider();
1117
+ const configName = process.env.XPP_CONFIG_NAME || undefined;
1118
+ this.xppConfig = await this.xppConfigProvider.getActiveConfig(configName);
1119
+ if (this.xppConfig) {
1120
+ console.error(`[ConfigManager] XPP config loaded: ${this.xppConfig.configName} v${this.xppConfig.version}`);
1121
+ console.error(` Custom packages: ${this.xppConfig.customPackagesPath}`);
1122
+ console.error(` Microsoft packages: ${this.xppConfig.microsoftPackagesPath}`);
1123
+ }
1124
+ }
1125
+ }
1126
+ // Singleton instance
1127
+ let configManager = null;
1128
+ /**
1129
+ * Get or create ConfigManager instance
1130
+ */
1131
+ export function getConfigManager(configPath) {
1132
+ if (!configManager) {
1133
+ configManager = new ConfigManager(configPath);
1134
+ }
1135
+ return configManager;
1136
+ }
1137
+ /**
1138
+ * Initialize configuration (load from file)
1139
+ */
1140
+ export async function initializeConfig(configPath) {
1141
+ const manager = getConfigManager(configPath);
1142
+ return await manager.load();
1143
+ }
1144
+ /**
1145
+ * Fallback package path when configManager.getPackagePath() returns null.
1146
+ * This only happens when no config is loaded AND none of the well-known
1147
+ * candidate paths (C:, J:, K:) exist on the filesystem.
1148
+ * The value is a safe sentinel — callers will get a clear 'file not found'
1149
+ * rather than silently defaulting to a specific drive letter.
1150
+ */
1151
+ const FALLBACK_PACKAGE_PATH = 'C:\\AosService\\PackagesLocalDirectory';
1152
+ export function fallbackPackagePath() {
1153
+ return FALLBACK_PACKAGE_PATH;
1154
+ }
1155
+ /**
1156
+ * Extract the package name from a D365FO file path.
1157
+ * Standard AOT layout: .../PackagesLocalDirectory/{Package}/{Model}/Ax{Type}/{Name}.xml
1158
+ * Returns the package name (first segment after PackagesLocalDirectory), or null.
1159
+ * The package name is what isStandardModel() checks against (e.g. ApplicationSuite).
1160
+ */
1161
+ export function extractModelFromFilePath(filePath) {
1162
+ const normalised = filePath.replace(/\\/g, '/');
1163
+ const match = normalised.match(/PackagesLocalDirectory\/([^/]+)\/[^/]+\/Ax[^/]+\//i);
1164
+ if (match) {
1165
+ return match[1]; // package name (first segment, e.g. ApplicationSuite)
1166
+ }
1167
+ return null;
1168
+ }
1169
+ //# sourceMappingURL=configManager.js.map