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,2003 @@
1
+ /**
2
+ * Bridge Adapter — Converts C# bridge responses into the markdown format
3
+ * expected by MCP tool handlers.
4
+ *
5
+ * Each function returns a pre-formatted MCP tool result (content array)
6
+ * or null if the bridge couldn't provide the data.
7
+ *
8
+ * Usage pattern inside a tool handler:
9
+ * const bridgeResult = await tryBridgeTable(context.bridge, tableName, methodOffset);
10
+ * if (bridgeResult) return bridgeResult;
11
+ * // ... fallback to SQLite/parser ...
12
+ */
13
+ import * as debouncedRefresh from './debouncedRefresh.js';
14
+ import { debugLog } from '../utils/logger.js';
15
+ import { reindentXppSource } from '../utils/xppFormat.js';
16
+ // TABLE
17
+ const TABLE_METHOD_PAGE_SIZE = 25;
18
+ export async function tryBridgeTable(bridge, tableName, methodOffset = 0) {
19
+ if (!bridge?.isReady || !bridge.metadataAvailable)
20
+ return null;
21
+ try {
22
+ const t = await bridge.readTable(tableName);
23
+ if (!t)
24
+ return null;
25
+ return { content: [{ type: 'text', text: formatTable(t, methodOffset) }] };
26
+ }
27
+ catch (e) {
28
+ console.error(`[BridgeAdapter] readTable(${tableName}) failed: ${e}`);
29
+ return null;
30
+ }
31
+ }
32
+ function formatTable(t, methodOffset) {
33
+ let out = `# Table: ${t.name}\n\n`;
34
+ if (t.label)
35
+ out += `**Label:** ${t.label}\n`;
36
+ if (t.tableGroup)
37
+ out += `**Table Group:** ${t.tableGroup}\n`;
38
+ if (t.model)
39
+ out += `**Model:** ${t.model}\n`;
40
+ if (t.extends)
41
+ out += `**Extends:** ${t.extends}\n`;
42
+ if (t.cacheLookup)
43
+ out += `**CacheLookup:** ${t.cacheLookup}\n`;
44
+ if (t.clusteredIndex)
45
+ out += `**ClusteredIndex:** ${t.clusteredIndex}\n`;
46
+ if (t.primaryIndex)
47
+ out += `**PrimaryIndex:** ${t.primaryIndex}\n`;
48
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
49
+ // Fields
50
+ out += `## Fields (${t.fields.length})\n\n`;
51
+ out += `_Field type is shown as explicit EDT when available._\n\n`;
52
+ for (const f of t.fields) {
53
+ const required = f.mandatory ? ' **(required)**' : '';
54
+ const label = f.label ? ` - ${f.label}` : '';
55
+ const typeInfo = f.extendedDataType
56
+ ? `EDT: ${f.extendedDataType} (base: ${f.fieldType})`
57
+ : `Type: ${f.fieldType}`;
58
+ out += `- **${f.name}**: ${typeInfo}${required}${label}\n`;
59
+ }
60
+ // Indexes
61
+ out += `\n## Indexes (${t.indexes.length})\n\n`;
62
+ for (const idx of t.indexes) {
63
+ const unique = !idx.allowDuplicates ? ' **(unique)**' : '';
64
+ const fieldNames = idx.fields.map((f) => typeof f === 'string' ? f : f.dataField ?? f.name).join(', ');
65
+ out += `- **${idx.name}**: [${fieldNames}]${unique}\n`;
66
+ }
67
+ // Relations
68
+ out += `\n## Relations (${t.relations.length})\n\n`;
69
+ for (const rel of t.relations) {
70
+ out += `- **${rel.name}** → ${rel.relatedTable}\n`;
71
+ for (const c of rel.constraints) {
72
+ if (c.field && c.relatedField) {
73
+ out += ` - ${c.field} = ${c.relatedField}\n`;
74
+ }
75
+ else if (c.field && c.value) {
76
+ out += ` - ${c.field} = (fixed: ${c.value})\n`;
77
+ }
78
+ }
79
+ }
80
+ // Methods (paginated)
81
+ if (t.methods.length > 0) {
82
+ const visible = t.methods.slice(methodOffset, methodOffset + TABLE_METHOD_PAGE_SIZE);
83
+ const total = t.methods.length;
84
+ const hasMore = methodOffset + TABLE_METHOD_PAGE_SIZE < total;
85
+ out += `\n## Methods (${total} total`;
86
+ if (total > TABLE_METHOD_PAGE_SIZE) {
87
+ out += `, showing ${methodOffset + 1}–${Math.min(methodOffset + TABLE_METHOD_PAGE_SIZE, total)}`;
88
+ }
89
+ out += `)\n\n`;
90
+ for (const m of visible) {
91
+ out += `### ${m.name}\n\n`;
92
+ if (m.source) {
93
+ const preview = m.source.substring(0, 500);
94
+ out += `\`\`\`xpp\n${preview}${m.source.length > 500 ? '\n// ...' : ''}\n\`\`\`\n\n`;
95
+ }
96
+ }
97
+ if (hasMore) {
98
+ out += `> ⚠️ **${total - methodOffset - TABLE_METHOD_PAGE_SIZE} more methods.** Call again with \`methodOffset: ${methodOffset + TABLE_METHOD_PAGE_SIZE}\`.\n\n`;
99
+ }
100
+ }
101
+ return out;
102
+ }
103
+ // CLASS
104
+ const CLASS_METHOD_PAGE_SIZE = 15;
105
+ export async function tryBridgeClass(bridge, className, compact, methodOffset = 0) {
106
+ if (!bridge?.isReady || !bridge.metadataAvailable)
107
+ return null;
108
+ try {
109
+ const cls = await bridge.readClass(className);
110
+ if (!cls)
111
+ return null;
112
+ return { content: [{ type: 'text', text: formatClass(cls, compact, methodOffset) }] };
113
+ }
114
+ catch (e) {
115
+ console.error(`[BridgeAdapter] readClass(${className}) failed: ${e}`);
116
+ return null;
117
+ }
118
+ }
119
+ function formatClass(cls, compact, methodOffset) {
120
+ const modifiers = [];
121
+ if (cls.isFinal)
122
+ modifiers.push('final');
123
+ if (cls.isAbstract)
124
+ modifiers.push('abstract');
125
+ const modStr = modifiers.length > 0 ? ` (${modifiers.join(', ')})` : '';
126
+ let out = `# Class: ${cls.name}${modStr}\n\n`;
127
+ if (cls.extends)
128
+ out += `**Extends:** ${cls.extends}\n`;
129
+ if (cls.model)
130
+ out += `**Model:** ${cls.model}\n`;
131
+ out += `**Abstract:** ${cls.isAbstract ? 'Yes' : 'No'}\n`;
132
+ out += `**Final:** ${cls.isFinal ? 'Yes' : 'No'}\n`;
133
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
134
+ if (!compact && cls.declaration) {
135
+ out += `## Declaration\n\`\`\`xpp\n${cls.declaration}\n\`\`\`\n\n`;
136
+ }
137
+ const total = cls.methods.length;
138
+ const visible = cls.methods.slice(methodOffset, methodOffset + CLASS_METHOD_PAGE_SIZE);
139
+ const hasMore = methodOffset + CLASS_METHOD_PAGE_SIZE < total;
140
+ out += `## Methods (${total} total`;
141
+ if (total > CLASS_METHOD_PAGE_SIZE) {
142
+ out += `, showing ${methodOffset + 1}–${Math.min(methodOffset + CLASS_METHOD_PAGE_SIZE, total)}`;
143
+ }
144
+ out += `)\n\n`;
145
+ for (const m of visible) {
146
+ if (compact) {
147
+ // Signature-only: extract first line of source for signature
148
+ const sig = m.source ? m.source.split('\n')[0].trim() : m.name;
149
+ out += `- \`${sig}\`\n`;
150
+ }
151
+ else {
152
+ out += `### ${m.name}\n\n`;
153
+ if (m.source) {
154
+ const preview = m.source.substring(0, 500);
155
+ out += `\`\`\`xpp\n${preview}${m.source.length > 500 ? '\n// ... (use get_method(include="source") for full body)' : ''}\n\`\`\`\n\n`;
156
+ }
157
+ }
158
+ }
159
+ if (hasMore) {
160
+ out += `> ⚠️ **${total - methodOffset - CLASS_METHOD_PAGE_SIZE} more methods.** Call again with \`methodOffset: ${methodOffset + CLASS_METHOD_PAGE_SIZE}\`.\n\n`;
161
+ }
162
+ return out;
163
+ }
164
+ // METHOD SOURCE
165
+ export async function tryBridgeMethodSource(bridge, className, methodName) {
166
+ if (!bridge?.isReady || !bridge.metadataAvailable)
167
+ return null;
168
+ try {
169
+ const ms = await bridge.getMethodSource(className, methodName);
170
+ if (!ms.found || !ms.source)
171
+ return null;
172
+ // Detect [SysObsolete] / [Obsolete] — same logic as fallback path.
173
+ // Without this, bridge-returned source silently omits the deprecation warning
174
+ // and AI may generate calls to obsolete methods (violates system rule 26).
175
+ const obsoleteMatch = ms.source.match(/\[\s*SysObsolete\s*\(\s*['"]([^'"]*)['"]/i)
176
+ ?? ms.source.match(/\[\s*Obsolete\s*\(\s*['"]([^'"]*)['"]/i);
177
+ const obsoleteWarning = obsoleteMatch
178
+ ? `\n\n> ⚠️ **This method is marked obsolete.** Do NOT generate calls to it.\n> Replacement hint from the attribute: _"${obsoleteMatch[1]}"_\n> Read the hint above and use the stated replacement instead.`
179
+ : '';
180
+ const text = `## ${ms.className}.${ms.methodName}\n\n` +
181
+ `_Source: C# bridge (IMetadataProvider)_\n` +
182
+ obsoleteWarning +
183
+ `\n\`\`\`xpp\n${ms.source}\n\`\`\``;
184
+ return { content: [{ type: 'text', text }] };
185
+ }
186
+ catch (e) {
187
+ console.error(`[BridgeAdapter] getMethodSource(${className}, ${methodName}) failed: ${e}`);
188
+ return null;
189
+ }
190
+ }
191
+ // ENUM
192
+ export async function tryBridgeEnum(bridge, enumName) {
193
+ if (!bridge?.isReady || !bridge.metadataAvailable)
194
+ return null;
195
+ try {
196
+ const en = await bridge.readEnum(enumName);
197
+ if (!en)
198
+ return null;
199
+ let out = `# Enum: ${en.name}\n\n`;
200
+ if (en.label)
201
+ out += `**Label:** ${en.label}\n`;
202
+ if (en.model)
203
+ out += `**Model:** ${en.model}\n`;
204
+ out += `**Extensible:** ${en.isExtensible ? 'Yes' : 'No'}\n`;
205
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
206
+ out += `## Values (${en.values.length})\n\n`;
207
+ for (const v of en.values) {
208
+ const lbl = v.label ? ` - ${v.label}` : '';
209
+ out += `- **${v.name}** = ${v.value}${lbl}\n`;
210
+ }
211
+ return { content: [{ type: 'text', text: out }] };
212
+ }
213
+ catch (e) {
214
+ console.error(`[BridgeAdapter] readEnum(${enumName}) failed: ${e}`);
215
+ return null;
216
+ }
217
+ }
218
+ // EDT
219
+ export async function tryBridgeEdt(bridge, edtName) {
220
+ if (!bridge?.isReady || !bridge.metadataAvailable)
221
+ return null;
222
+ try {
223
+ const edt = await bridge.readEdt(edtName);
224
+ if (!edt)
225
+ return null;
226
+ return { content: [{ type: 'text', text: formatEdt(edt) }] };
227
+ }
228
+ catch (e) {
229
+ console.error(`[BridgeAdapter] readEdt(${edtName}) failed: ${e}`);
230
+ return null;
231
+ }
232
+ }
233
+ function formatEdt(edt) {
234
+ let out = `# Extended Data Type: ${edt.name}\n\n`;
235
+ if (edt.model)
236
+ out += `**Model:** ${edt.model}\n`;
237
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
238
+ // Core properties table
239
+ out += `## 🔧 Core Properties\n\n`;
240
+ out += `| Property | Value |\n|---|---|\n`;
241
+ out += `| Base Type | ${edt.baseType ?? '—'}${edt.extends ? ` (Extends: ${edt.extends})` : ''} |\n`;
242
+ if (edt.enumType)
243
+ out += `| Enum Type | ${edt.enumType} |\n`;
244
+ if (edt.referenceTable)
245
+ out += `| Reference Table | ${edt.referenceTable} |\n`;
246
+ if (edt.relationType)
247
+ out += `| Relation Type | ${edt.relationType} |\n`;
248
+ if (edt.stringSize)
249
+ out += `| String Size | ${edt.stringSize} |\n`;
250
+ if (edt.displayLength)
251
+ out += `| Display Length | ${edt.displayLength} |\n`;
252
+ if (edt.label)
253
+ out += `| Label | ${edt.label} |\n`;
254
+ if (edt.helpText)
255
+ out += `| Help Text | ${edt.helpText} |\n`;
256
+ if (edt.formHelp)
257
+ out += `| Form Help | ${edt.formHelp} |\n`;
258
+ if (edt.configurationKey)
259
+ out += `| Configuration Key | ${edt.configurationKey} |\n`;
260
+ if (edt.alignment)
261
+ out += `| Alignment | ${edt.alignment} |\n`;
262
+ if (edt.noOfDecimals != null)
263
+ out += `| No. of Decimals | ${edt.noOfDecimals} |\n`;
264
+ if (edt.decimalSeparator)
265
+ out += `| Decimal Separator | ${edt.decimalSeparator} |\n`;
266
+ if (edt.signDisplay)
267
+ out += `| Sign Display | ${edt.signDisplay} |\n`;
268
+ return out;
269
+ }
270
+ // FORM
271
+ export async function tryBridgeForm(bridge, formName) {
272
+ if (!bridge?.isReady || !bridge.metadataAvailable)
273
+ return null;
274
+ try {
275
+ const form = await bridge.readForm(formName);
276
+ if (!form)
277
+ return null;
278
+ return { content: [{ type: 'text', text: formatForm(form) }] };
279
+ }
280
+ catch (e) {
281
+ console.error(`[BridgeAdapter] readForm(${formName}) failed: ${e}`);
282
+ return null;
283
+ }
284
+ }
285
+ function formatForm(form) {
286
+ let out = `# Form: ${form.name}\n\n`;
287
+ if (form.model)
288
+ out += `**Model:** ${form.model}\n`;
289
+ if (form.formPattern)
290
+ out += `**Pattern:** ${form.formPattern}\n`;
291
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
292
+ // Data Sources with permissions
293
+ out += `## 📊 Data Sources (${form.dataSources.length})\n\n`;
294
+ for (const ds of form.dataSources) {
295
+ const join = ds.joinSource ? ` (join: ${ds.joinSource})` : '';
296
+ const link = ds.linkType ? ` [LinkType: ${ds.linkType}]` : '';
297
+ out += `### ${ds.name}\n`;
298
+ out += ` Table: ${ds.table}${join}${link}\n`;
299
+ const perms = [];
300
+ if (ds.allowEdit)
301
+ perms.push(`Edit: ${ds.allowEdit}`);
302
+ if (ds.allowCreate)
303
+ perms.push(`Create: ${ds.allowCreate}`);
304
+ if (ds.allowDelete)
305
+ perms.push(`Delete: ${ds.allowDelete}`);
306
+ if (perms.length > 0)
307
+ out += ` Permissions: ${perms.join(', ')}\n`;
308
+ out += '\n';
309
+ }
310
+ // Controls tree with extra properties
311
+ out += `## 🎨 Controls (${form.controls.length} top-level)\n\n`;
312
+ out += buildControlTreeV2(form.controls, 0);
313
+ // Methods
314
+ if (form.methods && form.methods.length > 0) {
315
+ out += `\n## 🔧 Form Methods (${form.methods.length})\n\n`;
316
+ for (const m of form.methods) {
317
+ out += `### ${m.name}\n`;
318
+ if (m.source) {
319
+ const preview = m.source.substring(0, 400);
320
+ out += `\`\`\`xpp\n${preview}${m.source.length > 400 ? '\n// ...' : ''}\n\`\`\`\n`;
321
+ }
322
+ out += '\n';
323
+ }
324
+ }
325
+ // Summary
326
+ const totalControls = countControls(form.controls);
327
+ out += `\n## 📈 Summary\n`;
328
+ out += `Data Sources: ${form.dataSources.length} | Controls: ${totalControls} | Methods: ${form.methods?.length ?? 0}\n`;
329
+ return out;
330
+ }
331
+ function buildControlTreeV2(controls, depth) {
332
+ if (!controls || depth > 10)
333
+ return '';
334
+ let out = '';
335
+ const indent = ' '.repeat(depth);
336
+ for (const c of controls) {
337
+ const binding = c.dataSource && c.dataField ? ` [${c.dataSource}.${c.dataField}]` : '';
338
+ const method = c.dataMethod ? ` (method: ${c.dataMethod})` : '';
339
+ out += `${indent}- **${c.name}** (${c.controlType})${binding}${method}`;
340
+ // Show important properties inline
341
+ const props = [];
342
+ if (c.caption)
343
+ props.push(`Caption: ${c.caption}`);
344
+ if (c.visible && c.visible !== 'Yes')
345
+ props.push(`Visible: ${c.visible}`);
346
+ if (c.enabled && c.enabled !== 'Yes')
347
+ props.push(`Enabled: ${c.enabled}`);
348
+ if (c.label)
349
+ props.push(`Label: ${c.label}`);
350
+ if (props.length > 0)
351
+ out += `\n${indent} _${props.join(', ')}_`;
352
+ out += '\n';
353
+ if (c.children?.length) {
354
+ out += buildControlTreeV2(c.children, depth + 1);
355
+ }
356
+ }
357
+ return out;
358
+ }
359
+ function countControls(controls) {
360
+ let count = 0;
361
+ for (const c of controls) {
362
+ count++;
363
+ if (c.children)
364
+ count += countControls(c.children);
365
+ }
366
+ return count;
367
+ }
368
+ export async function tryBridgeReferences(bridge, target, limit = 50, displayName, formatAs = 'default') {
369
+ if (!bridge?.isReady || !bridge.xrefAvailable)
370
+ return { status: 'unavailable' };
371
+ // Accept several candidate paths (e.g. one per container type when an owner
372
+ // name collides across Tables/Classes) — query each and merge. Each source
373
+ // reference targets a distinct path, so there are no cross-candidate dupes.
374
+ const targets = Array.isArray(target) ? target : [target];
375
+ const label = displayName ?? targets[0];
376
+ // Query each candidate independently: a failing one — a thrown RPC error or an
377
+ // in-band SQL error from the C# bridge (resolves with `error` set, count 0) —
378
+ // must not abort the others, and must be remembered so we never report a
379
+ // transient failure as an authoritative "0 references".
380
+ const merged = [];
381
+ let errored = false;
382
+ for (const t of targets) {
383
+ try {
384
+ const r = await bridge.findReferences(t);
385
+ if (r?.error)
386
+ errored = true;
387
+ if (r?.references?.length)
388
+ merged.push(...r.references);
389
+ }
390
+ catch (e) {
391
+ errored = true;
392
+ console.error(`[BridgeAdapter] findReferences(${t}) failed: ${e}`);
393
+ }
394
+ }
395
+ // No rows: "empty" is authoritative only when nothing went wrong; otherwise
396
+ // signal "error" so the caller falls back instead of trusting the 0.
397
+ if (merged.length === 0)
398
+ return errored ? { status: 'error' } : { status: 'empty' };
399
+ // Labels are referenced from every object type (tables, forms, EDTs, enums,
400
+ // reports, menu items, security objects, …), mostly via declarative metadata
401
+ // properties rather than X++ code — so they get a dedicated formatter that
402
+ // groups by source object type and surfaces the referencing property.
403
+ if (formatAs === 'label') {
404
+ return { status: 'ok', result: formatLabelReferences(merged, label, limit) };
405
+ }
406
+ {
407
+ const refs = { count: merged.length, references: merged };
408
+ let out = `# References to \`${label}\`\n\n`;
409
+ out += `**Total:** ${refs.count} reference(s) found\n`;
410
+ out += `_Source: C# bridge (DYNAMICSXREFDB)_\n\n`;
411
+ // Group by reference type for summary
412
+ const byType = new Map();
413
+ const topCallers = new Map();
414
+ for (const r of refs.references) {
415
+ const rt = r.referenceType || 'reference';
416
+ byType.set(rt, (byType.get(rt) || 0) + 1);
417
+ const caller = r.callerClass
418
+ ? (r.callerMethod ? `${r.callerClass}.${r.callerMethod}` : r.callerClass)
419
+ : r.sourcePath;
420
+ topCallers.set(caller, (topCallers.get(caller) || 0) + 1);
421
+ }
422
+ // Summary by type
423
+ out += `## 📊 Summary by Type\n\n`;
424
+ for (const [type, count] of byType) {
425
+ out += `- **${type}**: ${count} reference(s)\n`;
426
+ }
427
+ out += `\n`;
428
+ // Top callers
429
+ const sortedCallers = [...topCallers.entries()].sort((a, b) => b[1] - a[1]).slice(0, 10);
430
+ if (sortedCallers.length > 0) {
431
+ out += `## 🔝 Top Callers\n\n`;
432
+ for (const [caller, count] of sortedCallers) {
433
+ out += `- **${caller}** (${count} call(s))\n`;
434
+ }
435
+ out += `\n`;
436
+ }
437
+ // Detailed references
438
+ out += `## 📍 References\n\n`;
439
+ const visible = refs.references.slice(0, limit);
440
+ for (const r of visible) {
441
+ const module = r.sourceModule ? ` [${r.sourceModule}]` : '';
442
+ const loc = r.line > 0 ? `:${r.line}` : '';
443
+ const refType = r.referenceType ? ` (${r.referenceType})` : '';
444
+ const caller = r.callerClass
445
+ ? (r.callerMethod ? `${r.callerClass}.${r.callerMethod}` : r.callerClass)
446
+ : null;
447
+ if (caller) {
448
+ out += `- **${caller}**${loc}${module}${refType}\n`;
449
+ }
450
+ else {
451
+ out += `- **${r.sourcePath}**${loc}${module}${refType}\n`;
452
+ }
453
+ }
454
+ if (refs.count > limit) {
455
+ out += `\n> ⚠️ Showing first ${limit} of ${refs.count} references.\n`;
456
+ }
457
+ return { status: 'ok', result: { content: [{ type: 'text', text: out }] } };
458
+ }
459
+ }
460
+ // LABEL REFERENCES (formatting)
461
+ /**
462
+ * Friendly display name for an xref source-container segment. Handles both xref
463
+ * path conventions seen for label references: code references use plural,
464
+ * slash-prefixed containers ("/Classes/…", "/Tables/…"), while declarative
465
+ * metadata references use singular containers with no leading slash
466
+ * ("Table/…", "Form/…", "EdtString/…", "MenuItemDisplay/…").
467
+ */
468
+ const XREF_SOURCE_TYPE_LABELS = {
469
+ classes: 'Class', class: 'Class',
470
+ tables: 'Table', table: 'Table', tableextension: 'Table extension',
471
+ forms: 'Form', form: 'Form', formextension: 'Form extension',
472
+ views: 'View', view: 'View', viewextension: 'View extension',
473
+ maps: 'Map', map: 'Map',
474
+ queries: 'Query', querysimple: 'Query',
475
+ enum: 'Enum', enums: 'Enum', enumextension: 'Enum extension',
476
+ reports: 'Report', report: 'Report',
477
+ dataentityviews: 'Data entity', dataentityview: 'Data entity',
478
+ compositedataentityview: 'Composite data entity', dataentityviewextension: 'Data entity extension',
479
+ aggregatedataentity: 'Aggregate data entity', aggregatedimension: 'Aggregate dimension',
480
+ aggregatemeasurement: 'Aggregate measurement',
481
+ menu: 'Menu', menuextension: 'Menu extension',
482
+ menuitemdisplay: 'Menu item (display)', menuitemaction: 'Menu item (action)', menuitemoutput: 'Menu item (output)',
483
+ securityprivilege: 'Security privilege', securityduty: 'Security duty',
484
+ securityrole: 'Security role', securitypolicy: 'Security policy',
485
+ configurationkey: 'Configuration key', configurationkeygroup: 'Configuration key group',
486
+ tile: 'Tile', kpi: 'KPI', licensecode: 'License code', resource: 'Resource',
487
+ };
488
+ function friendlyXrefSourceType(container) {
489
+ const key = container.toLowerCase();
490
+ if (XREF_SOURCE_TYPE_LABELS[key])
491
+ return XREF_SOURCE_TYPE_LABELS[key];
492
+ if (key.startsWith('edt'))
493
+ return 'EDT'; // EdtString, EdtEnum, EdtReal, EdtInt64, …
494
+ if (key.startsWith('workflow'))
495
+ return 'Workflow'; // WorkflowTemplate, WorkflowApproval, …
496
+ return container || 'Other';
497
+ }
498
+ /**
499
+ * Parse an xref source path for a label reference into (type, object, detail).
500
+ * `detail` names *where on the object* the label is used, so a reader can jump
501
+ * straight to it — the X++ method for code refs, or "<member> › <property>" for
502
+ * declarative metadata refs (the referencing field / enum value / form control
503
+ * plus the property it sits on). The member is omitted when the property is
504
+ * declared directly on the object itself (e.g. an EDT's own HelpText).
505
+ * Examples:
506
+ * "/Classes/WhsWorkManualComplete/Methods/performValidation" → Class · WhsWorkManualComplete · performValidation
507
+ * "Form/AbatementCertificate_IN/FormDesign/.../ShowData?Text" → Form · AbatementCertificate_IN · ShowData › Text
508
+ * "Table/Foo/Fields/Bar?Label" → Table · Foo · Bar › Label
509
+ * "Enum/ABC/EnumValue/A?Label" → Enum · ABC · A › Label
510
+ * "EdtString/ABNControllingCorporation_AU?HelpText" → EDT · ABNControllingCorporation_AU · HelpText
511
+ */
512
+ function parseLabelSource(sourcePath) {
513
+ const parts = sourcePath.split('/').filter(Boolean);
514
+ const type = friendlyXrefSourceType(parts[0] ?? '');
515
+ let objectName = parts[1] ?? sourcePath;
516
+ const objQ = objectName.indexOf('?'); // e.g. "EdtString/Foo?HelpText" — object is 2nd segment
517
+ if (objQ >= 0)
518
+ objectName = objectName.substring(0, objQ);
519
+ let detail;
520
+ const mi = parts.indexOf('Methods');
521
+ if (mi >= 0 && parts[mi + 1]) {
522
+ detail = parts[mi + 1].split('?')[0]; // X++ method name (code reference)
523
+ }
524
+ else {
525
+ const q = sourcePath.lastIndexOf('?');
526
+ if (q >= 0) {
527
+ const property = sourcePath.substring(q + 1); // property: Label/Caption/HelpText/Text/…
528
+ // The member the property sits on is the last path segment before the "?"
529
+ // (a form control, table field, enum value, …). Keep it unless it *is* the
530
+ // object — a property declared directly on the object needs no member.
531
+ const member = (parts[parts.length - 1] ?? '').split('?')[0];
532
+ detail = member && member !== objectName ? `${member} › ${property}` : property;
533
+ }
534
+ }
535
+ return { type, objectName, detail };
536
+ }
537
+ /**
538
+ * Format label where-used results, grouped by source object type. Unlike the
539
+ * default (caller/method-oriented) formatter, this makes the object-type spread
540
+ * explicit — a label is typically referenced far more from metadata (form
541
+ * captions, field/EDT labels, menu-item captions, …) than from X++ code.
542
+ */
543
+ function formatLabelReferences(references, label, limit) {
544
+ const parsed = references.map(r => ({
545
+ ...parseLabelSource(r.sourcePath),
546
+ module: r.sourceModule,
547
+ line: r.line,
548
+ }));
549
+ let out = `# References to label \`${label}\`\n\n`;
550
+ out += `**Total:** ${references.length} reference(s) found\n`;
551
+ out += `_Source: C# bridge (DYNAMICSXREFDB) — includes both X++ code and declarative metadata references_\n\n`;
552
+ // Summary: count by source object type (most-referenced first). This counts
553
+ // ALL references, whereas the detail section below is capped at `limit` — so
554
+ // each truncated group carries a "showing X of Y" marker to keep the two
555
+ // sections reconcilable.
556
+ const byType = new Map();
557
+ for (const p of parsed)
558
+ byType.set(p.type, (byType.get(p.type) || 0) + 1);
559
+ out += `## 📊 By source object type\n\n`;
560
+ for (const [type, count] of [...byType.entries()].sort((a, b) => b[1] - a[1])) {
561
+ out += `- **${type}**: ${count} reference(s)\n`;
562
+ }
563
+ out += `\n`;
564
+ // Detail: grouped by type, capped at `limit` total rows
565
+ out += `## 📍 References\n\n`;
566
+ const visible = parsed.slice(0, limit);
567
+ const groups = new Map();
568
+ for (const p of visible) {
569
+ const bucket = groups.get(p.type) ?? [];
570
+ bucket.push(p);
571
+ groups.set(p.type, bucket);
572
+ }
573
+ for (const [type, refs] of [...groups.entries()].sort((a, b) => b[1].length - a[1].length)) {
574
+ // When the overall `limit` truncates a group, show "shown of total" so the
575
+ // rows below don't appear to contradict the summary count above.
576
+ const total = byType.get(type) ?? refs.length;
577
+ const heading = refs.length < total ? `${refs.length} of ${total}` : `${refs.length}`;
578
+ out += `### ${type} (${heading})\n\n`;
579
+ for (const r of refs) {
580
+ const loc = r.line > 0 ? `:${r.line}` : '';
581
+ const mod = r.module ? ` [${r.module}]` : '';
582
+ const det = r.detail ? ` › ${r.detail}` : '';
583
+ out += `- **${r.objectName}**${det}${loc}${mod}\n`;
584
+ }
585
+ out += `\n`;
586
+ }
587
+ if (references.length > limit) {
588
+ out += `> ⚠️ Showing first ${limit} of ${references.length} references. Raise \`limit\` to see more.\n`;
589
+ }
590
+ return { content: [{ type: 'text', text: out }] };
591
+ }
592
+ // SEARCH
593
+ export async function tryBridgeSearch(bridge, query, objectType, maxResults = 50) {
594
+ if (!bridge?.isReady || !bridge.metadataAvailable)
595
+ return null;
596
+ try {
597
+ const sr = await bridge.searchObjects(query, objectType, maxResults);
598
+ if (!sr || sr.results.length === 0)
599
+ return null;
600
+ let out = `# Search: "${query}"${objectType ? ` (type: ${objectType})` : ''}\n\n`;
601
+ out += `**Results:** ${sr.results.length}\n`;
602
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
603
+ for (const r of sr.results.slice(0, maxResults)) {
604
+ out += `- **${r.name}** (${r.type})\n`;
605
+ }
606
+ return { content: [{ type: 'text', text: out }] };
607
+ }
608
+ catch (e) {
609
+ console.error(`[BridgeAdapter] searchObjects(${query}) failed: ${e}`);
610
+ return null;
611
+ }
612
+ }
613
+ // QUERY
614
+ export async function tryBridgeQuery(bridge, queryName) {
615
+ if (!bridge?.isReady || !bridge.metadataAvailable)
616
+ return null;
617
+ try {
618
+ const q = await bridge.readQuery(queryName);
619
+ if (!q)
620
+ return null;
621
+ return { content: [{ type: 'text', text: formatQuery(q) }] };
622
+ }
623
+ catch (e) {
624
+ console.error(`[BridgeAdapter] readQuery(${queryName}) failed: ${e}`);
625
+ return null;
626
+ }
627
+ }
628
+ function formatQuery(q) {
629
+ let out = `# Query: ${q.name}\n\n`;
630
+ if (q.model)
631
+ out += `**Model:** ${q.model}\n`;
632
+ if (q.description)
633
+ out += `**Description:** ${q.description}\n`;
634
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
635
+ if (q.dataSources.length > 0) {
636
+ out += `## Data Sources (${q.dataSources.length})\n\n`;
637
+ let totalRanges = 0;
638
+ for (const ds of q.dataSources) {
639
+ out += formatQueryDataSource(ds, 0);
640
+ totalRanges += countRanges(ds);
641
+ }
642
+ if (totalRanges > 0) {
643
+ out += `\n## 📈 Summary\nData Sources: ${q.dataSources.length} | Total Ranges: ${totalRanges}\n`;
644
+ }
645
+ }
646
+ return out;
647
+ }
648
+ function countRanges(ds) {
649
+ let count = ds.ranges?.length ?? 0;
650
+ if (ds.childDataSources) {
651
+ for (const child of ds.childDataSources)
652
+ count += countRanges(child);
653
+ }
654
+ return count;
655
+ }
656
+ function formatQueryDataSource(ds, depth) {
657
+ const indent = ' '.repeat(depth);
658
+ const join = ds.joinMode ? ` (${ds.joinMode})` : '';
659
+ const fetch = ds.fetchMode ? ` [FetchMode: ${ds.fetchMode}]` : '';
660
+ let out = `${indent}- **${ds.name}** → ${ds.table}${join}${fetch}\n`;
661
+ // Ranges
662
+ if (ds.ranges && ds.ranges.length > 0) {
663
+ out += `${indent} **Ranges:**\n`;
664
+ for (const r of ds.ranges) {
665
+ const status = r.status ? ` (${r.status})` : '';
666
+ out += `${indent} - ${r.field}: ${r.value ?? '(any)'}${status}\n`;
667
+ }
668
+ }
669
+ // Fields
670
+ if (ds.fields && ds.fields.length > 0) {
671
+ const shown = ds.fields.slice(0, 10);
672
+ const more = ds.fields.length > 10 ? ` ... (+${ds.fields.length - 10} more)` : '';
673
+ out += `${indent} **Fields (${ds.fields.length}):** ${shown.join(', ')}${more}\n`;
674
+ }
675
+ if (ds.childDataSources?.length) {
676
+ for (const child of ds.childDataSources) {
677
+ out += formatQueryDataSource(child, depth + 1);
678
+ }
679
+ }
680
+ return out;
681
+ }
682
+ // VIEW
683
+ export async function tryBridgeView(bridge, viewName) {
684
+ if (!bridge?.isReady || !bridge.metadataAvailable)
685
+ return null;
686
+ try {
687
+ const v = await bridge.readView(viewName);
688
+ if (!v)
689
+ return null;
690
+ return { content: [{ type: 'text', text: formatView(v) }] };
691
+ }
692
+ catch (e) {
693
+ console.error(`[BridgeAdapter] readView(${viewName}) failed: ${e}`);
694
+ return null;
695
+ }
696
+ }
697
+ function formatView(v) {
698
+ let out = `# View: ${v.name}\n\n`;
699
+ if (v.label)
700
+ out += `**Label:** ${v.label}\n`;
701
+ if (v.model)
702
+ out += `**Model:** ${v.model}\n`;
703
+ if (v.query)
704
+ out += `**Query:** ${v.query}\n`;
705
+ if (v.isPublic != null)
706
+ out += `**Public:** ${v.isPublic ? 'Yes' : 'No'}\n`;
707
+ if (v.isReadOnly != null)
708
+ out += `**Read-Only:** ${v.isReadOnly ? 'Yes' : 'No'}\n`;
709
+ if (v.primaryKey)
710
+ out += `**Primary Key:** ${v.primaryKey}\n`;
711
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
712
+ // DataSources
713
+ if (v.dataSources && v.dataSources.length > 0) {
714
+ out += `## Data Sources (${v.dataSources.length})\n\n`;
715
+ for (const ds of v.dataSources) {
716
+ out += `- **${ds.name}** → ${ds.table}\n`;
717
+ }
718
+ out += '\n';
719
+ }
720
+ // Fields — split mapped vs computed
721
+ if (v.fields.length > 0) {
722
+ const mapped = v.fields.filter(f => !f.isComputed);
723
+ const computed = v.fields.filter(f => f.isComputed);
724
+ out += `## 📊 Fields (${v.fields.length})\n\n`;
725
+ if (mapped.length > 0) {
726
+ out += `### Mapped Fields (${mapped.length})\n\n`;
727
+ out += `| Field Name | Data Source | Data Field | Type |\n|---|---|---|---|\n`;
728
+ for (const f of mapped) {
729
+ out += `| ${f.name} | ${f.dataSource ?? '—'} | ${f.dataField ?? '—'} | ${f.fieldType} |\n`;
730
+ }
731
+ out += '\n';
732
+ }
733
+ if (computed.length > 0) {
734
+ out += `### Computed Fields (${computed.length})\n\n`;
735
+ out += `| Field Name | Data Method | Type |\n|---|---|---|\n`;
736
+ for (const f of computed) {
737
+ out += `| ${f.name} | ${f.dataMethod ?? '—'} | ${f.fieldType} |\n`;
738
+ }
739
+ out += '\n';
740
+ }
741
+ }
742
+ // Relations
743
+ if (v.relations && v.relations.length > 0) {
744
+ out += `## 🔗 Relations (${v.relations.length})\n\n`;
745
+ for (const rel of v.relations) {
746
+ out += `- **${rel.name}** → ${rel.relatedTable}`;
747
+ if (rel.cardinality)
748
+ out += ` (${rel.cardinality})`;
749
+ out += '\n';
750
+ for (const c of rel.constraints) {
751
+ if (c.field && c.relatedField)
752
+ out += ` - ${c.field} = ${c.relatedField}\n`;
753
+ }
754
+ }
755
+ out += '\n';
756
+ }
757
+ // Methods
758
+ if (v.methods && v.methods.length > 0) {
759
+ out += `## 🔧 Methods (${v.methods.length})\n\n`;
760
+ for (const m of v.methods) {
761
+ out += `- ${m.name}\n`;
762
+ }
763
+ }
764
+ return out;
765
+ }
766
+ // DATA ENTITY
767
+ export async function tryBridgeDataEntity(bridge, entityName) {
768
+ if (!bridge?.isReady || !bridge.metadataAvailable)
769
+ return null;
770
+ try {
771
+ const e = await bridge.readDataEntity(entityName);
772
+ if (!e)
773
+ return null;
774
+ return { content: [{ type: 'text', text: formatDataEntity(e) }] };
775
+ }
776
+ catch (err) {
777
+ console.error(`[BridgeAdapter] readDataEntity(${entityName}) failed: ${err}`);
778
+ return null;
779
+ }
780
+ }
781
+ function formatDataEntity(e) {
782
+ let out = `DataEntity: ${e.name}\n`;
783
+ if (e.model)
784
+ out += `Model: ${e.model}\n`;
785
+ if (e.label)
786
+ out += `Label: ${e.label}\n`;
787
+ out += `Type: Data Entity (AxDataEntityView)\n`;
788
+ if (e.entityCategory)
789
+ out += `Category: ${e.entityCategory}\n`;
790
+ if (e.publicEntityName)
791
+ out += `Public Name: ${e.publicEntityName} (OData resource name)\n`;
792
+ if (e.publicCollectionName)
793
+ out += `Collection: ${e.publicCollectionName}\n`;
794
+ out += `OData Enabled: ${e.isPublic ? 'Yes' : 'No'}\n`;
795
+ if (e.isReadOnly != null)
796
+ out += `Read-Only: ${e.isReadOnly ? 'Yes' : 'No'}\n`;
797
+ if (e.dataManagementEnabled != null)
798
+ out += `Data Management (DMF): ${e.dataManagementEnabled ? 'Yes' : 'No'}\n`;
799
+ if (e.stagingTable)
800
+ out += `Staging Table: ${e.stagingTable}\n`;
801
+ out += `_Source: C# bridge (IMetadataProvider)_\n`;
802
+ if (e.dataSources.length > 0) {
803
+ out += `\nData Sources (${e.dataSources.length}): ${e.dataSources.map(ds => ds.table || ds.name).join(', ')}\n`;
804
+ }
805
+ if (e.fields && e.fields.length > 0) {
806
+ out += `\nFields (${e.fields.length}): `;
807
+ const fieldNames = e.fields.slice(0, 8).map(f => f.name);
808
+ out += fieldNames.join(', ');
809
+ if (e.fields.length > 8)
810
+ out += ` ... (+${e.fields.length - 8} more)`;
811
+ out += '\n';
812
+ }
813
+ // Field mappings
814
+ if (e.fieldMappings && e.fieldMappings.length > 0) {
815
+ out += `\nField Mappings (${e.fieldMappings.length}):\n`;
816
+ for (const fm of e.fieldMappings.slice(0, 20)) {
817
+ out += ` ${fm.fieldName} → ${fm.dataSource ?? '?'}.${fm.dataField ?? '?'}\n`;
818
+ }
819
+ if (e.fieldMappings.length > 20)
820
+ out += ` ... (+${e.fieldMappings.length - 20} more)\n`;
821
+ }
822
+ // Computed columns
823
+ if (e.computedColumns && e.computedColumns.length > 0) {
824
+ out += `\nComputed/Virtual Columns (${e.computedColumns.length}): ${e.computedColumns.join(', ')}\n`;
825
+ }
826
+ // Keys
827
+ if (e.keys && e.keys.length > 0) {
828
+ out += `\nKeys: ${e.keys.map(k => k.name).join(', ')}\n`;
829
+ }
830
+ return out;
831
+ }
832
+ // REPORT (fallback only — used when XML file is not found on disk)
833
+ export async function tryBridgeReport(bridge, reportName) {
834
+ if (!bridge?.isReady || !bridge.metadataAvailable)
835
+ return null;
836
+ try {
837
+ const r = await bridge.readReport(reportName);
838
+ if (!r)
839
+ return null;
840
+ return { content: [{ type: 'text', text: formatReport(r) }] };
841
+ }
842
+ catch (e) {
843
+ console.error(`[BridgeAdapter] readReport(${reportName}) failed: ${e}`);
844
+ return null;
845
+ }
846
+ }
847
+ function formatReport(r) {
848
+ let out = `# Report: ${r.name}\n\n`;
849
+ if (r.model)
850
+ out += `**Model:** ${r.model}\n`;
851
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
852
+ if (r.dataSets.length > 0) {
853
+ out += `## 📊 Data Sets (${r.dataSets.length})\n\n`;
854
+ for (const ds of r.dataSets) {
855
+ out += `### DataSet: ${ds.name}\n`;
856
+ if (ds.dataSourceType)
857
+ out += ` DataSourceType: ${ds.dataSourceType}\n`;
858
+ if (ds.query)
859
+ out += ` Query: ${ds.query}\n`;
860
+ if (ds.fields && ds.fields.length > 0) {
861
+ out += `\n | Name | Data Field | Data Type |\n |---|---|---|\n`;
862
+ for (const f of ds.fields) {
863
+ out += ` | ${f.name} | ${f.dataField ?? '—'} | ${f.dataType ?? '—'} |\n`;
864
+ }
865
+ }
866
+ out += '\n';
867
+ }
868
+ }
869
+ else {
870
+ out += `_No data set information available from the metadata API._\n\n`;
871
+ }
872
+ if (r.designs && r.designs.length > 0) {
873
+ out += `## 🎨 Designs (${r.designs.length})\n\n`;
874
+ for (const d of r.designs) {
875
+ out += `### Design: ${d.name}\n`;
876
+ if (d.caption)
877
+ out += ` Caption: ${d.caption}\n`;
878
+ if (d.style)
879
+ out += ` Style: ${d.style}\n`;
880
+ out += ` Embedded RDL: ${d.hasRdl ? '✅' : '❌'}\n\n`;
881
+ }
882
+ }
883
+ out += `> 💡 For full RDL content, ensure the report XML file is accessible on disk.\n`;
884
+ return out;
885
+ }
886
+ // Write-support adapters
887
+ /**
888
+ * Refreshes the C# DiskProvider so it picks up newly written/modified files.
889
+ * Returns elapsed time in ms, or null if bridge is unavailable.
890
+ */
891
+ export async function bridgeRefreshProvider(bridge) {
892
+ if (!bridge?.isReady || !bridge.metadataAvailable)
893
+ return null;
894
+ try {
895
+ return await bridge.refreshProvider();
896
+ }
897
+ catch (e) {
898
+ console.error(`[BridgeAdapter] refreshProvider failed: ${e}`);
899
+ return null;
900
+ }
901
+ }
902
+ /**
903
+ * Validates a just-written D365FO object by asking IMetadataProvider to read it back.
904
+ * Automatically refreshes the provider first so the new file is visible.
905
+ * Returns a validation summary or null if bridge is unavailable.
906
+ */
907
+ export async function bridgeValidateAfterWrite(bridge, objectType, objectName) {
908
+ if (!bridge?.isReady || !bridge.metadataAvailable)
909
+ return null;
910
+ try {
911
+ // Debounced refresh — coalesces multiple rapid create/modify operations
912
+ // into a single DiskProvider refresh (400ms settle, 2s max wait)
913
+ await debouncedRefresh.refresh(bridge);
914
+ const result = await bridge.validateObject(objectType, objectName);
915
+ if (!result)
916
+ return null;
917
+ if (result.valid) {
918
+ const parts = [`✅ **IMetadataProvider validation passed** for \`${objectName}\``];
919
+ if (result.fieldCount != null && result.fieldCount > 0)
920
+ parts.push(`${result.fieldCount} fields`);
921
+ if (result.methodCount != null && result.methodCount > 0)
922
+ parts.push(`${result.methodCount} methods`);
923
+ if (result.indexCount != null && result.indexCount > 0)
924
+ parts.push(`${result.indexCount} indexes`);
925
+ if (result.valueCount != null && result.valueCount > 0)
926
+ parts.push(`${result.valueCount} values`);
927
+ return parts.join(' | ');
928
+ }
929
+ else {
930
+ // The bridge can't read back this object type yet — not an error (the file was
931
+ // already written). Skip silently rather than emitting a misleading warning.
932
+ if (typeof result.reason === 'string' && result.reason.startsWith('validation-unsupported')) {
933
+ debugLog(`[BridgeAdapter] validateAfterWrite: ${result.reason} (${objectName}) — skipped`);
934
+ return null;
935
+ }
936
+ return `⚠️ **IMetadataProvider could not read back \`${objectName}\`**: ${result.reason ?? 'unknown error'}`;
937
+ }
938
+ }
939
+ catch (e) {
940
+ console.error(`[BridgeAdapter] validateAfterWrite(${objectType}, ${objectName}) failed: ${e}`);
941
+ return null; // non-fatal — bridge validation is best-effort
942
+ }
943
+ }
944
+ /**
945
+ * Resolves object existence and model via IMetadataProvider.
946
+ * Used by modify_d365fo_file to locate objects without the SQLite index.
947
+ * Returns { exists, objectType, objectName, model } or null.
948
+ */
949
+ export async function bridgeResolveObject(bridge, objectType, objectName) {
950
+ if (!bridge?.isReady || !bridge.metadataAvailable)
951
+ return null;
952
+ try {
953
+ return await bridge.resolveObjectInfo(objectType, objectName);
954
+ }
955
+ catch (e) {
956
+ console.error(`[BridgeAdapter] resolveObjectInfo(${objectType}, ${objectName}) failed: ${e}`);
957
+ return null;
958
+ }
959
+ }
960
+ // Write operations
961
+ /**
962
+ * Supported object types for bridge-based creation.
963
+ * Covers core types + menu items + extensions + form + menu.
964
+ * Complex types (report, data-entity, business-event, tile, kpi) continue
965
+ * using TypeScript XML generation — the bridge handles them via xmlContent passthrough.
966
+ *
967
+ * security-privilege/security-duty/security-role and query/view are DELIBERATELY
968
+ * excluded: the bridge's generic `properties: Dictionary<string,string>` channel
969
+ * can't carry the structured collections these types need (EntryPoints, Privileges,
970
+ * Duties, query data sources, etc.) — creation would "succeed" but produce an empty,
971
+ * functionally-broken object. The local XML generators (securityPrivilegeXml.ts,
972
+ * queryViewXml.ts, generateAxSecurityDuty/RoleXml) build these correctly instead.
973
+ */
974
+ const BRIDGE_CREATE_TYPES = new Set([
975
+ 'class', 'class-extension', 'table', 'enum', 'edt',
976
+ 'form',
977
+ 'table-extension', 'form-extension', 'enum-extension',
978
+ 'menu',
979
+ 'menu-item-action', 'menu-item-display', 'menu-item-output',
980
+ ]);
981
+ /**
982
+ * Supported operations for bridge-based modification.
983
+ * All modify operations are now routed through the C# bridge.
984
+ */
985
+ const BRIDGE_MODIFY_OPS = new Set([
986
+ 'add-method', 'remove-method', 'replace-code',
987
+ 'add-field', 'modify-field', 'rename-field', 'replace-all-fields', 'remove-field',
988
+ 'add-index', 'remove-index',
989
+ 'add-relation', 'remove-relation',
990
+ 'add-field-group', 'remove-field-group', 'add-field-to-field-group',
991
+ 'modify-property',
992
+ 'add-enum-value', 'modify-enum-value', 'remove-enum-value',
993
+ 'add-control', 'add-data-source',
994
+ 'add-display-method', 'add-table-method',
995
+ 'add-field-modification', 'add-menu-item-to-menu',
996
+ ]);
997
+ /**
998
+ * Supported object types for bridge-based modification.
999
+ * Covers core types + query/view/form (add-method, modify-property, replace-code)
1000
+ * + menu items, security, and extension types.
1001
+ */
1002
+ const BRIDGE_MODIFY_TYPES = new Set([
1003
+ 'class', 'table', 'enum', 'edt',
1004
+ 'form', 'query', 'view',
1005
+ 'class-extension', 'table-extension', 'form-extension', 'enum-extension',
1006
+ 'menu-item-action', 'menu-item-display', 'menu-item-output',
1007
+ 'menu',
1008
+ ]);
1009
+ /**
1010
+ * Checks if bridge can handle this create operation.
1011
+ */
1012
+ export function canBridgeCreate(objectType) {
1013
+ return BRIDGE_CREATE_TYPES.has(objectType.toLowerCase());
1014
+ }
1015
+ /**
1016
+ * Checks if bridge can handle this modify operation.
1017
+ */
1018
+ export function canBridgeModify(objectType, operation) {
1019
+ return BRIDGE_MODIFY_TYPES.has(objectType.toLowerCase()) && BRIDGE_MODIFY_OPS.has(operation.toLowerCase());
1020
+ }
1021
+ /**
1022
+ * Creates a D365FO object via the C# bridge (IMetadataProvider.Create()).
1023
+ * Returns { success, filePath, api } or null if bridge unavailable.
1024
+ */
1025
+ export async function bridgeCreateObject(bridge, params) {
1026
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1027
+ return null;
1028
+ if (!canBridgeCreate(params.objectType))
1029
+ return null;
1030
+ try {
1031
+ const result = await bridge.createObject(params);
1032
+ if (result.success) {
1033
+ return {
1034
+ success: true,
1035
+ filePath: result.filePath,
1036
+ message: `✅ Created via ${result.api ?? 'IMetadataProvider'} — file: ${result.filePath}`,
1037
+ };
1038
+ }
1039
+ else {
1040
+ return { success: false, message: `Bridge createObject returned success=false` };
1041
+ }
1042
+ }
1043
+ catch (e) {
1044
+ // Recoverable: the caller falls back to XML generation on null. Log at debug
1045
+ // so an expected fast-path miss doesn't surface as a client-facing error.
1046
+ debugLog(`[BridgeAdapter] createObject(${params.objectType}, ${params.objectName}) failed — falling back to XML generation: ${e}`);
1047
+ return null; // Signal to caller: fall back to XML generation
1048
+ }
1049
+ }
1050
+ /**
1051
+ * Creates a smart table via the C# bridge with all BP-smart defaults
1052
+ * (CacheLookup, FieldGroups, DeleteActions, TitleField, PrimaryIndex) auto-set.
1053
+ * Returns { success, filePath, bpDefaults } or null if bridge unavailable.
1054
+ */
1055
+ export async function bridgeCreateSmartTable(bridge, params) {
1056
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1057
+ return null;
1058
+ try {
1059
+ const result = await bridge.createSmartTable(params);
1060
+ if (result.success) {
1061
+ console.error(`[BridgeAdapter] ✅ Smart table created: ${result.filePath} (${result.api})`);
1062
+ return result;
1063
+ }
1064
+ else {
1065
+ console.error(`[BridgeAdapter] createSmartTable returned success=false`);
1066
+ return null;
1067
+ }
1068
+ }
1069
+ catch (e) {
1070
+ // Recoverable: the caller falls back to SmartXmlBuilder on null. Log at debug
1071
+ // so an expected fast-path miss doesn't surface as a client-facing error.
1072
+ debugLog(`[BridgeAdapter] createSmartTable(${params.objectName}) failed — falling back to SmartXmlBuilder: ${e}`);
1073
+ return null; // Signal to caller: fall back to SmartXmlBuilder
1074
+ }
1075
+ }
1076
+ /**
1077
+ * Adds/replaces a method via the C# bridge (IMetadataProvider.Update()).
1078
+ */
1079
+ export async function bridgeAddMethod(bridge, objectType, objectName, methodName, sourceCode) {
1080
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1081
+ return null;
1082
+ if (!BRIDGE_MODIFY_TYPES.has(objectType.toLowerCase()))
1083
+ return null;
1084
+ try {
1085
+ // The bridge stores sourceCode verbatim — whatever indentation the caller typed
1086
+ // (or didn't) ends up in the AOT XML as-is. Re-derive consistent indentation
1087
+ // from brace depth so ragged/flush-left input doesn't produce garbled formatting.
1088
+ const result = await bridge.addMethod(objectType, objectName, methodName, reindentXppSource(sourceCode));
1089
+ return {
1090
+ success: result.success,
1091
+ message: result.success
1092
+ ? `✅ Method '${methodName}' added via ${result.api}`
1093
+ : `Bridge addMethod returned success=false`,
1094
+ };
1095
+ }
1096
+ catch (e) {
1097
+ console.error(`[BridgeAdapter] addMethod(${objectType}, ${objectName}, ${methodName}) failed: ${e}`);
1098
+ return { success: false, message: String(e) };
1099
+ }
1100
+ }
1101
+ /**
1102
+ * Adds a field to a table via the C# bridge (IMetadataProvider.Update()).
1103
+ */
1104
+ export async function bridgeAddField(bridge, tableName, fieldName, fieldType, edt, mandatory, label) {
1105
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1106
+ return null;
1107
+ try {
1108
+ const result = await bridge.addField(tableName, fieldName, fieldType, edt, mandatory, label);
1109
+ return {
1110
+ success: result.success,
1111
+ message: result.success
1112
+ ? `✅ Field '${fieldName}' added via ${result.api}`
1113
+ : `Bridge addField returned success=false`,
1114
+ };
1115
+ }
1116
+ catch (e) {
1117
+ console.error(`[BridgeAdapter] addField(${tableName}, ${fieldName}) failed: ${e}`);
1118
+ return { success: false, message: String(e) };
1119
+ }
1120
+ }
1121
+ /**
1122
+ * Sets a property via the C# bridge (IMetadataProvider.Update()).
1123
+ */
1124
+ export async function bridgeSetProperty(bridge, objectType, objectName, propertyPath, propertyValue) {
1125
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1126
+ return null;
1127
+ if (!BRIDGE_MODIFY_TYPES.has(objectType.toLowerCase()))
1128
+ return null;
1129
+ try {
1130
+ const result = await bridge.setProperty(objectType, objectName, propertyPath, propertyValue);
1131
+ return {
1132
+ success: result.success,
1133
+ message: result.success
1134
+ ? `✅ Property '${propertyPath}'='${propertyValue}' set via ${result.api}`
1135
+ : `Bridge setProperty returned success=false`,
1136
+ };
1137
+ }
1138
+ catch (e) {
1139
+ console.error(`[BridgeAdapter] setProperty(${objectType}, ${objectName}, ${propertyPath}) failed: ${e}`);
1140
+ return { success: false, message: String(e) };
1141
+ }
1142
+ }
1143
+ /**
1144
+ * Replaces code in a method via the C# bridge (IMetadataProvider.Update()).
1145
+ */
1146
+ export async function bridgeReplaceCode(bridge, objectType, objectName, methodName, oldCode, newCode) {
1147
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1148
+ return null;
1149
+ if (!BRIDGE_MODIFY_TYPES.has(objectType.toLowerCase()))
1150
+ return null;
1151
+ try {
1152
+ const result = await bridge.replaceCode(objectType, objectName, methodName, oldCode, newCode);
1153
+ return {
1154
+ success: result.success,
1155
+ message: result.success
1156
+ ? `✅ Code replaced via ${result.api}`
1157
+ : `Bridge replaceCode returned success=false`,
1158
+ };
1159
+ }
1160
+ catch (e) {
1161
+ console.error(`[BridgeAdapter] replaceCode(${objectType}, ${objectName}) failed: ${e}`);
1162
+ return { success: false, message: String(e) };
1163
+ }
1164
+ }
1165
+ /**
1166
+ * Removes a method from a class, table, form, etc. via the C# bridge.
1167
+ */
1168
+ export async function bridgeRemoveMethod(bridge, objectType, objectName, methodName) {
1169
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1170
+ return null;
1171
+ if (!BRIDGE_MODIFY_TYPES.has(objectType.toLowerCase()))
1172
+ return null;
1173
+ try {
1174
+ const result = await bridge.removeMethod(objectType, objectName, methodName);
1175
+ return {
1176
+ success: result.success,
1177
+ message: result.success
1178
+ ? `✅ Method '${methodName}' removed via ${result.api}`
1179
+ : `Bridge removeMethod returned success=false`,
1180
+ };
1181
+ }
1182
+ catch (e) {
1183
+ console.error(`[BridgeAdapter] removeMethod(${objectType}, ${objectName}, ${methodName}) failed: ${e}`);
1184
+ return { success: false, message: String(e) };
1185
+ }
1186
+ }
1187
+ /**
1188
+ * Adds an index to a table via the C# bridge.
1189
+ */
1190
+ export async function bridgeAddIndex(bridge, tableName, indexName, fields, allowDuplicates, alternateKey) {
1191
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1192
+ return null;
1193
+ try {
1194
+ const result = await bridge.addIndex(tableName, indexName, fields, allowDuplicates, alternateKey);
1195
+ return {
1196
+ success: result.success,
1197
+ message: result.success
1198
+ ? `✅ Index '${indexName}' added via ${result.api}`
1199
+ : `Bridge addIndex returned success=false`,
1200
+ };
1201
+ }
1202
+ catch (e) {
1203
+ console.error(`[BridgeAdapter] addIndex(${tableName}, ${indexName}) failed: ${e}`);
1204
+ return { success: false, message: String(e) };
1205
+ }
1206
+ }
1207
+ /**
1208
+ * Removes an index from a table via the C# bridge.
1209
+ */
1210
+ export async function bridgeRemoveIndex(bridge, tableName, indexName) {
1211
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1212
+ return null;
1213
+ try {
1214
+ const result = await bridge.removeIndex(tableName, indexName);
1215
+ return {
1216
+ success: result.success,
1217
+ message: result.success
1218
+ ? `✅ Index '${indexName}' removed via ${result.api}`
1219
+ : `Bridge removeIndex returned success=false`,
1220
+ };
1221
+ }
1222
+ catch (e) {
1223
+ console.error(`[BridgeAdapter] removeIndex(${tableName}, ${indexName}) failed: ${e}`);
1224
+ return { success: false, message: String(e) };
1225
+ }
1226
+ }
1227
+ /**
1228
+ * Adds a relation to a table via the C# bridge.
1229
+ */
1230
+ export async function bridgeAddRelation(bridge, tableName, relationName, relatedTable, constraints) {
1231
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1232
+ return null;
1233
+ try {
1234
+ const result = await bridge.addRelation(tableName, relationName, relatedTable, constraints);
1235
+ return {
1236
+ success: result.success,
1237
+ message: result.success
1238
+ ? `✅ Relation '${relationName}' added via ${result.api}`
1239
+ : `Bridge addRelation returned success=false`,
1240
+ };
1241
+ }
1242
+ catch (e) {
1243
+ console.error(`[BridgeAdapter] addRelation(${tableName}, ${relationName}) failed: ${e}`);
1244
+ return { success: false, message: String(e) };
1245
+ }
1246
+ }
1247
+ /**
1248
+ * Removes a relation from a table via the C# bridge.
1249
+ */
1250
+ export async function bridgeRemoveRelation(bridge, tableName, relationName) {
1251
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1252
+ return null;
1253
+ try {
1254
+ const result = await bridge.removeRelation(tableName, relationName);
1255
+ return {
1256
+ success: result.success,
1257
+ message: result.success
1258
+ ? `✅ Relation '${relationName}' removed via ${result.api}`
1259
+ : `Bridge removeRelation returned success=false`,
1260
+ };
1261
+ }
1262
+ catch (e) {
1263
+ console.error(`[BridgeAdapter] removeRelation(${tableName}, ${relationName}) failed: ${e}`);
1264
+ return { success: false, message: String(e) };
1265
+ }
1266
+ }
1267
+ /**
1268
+ * Adds a field group to a table via the C# bridge.
1269
+ */
1270
+ export async function bridgeAddFieldGroup(bridge, tableName, groupName, label, fields) {
1271
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1272
+ return null;
1273
+ try {
1274
+ const result = await bridge.addFieldGroup(tableName, groupName, label, fields);
1275
+ return {
1276
+ success: result.success,
1277
+ message: result.success
1278
+ ? `✅ Field group '${groupName}' added via ${result.api}`
1279
+ : `Bridge addFieldGroup returned success=false`,
1280
+ };
1281
+ }
1282
+ catch (e) {
1283
+ console.error(`[BridgeAdapter] addFieldGroup(${tableName}, ${groupName}) failed: ${e}`);
1284
+ return { success: false, message: String(e) };
1285
+ }
1286
+ }
1287
+ /**
1288
+ * Removes a field group from a table via the C# bridge.
1289
+ */
1290
+ export async function bridgeRemoveFieldGroup(bridge, tableName, groupName) {
1291
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1292
+ return null;
1293
+ try {
1294
+ const result = await bridge.removeFieldGroup(tableName, groupName);
1295
+ return {
1296
+ success: result.success,
1297
+ message: result.success
1298
+ ? `✅ Field group '${groupName}' removed via ${result.api}`
1299
+ : `Bridge removeFieldGroup returned success=false`,
1300
+ };
1301
+ }
1302
+ catch (e) {
1303
+ console.error(`[BridgeAdapter] removeFieldGroup(${tableName}, ${groupName}) failed: ${e}`);
1304
+ return { success: false, message: String(e) };
1305
+ }
1306
+ }
1307
+ /**
1308
+ * Adds a field to an existing field group on a table via the C# bridge.
1309
+ */
1310
+ export async function bridgeAddFieldToFieldGroup(bridge, tableName, groupName, fieldName) {
1311
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1312
+ return null;
1313
+ try {
1314
+ const result = await bridge.addFieldToFieldGroup(tableName, groupName, fieldName);
1315
+ return {
1316
+ success: result.success,
1317
+ message: result.success
1318
+ ? `✅ Field '${fieldName}' added to group '${groupName}' via ${result.api}`
1319
+ : `Bridge addFieldToFieldGroup returned success=false`,
1320
+ };
1321
+ }
1322
+ catch (e) {
1323
+ console.error(`[BridgeAdapter] addFieldToFieldGroup(${tableName}, ${groupName}, ${fieldName}) failed: ${e}`);
1324
+ return { success: false, message: String(e) };
1325
+ }
1326
+ }
1327
+ /**
1328
+ * Modifies field properties on a table via the C# bridge.
1329
+ */
1330
+ export async function bridgeModifyField(bridge, tableName, fieldName, properties) {
1331
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1332
+ return null;
1333
+ try {
1334
+ const result = await bridge.modifyField(tableName, fieldName, properties);
1335
+ return {
1336
+ success: result.success,
1337
+ message: result.success
1338
+ ? `✅ Field '${fieldName}' modified via ${result.api}`
1339
+ : `Bridge modifyField returned success=false`,
1340
+ };
1341
+ }
1342
+ catch (e) {
1343
+ console.error(`[BridgeAdapter] modifyField(${tableName}, ${fieldName}) failed: ${e}`);
1344
+ return { success: false, message: String(e) };
1345
+ }
1346
+ }
1347
+ /**
1348
+ * Renames a field on a table via the C# bridge. Also fixes index/fieldgroup/TitleField refs.
1349
+ */
1350
+ export async function bridgeRenameField(bridge, tableName, oldName, newName) {
1351
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1352
+ return null;
1353
+ try {
1354
+ const result = await bridge.renameField(tableName, oldName, newName);
1355
+ return {
1356
+ success: result.success,
1357
+ message: result.success
1358
+ ? `✅ Field renamed '${oldName}' → '${newName}' via ${result.api}`
1359
+ : `Bridge renameField returned success=false`,
1360
+ };
1361
+ }
1362
+ catch (e) {
1363
+ console.error(`[BridgeAdapter] renameField(${tableName}, ${oldName} → ${newName}) failed: ${e}`);
1364
+ return { success: false, message: String(e) };
1365
+ }
1366
+ }
1367
+ /**
1368
+ * Removes a field from a table via the C# bridge.
1369
+ */
1370
+ export async function bridgeRemoveField(bridge, tableName, fieldName) {
1371
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1372
+ return null;
1373
+ try {
1374
+ const result = await bridge.removeField(tableName, fieldName);
1375
+ return {
1376
+ success: result.success,
1377
+ message: result.success
1378
+ ? `✅ Field '${fieldName}' removed via ${result.api}`
1379
+ : `Bridge removeField returned success=false`,
1380
+ };
1381
+ }
1382
+ catch (e) {
1383
+ console.error(`[BridgeAdapter] removeField(${tableName}, ${fieldName}) failed: ${e}`);
1384
+ return { success: false, message: String(e) };
1385
+ }
1386
+ }
1387
+ /**
1388
+ * Replaces ALL fields on a table via the C# bridge. Use for bulk field rewrite.
1389
+ */
1390
+ export async function bridgeReplaceAllFields(bridge, tableName, fields) {
1391
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1392
+ return null;
1393
+ try {
1394
+ const result = await bridge.replaceAllFields(tableName, fields);
1395
+ return {
1396
+ success: result.success,
1397
+ message: result.success
1398
+ ? `✅ All fields replaced (${fields.length}) via ${result.api}`
1399
+ : `Bridge replaceAllFields returned success=false`,
1400
+ };
1401
+ }
1402
+ catch (e) {
1403
+ console.error(`[BridgeAdapter] replaceAllFields(${tableName}) failed: ${e}`);
1404
+ return { success: false, message: String(e) };
1405
+ }
1406
+ }
1407
+ /**
1408
+ * Adds a value to an enum via the C# bridge.
1409
+ */
1410
+ export async function bridgeAddEnumValue(bridge, enumName, valueName, value, label, countryRegionCodes) {
1411
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1412
+ return null;
1413
+ try {
1414
+ const result = await bridge.addEnumValue(enumName, valueName, value, label, countryRegionCodes);
1415
+ return {
1416
+ success: result.success,
1417
+ message: result.success
1418
+ ? `✅ Enum value '${valueName}'=${value} added via ${result.api}`
1419
+ : `Bridge addEnumValue returned success=false`,
1420
+ };
1421
+ }
1422
+ catch (e) {
1423
+ console.error(`[BridgeAdapter] addEnumValue(${enumName}, ${valueName}) failed: ${e}`);
1424
+ return { success: false, message: String(e) };
1425
+ }
1426
+ }
1427
+ /**
1428
+ * Modifies an enum value's properties via the C# bridge.
1429
+ */
1430
+ export async function bridgeModifyEnumValue(bridge, enumName, valueName, properties) {
1431
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1432
+ return null;
1433
+ try {
1434
+ const result = await bridge.modifyEnumValue(enumName, valueName, properties);
1435
+ return {
1436
+ success: result.success,
1437
+ message: result.success
1438
+ ? `✅ Enum value '${valueName}' modified via ${result.api}`
1439
+ : `Bridge modifyEnumValue returned success=false`,
1440
+ };
1441
+ }
1442
+ catch (e) {
1443
+ console.error(`[BridgeAdapter] modifyEnumValue(${enumName}, ${valueName}) failed: ${e}`);
1444
+ return { success: false, message: String(e) };
1445
+ }
1446
+ }
1447
+ /**
1448
+ * Removes an enum value via the C# bridge.
1449
+ */
1450
+ export async function bridgeRemoveEnumValue(bridge, enumName, valueName) {
1451
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1452
+ return null;
1453
+ try {
1454
+ const result = await bridge.removeEnumValue(enumName, valueName);
1455
+ return {
1456
+ success: result.success,
1457
+ message: result.success
1458
+ ? `✅ Enum value '${valueName}' removed via ${result.api}`
1459
+ : `Bridge removeEnumValue returned success=false`,
1460
+ };
1461
+ }
1462
+ catch (e) {
1463
+ console.error(`[BridgeAdapter] removeEnumValue(${enumName}, ${valueName}) failed: ${e}`);
1464
+ return { success: false, message: String(e) };
1465
+ }
1466
+ }
1467
+ /**
1468
+ * Adds a control to a form via the C# bridge.
1469
+ */
1470
+ export async function bridgeAddControl(bridge, formName, controlName, parentControl, controlType, dataSource, dataField, label) {
1471
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1472
+ return null;
1473
+ try {
1474
+ const result = await bridge.addControl(formName, controlName, parentControl, controlType, dataSource, dataField, label);
1475
+ return {
1476
+ success: result.success,
1477
+ message: result.success
1478
+ ? `✅ Control '${controlName}' added to '${parentControl}' via ${result.api}`
1479
+ : `Bridge addControl returned success=false`,
1480
+ };
1481
+ }
1482
+ catch (e) {
1483
+ console.error(`[BridgeAdapter] addControl(${formName}, ${controlName}) failed: ${e}`);
1484
+ return { success: false, message: String(e) };
1485
+ }
1486
+ }
1487
+ /**
1488
+ * Adds a data source to a form via the C# bridge.
1489
+ */
1490
+ export async function bridgeAddDataSource(bridge, objectType, objectName, dsName, table, joinSource, linkType) {
1491
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1492
+ return null;
1493
+ try {
1494
+ const result = await bridge.addDataSource(objectType, objectName, dsName, table, joinSource, linkType);
1495
+ return {
1496
+ success: result.success,
1497
+ message: result.success
1498
+ ? `✅ DataSource '${dsName}' added via ${result.api}`
1499
+ : `Bridge addDataSource returned success=false`,
1500
+ };
1501
+ }
1502
+ catch (e) {
1503
+ console.error(`[BridgeAdapter] addDataSource(${objectType}, ${objectName}, ${dsName}) failed: ${e}`);
1504
+ return { success: false, message: String(e) };
1505
+ }
1506
+ }
1507
+ // TABLE-EXTENSION: ADD FIELD MODIFICATION
1508
+ /**
1509
+ * Adds or updates a FieldModification entry in a table-extension via the C# bridge.
1510
+ * Allows overriding Label / Mandatory on a base-table field.
1511
+ */
1512
+ export async function bridgeAddFieldModification(bridge, extensionName, fieldName, fieldLabel, fieldMandatory) {
1513
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1514
+ return null;
1515
+ try {
1516
+ const result = await bridge.addFieldModification(extensionName, fieldName, fieldLabel, fieldMandatory);
1517
+ return {
1518
+ success: result.success,
1519
+ message: result.success
1520
+ ? `✅ Field modification '${fieldName}' applied via ${result.api}`
1521
+ : `Bridge addFieldModification returned success=false`,
1522
+ };
1523
+ }
1524
+ catch (e) {
1525
+ console.error(`[BridgeAdapter] addFieldModification(${extensionName}, ${fieldName}) failed: ${e}`);
1526
+ return { success: false, message: String(e) };
1527
+ }
1528
+ }
1529
+ // MENU: ADD MENU ITEM TO MENU
1530
+ /**
1531
+ * Adds a menu item reference to a menu via the C# bridge.
1532
+ */
1533
+ export async function bridgeAddMenuItemToMenu(bridge, menuName, menuItemToAdd, menuItemToAddType) {
1534
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1535
+ return null;
1536
+ try {
1537
+ const result = await bridge.addMenuItemToMenu(menuName, menuItemToAdd, menuItemToAddType);
1538
+ return {
1539
+ success: result.success,
1540
+ message: result.success
1541
+ ? `✅ Menu item '${menuItemToAdd}' added via ${result.api}`
1542
+ : `Bridge addMenuItemToMenu returned success=false`,
1543
+ };
1544
+ }
1545
+ catch (e) {
1546
+ console.error(`[BridgeAdapter] addMenuItemToMenu(${menuName}, ${menuItemToAdd}) failed: ${e}`);
1547
+ return { success: false, message: String(e) };
1548
+ }
1549
+ }
1550
+ // BATCH MODIFY
1551
+ /**
1552
+ * Executes multiple write operations on a single object in one bridge call.
1553
+ * Returns a formatted ToolResult or null if bridge unavailable.
1554
+ */
1555
+ export async function bridgeBatchModify(bridge, objectType, objectName, operations) {
1556
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1557
+ return null;
1558
+ try {
1559
+ const result = await bridge.batchModify(objectType, objectName, operations);
1560
+ let text = `## Batch Modify: ${objectType} \`${objectName}\`\n\n`;
1561
+ text += `- **Total:** ${result.totalOperations}\n`;
1562
+ text += `- **Success:** ${result.successCount}\n`;
1563
+ text += `- **Failed:** ${result.failureCount}\n\n`;
1564
+ if (result.operations.length > 0) {
1565
+ text += `### Operations\n\n`;
1566
+ for (const op of result.operations) {
1567
+ const icon = op.success ? '✅' : '❌';
1568
+ text += `${icon} **${op.operation}** (${op.elapsedMs}ms)`;
1569
+ if (op.error)
1570
+ text += ` — ${op.error}`;
1571
+ text += `\n`;
1572
+ }
1573
+ }
1574
+ return {
1575
+ content: [{ type: 'text', text }],
1576
+ isError: result.failureCount > 0,
1577
+ };
1578
+ }
1579
+ catch (e) {
1580
+ console.error(`[BridgeAdapter] batchModify(${objectType}, ${objectName}) failed: ${e}`);
1581
+ return null;
1582
+ }
1583
+ }
1584
+ // CAPABILITIES
1585
+ /**
1586
+ * Retrieves the structured capabilities map from the C# bridge.
1587
+ * Returns a formatted ToolResult or null if bridge unavailable.
1588
+ */
1589
+ export async function bridgeGetCapabilities(bridge) {
1590
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1591
+ return null;
1592
+ try {
1593
+ const caps = await bridge.getCapabilities();
1594
+ let text = `# Bridge Capabilities (v${caps.version})\n\n`;
1595
+ for (const [objType, operations] of Object.entries(caps.objectTypes)) {
1596
+ text += `## ${objType}\n`;
1597
+ for (const op of operations) {
1598
+ text += `- \`${op}\`\n`;
1599
+ }
1600
+ text += `\n`;
1601
+ }
1602
+ return { content: [{ type: 'text', text }] };
1603
+ }
1604
+ catch (e) {
1605
+ console.error(`[BridgeAdapter] getCapabilities() failed: ${e}`);
1606
+ return null;
1607
+ }
1608
+ }
1609
+ // FORM PATTERN DISCOVERY
1610
+ /**
1611
+ * Discovers available D365FO form patterns from the Patterns DLL or fallback list.
1612
+ * Returns a formatted ToolResult or null if bridge unavailable.
1613
+ */
1614
+ export async function bridgeDiscoverFormPatterns(bridge) {
1615
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1616
+ return null;
1617
+ try {
1618
+ const result = await bridge.discoverFormPatterns();
1619
+ let text = `# D365FO Form Patterns (${result.count})\n`;
1620
+ text += `_Source: ${result.source}_\n\n`;
1621
+ for (const p of result.patterns) {
1622
+ text += `- **${p.name}**`;
1623
+ if (p.version)
1624
+ text += ` (v${p.version})`;
1625
+ if (p.description)
1626
+ text += ` — ${p.description}`;
1627
+ text += `\n`;
1628
+ }
1629
+ return { content: [{ type: 'text', text }] };
1630
+ }
1631
+ catch (e) {
1632
+ console.error(`[BridgeAdapter] discoverFormPatterns() failed: ${e}`);
1633
+ return null;
1634
+ }
1635
+ }
1636
+ // SECURITY ARTIFACT (Phase 6)
1637
+ export async function tryBridgeSecurityArtifact(bridge, name, artifactType, includeChain) {
1638
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1639
+ return null;
1640
+ try {
1641
+ if (artifactType === 'privilege') {
1642
+ const priv = await bridge.readSecurityPrivilege(name);
1643
+ if (!priv)
1644
+ return null;
1645
+ return { content: [{ type: 'text', text: formatSecurityPrivilege(priv, includeChain) }] };
1646
+ }
1647
+ else if (artifactType === 'duty') {
1648
+ const duty = await bridge.readSecurityDuty(name);
1649
+ if (!duty)
1650
+ return null;
1651
+ return { content: [{ type: 'text', text: formatSecurityDuty(duty, includeChain) }] };
1652
+ }
1653
+ else {
1654
+ const role = await bridge.readSecurityRole(name);
1655
+ if (!role)
1656
+ return null;
1657
+ return { content: [{ type: 'text', text: formatSecurityRole(role, includeChain) }] };
1658
+ }
1659
+ }
1660
+ catch (e) {
1661
+ console.error(`[BridgeAdapter] readSecurity${artifactType}(${name}) failed: ${e}`);
1662
+ return null;
1663
+ }
1664
+ }
1665
+ function formatSecurityPrivilege(priv, _includeChain) {
1666
+ let out = `SecurityPrivilege: ${priv.name}\n`;
1667
+ if (priv.label)
1668
+ out += `Label: ${priv.label}\n`;
1669
+ if (priv.description)
1670
+ out += `Description: ${priv.description}\n`;
1671
+ if (priv.model)
1672
+ out += `Model: ${priv.model}\n`;
1673
+ out += `_Source: C# bridge (IMetadataProvider)_\n`;
1674
+ if (priv.entryPoints.length > 0) {
1675
+ out += `\nEntry Points (${priv.entryPoints.length}):\n`;
1676
+ for (const ep of priv.entryPoints) {
1677
+ out += ` ✓ ${ep.objectName ?? '(unnamed)'} [${ep.objectType ?? '?'}] → ${ep.accessLevel ?? '?'} access\n`;
1678
+ }
1679
+ }
1680
+ else {
1681
+ out += `\nEntry Points: none\n`;
1682
+ }
1683
+ if (priv.parentDuties.length > 0) {
1684
+ out += `\nUsed in Duties (${priv.parentDuties.length}):\n`;
1685
+ out += ` ${priv.parentDuties.map(d => d.name).join(', ')}\n`;
1686
+ }
1687
+ return out;
1688
+ }
1689
+ function formatSecurityDuty(duty, _includeChain) {
1690
+ let out = `SecurityDuty: ${duty.name}\n`;
1691
+ if (duty.label)
1692
+ out += `Label: ${duty.label}\n`;
1693
+ if (duty.description)
1694
+ out += `Description: ${duty.description}\n`;
1695
+ if (duty.model)
1696
+ out += `Model: ${duty.model}\n`;
1697
+ out += `_Source: C# bridge (IMetadataProvider)_\n`;
1698
+ if (duty.childPrivileges.length > 0) {
1699
+ out += `\nPrivileges (${duty.childPrivileges.length}):\n`;
1700
+ for (const p of duty.childPrivileges) {
1701
+ out += ` • ${p.name}\n`;
1702
+ }
1703
+ }
1704
+ if (duty.subDuties.length > 0) {
1705
+ out += `\nSub-Duties (${duty.subDuties.length}):\n`;
1706
+ for (const d of duty.subDuties) {
1707
+ out += ` • ${d.name}\n`;
1708
+ }
1709
+ }
1710
+ if (duty.parentRoles.length > 0) {
1711
+ out += `\nAssigned to Roles (${duty.parentRoles.length}):\n`;
1712
+ out += ` ${duty.parentRoles.map(r => r.name).join(', ')}\n`;
1713
+ }
1714
+ return out;
1715
+ }
1716
+ function formatSecurityRole(role, _includeChain) {
1717
+ let out = `SecurityRole: ${role.name}\n`;
1718
+ if (role.label)
1719
+ out += `Label: ${role.label}\n`;
1720
+ if (role.description)
1721
+ out += `Description: ${role.description}\n`;
1722
+ if (role.model)
1723
+ out += `Model: ${role.model}\n`;
1724
+ out += `_Source: C# bridge (IMetadataProvider)_\n`;
1725
+ if (role.childDuties.length > 0) {
1726
+ out += `\nDuties (${role.childDuties.length}):\n`;
1727
+ for (const d of role.childDuties) {
1728
+ out += ` • ${d.name}\n`;
1729
+ }
1730
+ }
1731
+ if (role.childPrivileges.length > 0) {
1732
+ out += `\nDirect Privileges (${role.childPrivileges.length}):\n`;
1733
+ for (const p of role.childPrivileges) {
1734
+ out += ` • ${p.name}\n`;
1735
+ }
1736
+ }
1737
+ if (role.subRoles.length > 0) {
1738
+ out += `\nSub-Roles (${role.subRoles.length}):\n`;
1739
+ for (const sr of role.subRoles) {
1740
+ out += ` • ${sr.name}\n`;
1741
+ }
1742
+ }
1743
+ return out;
1744
+ }
1745
+ // MENU ITEM (Phase 6)
1746
+ export async function tryBridgeMenuItem(bridge, name, itemType) {
1747
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1748
+ return null;
1749
+ try {
1750
+ const mi = await bridge.readMenuItem(name, itemType);
1751
+ if (!mi)
1752
+ return null;
1753
+ return { content: [{ type: 'text', text: formatMenuItem(mi) }] };
1754
+ }
1755
+ catch (e) {
1756
+ console.error(`[BridgeAdapter] readMenuItem(${name}) failed: ${e}`);
1757
+ return null;
1758
+ }
1759
+ }
1760
+ function formatMenuItem(mi) {
1761
+ const typeLabel = mi.menuItemType === 'display' ? 'MenuItemDisplay'
1762
+ : mi.menuItemType === 'action' ? 'MenuItemAction'
1763
+ : 'MenuItemOutput';
1764
+ let out = `${typeLabel}: ${mi.name}\n`;
1765
+ if (mi.label)
1766
+ out += `Label: ${mi.label}\n`;
1767
+ if (mi.model)
1768
+ out += `Model: ${mi.model}\n`;
1769
+ out += `_Source: C# bridge (IMetadataProvider)_\n`;
1770
+ if (mi.object) {
1771
+ out += `Target: ${mi.object}`;
1772
+ if (mi.objectType)
1773
+ out += ` (${mi.objectType})`;
1774
+ out += '\n';
1775
+ }
1776
+ if (mi.openMode && mi.openMode !== 'Auto')
1777
+ out += `Open Mode: ${mi.openMode}\n`;
1778
+ if (mi.linkedPermissionObject) {
1779
+ out += `Security Privilege: ${mi.linkedPermissionObject}`;
1780
+ if (mi.linkedPermissionType)
1781
+ out += ` [${mi.linkedPermissionType}]`;
1782
+ out += '\n';
1783
+ }
1784
+ if (mi.helpText)
1785
+ out += `Help: ${mi.helpText}\n`;
1786
+ return out;
1787
+ }
1788
+ // TABLE EXTENSIONS (Phase 6)
1789
+ export async function tryBridgeTableExtensions(bridge, baseTableName) {
1790
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1791
+ return null;
1792
+ try {
1793
+ const result = await bridge.readTableExtensions(baseTableName);
1794
+ if (!result)
1795
+ return null;
1796
+ return { content: [{ type: 'text', text: formatTableExtensions(result) }] };
1797
+ }
1798
+ catch (e) {
1799
+ console.error(`[BridgeAdapter] readTableExtensions(${baseTableName}) failed: ${e}`);
1800
+ return null;
1801
+ }
1802
+ }
1803
+ function formatTableExtensions(r) {
1804
+ let out = `Table Extensions of: ${r.baseTable}\n`;
1805
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
1806
+ if (r.extensionCount === 0) {
1807
+ out += `No table extensions found.\n`;
1808
+ return out;
1809
+ }
1810
+ out += `Found ${r.extensionCount} extension(s):\n\n`;
1811
+ for (let i = 0; i < r.extensions.length; i++) {
1812
+ const ext = r.extensions[i];
1813
+ out += `[${i + 1}] ${ext.extensionName} (${ext.model ?? 'unknown'})\n`;
1814
+ if (ext.addedFields.length > 0) {
1815
+ out += ` Added Fields (${ext.addedFields.length}): ${ext.addedFields.join(', ')}\n`;
1816
+ }
1817
+ if (ext.addedIndexes.length > 0) {
1818
+ out += ` Added Indexes (${ext.addedIndexes.length}): ${ext.addedIndexes.join(', ')}\n`;
1819
+ }
1820
+ if (ext.addedFieldGroups.length > 0) {
1821
+ out += ` Added Field Groups (${ext.addedFieldGroups.length}): ${ext.addedFieldGroups.join(', ')}\n`;
1822
+ }
1823
+ if (ext.addedRelations.length > 0) {
1824
+ out += ` Added Relations (${ext.addedRelations.length}): ${ext.addedRelations.join(', ')}\n`;
1825
+ }
1826
+ }
1827
+ return out;
1828
+ }
1829
+ // CODE COMPLETION (Phase 6)
1830
+ export async function tryBridgeCompletion(bridge, symbolName, prefix) {
1831
+ if (!bridge?.isReady || !bridge.metadataAvailable)
1832
+ return null;
1833
+ try {
1834
+ const result = await bridge.getCompletionMembers(symbolName);
1835
+ if (!result || !result.members || result.members.length === 0)
1836
+ return null;
1837
+ return { content: [{ type: 'text', text: formatCompletion(result, prefix) }] };
1838
+ }
1839
+ catch (e) {
1840
+ console.error(`[BridgeAdapter] getCompletionMembers(${symbolName}) failed: ${e}`);
1841
+ return null;
1842
+ }
1843
+ }
1844
+ function formatCompletion(r, prefix) {
1845
+ let members = r.members;
1846
+ if (prefix) {
1847
+ const lowerPrefix = prefix.toLowerCase();
1848
+ members = members.filter(m => m.name.toLowerCase().startsWith(lowerPrefix));
1849
+ }
1850
+ let out = `# Code Completion: ${r.symbolName} (${r.symbolType})\n`;
1851
+ if (r.model)
1852
+ out += `**Model:** ${r.model}\n`;
1853
+ out += `_Source: C# bridge (IMetadataProvider)_\n\n`;
1854
+ if (members.length === 0) {
1855
+ out += `No members found${prefix ? ` matching prefix "${prefix}"` : ''}.\n`;
1856
+ return out;
1857
+ }
1858
+ out += `**${members.length} member(s)${prefix ? ` matching "${prefix}"` : ''}:**\n\n`;
1859
+ const methodMembers = members.filter(m => m.kind === 'method');
1860
+ const fieldMembers = members.filter(m => m.kind === 'field');
1861
+ if (methodMembers.length > 0) {
1862
+ out += `## Methods (${methodMembers.length})\n`;
1863
+ for (const m of methodMembers) {
1864
+ out += m.signature ? `- \`${m.signature}\`\n` : `- ${m.name}\n`;
1865
+ }
1866
+ }
1867
+ if (fieldMembers.length > 0) {
1868
+ out += `\n## Fields (${fieldMembers.length})\n`;
1869
+ for (const f of fieldMembers) {
1870
+ out += f.signature ? `- \`${f.signature}\`\n` : `- ${f.name}\n`;
1871
+ }
1872
+ }
1873
+ return out;
1874
+ }
1875
+ // FIND COC EXTENSIONS via XREF (Phase 6)
1876
+ export async function tryBridgeCocExtensions(bridge, baseClassName, methodName) {
1877
+ if (!bridge?.isReady || !bridge.xrefAvailable)
1878
+ return null;
1879
+ try {
1880
+ const result = await bridge.findExtensionClasses(baseClassName);
1881
+ if (!result)
1882
+ return null;
1883
+ return { content: [{ type: 'text', text: formatCocExtensions(result, methodName) }] };
1884
+ }
1885
+ catch (e) {
1886
+ console.error(`[BridgeAdapter] findExtensionClasses(${baseClassName}) failed: ${e}`);
1887
+ return null;
1888
+ }
1889
+ }
1890
+ function formatCocExtensions(r, methodNameFilter) {
1891
+ let out = `CoC Extensions of: ${r.baseClassName}\n`;
1892
+ out += `_Source: C# bridge (DYNAMICSXREFDB)_\n\n`;
1893
+ if (r.count === 0) {
1894
+ out += `No class extensions found via cross-reference database.\n`;
1895
+ return out;
1896
+ }
1897
+ // Apply method filter if specified
1898
+ let filtered = r.extensions;
1899
+ if (methodNameFilter) {
1900
+ filtered = r.extensions.filter(ext => ext.wrappedMethods?.some(m => m.toLowerCase() === methodNameFilter.toLowerCase())
1901
+ || !ext.wrappedMethods || ext.wrappedMethods.length === 0);
1902
+ }
1903
+ out += `Found ${filtered.length} extension class(es)${methodNameFilter ? ` wrapping "${methodNameFilter}"` : ''}:\n\n`;
1904
+ const seen = new Set();
1905
+ for (const ext of filtered) {
1906
+ if (seen.has(ext.className))
1907
+ continue;
1908
+ seen.add(ext.className);
1909
+ out += `- **${ext.className}**`;
1910
+ if (ext.module)
1911
+ out += ` (${ext.module})`;
1912
+ if (ext.wrappedMethods && ext.wrappedMethods.length > 0) {
1913
+ out += `\n Wraps methods: ${ext.wrappedMethods.join(', ')}`;
1914
+ out += `\n Uses 'next' keyword: ✓`;
1915
+ }
1916
+ out += `\n`;
1917
+ }
1918
+ return out;
1919
+ }
1920
+ // FIND EVENT HANDLERS via XREF (Phase 6)
1921
+ export async function tryBridgeEventHandlers(bridge, targetName, eventName, handlerType) {
1922
+ if (!bridge?.isReady || !bridge.xrefAvailable)
1923
+ return null;
1924
+ try {
1925
+ const result = await bridge.findEventSubscribers(targetName, eventName, handlerType);
1926
+ if (!result)
1927
+ return null;
1928
+ return { content: [{ type: 'text', text: formatEventHandlers(result) }] };
1929
+ }
1930
+ catch (e) {
1931
+ console.error(`[BridgeAdapter] findEventSubscribers(${targetName}) failed: ${e}`);
1932
+ return null;
1933
+ }
1934
+ }
1935
+ function formatEventHandlers(r) {
1936
+ let out = `Event Handlers for: ${r.targetName}\n`;
1937
+ out += `_Source: C# bridge (DYNAMICSXREFDB)_\n\n`;
1938
+ if (r.count === 0) {
1939
+ out += `No event handlers found via cross-reference database.\n`;
1940
+ return out;
1941
+ }
1942
+ out += `Found ${r.count} handler(s):\n\n`;
1943
+ // Group by handler type
1944
+ const byType = new Map();
1945
+ for (const h of r.handlers) {
1946
+ const type = h.handlerType || 'static';
1947
+ if (!byType.has(type))
1948
+ byType.set(type, []);
1949
+ byType.get(type).push(h);
1950
+ }
1951
+ for (const [type, handlers] of byType) {
1952
+ out += `### ${type} handlers (${handlers.length})\n\n`;
1953
+ for (const h of handlers) {
1954
+ out += `- **${h.className}**`;
1955
+ if (h.methodName)
1956
+ out += `.${h.methodName}`;
1957
+ if (h.module)
1958
+ out += ` (${h.module})`;
1959
+ if (h.eventName)
1960
+ out += ` — event: ${h.eventName}`;
1961
+ out += `\n`;
1962
+ }
1963
+ out += `\n`;
1964
+ }
1965
+ return out;
1966
+ }
1967
+ // API USAGE CALLERS via XREF (P5)
1968
+ export async function tryBridgeApiUsageCallers(bridge, apiName, limit = 200) {
1969
+ if (!bridge?.isReady || !bridge.xrefAvailable)
1970
+ return null;
1971
+ try {
1972
+ const result = await bridge.findApiUsageCallers(apiName, limit);
1973
+ if (!result || result.totalCallers === 0)
1974
+ return null;
1975
+ return { content: [{ type: 'text', text: formatApiUsageCallers(result) }] };
1976
+ }
1977
+ catch (e) {
1978
+ console.error(`[BridgeAdapter] findApiUsageCallers(${apiName}) failed: ${e}`);
1979
+ return null;
1980
+ }
1981
+ }
1982
+ function formatApiUsageCallers(r) {
1983
+ let out = `# API Usage: ${r.apiName}\n\n`;
1984
+ out += `**Total references:** ${r.totalCallers} from ${r.uniqueClasses} unique class(es)\n`;
1985
+ out += `_Source: C# bridge (DYNAMICSXREFDB)_\n\n`;
1986
+ out += `## Top Callers by Class\n\n`;
1987
+ for (const cls of r.callersByClass.slice(0, 30)) {
1988
+ out += `- **${cls.callerClass}** (${cls.callCount} call(s))`;
1989
+ if (cls.module)
1990
+ out += ` [${cls.module}]`;
1991
+ if (cls.methods.length > 0) {
1992
+ out += `\n Methods: ${cls.methods.slice(0, 8).join(', ')}`;
1993
+ if (cls.methods.length > 8)
1994
+ out += ` (+${cls.methods.length - 8} more)`;
1995
+ }
1996
+ out += `\n`;
1997
+ }
1998
+ if (r.callersByClass.length > 30) {
1999
+ out += `\n> ⚠️ Showing top 30 of ${r.uniqueClasses} caller classes.\n`;
2000
+ }
2001
+ return out;
2002
+ }
2003
+ //# sourceMappingURL=bridgeAdapter.js.map