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,1254 @@
1
+ /**
2
+ * Generate Smart Report Tool
3
+ * AI-driven SSRS report generation using indexed metadata patterns.
4
+ *
5
+ * Generates up to 7+ D365FO objects in a single call:
6
+ * 1. TmpTable(s) (AxTable, TableType=TempDB) — holds report rows; extras for additionalDatasets
7
+ * 2. Contract class (DataContractAttribute) — dialog parameters, optional validate()
8
+ * 3. DP class (SrsReportDataProviderBase/PreProcess) — fills TmpTable, query-based or manual
9
+ * 4. Controller class (SrsReportRunController/SrsPrintMgmtController) — optional
10
+ * 5. Output menu item (AxMenuItemOutput) — generated together with Controller
11
+ * 6. Report (AxReport + RDL) — multi-dataset, page header, optional GroupedWithTotals tablix
12
+ *
13
+ * Architecture follows generate_smart_table / generate_smart_form patterns:
14
+ * - Exported Tool definition + async handler
15
+ * - Symbol index queries for EDT resolution, copyFrom, patterns
16
+ * - Dual-path output: Azure/Linux returns XML/source text; Windows writes + adds to project
17
+ *
18
+ * References:
19
+ * - "Microsoft Dynamics AX 2012 Reporting Cookbook" (chapters 2–4)
20
+ * - D365FO SSRS best practices: Contract–DP–Controller trio
21
+ * - XmlTemplateGenerator.generateAxReportXml() for AxReport XML skeleton
22
+ */
23
+ import { SmartXmlBuilder } from '../utils/smartXmlBuilder.js';
24
+ import { XmlTemplateGenerator } from './createD365File.js';
25
+ import { ProjectFileManager } from './createD365File.js';
26
+ import path from 'path';
27
+ import fs from 'fs';
28
+ import { getConfigManager } from '../utils/configManager.js';
29
+ import { resolveObjectPrefix, applyObjectPrefix, getObjectSuffix, applyObjectSuffix } from '../utils/modelClassifier.js';
30
+ import { extractModelFromProject, findProjectInSolution } from '../utils/projectUtils.js';
31
+ import { normalizeD365Xml } from '../utils/d365XmlNormalizer.js';
32
+ import { canonicalSymbolName, lookupSymbolNocase } from '../utils/symbolLookup.js';
33
+ export const generateSmartReportTool = {
34
+ name: 'generate_smart_report',
35
+ description: `🎨 AI-driven SSRS report generation — creates up to 7 D365FO objects in one call.
36
+
37
+ Generates:
38
+ 1. TmpTable(s) (TempDB) — report data rows; extra tables for each additionalDatasets entry
39
+ 2. Contract class — dialog parameters with optional auto-generated validate()
40
+ 3. DP class (SrsReportDataProviderBase or PreProcess) — with query-based or manual processReport()
41
+ 4. Controller class (SrsReportRunController or SrsPrintMgmtController) — optional
42
+ 5. Output menu item (AxMenuItemOutput) — generated together with Controller
43
+ 6. AxReport XML + RDL — multi-dataset, page header (company/title/date), optional GroupedWithTotals tablix
44
+
45
+ Strategies:
46
+ - fieldsHint: comma-separated field names → auto-suggest EDTs, build TmpTable + report fields
47
+ - fields: structured field specs with explicit EDTs and data types
48
+ - contractParams: dialog parameters → Contract class with parm methods + validate()
49
+ - copyFrom: copy field structure from existing report's TmpTable
50
+ - designStyle: "SimpleList" (default) or "GroupedWithTotals" (row group + SUM aggregates)
51
+ - aotQuery: query-based DP using this.parmQuery() instead of manual while-select
52
+ - callerTableName: pre-fill contract from args.record() in prePromptModifyContract()
53
+ - controllerType: "simple" (default) or "printMgmt" (SrsPrintMgmtController)
54
+ - preProcess: true → SrsReportDataProviderPreProcess with preProcess() stub
55
+ - additionalDatasets: extra TmpTables + DP getters for multi-dataset reports
56
+
57
+ Examples:
58
+ - generate_object(mode="scaffold", objectType="report", name="InventByZones", fieldsHint="ItemId, ItemName, Qty, Zone", caption="Inventory by Zones")
59
+ - generate_object(mode="scaffold", objectType="report", name="CustBalance", fieldsHint="CustAccount, Name, Balance", contractParams=[{name:"FromDate",type:"TransDate",mandatory:true},{name:"ToDate",type:"TransDate"}])
60
+ - generate_object(mode="scaffold", objectType="report", name="SalesReport", copyFrom="SalesInvoice", designStyle="GroupedWithTotals")
61
+ - generate_object(mode="scaffold", objectType="report", name="CustOpenItems", fieldsHint="CustAccount, Amount, DueDate", callerTableName="CustTable", aotQuery="CustOpenTrans")`,
62
+ inputSchema: {
63
+ type: 'object',
64
+ properties: {
65
+ name: {
66
+ type: 'string',
67
+ description: 'Base report name WITHOUT model prefix (e.g. "InventByZones"). Prefix is applied automatically from the model name.',
68
+ },
69
+ caption: {
70
+ type: 'string',
71
+ description: 'Human-readable caption/title for the report (e.g. "Inventory by Zones"). Used in RDL header and menu item.',
72
+ },
73
+ fieldsHint: {
74
+ type: 'string',
75
+ description: 'Comma-separated field names for the TmpTable (e.g. "ItemId, ItemName, Qty, Zone"). ' +
76
+ 'EDTs are auto-suggested from names. Use this for quick generation. ' +
77
+ 'For full control, use the `fields` array parameter instead.',
78
+ },
79
+ fields: {
80
+ type: 'array',
81
+ description: 'Structured field specs. Takes priority over fieldsHint.',
82
+ items: {
83
+ type: 'object',
84
+ properties: {
85
+ name: { type: 'string', description: 'Field name' },
86
+ edt: { type: 'string', description: 'EDT name (auto-suggested when omitted)' },
87
+ dataType: { type: 'string', description: '.NET data type for RDL (e.g. "System.String", "System.Double")' },
88
+ label: { type: 'string', description: 'Label ref for column caption' },
89
+ },
90
+ required: ['name'],
91
+ },
92
+ },
93
+ contractParams: {
94
+ type: 'array',
95
+ description: 'Dialog parameters for the Contract class.',
96
+ items: {
97
+ type: 'object',
98
+ properties: {
99
+ name: { type: 'string', description: 'Parameter name (becomes parm method)' },
100
+ type: { type: 'string', description: 'X++ type — EDT or primitive (e.g. "TransDate", "CustAccount")' },
101
+ label: { type: 'string', description: 'Dialog prompt label' },
102
+ mandatory: { type: 'boolean', description: 'Whether parameter is required' },
103
+ },
104
+ required: ['name'],
105
+ },
106
+ },
107
+ generateController: {
108
+ type: 'boolean',
109
+ description: 'Whether to generate a Controller class (default: true)',
110
+ },
111
+ designStyle: {
112
+ type: 'string',
113
+ description: 'RDL design pattern: "SimpleList" (default — flat detail tablix) or "GroupedWithTotals" (row group + sum aggregates)',
114
+ },
115
+ copyFrom: {
116
+ type: 'string',
117
+ description: 'Copy field structure from an existing report name (reads fields from its DP TmpTable)',
118
+ },
119
+ modelName: {
120
+ type: 'string',
121
+ description: 'Model name (auto-detected from projectPath)',
122
+ },
123
+ projectPath: {
124
+ type: 'string',
125
+ description: 'Path to .rnrproj file',
126
+ },
127
+ solutionPath: {
128
+ type: 'string',
129
+ description: 'Path to solution directory',
130
+ },
131
+ packagePath: {
132
+ type: 'string',
133
+ description: 'Base packages directory path',
134
+ },
135
+ aotQuery: {
136
+ type: 'string',
137
+ description: 'AOT query name. When provided, the DP uses a query-based processReport() with this.parmQuery() instead of a manual while-select placeholder.',
138
+ },
139
+ callerTableName: {
140
+ type: 'string',
141
+ description: 'Table name of the caller record (e.g. "CustTable"). Generates parmArgs() pre-fill in prePromptModifyContract() that reads args.record() and maps matching fields to contract params.',
142
+ },
143
+ preProcess: {
144
+ type: 'boolean',
145
+ description: 'When true, DP extends SrsReportDataProviderPreProcess instead of SrsReportDataProviderBase. Generates a preProcess() stub and removes [SRSReportParameterAttribute] (contract passed via Controller).',
146
+ },
147
+ controllerType: {
148
+ type: 'string',
149
+ description: '"simple" (default — SrsReportRunController) or "printMgmt" (SrsPrintMgmtController with parmPrintMgmtDocType). Only relevant when generateController=true.',
150
+ },
151
+ additionalDatasets: {
152
+ type: 'array',
153
+ description: 'Extra datasets. Each entry generates an additional TmpTable (TempDB) and a corresponding get<Table>() method in the DP.',
154
+ items: {
155
+ type: 'object',
156
+ properties: {
157
+ name: { type: 'string', description: 'Dataset name suffix (e.g. "Header" → MyReportHeaderTmp)' },
158
+ fieldsHint: { type: 'string', description: 'Comma-separated field names for this extra dataset' },
159
+ fields: {
160
+ type: 'array',
161
+ items: { type: 'object', properties: { name: { type: 'string' } }, required: ['name'] },
162
+ },
163
+ },
164
+ required: ['name'],
165
+ },
166
+ },
167
+ },
168
+ required: ['name'],
169
+ },
170
+ };
171
+ export async function handleGenerateSmartReport(args, symbolIndex) {
172
+ const { name, caption, fieldsHint, fields: structuredFields, contractParams = [], generateController = true, designStyle = 'SimpleList', copyFrom, aotQuery, callerTableName, preProcess = false, controllerType = 'simple', additionalDatasets = [], modelName, projectPath, solutionPath, packagePath: argPackagePath, } = args;
173
+ const log = (msg) => console.error(`[generateSmartReport] ${msg}`);
174
+ log(`Generating report: ${name}, fields=${fieldsHint ?? '(structured)'}, copyFrom=${copyFrom ?? 'none'}, contractParams=${contractParams.length}`);
175
+ const configManager = getConfigManager();
176
+ await configManager.ensureLoaded();
177
+ const resolvedPackagePath = argPackagePath || configManager.getPackagePath();
178
+ if (!resolvedPackagePath && process.platform === 'win32') {
179
+ throw new Error('❌ Cannot determine PackagesLocalDirectory path.\n\n' +
180
+ 'Neither C:\\AosService\\PackagesLocalDirectory nor K:\\AosService\\PackagesLocalDirectory were found.\n\n' +
181
+ 'Add "packagePath" to your .mcp.json or pass packagePath to this tool call.');
182
+ }
183
+ const pkgPath = resolvedPackagePath || 'K:\\AosService\\PackagesLocalDirectory';
184
+ let resolvedProjectPath = projectPath;
185
+ let resolvedSolutionPath = solutionPath;
186
+ if (!resolvedProjectPath && !resolvedSolutionPath) {
187
+ resolvedProjectPath = (await configManager.getProjectPath()) || undefined;
188
+ resolvedSolutionPath = (await configManager.getSolutionPath()) || undefined;
189
+ }
190
+ let resolvedModel = modelName;
191
+ if (resolvedProjectPath) {
192
+ const extracted = extractModelFromProject(resolvedProjectPath);
193
+ if (extracted)
194
+ resolvedModel = extracted;
195
+ }
196
+ else if (resolvedSolutionPath) {
197
+ const proj = findProjectInSolution(resolvedSolutionPath);
198
+ if (proj) {
199
+ const extracted = extractModelFromProject(proj);
200
+ if (extracted)
201
+ resolvedModel = extracted;
202
+ }
203
+ }
204
+ const isNonWindows = process.platform !== 'win32';
205
+ if (!resolvedModel) {
206
+ const configModel = configManager.getModelName();
207
+ const autoModel = configModel ? null : (await configManager.getAutoDetectedModelName());
208
+ resolvedModel = configModel || autoModel || process.env.D365FO_MODEL_NAME || modelName || undefined;
209
+ if (!resolvedModel && !isNonWindows) {
210
+ throw new Error('Could not resolve model name. Provide modelName, projectPath, or solutionPath, ' +
211
+ 'or configure projectPath/solutionPath in .mcp.json or set D365FO_MODEL_NAME env var.');
212
+ }
213
+ }
214
+ log(`Model: ${resolvedModel ?? '(none)'}`);
215
+ // Apply prefix
216
+ const objectPrefix = resolvedModel ? resolveObjectPrefix(resolvedModel) : '';
217
+ let finalName = objectPrefix ? applyObjectPrefix(name, objectPrefix) : name;
218
+ const objectSuffix = getObjectSuffix();
219
+ finalName = applyObjectSuffix(finalName, objectSuffix);
220
+ if (finalName !== name)
221
+ log(`Applied naming: ${name} → ${finalName}`);
222
+ // Derived object names
223
+ const tmpTableName = `${finalName}Tmp`;
224
+ const contractClassName = `${finalName}Contract`;
225
+ const dpClassName = `${finalName}DP`;
226
+ const controllerClassName = `${finalName}Controller`;
227
+ const reportCaption = caption || finalName;
228
+ // Only decorate a plain-text caption with the suffix; appending to a label
229
+ // reference (e.g. "@Module:LabelId") would create mixed content that xppbp
230
+ // flags as BPErrorLabelIsText.
231
+ const tmpTableLabel = (suffix) => reportCaption.startsWith('@') ? reportCaption : `${reportCaption}${suffix}`;
232
+ const rdb = symbolIndex.getReadDb();
233
+ let reportFields = [];
234
+ // Strategy 1: copyFrom — read fields from existing report's TmpTable
235
+ if (copyFrom) {
236
+ log(`Copying field structure from: ${copyFrom}`);
237
+ try {
238
+ const db = symbolIndex.getReadDb();
239
+ const dpSearch = db.prepare(`SELECT name FROM symbols WHERE type = 'class' AND name LIKE ? LIMIT 1`).get(`${copyFrom}%DP`);
240
+ let srcTmpTable;
241
+ if (dpSearch) {
242
+ const tmpSearch = db.prepare(`SELECT name FROM symbols WHERE type = 'table' AND name LIKE ? LIMIT 1`).get(`${copyFrom}%Tmp`);
243
+ srcTmpTable = tmpSearch?.name;
244
+ }
245
+ if (!srcTmpTable) {
246
+ // Fallback: direct naming convention <ReportName>Tmp. Case-insensitive —
247
+ // copyFrom is caller-supplied, so the derived name may not match the
248
+ // canonical casing (#686).
249
+ srcTmpTable = lookupSymbolNocase(db, `${copyFrom}Tmp`, ['table'])?.name;
250
+ }
251
+ if (srcTmpTable) {
252
+ const dbFields = db.prepare(`SELECT name, signature FROM symbols WHERE type = 'field' AND parent_name = ? ORDER BY name`).all(srcTmpTable);
253
+ reportFields = dbFields
254
+ .filter(f => !['RecId', 'RecVersion', 'DataAreaId', 'Partition', 'TableId'].includes(f.name))
255
+ .map(f => ({
256
+ name: f.name,
257
+ edt: f.signature || undefined,
258
+ dataType: resolveRdlDataType(f.signature, rdb),
259
+ }));
260
+ log(`Copied ${reportFields.length} fields from ${srcTmpTable}`);
261
+ }
262
+ else {
263
+ log(`⚠ Could not find TmpTable for "${copyFrom}" — falling back to fieldsHint`);
264
+ }
265
+ }
266
+ catch (err) {
267
+ log(`⚠ copyFrom failed: ${err instanceof Error ? err.message : String(err)}`);
268
+ }
269
+ }
270
+ // Strategy 2: structuredFields (explicit specs from the caller)
271
+ if (structuredFields && structuredFields.length > 0 && reportFields.length === 0) {
272
+ reportFields = structuredFields.map(f => ({
273
+ ...f,
274
+ edt: f.edt || suggestEdtFromFieldName(f.name),
275
+ dataType: f.dataType || resolveRdlDataType(f.edt || suggestEdtFromFieldName(f.name), rdb),
276
+ }));
277
+ log(`Using ${reportFields.length} structured fields`);
278
+ }
279
+ // Strategy 3: fieldsHint — parse comma-separated names, suggest EDTs
280
+ if (fieldsHint && reportFields.length === 0) {
281
+ const hints = fieldsHint.split(',').map(s => s.trim()).filter(Boolean);
282
+ reportFields = hints.map(h => {
283
+ const edt = suggestEdtFromFieldName(h);
284
+ return {
285
+ name: h,
286
+ edt,
287
+ dataType: resolveRdlDataType(edt, rdb),
288
+ };
289
+ });
290
+ log(`Parsed ${reportFields.length} fields from fieldsHint`);
291
+ }
292
+ // Fallback: no fields at all
293
+ if (reportFields.length === 0) {
294
+ return {
295
+ content: [{
296
+ type: 'text',
297
+ text: [
298
+ `❌ **CANNOT GENERATE REPORT — no fields provided!**`,
299
+ ``,
300
+ `Pass one of:`,
301
+ `- \`fieldsHint="ItemId, Name, Qty, Amount"\` — comma-separated field names`,
302
+ `- \`fields=[{name:"ItemId", edt:"ItemId"}, ...]\` — structured specs`,
303
+ `- \`copyFrom="ExistingReport"\` — copy from another report's TmpTable`,
304
+ ``,
305
+ `⛔ No XML has been generated. Call \`generate_object(mode="scaffold", objectType="report")\` again with fields.`,
306
+ ].join('\n'),
307
+ }],
308
+ isError: true,
309
+ };
310
+ }
311
+ const resolvedExtraDatasets = additionalDatasets.map((ds) => {
312
+ const cap = ds.name.charAt(0).toUpperCase() + ds.name.slice(1);
313
+ const dsTmpName = `${finalName}${cap}Tmp`;
314
+ let dsFields = [];
315
+ if (ds.fields && ds.fields.length > 0) {
316
+ dsFields = ds.fields.map((f) => ({
317
+ ...f,
318
+ edt: f.edt || suggestEdtFromFieldName(f.name),
319
+ dataType: f.dataType || resolveRdlDataType(f.edt || suggestEdtFromFieldName(f.name), rdb),
320
+ }));
321
+ }
322
+ else if (ds.fieldsHint) {
323
+ const hints = ds.fieldsHint.split(',').map((s) => s.trim()).filter(Boolean);
324
+ dsFields = hints.map((h) => {
325
+ const edt = suggestEdtFromFieldName(h);
326
+ return { name: h, edt, dataType: resolveRdlDataType(edt, rdb) };
327
+ });
328
+ }
329
+ return {
330
+ name: ds.name,
331
+ tmpTableName: dsTmpName,
332
+ fields: dsFields,
333
+ tableFields: dsFields.map((f) => ({
334
+ name: f.name,
335
+ edt: f.edt,
336
+ type: resolveFieldType(f.edt, rdb),
337
+ })),
338
+ };
339
+ });
340
+ const generatedObjects = [];
341
+ // 1. TmpTable (AxTable with TableType=TempDB)
342
+ const tableFields = reportFields.map(f => ({
343
+ name: f.name,
344
+ edt: f.edt,
345
+ type: resolveFieldType(f.edt, rdb),
346
+ }));
347
+ const builder = new SmartXmlBuilder(symbolIndex);
348
+ const tmpTableXml = builder.buildTableXml({
349
+ name: tmpTableName,
350
+ label: tmpTableLabel(' (temp)'),
351
+ tableGroup: 'Main',
352
+ tableType: 'TempDB',
353
+ fields: tableFields,
354
+ indexes: [builder.buildPrimaryKeyIndex(tmpTableName, [tableFields[0]?.name || 'RecId'])],
355
+ });
356
+ generatedObjects.push({
357
+ objectType: 'table',
358
+ objectName: tmpTableName,
359
+ aotFolder: 'AxTable',
360
+ content: tmpTableXml,
361
+ });
362
+ log(`Generated TmpTable: ${tmpTableName} (${tableFields.length} fields)`);
363
+ // Additional TmpTables for multi-dataset reports
364
+ for (const ds of resolvedExtraDatasets) {
365
+ if (ds.tableFields.length === 0) {
366
+ log(`⚠ Skipping extra dataset "${ds.name}" — no fields resolved`);
367
+ continue;
368
+ }
369
+ const dsTblXml = builder.buildTableXml({
370
+ name: ds.tmpTableName,
371
+ label: tmpTableLabel(` - ${ds.name} (temp)`),
372
+ tableGroup: 'Main',
373
+ tableType: 'TempDB',
374
+ fields: ds.tableFields,
375
+ indexes: [builder.buildPrimaryKeyIndex(ds.tmpTableName, [ds.tableFields[0]?.name || 'RecId'])],
376
+ });
377
+ generatedObjects.push({
378
+ objectType: 'table',
379
+ objectName: ds.tmpTableName,
380
+ aotFolder: 'AxTable',
381
+ content: dsTblXml,
382
+ });
383
+ log(`Generated extra TmpTable: ${ds.tmpTableName} (${ds.tableFields.length} fields)`);
384
+ }
385
+ // 2. Contract class
386
+ const contractParms = contractParams.map(p => ({
387
+ ...p,
388
+ type: p.type || 'str',
389
+ }));
390
+ const contractMemberDecls = contractParms
391
+ .map(p => ` ${p.type} ${p.name};`)
392
+ .join('\n');
393
+ const contractParmMethods = contractParms.map(p => {
394
+ const methodName = `parm${p.name.charAt(0).toUpperCase()}${p.name.slice(1)}`;
395
+ const labelAttr = p.label ? `,\n SysOperationLabelAttribute('${p.label}')` : '';
396
+ // No SysOperationMandatoryAttribute — it doesn't exist in D365FO. Mandatory
397
+ // enforcement is done in validate() via checkFailed(), not a per-parameter attribute.
398
+ const defaultExpr = p.defaultValue ? p.defaultValue : p.name;
399
+ return [
400
+ ` /// <summary>`,
401
+ ` /// Gets or sets the ${p.name} parameter.`,
402
+ ` /// </summary>`,
403
+ ` /// <param name="_${p.name}">The ${p.name} value.</param>`,
404
+ ` /// <returns>The current ${p.name} value.</returns>`,
405
+ ` [DataMemberAttribute('${p.name}')${labelAttr}]`,
406
+ ` public ${p.type} ${methodName}(${p.type} _${p.name} = ${defaultExpr})`,
407
+ ` {`,
408
+ ` ${p.name} = _${p.name};`,
409
+ ` return ${p.name};`,
410
+ ` }`,
411
+ ].join('\n');
412
+ }).join('\n\n');
413
+ // Build validate() when there are mandatory params or a from/to date range
414
+ const mandatoryContractParams = contractParms.filter(p => p.mandatory);
415
+ const fromDateParam = contractParms.find(p => {
416
+ const n = p.name.toLowerCase();
417
+ return n === 'fromdate' || n === 'validfrom' || n === 'datefrom';
418
+ });
419
+ const toDateParam = contractParms.find(p => {
420
+ const n = p.name.toLowerCase();
421
+ return n === 'todate' || n === 'validto' || n === 'dateto';
422
+ });
423
+ const needsValidate = mandatoryContractParams.length > 0 || (fromDateParam && toDateParam);
424
+ const mandatoryChecks = mandatoryContractParams.map(p => [
425
+ ` if (!${p.name})`,
426
+ ` {`,
427
+ ` ret = checkFailed(strFmt("@SYS53419", "${p.name}"));`,
428
+ ` }`,
429
+ ].join('\n')).join('\n');
430
+ const dateRangeCheck = (fromDateParam && toDateParam) ? [
431
+ ` if (${fromDateParam.name} && ${toDateParam.name} && ${fromDateParam.name} > ${toDateParam.name})`,
432
+ ` {`,
433
+ ` ret = checkFailed(strFmt("@SYS300396", "${fromDateParam.name}"));`,
434
+ ` }`,
435
+ ].join('\n') : '';
436
+ const validateMethod = needsValidate ? [
437
+ ` /// <summary>`,
438
+ ` /// Validates the contract parameters before the report runs.`,
439
+ ` /// </summary>`,
440
+ ` /// <returns>true if all parameters are valid; otherwise false.</returns>`,
441
+ ` public boolean validate()`,
442
+ ` {`,
443
+ ` boolean ret = true;`,
444
+ ...(mandatoryChecks ? [mandatoryChecks] : []),
445
+ ...(dateRangeCheck ? [dateRangeCheck] : []),
446
+ ` return ret;`,
447
+ ` }`,
448
+ ].join('\n') : '';
449
+ const contractSourceCode = [
450
+ `/// <summary>`,
451
+ `/// Data contract for the ${reportCaption} report.`,
452
+ `/// Defines dialog parameters shown to the user before report execution.`,
453
+ `/// </summary>`,
454
+ `[DataContractAttribute]`,
455
+ `public class ${contractClassName}`,
456
+ `{`,
457
+ contractMemberDecls || ' // No dialog parameters',
458
+ `}`,
459
+ ``,
460
+ ...(contractParmMethods ? [contractParmMethods] : []),
461
+ ...(validateMethod ? ['', validateMethod] : []),
462
+ ].join('\n');
463
+ const contractXml = XmlTemplateGenerator.generateAxClassXml(contractClassName, contractSourceCode);
464
+ generatedObjects.push({
465
+ objectType: 'class',
466
+ objectName: contractClassName,
467
+ aotFolder: 'AxClass',
468
+ content: contractXml,
469
+ });
470
+ log(`Generated Contract: ${contractClassName} (${contractParms.length} params)`);
471
+ // ──────────────────────────────────────────────────────────────────────────
472
+ // 3. DP class (Data Provider)
473
+ // ──────────────────────────────────────────────────────────────────────────
474
+ const tmpTableVarName = tmpTableName.charAt(0).toLowerCase() + tmpTableName.slice(1);
475
+ const contractVarName = 'contract';
476
+ // Determine base class
477
+ const dpBaseClass = preProcess ? 'SrsReportDataProviderPreProcess' : 'SrsReportDataProviderBase';
478
+ // Class-level attributes
479
+ // PreProcess: no [SRSReportParameterAttribute] — contract is passed via Controller
480
+ // aotQuery: add [SRSReportQueryAttribute]
481
+ let dpAttrLines = [];
482
+ if (!preProcess)
483
+ dpAttrLines.push(` SRSReportParameterAttribute(classStr(${contractClassName}))`);
484
+ if (aotQuery)
485
+ dpAttrLines.push(` SRSReportQueryAttribute(queryStr(${aotQuery}))`);
486
+ const dpClassAttr = dpAttrLines.length > 0
487
+ ? `[\n${dpAttrLines.join(',\n')}\n]`
488
+ : '';
489
+ // Contract parameter fetch (skip for PreProcess — contract accessed differently)
490
+ const contractFetchLines = (contractParms.length > 0 && !preProcess)
491
+ ? [
492
+ ` ${contractClassName} ${contractVarName} = this.parmDataContract() as ${contractClassName};`,
493
+ ...contractParms.map(p => {
494
+ const methodName = `parm${p.name.charAt(0).toUpperCase()}${p.name.slice(1)}`;
495
+ return ` ${p.type} ${p.name} = ${contractVarName}.${methodName}();`;
496
+ }),
497
+ ``,
498
+ ]
499
+ : [` // No contract parameters`];
500
+ const contractFetch = contractFetchLines.join('\n');
501
+ // processReport body — query-based vs manual skeleton
502
+ // For aotQuery: try to resolve the first datasource table so we can generate
503
+ // tableNum()-based, type-safe code instead of the generic Common/getNo(1) fallback.
504
+ const querySourceTable = aotQuery
505
+ ? resolveAotQueryFirstTable(aotQuery, rdb)
506
+ : undefined;
507
+ if (querySourceTable)
508
+ log(`Resolved aotQuery "${aotQuery}" first datasource: ${querySourceTable}`);
509
+ let processReportBody;
510
+ if (aotQuery) {
511
+ // tableNum() validates the table exists at X++ compile time — much safer than getNo(1)
512
+ const tableDecl = querySourceTable
513
+ ? `${querySourceTable} sourceRecord = queryRun.get(tableNum(${querySourceTable}));`
514
+ : `Common sourceRecord = queryRun.getNo(1); // TODO: replace Common with the actual table type`;
515
+ const queryAssignments = reportFields.map(f => ` ${tmpTableVarName}.${f.name} = sourceRecord.${f.name}; // TODO: map from ${querySourceTable ?? 'query result'}`).join('\n');
516
+ processReportBody = [
517
+ contractFetch,
518
+ ``,
519
+ ` // Query-based data retrieval \u2014 driven by AOT query "${aotQuery}"`,
520
+ ` QueryRun queryRun = new QueryRun(this.parmQuery());`,
521
+ ` while (queryRun.next())`,
522
+ ` {`,
523
+ ` ${tableDecl}`,
524
+ ` ${tmpTableVarName}.clear();`,
525
+ queryAssignments,
526
+ ` ${tmpTableVarName}.insert();`,
527
+ ` }`,
528
+ ].join('\n');
529
+ }
530
+ else {
531
+ const fieldComments = reportFields.map(f => ` // ${tmpTableVarName}.${f.name} = ''; // TODO: populate from data source`).join('\n');
532
+ processReportBody = [
533
+ contractFetch,
534
+ ``,
535
+ ` // TODO: Replace with actual query / business logic`,
536
+ ` // Example pattern:`,
537
+ ` // while select sourceTable`,
538
+ ` // where sourceTable.Field == paramValue`,
539
+ ` // {`,
540
+ ` // ${tmpTableVarName}.clear();`,
541
+ fieldComments,
542
+ ` // ${tmpTableVarName}.insert();`,
543
+ ` // }`,
544
+ ].join('\n');
545
+ }
546
+ // preProcess() stub (Improvement 6)
547
+ const preProcessMethodLines = preProcess ? [
548
+ ``,
549
+ ` /// <summary>`,
550
+ ` /// Called before the report dialog is shown. Use for heavy pre-processing.`,
551
+ ` /// </summary>`,
552
+ ` public void preProcess()`,
553
+ ` {`,
554
+ ` // TODO: Implement pre-processing logic (called BEFORE the report dialog).`,
555
+ ` // Prepare data, validate prerequisites, or set session-scoped variables.`,
556
+ ` }`,
557
+ ] : [];
558
+ // Additional member variable declarations for extra datasets
559
+ const extraDpMembers = resolvedExtraDatasets
560
+ .map(ds => ` ${ds.tmpTableName} ${ds.tmpTableName.charAt(0).toLowerCase() + ds.tmpTableName.slice(1)};`)
561
+ .join('\n');
562
+ // Additional get<Table>() methods for extra datasets
563
+ const extraDpGetters = resolvedExtraDatasets.map(ds => {
564
+ const varN = ds.tmpTableName.charAt(0).toLowerCase() + ds.tmpTableName.slice(1);
565
+ return [
566
+ ``,
567
+ ` /// <summary>`,
568
+ ` /// Returns the <c>${ds.tmpTableName}</c> buffer for the "${ds.name}" dataset.`,
569
+ ` /// </summary>`,
570
+ ` /// <returns>The <c>${ds.tmpTableName}</c> table buffer.</returns>`,
571
+ ` [SRSReportDataSetAttribute(tableStr(${ds.tmpTableName}))]`,
572
+ ` public ${ds.tmpTableName} get${ds.tmpTableName}()`,
573
+ ` {`,
574
+ ` select ${varN};`,
575
+ ` return ${varN};`,
576
+ ` }`,
577
+ ].join('\n');
578
+ }).join('\n');
579
+ const dpSourceCode = [
580
+ `/// <summary>`,
581
+ `/// Data provider for the ${reportCaption} report.`,
582
+ `/// Extends <c>${dpBaseClass}</c> and populates the <c>${tmpTableName}</c> temporary table.`,
583
+ `/// </summary>`,
584
+ dpClassAttr,
585
+ `public class ${dpClassName} extends ${dpBaseClass}`,
586
+ `{`,
587
+ ` ${tmpTableName} ${tmpTableVarName};`,
588
+ ...(extraDpMembers ? [extraDpMembers] : []),
589
+ `}`,
590
+ ``,
591
+ ` /// <summary>`,
592
+ ` /// Returns the temporary table buffer used by the report dataset.`,
593
+ ` /// </summary>`,
594
+ ` /// <returns>The <c>${tmpTableName}</c> table buffer.</returns>`,
595
+ ` [SRSReportDataSetAttribute(tableStr(${tmpTableName}))]`,
596
+ ` public ${tmpTableName} get${tmpTableName}()`,
597
+ ` {`,
598
+ ` select ${tmpTableVarName};`,
599
+ ` return ${tmpTableVarName};`,
600
+ ` }`,
601
+ ...(extraDpGetters ? [extraDpGetters] : []),
602
+ ...preProcessMethodLines,
603
+ ``,
604
+ ` /// <summary>`,
605
+ ` /// Main data processing method. Populates the <c>${tmpTableName}</c> temporary table`,
606
+ ` /// with report data based on the contract parameters.`,
607
+ ` /// </summary>`,
608
+ ` public void processReport()`,
609
+ ` {`,
610
+ processReportBody,
611
+ ` }`,
612
+ ].join('\n');
613
+ const dpXml = XmlTemplateGenerator.generateAxClassXml(dpClassName, dpSourceCode);
614
+ generatedObjects.push({
615
+ objectType: 'class',
616
+ objectName: dpClassName,
617
+ aotFolder: 'AxClass',
618
+ content: dpXml,
619
+ });
620
+ log(`Generated DP: ${dpClassName}`);
621
+ // ──────────────────────────────────────────────────────────────────────────
622
+ // 4. Controller class (optional)
623
+ // ──────────────────────────────────────────────────────────────────────────
624
+ if (generateController) {
625
+ const isPrintMgmt = controllerType === 'printMgmt';
626
+ const ctrlBaseClass = isPrintMgmt ? 'SrsPrintMgmtController' : 'SrsReportRunController';
627
+ // Build main() — differs between simple and printMgmt
628
+ const mainMethod = isPrintMgmt ? [
629
+ ` /// <summary>`,
630
+ ` /// Entry point. Creates a print-management controller and starts the report.`,
631
+ ` /// </summary>`,
632
+ ` /// <param name="_args">The <c>Args</c> object from the menu item caller.</param>`,
633
+ ` public static void main(Args _args)`,
634
+ ` {`,
635
+ ` ${controllerClassName} controller = new ${controllerClassName}();`,
636
+ ` controller.parmArgs(_args);`,
637
+ ` // TODO: Replace SalesOrderConfirmation with the correct PrintMgmtDocumentType`,
638
+ ` controller.parmPrintMgmtDocType(PrintMgmtDocumentType::SalesOrderConfirmation);`,
639
+ ` controller.parmReportName(ssrsReportStr(${finalName}, Report));`,
640
+ ` controller.startOperation();`,
641
+ ` }`,
642
+ ].join('\n') : [
643
+ ` /// <summary>`,
644
+ ` /// Entry point for the report. Creates the controller and starts execution.`,
645
+ ` /// </summary>`,
646
+ ` /// <param name="_args">The <c>Args</c> object from the menu item caller.</param>`,
647
+ ` public static void main(Args _args)`,
648
+ ` {`,
649
+ ` ${controllerClassName} controller = new ${controllerClassName}();`,
650
+ ` controller.parmReportName(ssrsReportStr(${finalName}, Report));`,
651
+ ` controller.parmArgs(_args);`,
652
+ ` controller.startOperation();`,
653
+ ` }`,
654
+ ].join('\n');
655
+ // Build prePromptModifyContract() — with optional parmArgs() pre-fill (Improvement 2)
656
+ let prePromptBody;
657
+ if (callerTableName && contractParms.length > 0) {
658
+ // Try to match contract params to caller table fields by name heuristics
659
+ const callerVarName = callerTableName.charAt(0).toLowerCase() + callerTableName.slice(1);
660
+ const prefillLines = contractParms.flatMap(p => {
661
+ // Heuristic: param name matches a field pattern on the caller table
662
+ // e.g. CustAccount → callerRecord.AccountNum (common D365FO convention)
663
+ const fieldGuess = p.name.charAt(0).toUpperCase() + p.name.slice(1); // CustAccount → CustAccount
664
+ const methodName = `parm${p.name.charAt(0).toUpperCase()}${p.name.slice(1)}`;
665
+ return [
666
+ ` if (${callerVarName}.${fieldGuess} != ${p.type === 'TransDate' ? 'dateNull()' : (p.type === 'str' || !p.type) ? '""' : '0'})`,
667
+ ` ${contractVarName}.${methodName}(${callerVarName}.${fieldGuess});`,
668
+ ];
669
+ });
670
+ prePromptBody = [
671
+ ` ${contractClassName} ${contractVarName} = this.parmReportContract().parmRdpContract() as ${contractClassName};`,
672
+ ` ${callerTableName} ${callerVarName} = this.parmArgs().record() as ${callerTableName};`,
673
+ ` if (${callerVarName})`,
674
+ ` {`,
675
+ ...prefillLines.map(l => ` ${l}`),
676
+ ` }`,
677
+ ].join('\n');
678
+ }
679
+ else {
680
+ prePromptBody = [
681
+ ` ${contractClassName} ${contractVarName} = this.parmReportContract().parmRdpContract() as ${contractClassName};`,
682
+ ` // TODO: Set default parameter values here`,
683
+ ` // Example: ${contractVarName}.parmFromDate(DateTimeUtil::getToday(DateTimeUtil::getUserPreferredTimeZone()));`,
684
+ ].join('\n');
685
+ }
686
+ const prePromptMethod = [
687
+ ` /// <summary>`,
688
+ ` /// Modifies the contract before the dialog is shown to the user.`,
689
+ ` /// Override to set default parameter values or pre-fill from the caller record.`,
690
+ ` /// </summary>`,
691
+ ` protected void prePromptModifyContract()`,
692
+ ` {`,
693
+ prePromptBody,
694
+ ` }`,
695
+ ].join('\n');
696
+ const controllerSourceCode = [
697
+ `/// <summary>`,
698
+ `/// Controller for the ${reportCaption} report.`,
699
+ `/// Extends <c>${ctrlBaseClass}</c> to provide menu item integration`,
700
+ `/// and pre-prompt contract initialization.`,
701
+ `/// </summary>`,
702
+ `public class ${controllerClassName} extends ${ctrlBaseClass}`,
703
+ `{`,
704
+ `}`,
705
+ ``,
706
+ mainMethod,
707
+ ``,
708
+ prePromptMethod,
709
+ ].join('\n');
710
+ const controllerXml = XmlTemplateGenerator.generateAxClassXml(controllerClassName, controllerSourceCode);
711
+ generatedObjects.push({
712
+ objectType: 'class',
713
+ objectName: controllerClassName,
714
+ aotFolder: 'AxClass',
715
+ content: controllerXml,
716
+ });
717
+ log(`Generated Controller: ${controllerClassName} (${controllerType}, callerTable=${callerTableName ?? 'none'})`);
718
+ // ── 5. Output menu item (AxMenuItemOutput) ─────────────────────────────
719
+ const menuItemXml = XmlTemplateGenerator.generateAxMenuItemXml('menu-item-output', finalName, {
720
+ targetObject: controllerClassName,
721
+ objectType: 'Class',
722
+ label: reportCaption,
723
+ });
724
+ generatedObjects.push({
725
+ objectType: 'menu-item-output',
726
+ objectName: finalName,
727
+ aotFolder: 'AxMenuItemOutput',
728
+ content: menuItemXml,
729
+ });
730
+ log(`Generated output menu item: ${finalName} → ${controllerClassName}`);
731
+ }
732
+ // ──────────────────────────────────────────────────────────────────────────
733
+ // 6. AxReport XML + RDL (multi-dataset, page header, optional grouped tablix)
734
+ // ──────────────────────────────────────────────────────────────────────────
735
+ const reportFieldDefs = reportFields.map(f => ({
736
+ name: f.name,
737
+ alias: `${tmpTableName}.1.${f.name}`,
738
+ dataType: f.dataType || 'System.String',
739
+ caption: f.label,
740
+ }));
741
+ const reportContractParams = contractParms.map(p => ({
742
+ name: p.name,
743
+ dataType: contractParamToRdlType(p.type || 'str'),
744
+ label: p.label,
745
+ }));
746
+ // Build report properties — multi-dataset when additionalDatasets present (Improvement 9)
747
+ const reportProps = {
748
+ designName: 'Report',
749
+ caption: reportCaption,
750
+ contractParams: reportContractParams,
751
+ };
752
+ if (resolvedExtraDatasets.length > 0) {
753
+ reportProps.datasets = [
754
+ {
755
+ name: tmpTableName,
756
+ dpClassName,
757
+ tmpTableName,
758
+ fields: reportFieldDefs,
759
+ contractParams: reportContractParams,
760
+ ...(aotQuery ? { aotQuery } : {}),
761
+ },
762
+ ...resolvedExtraDatasets.map(ds => ({
763
+ name: ds.tmpTableName,
764
+ dpClassName,
765
+ tmpTableName: ds.tmpTableName,
766
+ fields: ds.fields.map(f => ({
767
+ name: f.name,
768
+ alias: `${ds.tmpTableName}.1.${f.name}`,
769
+ dataType: f.dataType || 'System.String',
770
+ caption: f.label,
771
+ })),
772
+ })),
773
+ ];
774
+ }
775
+ else {
776
+ reportProps.dpClassName = dpClassName;
777
+ reportProps.tmpTableName = tmpTableName;
778
+ reportProps.datasetName = tmpTableName;
779
+ reportProps.fields = reportFieldDefs;
780
+ if (aotQuery)
781
+ reportProps.aotQuery = aotQuery;
782
+ }
783
+ let reportXml = XmlTemplateGenerator.generateAxReportXml(finalName, reportProps);
784
+ // Improvement 7: inject RDL page header (always on — company name, title, execution time)
785
+ reportXml = injectRdlPageHeader(reportXml, reportCaption);
786
+ // Improvement 1: replace standard tablix with grouped design when requested
787
+ if (designStyle === 'GroupedWithTotals') {
788
+ reportXml = injectGroupedTablix(reportXml, reportFields, tmpTableName);
789
+ log(`Applied GroupedWithTotals RDL design`);
790
+ }
791
+ generatedObjects.push({
792
+ objectType: 'report',
793
+ objectName: finalName,
794
+ aotFolder: 'AxReport',
795
+ content: reportXml,
796
+ });
797
+ log(`Generated Report: ${finalName} (${reportFieldDefs.length} fields, ${reportContractParams.length} contract params, ${resolvedExtraDatasets.length} extra datasets)`);
798
+ // ── Output ─────────────────────────────────────────────────────────────────
799
+ const objectSummary = generatedObjects.map(o => ` - ${o.objectType}: **${o.objectName}**`).join('\n');
800
+ if (isNonWindows) {
801
+ // Azure/Linux: return all XML/source blocks as text
802
+ log(`Non-Windows — returning ${generatedObjects.length} object XMLs as text`);
803
+ const createCalls = generatedObjects.map(o => {
804
+ return [
805
+ `\`\`\``,
806
+ `d365fo_file(action="create", `,
807
+ ` objectType="${o.objectType}",`,
808
+ ` objectName="${o.objectName}",`,
809
+ ` xmlContent="<XML block #${generatedObjects.indexOf(o) + 1} below>",`,
810
+ ` addToProject=true`,
811
+ `)`,
812
+ `\`\`\``,
813
+ ].join('\n');
814
+ }).join('\n');
815
+ const xmlBlocks = generatedObjects.map((o, i) => {
816
+ return [
817
+ `### ${i + 1}. ${o.objectType}: ${o.objectName}`,
818
+ `\`\`\`xml`,
819
+ o.content,
820
+ `\`\`\``,
821
+ ].join('\n');
822
+ }).join('\n\n');
823
+ return {
824
+ content: [{
825
+ type: 'text',
826
+ text: [
827
+ `✅ SSRS Report generated: **${finalName}** (${generatedObjects.length} objects)`,
828
+ resolvedModel ? ` Model: ${resolvedModel}` : ` ℹ️ No model resolved — no prefix applied.`,
829
+ objectSummary,
830
+ ``,
831
+ `ℹ️ MCP server is running on Azure/Linux — file writing is handled by the local Windows companion.`,
832
+ ``,
833
+ `**✅ MANDATORY NEXT STEPS — call \`d365fo_file(action="create")\` for EACH object below, in this order:**`,
834
+ ``,
835
+ createCalls,
836
+ ``,
837
+ `⛔ NEVER use \`create_file\`, PowerShell scripts, or any built-in file tool.`,
838
+ `⛔ NEVER skip any of the ${generatedObjects.length} create calls — all objects are required for the report to build.`,
839
+ ``,
840
+ `---`,
841
+ ``,
842
+ xmlBlocks,
843
+ ].join('\n'),
844
+ }],
845
+ };
846
+ }
847
+ // Windows: write all objects to disk
848
+ if (!resolvedModel) {
849
+ return {
850
+ content: [{
851
+ type: 'text',
852
+ text: `❌ Cannot write report files: model name could not be resolved.\n\n` +
853
+ `Add \`projectPath\` to .mcp.json so the tool can extract the model name from your .rnrproj.`,
854
+ }],
855
+ isError: true,
856
+ };
857
+ }
858
+ const effectiveProjectPath = resolvedProjectPath ||
859
+ (await configManager.getProjectPath()) ||
860
+ undefined;
861
+ const results = [];
862
+ for (const obj of generatedObjects) {
863
+ const targetPath = path.join(pkgPath, resolvedModel, resolvedModel, obj.aotFolder, `${obj.objectName}.xml`);
864
+ const normalizedPath = targetPath.replace(/\//g, '\\');
865
+ const dir = path.dirname(normalizedPath);
866
+ if (!fs.existsSync(dir)) {
867
+ fs.mkdirSync(dir, { recursive: true });
868
+ }
869
+ // Guard: refuse to overwrite existing table files (would destroy existing methods, fields, etc.)
870
+ if (obj.objectType === 'table' && fs.existsSync(normalizedPath)) {
871
+ results.push(`⚠️ ${obj.objectType}: ${normalizedPath} — SKIPPED (file already exists, would destroy existing content). Use \`d365fo_file(action="modify")\` to modify existing tables.`);
872
+ log(`Skipped existing table: ${normalizedPath}`);
873
+ continue;
874
+ }
875
+ fs.writeFileSync(normalizedPath, normalizeD365Xml(obj.content), 'utf-8');
876
+ let projectMsg = '';
877
+ if (effectiveProjectPath) {
878
+ try {
879
+ const projectManager = new ProjectFileManager();
880
+ const wasAdded = await projectManager.addToProject(effectiveProjectPath, obj.objectType, obj.objectName, normalizedPath);
881
+ projectMsg = wasAdded ? ' ✅ added to project' : ' (already in project)';
882
+ }
883
+ catch (e) {
884
+ projectMsg = ` ⚠️ project add failed: ${e instanceof Error ? e.message : String(e)}`;
885
+ }
886
+ }
887
+ results.push(`📁 ${obj.objectType}: ${normalizedPath}${projectMsg}`);
888
+ log(`Created: ${normalizedPath}`);
889
+ }
890
+ return {
891
+ content: [{
892
+ type: 'text',
893
+ text: [
894
+ `✅ SSRS Report **${finalName}** created directly on Windows VM (${generatedObjects.length} objects):`,
895
+ ``,
896
+ `📦 Model: ${resolvedModel}`,
897
+ results.join('\n'),
898
+ ``,
899
+ `⛔ DO NOT call \`d365fo_file(action="create")\` — all files are already written to disk.`,
900
+ `⛔ DO NOT call \`generate\` again — task is COMPLETE.`,
901
+ ``,
902
+ `Next steps:`,
903
+ `1. Open Visual Studio and reload the project (close/reopen solution)`,
904
+ `2. Open the AxReport in Report Designer and fine-tune the RDL design`,
905
+ `3. Build the project to compile all objects`,
906
+ `4. Deploy to the report server (right-click report → Deploy)`,
907
+ ].join('\n'),
908
+ }],
909
+ };
910
+ }
911
+ // ─────────────────────────────────────────────────────────────────────────────
912
+ // Helpers
913
+ // ─────────────────────────────────────────────────────────────────────────────
914
+ // ── Improvement 7: RDL page header injection ──────────────────────────────────
915
+ /**
916
+ * Injects an RDL <PageHeader> with company name, report title, and execution time
917
+ * into every ReportSection inside the AxReport XML (CDATA-embedded RDL).
918
+ * The header is placed before the closing </ReportSection> tag.
919
+ */
920
+ function injectRdlPageHeader(axReportXml, caption) {
921
+ const pageHeaderXml = [
922
+ ` <PageHeader>`,
923
+ ` <PrintOnFirstPage>true</PrintOnFirstPage>`,
924
+ ` <PrintOnLastPage>true</PrintOnLastPage>`,
925
+ ` <Height>0.5in</Height>`,
926
+ ` <ReportItems>`,
927
+ ` <Textbox Name="CompanyName">`,
928
+ ` <CanGrow>true</CanGrow>`,
929
+ ` <Value>=Parameters!AX_CompanyName.Value</Value>`,
930
+ ` <Style><FontWeight>Bold</FontWeight><FontSize>10pt</FontSize></Style>`,
931
+ ` <Top>0in</Top><Left>0in</Left><Width>4in</Width><Height>0.25in</Height>`,
932
+ ` </Textbox>`,
933
+ ` <Textbox Name="ReportTitle">`,
934
+ ` <CanGrow>true</CanGrow>`,
935
+ ` <Value>${caption.replace(/[<>&"]/g, c => c === '<' ? '&lt;' : c === '>' ? '&gt;' : c === '&' ? '&amp;' : '&quot;')}</Value>`,
936
+ ` <Style><FontSize>9pt</FontSize></Style>`,
937
+ ` <Top>0.25in</Top><Left>0in</Left><Width>4in</Width><Height>0.25in</Height>`,
938
+ ` </Textbox>`,
939
+ ` <Textbox Name="ExecutionTime">`,
940
+ ` <CanGrow>true</CanGrow>`,
941
+ ` <Value>=Globals!ExecutionTime</Value>`,
942
+ ` <Style><TextAlign>Right</TextAlign><FontSize>8pt</FontSize></Style>`,
943
+ ` <Top>0in</Top><Left>4in</Left><Width>3in</Width><Height>0.25in</Height>`,
944
+ ` </Textbox>`,
945
+ ` </ReportItems>`,
946
+ ` </PageHeader>`,
947
+ ].join('\n');
948
+ // Inject before <Body> (correct per RDL 2016 schema: PageHeader must precede Body)
949
+ return axReportXml.replace(/(<ReportSection>)(\n\s*)(<Body>)/g, `$1$2${pageHeaderXml}$2$3`);
950
+ }
951
+ // ── Improvement 1: GroupedWithTotals tablix injection ────────────────────────
952
+ /**
953
+ * Replaces the auto-generated flat detail tablix in the RDL with a grouped tablix.
954
+ * Groups on the first non-numeric field; adds SUM() subtotals for numeric fields,
955
+ * and a grand-total footer row at the bottom.
956
+ */
957
+ function injectGroupedTablix(axReportXml, fields, datasetName) {
958
+ if (fields.length === 0)
959
+ return axReportXml;
960
+ // Classify fields
961
+ const numericTypes = new Set(['System.Double', 'System.Int32', 'System.Int64']);
962
+ const groupField = fields.find(f => !numericTypes.has(f.dataType ?? '')) ?? fields[0];
963
+ const numericFields = fields.filter(f => numericTypes.has(f.dataType ?? ''));
964
+ const n = fields.length;
965
+ const colW = +Math.min(1.5, 7 / n).toFixed(2);
966
+ const totalW = +(colW * n).toFixed(2);
967
+ const rowGrp = `Group_${groupField.name}`;
968
+ const detailGrp = `Details_${datasetName}`;
969
+ const cols = fields.map(() => ` <TablixColumn><Width>${colW}in</Width></TablixColumn>`).join('\n');
970
+ // Header row (bold grey)
971
+ const hCells = fields.map(f => [
972
+ ` <TablixCell><CellContents>`,
973
+ ` <Textbox Name="Hdr_${f.name}">`,
974
+ ` <CanGrow>true</CanGrow><Value>${f.name}</Value>`,
975
+ ` <Style><FontWeight>Bold</FontWeight><BackgroundColor>LightGrey</BackgroundColor>`,
976
+ ` <Border><Style>Solid</Style></Border>`,
977
+ ` <PaddingLeft>2pt</PaddingLeft><PaddingRight>2pt</PaddingRight>`,
978
+ ` <PaddingTop>2pt</PaddingTop><PaddingBottom>2pt</PaddingBottom>`,
979
+ ` </Style></Textbox>`,
980
+ ` </CellContents></TablixCell>`,
981
+ ].join('\n')).join('\n');
982
+ // Group header row (field value + subtotals for numerics, light blue)
983
+ const grpCells = fields.map(f => {
984
+ const isGrp = f.name === groupField.name;
985
+ const isNum = numericFields.some(nf => nf.name === f.name);
986
+ const val = isGrp ? `=Fields!${f.name}.Value` : isNum ? `=Sum(Fields!${f.name}.Value)` : ``;
987
+ return [
988
+ ` <TablixCell><CellContents>`,
989
+ ` <Textbox Name="Grp_${f.name}">`,
990
+ ` <CanGrow>true</CanGrow><Value>${val}</Value>`,
991
+ ` <Style><FontWeight>Bold</FontWeight><BackgroundColor>AliceBlue</BackgroundColor>`,
992
+ ` <Border><Style>Solid</Style></Border>`,
993
+ ` <PaddingLeft>2pt</PaddingLeft><PaddingRight>2pt</PaddingRight>`,
994
+ ` <PaddingTop>2pt</PaddingTop><PaddingBottom>2pt</PaddingBottom>`,
995
+ ` </Style></Textbox>`,
996
+ ` </CellContents></TablixCell>`,
997
+ ].join('\n');
998
+ }).join('\n');
999
+ // Detail row
1000
+ const dCells = fields.map(f => [
1001
+ ` <TablixCell><CellContents>`,
1002
+ ` <Textbox Name="Det_${f.name}">`,
1003
+ ` <CanGrow>true</CanGrow><Value>=Fields!${f.name}.Value</Value>`,
1004
+ ` <Style><Border><Style>Solid</Style></Border>`,
1005
+ ` <PaddingLeft>2pt</PaddingLeft><PaddingRight>2pt</PaddingRight>`,
1006
+ ` <PaddingTop>2pt</PaddingTop><PaddingBottom>2pt</PaddingBottom>`,
1007
+ ` </Style></Textbox>`,
1008
+ ` </CellContents></TablixCell>`,
1009
+ ].join('\n')).join('\n');
1010
+ // Grand total footer row (yellow)
1011
+ const totCells = fields.map(f => {
1012
+ const isNum = numericFields.some(nf => nf.name === f.name);
1013
+ const val = isNum ? `=Sum(Fields!${f.name}.Value)` : (f.name === groupField.name ? `"Total"` : `""`);
1014
+ return [
1015
+ ` <TablixCell><CellContents>`,
1016
+ ` <Textbox Name="Tot_${f.name}">`,
1017
+ ` <CanGrow>true</CanGrow><Value>${val}</Value>`,
1018
+ ` <Style><FontWeight>Bold</FontWeight><BackgroundColor>LightYellow</BackgroundColor>`,
1019
+ ` <Border><Style>Solid</Style></Border>`,
1020
+ ` <PaddingLeft>2pt</PaddingLeft><PaddingRight>2pt</PaddingRight>`,
1021
+ ` <PaddingTop>2pt</PaddingTop><PaddingBottom>2pt</PaddingBottom>`,
1022
+ ` </Style></Textbox>`,
1023
+ ` </CellContents></TablixCell>`,
1024
+ ].join('\n');
1025
+ }).join('\n');
1026
+ const cMembers = fields.map(() => ` <TablixMember />`).join('\n');
1027
+ const groupedTablix = [
1028
+ ` <Tablix Name="Tablix_${datasetName}">`,
1029
+ ` <TablixBody>`,
1030
+ ` <TablixColumns>`,
1031
+ cols,
1032
+ ` </TablixColumns>`,
1033
+ ` <TablixRows>`,
1034
+ ` <TablixRow><Height>0.25in</Height><TablixCells>`,
1035
+ hCells,
1036
+ ` </TablixCells></TablixRow>`,
1037
+ ` <TablixRow><Height>0.25in</Height><TablixCells>`,
1038
+ grpCells,
1039
+ ` </TablixCells></TablixRow>`,
1040
+ ` <TablixRow><Height>0.25in</Height><TablixCells>`,
1041
+ dCells,
1042
+ ` </TablixCells></TablixRow>`,
1043
+ ` <TablixRow><Height>0.25in</Height><TablixCells>`,
1044
+ totCells,
1045
+ ` </TablixCells></TablixRow>`,
1046
+ ` </TablixRows>`,
1047
+ ` </TablixBody>`,
1048
+ ` <TablixColumnHierarchy><TablixMembers>`,
1049
+ cMembers,
1050
+ ` </TablixMembers></TablixColumnHierarchy>`,
1051
+ ` <TablixRowHierarchy><TablixMembers>`,
1052
+ ` <TablixMember>`,
1053
+ ` <KeepWithGroup>After</KeepWithGroup>`,
1054
+ ` <RepeatOnNewPage>true</RepeatOnNewPage>`,
1055
+ ` </TablixMember>`,
1056
+ ` <TablixMember>`,
1057
+ ` <Group Name="${rowGrp}">`,
1058
+ ` <DataGroupName>${rowGrp}</DataGroupName>`,
1059
+ ` <GroupExpressions>`,
1060
+ ` <GroupExpression>=Fields!${groupField.name}.Value</GroupExpression>`,
1061
+ ` </GroupExpressions>`,
1062
+ ` </Group>`,
1063
+ ` <TablixMembers>`,
1064
+ ` <TablixMember><Group Name="${detailGrp}"><DataGroupName>${detailGrp}</DataGroupName></Group></TablixMember>`,
1065
+ ` </TablixMembers>`,
1066
+ ` </TablixMember>`,
1067
+ ` <TablixMember>`,
1068
+ ` <Group Name="Total_${datasetName}"><DataGroupName>Total_${datasetName}</DataGroupName></Group>`,
1069
+ ` </TablixMember>`,
1070
+ ` </TablixMembers></TablixRowHierarchy>`,
1071
+ ` <DataSetName>${datasetName}</DataSetName>`,
1072
+ ` <Top>0.5in</Top><Left>0.5in</Left>`,
1073
+ ` <Height>1in</Height><Width>${totalW}in</Width>`,
1074
+ ` <Style><Border><Style>Solid</Style></Border></Style>`,
1075
+ ` </Tablix>`,
1076
+ ].join('\n');
1077
+ // Replace the existing flat tablix for this dataset
1078
+ const tablixRe = new RegExp(` <Tablix Name="Tablix_${datasetName}">[\\s\\S]*? </Tablix>`, 'g');
1079
+ const replaced = axReportXml.replace(tablixRe, groupedTablix);
1080
+ // If nothing matched (e.g. no fields were generated), return unchanged
1081
+ return replaced;
1082
+ }
1083
+ /**
1084
+ * Suggest EDT based on field name heuristics (shared with generateSmartTable).
1085
+ */
1086
+ function suggestEdtFromFieldName(fieldName) {
1087
+ const n = fieldName.toLowerCase();
1088
+ if (n === 'recid')
1089
+ return 'RecId';
1090
+ if (n === 'accountnum' || n === 'accountnumber')
1091
+ return 'CustAccount';
1092
+ if (n.includes('custaccount') || n.includes('customeraccount'))
1093
+ return 'CustAccount';
1094
+ if (n.includes('vendaccount') || (n.includes('vendor') && n.includes('account')))
1095
+ return 'VendAccount';
1096
+ if (n === 'name' || n === 'itemname')
1097
+ return 'Name';
1098
+ if (n.includes('name'))
1099
+ return 'Name';
1100
+ if (n === 'description' || n === 'desc')
1101
+ return 'Description';
1102
+ if (n.includes('description'))
1103
+ return 'Description';
1104
+ if (n.includes('amount') || n.includes('balance'))
1105
+ return 'AmountMST';
1106
+ if (n.includes('quantity') || n.includes('qty'))
1107
+ return 'Qty';
1108
+ if (n.includes('price'))
1109
+ return 'PriceUnit';
1110
+ if (n === 'fromdate' || n === 'validfrom')
1111
+ return 'TransDate';
1112
+ if (n === 'todate' || n === 'validto')
1113
+ return 'TransDate';
1114
+ if (n.includes('date'))
1115
+ return 'TransDate';
1116
+ if (n.includes('itemid') || n === 'item')
1117
+ return 'ItemId';
1118
+ if (n.includes('custgroup'))
1119
+ return 'CustGroupId';
1120
+ if (n.includes('cust'))
1121
+ return 'CustAccount';
1122
+ if (n.includes('vend'))
1123
+ return 'VendAccount';
1124
+ if (n.includes('percent') || n.includes('pct'))
1125
+ return 'Percent';
1126
+ if (n.includes('zone'))
1127
+ return 'WHSZoneId';
1128
+ if (n.includes('warehouse') || n === 'whs')
1129
+ return 'InventLocationId';
1130
+ return 'String255';
1131
+ }
1132
+ /**
1133
+ * Resolve .NET data type for RDL from an EDT name by checking edt_metadata.
1134
+ */
1135
+ function resolveRdlDataType(edtName, db) {
1136
+ if (!edtName)
1137
+ return 'System.String';
1138
+ const baseType = resolveEdtBaseType(edtName, db);
1139
+ switch (baseType) {
1140
+ case 'Real': return 'System.Double';
1141
+ case 'Integer': return 'System.Int32';
1142
+ case 'Int64': return 'System.Int64';
1143
+ case 'Date': return 'System.DateTime';
1144
+ case 'UtcDateTime': return 'System.DateTime';
1145
+ case 'DateTime': return 'System.DateTime';
1146
+ case 'Guid':
1147
+ case 'GUID': return 'System.String';
1148
+ case 'Container': return 'System.Byte[]';
1149
+ case 'Enum': return 'System.Int32';
1150
+ default: return 'System.String';
1151
+ }
1152
+ }
1153
+ /**
1154
+ * Walk EDT extends chain to find primitive base type (same as generateSmartTable).
1155
+ */
1156
+ function resolveEdtBaseType(edtName, db, depth = 0) {
1157
+ const PRIMITIVES = new Set([
1158
+ 'String', 'Integer', 'Int64', 'Real', 'Date', 'UtcDateTime', 'DateTime',
1159
+ 'Enum', 'Container', 'Guid', 'GUID',
1160
+ ]);
1161
+ if (depth > 8)
1162
+ return 'String';
1163
+ if (PRIMITIVES.has(edtName))
1164
+ return edtName;
1165
+ try {
1166
+ const row = db.prepare(`SELECT extends, enum_type FROM edt_metadata WHERE edt_name = ? LIMIT 1`).get(edtName);
1167
+ if (!row)
1168
+ return 'String';
1169
+ // Enum-based EDT: extends is null but enum_type is set (e.g. SalesStatus, PurchStatus)
1170
+ if (row.enum_type && !row.extends)
1171
+ return 'Enum';
1172
+ if (!row.extends)
1173
+ return 'String';
1174
+ if (PRIMITIVES.has(row.extends))
1175
+ return row.extends;
1176
+ return resolveEdtBaseType(row.extends, db, depth + 1);
1177
+ }
1178
+ catch {
1179
+ return 'String';
1180
+ }
1181
+ }
1182
+ /**
1183
+ * Resolve AxTableField type from EDT (for SmartXmlBuilder).
1184
+ */
1185
+ function resolveFieldType(edtName, db) {
1186
+ if (!edtName)
1187
+ return undefined;
1188
+ const base = resolveEdtBaseType(edtName, db);
1189
+ // SmartXmlBuilder uses these type strings to pick AxTableFieldXxx
1190
+ switch (base) {
1191
+ case 'Real': return 'Real';
1192
+ case 'Integer': return 'Integer';
1193
+ case 'Int64': return 'Int64';
1194
+ case 'Date': return 'Date';
1195
+ case 'UtcDateTime': return 'UtcDateTime';
1196
+ case 'DateTime': return 'UtcDateTime';
1197
+ case 'Enum': return 'Enum';
1198
+ case 'Container': return 'Container';
1199
+ case 'Guid':
1200
+ case 'GUID': return 'Guid';
1201
+ default: return undefined; // String is default
1202
+ }
1203
+ }
1204
+ /**
1205
+ * Resolve the first datasource table name for an AOT query from the symbol index.
1206
+ * When found the caller can generate `tableNum(TableName)` — a compile-time-validated
1207
+ * table reference — instead of the generic `getNo(1)` / `Common` pattern.
1208
+ * Returns undefined when the query is not in the index (non-Windows, or unknown query).
1209
+ */
1210
+ function resolveAotQueryFirstTable(requestedQueryName, db) {
1211
+ try {
1212
+ // Resolve the caller's casing to the canonical AOT name once (#686), so the
1213
+ // parent-scoped probe below stays BINARY and on-index.
1214
+ const queryName = canonicalSymbolName(db, requestedQueryName, ['query']) ?? requestedQueryName;
1215
+ // Strategy 1: explicit query_datasource symbols (parent_name = query name)
1216
+ const ds = db.prepare(`SELECT name FROM symbols
1217
+ WHERE type IN ('query_datasource','querydatasource','QueryDataSource')
1218
+ AND parent_name = ?
1219
+ ORDER BY rowid
1220
+ LIMIT 1`).get(queryName);
1221
+ if (ds?.name)
1222
+ return ds.name;
1223
+ // Strategy 2: query symbol's signature may contain comma-separated table names
1224
+ const q = db.prepare(`SELECT signature FROM symbols
1225
+ WHERE type IN ('query','Query')
1226
+ AND name = ?
1227
+ LIMIT 1`).get(queryName);
1228
+ if (q?.signature) {
1229
+ const first = q.signature.split(/[,;|]/)[0].trim();
1230
+ if (first)
1231
+ return first;
1232
+ }
1233
+ return undefined;
1234
+ }
1235
+ catch {
1236
+ return undefined;
1237
+ }
1238
+ }
1239
+ /**
1240
+ * Map X++ contract param types to RDL .NET types.
1241
+ */
1242
+ function contractParamToRdlType(xppType) {
1243
+ const t = xppType.toLowerCase();
1244
+ if (t === 'real' || t === 'amountmst' || t === 'qty' || t === 'percent')
1245
+ return 'System.Double';
1246
+ if (t === 'int' || t === 'integer')
1247
+ return 'System.Int32';
1248
+ if (t === 'int64' || t === 'recid' || t === 'refrecid')
1249
+ return 'System.Int64';
1250
+ if (t.includes('date'))
1251
+ return 'System.DateTime';
1252
+ return 'System.String';
1253
+ }
1254
+ //# sourceMappingURL=generateSmartReport.js.map