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.
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/dist/bridge/bridgeAdapter.d.ts +319 -0
- package/dist/bridge/bridgeAdapter.d.ts.map +1 -0
- package/dist/bridge/bridgeAdapter.js +2003 -0
- package/dist/bridge/bridgeAdapter.js.map +1 -0
- package/dist/bridge/bridgeClient.d.ts +255 -0
- package/dist/bridge/bridgeClient.d.ts.map +1 -0
- package/dist/bridge/bridgeClient.js +741 -0
- package/dist/bridge/bridgeClient.js.map +1 -0
- package/dist/bridge/bridgeTypes.d.ts +561 -0
- package/dist/bridge/bridgeTypes.d.ts.map +1 -0
- package/dist/bridge/bridgeTypes.js +6 -0
- package/dist/bridge/bridgeTypes.js.map +1 -0
- package/dist/bridge/debouncedRefresh.d.ts +16 -0
- package/dist/bridge/debouncedRefresh.d.ts.map +1 -0
- package/dist/bridge/debouncedRefresh.js +77 -0
- package/dist/bridge/debouncedRefresh.js.map +1 -0
- package/dist/bridge/index.d.ts +21 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +20 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/cli/commands/config.d.ts +8 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +77 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +177 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/indexCmd.d.ts +8 -0
- package/dist/cli/commands/indexCmd.d.ts.map +1 -0
- package/dist/cli/commands/indexCmd.js +78 -0
- package/dist/cli/commands/indexCmd.js.map +1 -0
- package/dist/cli/commands/instance.d.ts +4 -0
- package/dist/cli/commands/instance.d.ts.map +1 -0
- package/dist/cli/commands/instance.js +183 -0
- package/dist/cli/commands/instance.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +4 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +246 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/start.d.ts +2 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +49 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/update.d.ts +4 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +55 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/context.d.ts +26 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +38 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/envFile.d.ts +23 -0
- package/dist/cli/envFile.d.ts.map +1 -0
- package/dist/cli/envFile.js +79 -0
- package/dist/cli/envFile.js.map +1 -0
- package/dist/cli/exec.d.ts +13 -0
- package/dist/cli/exec.d.ts.map +1 -0
- package/dist/cli/exec.js +47 -0
- package/dist/cli/exec.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +122 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/instances.d.ts +19 -0
- package/dist/cli/instances.d.ts.map +1 -0
- package/dist/cli/instances.js +60 -0
- package/dist/cli/instances.js.map +1 -0
- package/dist/cli/mcpJson.d.ts +15 -0
- package/dist/cli/mcpJson.d.ts.map +1 -0
- package/dist/cli/mcpJson.js +44 -0
- package/dist/cli/mcpJson.js.map +1 -0
- package/dist/cli/settingsPrompt.d.ts +20 -0
- package/dist/cli/settingsPrompt.d.ts.map +1 -0
- package/dist/cli/settingsPrompt.js +150 -0
- package/dist/cli/settingsPrompt.js.map +1 -0
- package/dist/cli/settingsStore.d.ts +47 -0
- package/dist/cli/settingsStore.d.ts.map +1 -0
- package/dist/cli/settingsStore.js +144 -0
- package/dist/cli/settingsStore.js.map +1 -0
- package/dist/cli/target.d.ts +23 -0
- package/dist/cli/target.d.ts.map +1 -0
- package/dist/cli/target.js +62 -0
- package/dist/cli/target.js.map +1 -0
- package/dist/cli/ui.d.ts +26 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +48 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli/xppConfig.d.ts +35 -0
- package/dist/cli/xppConfig.d.ts.map +1 -0
- package/dist/cli/xppConfig.js +97 -0
- package/dist/cli/xppConfig.js.map +1 -0
- package/dist/config/configFile.d.ts +50 -0
- package/dist/config/configFile.d.ts.map +1 -0
- package/dist/config/configFile.js +152 -0
- package/dist/config/configFile.js.map +1 -0
- package/dist/config/settings.d.ts +58 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +641 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/database/download.d.ts +27 -0
- package/dist/database/download.d.ts.map +1 -0
- package/dist/database/download.js +241 -0
- package/dist/database/download.js.map +1 -0
- package/dist/eval/audit/knowledgeAudit.d.ts +66 -0
- package/dist/eval/audit/knowledgeAudit.d.ts.map +1 -0
- package/dist/eval/audit/knowledgeAudit.js +117 -0
- package/dist/eval/audit/knowledgeAudit.js.map +1 -0
- package/dist/eval/audit/knowledgeAuditCli.d.ts +17 -0
- package/dist/eval/audit/knowledgeAuditCli.d.ts.map +1 -0
- package/dist/eval/audit/knowledgeAuditCli.js +83 -0
- package/dist/eval/audit/knowledgeAuditCli.js.map +1 -0
- package/dist/eval/audit/knowledgeRefs.d.ts +37 -0
- package/dist/eval/audit/knowledgeRefs.d.ts.map +1 -0
- package/dist/eval/audit/knowledgeRefs.js +150 -0
- package/dist/eval/audit/knowledgeRefs.js.map +1 -0
- package/dist/eval/audit/symbolLookup.d.ts +23 -0
- package/dist/eval/audit/symbolLookup.d.ts.map +1 -0
- package/dist/eval/audit/symbolLookup.js +80 -0
- package/dist/eval/audit/symbolLookup.js.map +1 -0
- package/dist/eval/coverage/coverage.d.ts +65 -0
- package/dist/eval/coverage/coverage.d.ts.map +1 -0
- package/dist/eval/coverage/coverage.js +136 -0
- package/dist/eval/coverage/coverage.js.map +1 -0
- package/dist/eval/coverage/coverageCli.d.ts +13 -0
- package/dist/eval/coverage/coverageCli.d.ts.map +1 -0
- package/dist/eval/coverage/coverageCli.js +106 -0
- package/dist/eval/coverage/coverageCli.js.map +1 -0
- package/dist/eval/coverage/sources.d.ts +17 -0
- package/dist/eval/coverage/sources.d.ts.map +1 -0
- package/dist/eval/coverage/sources.js +40 -0
- package/dist/eval/coverage/sources.js.map +1 -0
- package/dist/eval/coverage/taxonomy.d.ts +59 -0
- package/dist/eval/coverage/taxonomy.d.ts.map +1 -0
- package/dist/eval/coverage/taxonomy.js +400 -0
- package/dist/eval/coverage/taxonomy.js.map +1 -0
- package/dist/eval/improver/caseMining.d.ts +55 -0
- package/dist/eval/improver/caseMining.d.ts.map +1 -0
- package/dist/eval/improver/caseMining.js +64 -0
- package/dist/eval/improver/caseMining.js.map +1 -0
- package/dist/eval/improver/caseMiningCli.d.ts +10 -0
- package/dist/eval/improver/caseMiningCli.d.ts.map +1 -0
- package/dist/eval/improver/caseMiningCli.js +50 -0
- package/dist/eval/improver/caseMiningCli.js.map +1 -0
- package/dist/eval/improver/cli.d.ts +11 -0
- package/dist/eval/improver/cli.d.ts.map +1 -0
- package/dist/eval/improver/cli.js +73 -0
- package/dist/eval/improver/cli.js.map +1 -0
- package/dist/eval/improver/cluster.d.ts +47 -0
- package/dist/eval/improver/cluster.d.ts.map +1 -0
- package/dist/eval/improver/cluster.js +0 -0
- package/dist/eval/improver/cluster.js.map +1 -0
- package/dist/eval/improver/corpusIO.d.ts +26 -0
- package/dist/eval/improver/corpusIO.d.ts.map +1 -0
- package/dist/eval/improver/corpusIO.js +50 -0
- package/dist/eval/improver/corpusIO.js.map +1 -0
- package/dist/eval/improver/fixBrief.d.ts +34 -0
- package/dist/eval/improver/fixBrief.d.ts.map +1 -0
- package/dist/eval/improver/fixBrief.js +69 -0
- package/dist/eval/improver/fixBrief.js.map +1 -0
- package/dist/eval/improver/fixBriefCli.d.ts +11 -0
- package/dist/eval/improver/fixBriefCli.d.ts.map +1 -0
- package/dist/eval/improver/fixBriefCli.js +46 -0
- package/dist/eval/improver/fixBriefCli.js.map +1 -0
- package/dist/eval/improver/flakeDetection.d.ts +50 -0
- package/dist/eval/improver/flakeDetection.d.ts.map +1 -0
- package/dist/eval/improver/flakeDetection.js +0 -0
- package/dist/eval/improver/flakeDetection.js.map +1 -0
- package/dist/eval/improver/flakeDetectionCli.d.ts +8 -0
- package/dist/eval/improver/flakeDetectionCli.d.ts.map +1 -0
- package/dist/eval/improver/flakeDetectionCli.js +27 -0
- package/dist/eval/improver/flakeDetectionCli.js.map +1 -0
- package/dist/eval/improver/heldout.d.ts +44 -0
- package/dist/eval/improver/heldout.d.ts.map +1 -0
- package/dist/eval/improver/heldout.js +52 -0
- package/dist/eval/improver/heldout.js.map +1 -0
- package/dist/eval/improver/knowledgeFeedback.d.ts +56 -0
- package/dist/eval/improver/knowledgeFeedback.d.ts.map +1 -0
- package/dist/eval/improver/knowledgeFeedback.js +88 -0
- package/dist/eval/improver/knowledgeFeedback.js.map +1 -0
- package/dist/eval/improver/knowledgeFeedbackCli.d.ts +8 -0
- package/dist/eval/improver/knowledgeFeedbackCli.d.ts.map +1 -0
- package/dist/eval/improver/knowledgeFeedbackCli.js +28 -0
- package/dist/eval/improver/knowledgeFeedbackCli.js.map +1 -0
- package/dist/eval/improver/report.d.ts +36 -0
- package/dist/eval/improver/report.d.ts.map +1 -0
- package/dist/eval/improver/report.js +61 -0
- package/dist/eval/improver/report.js.map +1 -0
- package/dist/eval/improver/reportCli.d.ts +7 -0
- package/dist/eval/improver/reportCli.d.ts.map +1 -0
- package/dist/eval/improver/reportCli.js +27 -0
- package/dist/eval/improver/reportCli.js.map +1 -0
- package/dist/eval/oracle/actualArtifactResolution.d.ts +49 -0
- package/dist/eval/oracle/actualArtifactResolution.d.ts.map +1 -0
- package/dist/eval/oracle/actualArtifactResolution.js +73 -0
- package/dist/eval/oracle/actualArtifactResolution.js.map +1 -0
- package/dist/eval/oracle/cli.d.ts +30 -0
- package/dist/eval/oracle/cli.d.ts.map +1 -0
- package/dist/eval/oracle/cli.js +179 -0
- package/dist/eval/oracle/cli.js.map +1 -0
- package/dist/eval/oracle/diff.d.ts +26 -0
- package/dist/eval/oracle/diff.d.ts.map +1 -0
- package/dist/eval/oracle/diff.js +51 -0
- package/dist/eval/oracle/diff.js.map +1 -0
- package/dist/eval/oracle/index.d.ts +81 -0
- package/dist/eval/oracle/index.d.ts.map +1 -0
- package/dist/eval/oracle/index.js +55 -0
- package/dist/eval/oracle/index.js.map +1 -0
- package/dist/eval/oracle/normalize.d.ts +85 -0
- package/dist/eval/oracle/normalize.d.ts.map +1 -0
- package/dist/eval/oracle/normalize.js +321 -0
- package/dist/eval/oracle/normalize.js.map +1 -0
- package/dist/eval/oracle/score.d.ts +26 -0
- package/dist/eval/oracle/score.d.ts.map +1 -0
- package/dist/eval/oracle/score.js +15 -0
- package/dist/eval/oracle/score.js.map +1 -0
- package/dist/eval/oracle/systest.d.ts +30 -0
- package/dist/eval/oracle/systest.d.ts.map +1 -0
- package/dist/eval/oracle/systest.js +98 -0
- package/dist/eval/oracle/systest.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +753 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.d.ts +10 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.js +38 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/customFilters.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/fields.d.ts +21 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/fields.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/fields.js +168 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/fields.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/panels.d.ts +9 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/panels.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/panels.js +47 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/panels.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.d.ts +16 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.js +124 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/toolbar.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.d.ts +12 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.js +36 -0
- package/dist/knowledge/formPatterns/catalog/subPatterns/workspaceSections.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/common.d.ts +11 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/common.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/common.js +37 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/common.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.d.ts +8 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.js +86 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsMaster.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.d.ts +7 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.js +69 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/detailsTransaction.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/dialog.d.ts +14 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/dialog.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/dialog.js +187 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/dialog.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/factBox.d.ts +10 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/factBox.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/factBox.js +54 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/factBox.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/listPage.d.ts +7 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/listPage.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/listPage.js +33 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/listPage.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/lookup.d.ts +10 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/lookup.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/lookup.js +95 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/lookup.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.d.ts +16 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.js +158 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleDetails.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.d.ts +7 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.js +34 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleList.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.d.ts +9 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.js +99 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/simpleListDetails.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.d.ts +8 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.js +95 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/tableOfContents.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/task.d.ts +9 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/task.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/task.js +42 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/task.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/wizard.d.ts +7 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/wizard.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/wizard.js +42 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/wizard.js.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/workspace.d.ts +17 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/workspace.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/workspace.js +157 -0
- package/dist/knowledge/formPatterns/catalog/topLevel/workspace.js.map +1 -0
- package/dist/knowledge/formPatterns/crossCheck.d.ts +44 -0
- package/dist/knowledge/formPatterns/crossCheck.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/crossCheck.js +109 -0
- package/dist/knowledge/formPatterns/crossCheck.js.map +1 -0
- package/dist/knowledge/formPatterns/index.d.ts +30 -0
- package/dist/knowledge/formPatterns/index.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/index.js +158 -0
- package/dist/knowledge/formPatterns/index.js.map +1 -0
- package/dist/knowledge/formPatterns/methodStubs.d.ts +45 -0
- package/dist/knowledge/formPatterns/methodStubs.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/methodStubs.js +257 -0
- package/dist/knowledge/formPatterns/methodStubs.js.map +1 -0
- package/dist/knowledge/formPatterns/types.d.ts +115 -0
- package/dist/knowledge/formPatterns/types.d.ts.map +1 -0
- package/dist/knowledge/formPatterns/types.js +44 -0
- package/dist/knowledge/formPatterns/types.js.map +1 -0
- package/dist/metadata/enhancedParser.d.ts +91 -0
- package/dist/metadata/enhancedParser.d.ts.map +1 -0
- package/dist/metadata/enhancedParser.js +379 -0
- package/dist/metadata/enhancedParser.js.map +1 -0
- package/dist/metadata/formPatternMiner.d.ts +78 -0
- package/dist/metadata/formPatternMiner.d.ts.map +1 -0
- package/dist/metadata/formPatternMiner.js +220 -0
- package/dist/metadata/formPatternMiner.js.map +1 -0
- package/dist/metadata/labelParser.d.ts +71 -0
- package/dist/metadata/labelParser.d.ts.map +1 -0
- package/dist/metadata/labelParser.js +258 -0
- package/dist/metadata/labelParser.js.map +1 -0
- package/dist/metadata/symbolCountsWorker.d.ts +16 -0
- package/dist/metadata/symbolCountsWorker.d.ts.map +1 -0
- package/dist/metadata/symbolCountsWorker.js +42 -0
- package/dist/metadata/symbolCountsWorker.js.map +1 -0
- package/dist/metadata/symbolIndex.d.ts +474 -0
- package/dist/metadata/symbolIndex.d.ts.map +1 -0
- package/dist/metadata/symbolIndex.js +3152 -0
- package/dist/metadata/symbolIndex.js.map +1 -0
- package/dist/metadata/types.d.ts +267 -0
- package/dist/metadata/types.d.ts.map +1 -0
- package/dist/metadata/types.js +5 -0
- package/dist/metadata/types.js.map +1 -0
- package/dist/metadata/xmlParser.d.ts +232 -0
- package/dist/metadata/xmlParser.d.ts.map +1 -0
- package/dist/metadata/xmlParser.js +1021 -0
- package/dist/metadata/xmlParser.js.map +1 -0
- package/dist/metadata/xppDeclaration.d.ts +116 -0
- package/dist/metadata/xppDeclaration.d.ts.map +1 -0
- package/dist/metadata/xppDeclaration.js +350 -0
- package/dist/metadata/xppDeclaration.js.map +1 -0
- package/dist/middleware/apiKeyAuth.d.ts +7 -0
- package/dist/middleware/apiKeyAuth.d.ts.map +1 -0
- package/dist/middleware/apiKeyAuth.js +70 -0
- package/dist/middleware/apiKeyAuth.js.map +1 -0
- package/dist/middleware/rateLimiter.d.ts +7 -0
- package/dist/middleware/rateLimiter.d.ts.map +1 -0
- package/dist/middleware/rateLimiter.js +78 -0
- package/dist/middleware/rateLimiter.js.map +1 -0
- package/dist/prompts/codeReview.d.ts +8 -0
- package/dist/prompts/codeReview.d.ts.map +1 -0
- package/dist/prompts/codeReview.js +619 -0
- package/dist/prompts/codeReview.js.map +1 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +6 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/systemInstructions.d.ts +33 -0
- package/dist/prompts/systemInstructions.d.ts.map +1 -0
- package/dist/prompts/systemInstructions.js +154 -0
- package/dist/prompts/systemInstructions.js.map +1 -0
- package/dist/resources/classResource.d.ts +17 -0
- package/dist/resources/classResource.d.ts.map +1 -0
- package/dist/resources/classResource.js +33 -0
- package/dist/resources/classResource.js.map +1 -0
- package/dist/resources/index.d.ts +20 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +154 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server/mcpServer.d.ts +11 -0
- package/dist/server/mcpServer.d.ts.map +1 -0
- package/dist/server/mcpServer.js +185 -0
- package/dist/server/mcpServer.js.map +1 -0
- package/dist/server/serverMode.d.ts +53 -0
- package/dist/server/serverMode.d.ts.map +1 -0
- package/dist/server/serverMode.js +72 -0
- package/dist/server/serverMode.js.map +1 -0
- package/dist/server/toolAnnotations.d.ts +28 -0
- package/dist/server/toolAnnotations.d.ts.map +1 -0
- package/dist/server/toolAnnotations.js +70 -0
- package/dist/server/toolAnnotations.js.map +1 -0
- package/dist/server/toolSchemas/analyzeCode.d.ts +71 -0
- package/dist/server/toolSchemas/analyzeCode.d.ts.map +1 -0
- package/dist/server/toolSchemas/analyzeCode.js +50 -0
- package/dist/server/toolSchemas/analyzeCode.js.map +1 -0
- package/dist/server/toolSchemas/batchGetInfo.d.ts +32 -0
- package/dist/server/toolSchemas/batchGetInfo.d.ts.map +1 -0
- package/dist/server/toolSchemas/batchGetInfo.js +35 -0
- package/dist/server/toolSchemas/batchGetInfo.js.map +1 -0
- package/dist/server/toolSchemas/buildD365foProject.d.ts +44 -0
- package/dist/server/toolSchemas/buildD365foProject.d.ts.map +1 -0
- package/dist/server/toolSchemas/buildD365foProject.js +47 -0
- package/dist/server/toolSchemas/buildD365foProject.js.map +1 -0
- package/dist/server/toolSchemas/d365foFile.d.ts +99 -0
- package/dist/server/toolSchemas/d365foFile.d.ts.map +1 -0
- package/dist/server/toolSchemas/d365foFile.js +163 -0
- package/dist/server/toolSchemas/d365foFile.js.map +1 -0
- package/dist/server/toolSchemas/extensionInfo.d.ts +65 -0
- package/dist/server/toolSchemas/extensionInfo.d.ts.map +1 -0
- package/dist/server/toolSchemas/extensionInfo.js +73 -0
- package/dist/server/toolSchemas/extensionInfo.js.map +1 -0
- package/dist/server/toolSchemas/findReferences.d.ts +35 -0
- package/dist/server/toolSchemas/findReferences.d.ts.map +1 -0
- package/dist/server/toolSchemas/findReferences.js +35 -0
- package/dist/server/toolSchemas/findReferences.js.map +1 -0
- package/dist/server/toolSchemas/generateObject.d.ts +246 -0
- package/dist/server/toolSchemas/generateObject.d.ts.map +1 -0
- package/dist/server/toolSchemas/generateObject.js +158 -0
- package/dist/server/toolSchemas/generateObject.js.map +1 -0
- package/dist/server/toolSchemas/getKnowledge.d.ts +39 -0
- package/dist/server/toolSchemas/getKnowledge.d.ts.map +1 -0
- package/dist/server/toolSchemas/getKnowledge.js +46 -0
- package/dist/server/toolSchemas/getKnowledge.js.map +1 -0
- package/dist/server/toolSchemas/getMethod.d.ts +30 -0
- package/dist/server/toolSchemas/getMethod.d.ts.map +1 -0
- package/dist/server/toolSchemas/getMethod.js +34 -0
- package/dist/server/toolSchemas/getMethod.js.map +1 -0
- package/dist/server/toolSchemas/getObjectInfo.d.ts +24 -0
- package/dist/server/toolSchemas/getObjectInfo.d.ts.map +1 -0
- package/dist/server/toolSchemas/getObjectInfo.js +30 -0
- package/dist/server/toolSchemas/getObjectInfo.js.map +1 -0
- package/dist/server/toolSchemas/getWorkspaceInfo.d.ts +29 -0
- package/dist/server/toolSchemas/getWorkspaceInfo.d.ts.map +1 -0
- package/dist/server/toolSchemas/getWorkspaceInfo.js +29 -0
- package/dist/server/toolSchemas/getWorkspaceInfo.js.map +1 -0
- package/dist/server/toolSchemas/index.d.ts +1142 -0
- package/dist/server/toolSchemas/index.d.ts.map +1 -0
- package/dist/server/toolSchemas/index.js +60 -0
- package/dist/server/toolSchemas/index.js.map +1 -0
- package/dist/server/toolSchemas/labels.d.ts +172 -0
- package/dist/server/toolSchemas/labels.d.ts.map +1 -0
- package/dist/server/toolSchemas/labels.js +159 -0
- package/dist/server/toolSchemas/labels.js.map +1 -0
- package/dist/server/toolSchemas/objectPatterns.d.ts +93 -0
- package/dist/server/toolSchemas/objectPatterns.d.ts.map +1 -0
- package/dist/server/toolSchemas/objectPatterns.js +104 -0
- package/dist/server/toolSchemas/objectPatterns.js.map +1 -0
- package/dist/server/toolSchemas/prepare.d.ts +49 -0
- package/dist/server/toolSchemas/prepare.d.ts.map +1 -0
- package/dist/server/toolSchemas/prepare.js +57 -0
- package/dist/server/toolSchemas/prepare.js.map +1 -0
- package/dist/server/toolSchemas/reviewWorkspaceChanges.d.ts +20 -0
- package/dist/server/toolSchemas/reviewWorkspaceChanges.d.ts.map +1 -0
- package/dist/server/toolSchemas/reviewWorkspaceChanges.js +19 -0
- package/dist/server/toolSchemas/reviewWorkspaceChanges.js.map +1 -0
- package/dist/server/toolSchemas/runBpCheck.d.ts +36 -0
- package/dist/server/toolSchemas/runBpCheck.d.ts.map +1 -0
- package/dist/server/toolSchemas/runBpCheck.js +21 -0
- package/dist/server/toolSchemas/runBpCheck.js.map +1 -0
- package/dist/server/toolSchemas/runSystestClass.d.ts +32 -0
- package/dist/server/toolSchemas/runSystestClass.d.ts.map +1 -0
- package/dist/server/toolSchemas/runSystestClass.js +20 -0
- package/dist/server/toolSchemas/runSystestClass.js.map +1 -0
- package/dist/server/toolSchemas/search.d.ts +109 -0
- package/dist/server/toolSchemas/search.d.ts.map +1 -0
- package/dist/server/toolSchemas/search.js +123 -0
- package/dist/server/toolSchemas/search.js.map +1 -0
- package/dist/server/toolSchemas/securityInfo.d.ts +45 -0
- package/dist/server/toolSchemas/securityInfo.d.ts.map +1 -0
- package/dist/server/toolSchemas/securityInfo.js +39 -0
- package/dist/server/toolSchemas/securityInfo.js.map +1 -0
- package/dist/server/toolSchemas/suggestEdt.d.ts +29 -0
- package/dist/server/toolSchemas/suggestEdt.d.ts.map +1 -0
- package/dist/server/toolSchemas/suggestEdt.js +29 -0
- package/dist/server/toolSchemas/suggestEdt.js.map +1 -0
- package/dist/server/toolSchemas/triggerDbSync.d.ts +47 -0
- package/dist/server/toolSchemas/triggerDbSync.d.ts.map +1 -0
- package/dist/server/toolSchemas/triggerDbSync.js +31 -0
- package/dist/server/toolSchemas/triggerDbSync.js.map +1 -0
- package/dist/server/toolSchemas/undoLastModification.d.ts +20 -0
- package/dist/server/toolSchemas/undoLastModification.d.ts.map +1 -0
- package/dist/server/toolSchemas/undoLastModification.js +17 -0
- package/dist/server/toolSchemas/undoLastModification.js.map +1 -0
- package/dist/server/toolSchemas/updateSymbolIndex.d.ts +19 -0
- package/dist/server/toolSchemas/updateSymbolIndex.d.ts.map +1 -0
- package/dist/server/toolSchemas/updateSymbolIndex.js +18 -0
- package/dist/server/toolSchemas/updateSymbolIndex.js.map +1 -0
- package/dist/server/toolSchemas/validateCode.d.ts +35 -0
- package/dist/server/toolSchemas/validateCode.d.ts.map +1 -0
- package/dist/server/toolSchemas/validateCode.js +38 -0
- package/dist/server/toolSchemas/validateCode.js.map +1 -0
- package/dist/server/toolSchemas/validateObjectNaming.d.ts +33 -0
- package/dist/server/toolSchemas/validateObjectNaming.d.ts.map +1 -0
- package/dist/server/toolSchemas/validateObjectNaming.js +32 -0
- package/dist/server/toolSchemas/validateObjectNaming.js.map +1 -0
- package/dist/server/toolSchemas/verifyD365foProject.d.ts +50 -0
- package/dist/server/toolSchemas/verifyD365foProject.d.ts.map +1 -0
- package/dist/server/toolSchemas/verifyD365foProject.js +46 -0
- package/dist/server/toolSchemas/verifyD365foProject.js.map +1 -0
- package/dist/server/transport.d.ts +30 -0
- package/dist/server/transport.d.ts.map +1 -0
- package/dist/server/transport.js +391 -0
- package/dist/server/transport.js.map +1 -0
- package/dist/tools/analyzeCode.d.ts +17 -0
- package/dist/tools/analyzeCode.d.ts.map +1 -0
- package/dist/tools/analyzeCode.js +63 -0
- package/dist/tools/analyzeCode.js.map +1 -0
- package/dist/tools/analyzeCompleteness.d.ts +20 -0
- package/dist/tools/analyzeCompleteness.d.ts.map +1 -0
- package/dist/tools/analyzeCompleteness.js +103 -0
- package/dist/tools/analyzeCompleteness.js.map +1 -0
- package/dist/tools/analyzeExtensionPoints.d.ts +21 -0
- package/dist/tools/analyzeExtensionPoints.d.ts.map +1 -0
- package/dist/tools/analyzeExtensionPoints.js +343 -0
- package/dist/tools/analyzeExtensionPoints.js.map +1 -0
- package/dist/tools/analyzePatterns.d.ts +20 -0
- package/dist/tools/analyzePatterns.d.ts.map +1 -0
- package/dist/tools/analyzePatterns.js +71 -0
- package/dist/tools/analyzePatterns.js.map +1 -0
- package/dist/tools/apiUsagePatterns.d.ts +20 -0
- package/dist/tools/apiUsagePatterns.d.ts.map +1 -0
- package/dist/tools/apiUsagePatterns.js +136 -0
- package/dist/tools/apiUsagePatterns.js.map +1 -0
- package/dist/tools/batchGetInfo.d.ts +50 -0
- package/dist/tools/batchGetInfo.d.ts.map +1 -0
- package/dist/tools/batchGetInfo.js +52 -0
- package/dist/tools/batchGetInfo.js.map +1 -0
- package/dist/tools/batchSearch.d.ts +64 -0
- package/dist/tools/batchSearch.d.ts.map +1 -0
- package/dist/tools/batchSearch.js +265 -0
- package/dist/tools/batchSearch.js.map +1 -0
- package/dist/tools/buildProject.d.ts +28 -0
- package/dist/tools/buildProject.d.ts.map +1 -0
- package/dist/tools/buildProject.js +929 -0
- package/dist/tools/buildProject.js.map +1 -0
- package/dist/tools/classInfo.d.ts +8 -0
- package/dist/tools/classInfo.d.ts.map +1 -0
- package/dist/tools/classInfo.js +235 -0
- package/dist/tools/classInfo.js.map +1 -0
- package/dist/tools/codeGen.d.ts +19 -0
- package/dist/tools/codeGen.d.ts.map +1 -0
- package/dist/tools/codeGen.js +1956 -0
- package/dist/tools/codeGen.js.map +1 -0
- package/dist/tools/completion.d.ts +8 -0
- package/dist/tools/completion.d.ts.map +1 -0
- package/dist/tools/completion.js +272 -0
- package/dist/tools/completion.js.map +1 -0
- package/dist/tools/configKeyInfo.d.ts +22 -0
- package/dist/tools/configKeyInfo.d.ts.map +1 -0
- package/dist/tools/configKeyInfo.js +74 -0
- package/dist/tools/configKeyInfo.js.map +1 -0
- package/dist/tools/createD365File.d.ts +479 -0
- package/dist/tools/createD365File.d.ts.map +1 -0
- package/dist/tools/createD365File.js +4185 -0
- package/dist/tools/createD365File.js.map +1 -0
- package/dist/tools/createLabel.d.ts +51 -0
- package/dist/tools/createLabel.d.ts.map +1 -0
- package/dist/tools/createLabel.js +761 -0
- package/dist/tools/createLabel.js.map +1 -0
- package/dist/tools/d365foErrorHelp.d.ts +29 -0
- package/dist/tools/d365foErrorHelp.d.ts.map +1 -0
- package/dist/tools/d365foErrorHelp.js +389 -0
- package/dist/tools/d365foErrorHelp.js.map +1 -0
- package/dist/tools/d365foFile.d.ts +20 -0
- package/dist/tools/d365foFile.d.ts.map +1 -0
- package/dist/tools/d365foFile.js +58 -0
- package/dist/tools/d365foFile.js.map +1 -0
- package/dist/tools/d365foFileOpSpecs.d.ts +41 -0
- package/dist/tools/d365foFileOpSpecs.d.ts.map +1 -0
- package/dist/tools/d365foFileOpSpecs.js +336 -0
- package/dist/tools/d365foFileOpSpecs.js.map +1 -0
- package/dist/tools/dataEntityInfo.d.ts +23 -0
- package/dist/tools/dataEntityInfo.d.ts.map +1 -0
- package/dist/tools/dataEntityInfo.js +45 -0
- package/dist/tools/dataEntityInfo.js.map +1 -0
- package/dist/tools/dataEntityXml.d.ts +31 -0
- package/dist/tools/dataEntityXml.d.ts.map +1 -0
- package/dist/tools/dataEntityXml.js +131 -0
- package/dist/tools/dataEntityXml.js.map +1 -0
- package/dist/tools/dbSync.d.ts +8 -0
- package/dist/tools/dbSync.d.ts.map +1 -0
- package/dist/tools/dbSync.js +285 -0
- package/dist/tools/dbSync.js.map +1 -0
- package/dist/tools/edtInfo.d.ts +23 -0
- package/dist/tools/edtInfo.d.ts.map +1 -0
- package/dist/tools/edtInfo.js +122 -0
- package/dist/tools/edtInfo.js.map +1 -0
- package/dist/tools/enumInfo.d.ts +17 -0
- package/dist/tools/enumInfo.d.ts.map +1 -0
- package/dist/tools/enumInfo.js +44 -0
- package/dist/tools/enumInfo.js.map +1 -0
- package/dist/tools/extensionInfo.d.ts +26 -0
- package/dist/tools/extensionInfo.d.ts.map +1 -0
- package/dist/tools/extensionInfo.js +73 -0
- package/dist/tools/extensionInfo.js.map +1 -0
- package/dist/tools/extensionSearch.d.ts +20 -0
- package/dist/tools/extensionSearch.d.ts.map +1 -0
- package/dist/tools/extensionSearch.js +72 -0
- package/dist/tools/extensionSearch.js.map +1 -0
- package/dist/tools/extensionStrategyAdvisor.d.ts +15 -0
- package/dist/tools/extensionStrategyAdvisor.d.ts.map +1 -0
- package/dist/tools/extensionStrategyAdvisor.js +519 -0
- package/dist/tools/extensionStrategyAdvisor.js.map +1 -0
- package/dist/tools/findCocExtensions.d.ts +20 -0
- package/dist/tools/findCocExtensions.d.ts.map +1 -0
- package/dist/tools/findCocExtensions.js +285 -0
- package/dist/tools/findCocExtensions.js.map +1 -0
- package/dist/tools/findEventHandlers.d.ts +21 -0
- package/dist/tools/findEventHandlers.d.ts.map +1 -0
- package/dist/tools/findEventHandlers.js +196 -0
- package/dist/tools/findEventHandlers.js.map +1 -0
- package/dist/tools/findReferences.d.ts +30 -0
- package/dist/tools/findReferences.d.ts.map +1 -0
- package/dist/tools/findReferences.js +551 -0
- package/dist/tools/findReferences.js.map +1 -0
- package/dist/tools/formInfo.d.ts +13 -0
- package/dist/tools/formInfo.d.ts.map +1 -0
- package/dist/tools/formInfo.js +407 -0
- package/dist/tools/formInfo.js.map +1 -0
- package/dist/tools/formPattern.d.ts +19 -0
- package/dist/tools/formPattern.d.ts.map +1 -0
- package/dist/tools/formPattern.js +52 -0
- package/dist/tools/formPattern.js.map +1 -0
- package/dist/tools/generateD365Xml.d.ts +12 -0
- package/dist/tools/generateD365Xml.d.ts.map +1 -0
- package/dist/tools/generateD365Xml.js +1454 -0
- package/dist/tools/generateD365Xml.js.map +1 -0
- package/dist/tools/generateFindMethods.d.ts +69 -0
- package/dist/tools/generateFindMethods.d.ts.map +1 -0
- package/dist/tools/generateFindMethods.js +207 -0
- package/dist/tools/generateFindMethods.js.map +1 -0
- package/dist/tools/generateMetadata.d.ts +37 -0
- package/dist/tools/generateMetadata.d.ts.map +1 -0
- package/dist/tools/generateMetadata.js +213 -0
- package/dist/tools/generateMetadata.js.map +1 -0
- package/dist/tools/generateObject.d.ts +34 -0
- package/dist/tools/generateObject.d.ts.map +1 -0
- package/dist/tools/generateObject.js +47 -0
- package/dist/tools/generateObject.js.map +1 -0
- package/dist/tools/generateRelationXpp.d.ts +45 -0
- package/dist/tools/generateRelationXpp.d.ts.map +1 -0
- package/dist/tools/generateRelationXpp.js +129 -0
- package/dist/tools/generateRelationXpp.js.map +1 -0
- package/dist/tools/generateSmart.d.ts +32 -0
- package/dist/tools/generateSmart.d.ts.map +1 -0
- package/dist/tools/generateSmart.js +52 -0
- package/dist/tools/generateSmart.js.map +1 -0
- package/dist/tools/generateSmartForm.d.ts +82 -0
- package/dist/tools/generateSmartForm.d.ts.map +1 -0
- package/dist/tools/generateSmartForm.js +996 -0
- package/dist/tools/generateSmartForm.js.map +1 -0
- package/dist/tools/generateSmartReport.d.ts +90 -0
- package/dist/tools/generateSmartReport.d.ts.map +1 -0
- package/dist/tools/generateSmartReport.js +1254 -0
- package/dist/tools/generateSmartReport.js.map +1 -0
- package/dist/tools/generateSmartTable.d.ts +138 -0
- package/dist/tools/generateSmartTable.d.ts.map +1 -0
- package/dist/tools/generateSmartTable.js +1305 -0
- package/dist/tools/generateSmartTable.js.map +1 -0
- package/dist/tools/generateTableFields.d.ts +48 -0
- package/dist/tools/generateTableFields.d.ts.map +1 -0
- package/dist/tools/generateTableFields.js +186 -0
- package/dist/tools/generateTableFields.js.map +1 -0
- package/dist/tools/generateTableRelation.d.ts +35 -0
- package/dist/tools/generateTableRelation.d.ts.map +1 -0
- package/dist/tools/generateTableRelation.js +161 -0
- package/dist/tools/generateTableRelation.js.map +1 -0
- package/dist/tools/getFormPatternSpec.d.ts +13 -0
- package/dist/tools/getFormPatternSpec.d.ts.map +1 -0
- package/dist/tools/getFormPatternSpec.js +290 -0
- package/dist/tools/getFormPatternSpec.js.map +1 -0
- package/dist/tools/getFormPatterns.d.ts +68 -0
- package/dist/tools/getFormPatterns.d.ts.map +1 -0
- package/dist/tools/getFormPatterns.js +471 -0
- package/dist/tools/getFormPatterns.js.map +1 -0
- package/dist/tools/getKnowledge.d.ts +27 -0
- package/dist/tools/getKnowledge.d.ts.map +1 -0
- package/dist/tools/getKnowledge.js +50 -0
- package/dist/tools/getKnowledge.js.map +1 -0
- package/dist/tools/getLabelInfo.d.ts +21 -0
- package/dist/tools/getLabelInfo.d.ts.map +1 -0
- package/dist/tools/getLabelInfo.js +138 -0
- package/dist/tools/getLabelInfo.js.map +1 -0
- package/dist/tools/getMethod.d.ts +19 -0
- package/dist/tools/getMethod.d.ts.map +1 -0
- package/dist/tools/getMethod.js +77 -0
- package/dist/tools/getMethod.js.map +1 -0
- package/dist/tools/getMethodSource.d.ts +17 -0
- package/dist/tools/getMethodSource.d.ts.map +1 -0
- package/dist/tools/getMethodSource.js +161 -0
- package/dist/tools/getMethodSource.js.map +1 -0
- package/dist/tools/getObjectInfo.d.ts +17 -0
- package/dist/tools/getObjectInfo.d.ts.map +1 -0
- package/dist/tools/getObjectInfo.js +88 -0
- package/dist/tools/getObjectInfo.js.map +1 -0
- package/dist/tools/getTablePatterns.d.ts +45 -0
- package/dist/tools/getTablePatterns.d.ts.map +1 -0
- package/dist/tools/getTablePatterns.js +235 -0
- package/dist/tools/getTablePatterns.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/labels.d.ts +25 -0
- package/dist/tools/labels.d.ts.map +1 -0
- package/dist/tools/labels.js +111 -0
- package/dist/tools/labels.js.map +1 -0
- package/dist/tools/macroInfo.d.ts +23 -0
- package/dist/tools/macroInfo.d.ts.map +1 -0
- package/dist/tools/macroInfo.js +62 -0
- package/dist/tools/macroInfo.js.map +1 -0
- package/dist/tools/mapInfo.d.ts +21 -0
- package/dist/tools/mapInfo.d.ts.map +1 -0
- package/dist/tools/mapInfo.js +54 -0
- package/dist/tools/mapInfo.js.map +1 -0
- package/dist/tools/mapXml.d.ts +26 -0
- package/dist/tools/mapXml.d.ts.map +1 -0
- package/dist/tools/mapXml.js +88 -0
- package/dist/tools/mapXml.js.map +1 -0
- package/dist/tools/menuItemInfo.d.ts +20 -0
- package/dist/tools/menuItemInfo.d.ts.map +1 -0
- package/dist/tools/menuItemInfo.js +185 -0
- package/dist/tools/menuItemInfo.js.map +1 -0
- package/dist/tools/methodSignature.d.ts +33 -0
- package/dist/tools/methodSignature.d.ts.map +1 -0
- package/dist/tools/methodSignature.js +348 -0
- package/dist/tools/methodSignature.js.map +1 -0
- package/dist/tools/modifyD365File.d.ts +130 -0
- package/dist/tools/modifyD365File.d.ts.map +1 -0
- package/dist/tools/modifyD365File.js +2179 -0
- package/dist/tools/modifyD365File.js.map +1 -0
- package/dist/tools/objectInfoRegistry.d.ts +36 -0
- package/dist/tools/objectInfoRegistry.d.ts.map +1 -0
- package/dist/tools/objectInfoRegistry.js +98 -0
- package/dist/tools/objectInfoRegistry.js.map +1 -0
- package/dist/tools/objectPatterns.d.ts +16 -0
- package/dist/tools/objectPatterns.d.ts.map +1 -0
- package/dist/tools/objectPatterns.js +84 -0
- package/dist/tools/objectPatterns.js.map +1 -0
- package/dist/tools/prepare.d.ts +18 -0
- package/dist/tools/prepare.d.ts.map +1 -0
- package/dist/tools/prepare.js +47 -0
- package/dist/tools/prepare.js.map +1 -0
- package/dist/tools/prepareChange.d.ts +43 -0
- package/dist/tools/prepareChange.d.ts.map +1 -0
- package/dist/tools/prepareChange.js +327 -0
- package/dist/tools/prepareChange.js.map +1 -0
- package/dist/tools/prepareCreate.d.ts +45 -0
- package/dist/tools/prepareCreate.d.ts.map +1 -0
- package/dist/tools/prepareCreate.js +263 -0
- package/dist/tools/prepareCreate.js.map +1 -0
- package/dist/tools/queryInfo.d.ts +17 -0
- package/dist/tools/queryInfo.d.ts.map +1 -0
- package/dist/tools/queryInfo.js +46 -0
- package/dist/tools/queryInfo.js.map +1 -0
- package/dist/tools/queryViewXml.d.ts +36 -0
- package/dist/tools/queryViewXml.d.ts.map +1 -0
- package/dist/tools/queryViewXml.js +129 -0
- package/dist/tools/queryViewXml.js.map +1 -0
- package/dist/tools/renameLabel.d.ts +29 -0
- package/dist/tools/renameLabel.d.ts.map +1 -0
- package/dist/tools/renameLabel.js +377 -0
- package/dist/tools/renameLabel.js.map +1 -0
- package/dist/tools/repairFormControls.d.ts +21 -0
- package/dist/tools/repairFormControls.d.ts.map +1 -0
- package/dist/tools/repairFormControls.js +151 -0
- package/dist/tools/repairFormControls.js.map +1 -0
- package/dist/tools/reportInfo.d.ts +14 -0
- package/dist/tools/reportInfo.d.ts.map +1 -0
- package/dist/tools/reportInfo.js +302 -0
- package/dist/tools/reportInfo.js.map +1 -0
- package/dist/tools/resolveReferences.d.ts +89 -0
- package/dist/tools/resolveReferences.d.ts.map +1 -0
- package/dist/tools/resolveReferences.js +791 -0
- package/dist/tools/resolveReferences.js.map +1 -0
- package/dist/tools/reviewWorkspaceChanges.d.ts +14 -0
- package/dist/tools/reviewWorkspaceChanges.d.ts.map +1 -0
- package/dist/tools/reviewWorkspaceChanges.js +73 -0
- package/dist/tools/reviewWorkspaceChanges.js.map +1 -0
- package/dist/tools/runBpCheck.d.ts +14 -0
- package/dist/tools/runBpCheck.d.ts.map +1 -0
- package/dist/tools/runBpCheck.js +241 -0
- package/dist/tools/runBpCheck.js.map +1 -0
- package/dist/tools/search.d.ts +20 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +246 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/searchLabels.d.ts +26 -0
- package/dist/tools/searchLabels.d.ts.map +1 -0
- package/dist/tools/searchLabels.js +91 -0
- package/dist/tools/searchLabels.js.map +1 -0
- package/dist/tools/searchUnified.d.ts +28 -0
- package/dist/tools/searchUnified.d.ts.map +1 -0
- package/dist/tools/searchUnified.js +48 -0
- package/dist/tools/searchUnified.js.map +1 -0
- package/dist/tools/securityArtifactInfo.d.ts +14 -0
- package/dist/tools/securityArtifactInfo.d.ts.map +1 -0
- package/dist/tools/securityArtifactInfo.js +192 -0
- package/dist/tools/securityArtifactInfo.js.map +1 -0
- package/dist/tools/securityCoverageInfo.d.ts +21 -0
- package/dist/tools/securityCoverageInfo.d.ts.map +1 -0
- package/dist/tools/securityCoverageInfo.js +248 -0
- package/dist/tools/securityCoverageInfo.js.map +1 -0
- package/dist/tools/securityInfo.d.ts +22 -0
- package/dist/tools/securityInfo.d.ts.map +1 -0
- package/dist/tools/securityInfo.js +43 -0
- package/dist/tools/securityInfo.js.map +1 -0
- package/dist/tools/securityPolicyInfo.d.ts +22 -0
- package/dist/tools/securityPolicyInfo.d.ts.map +1 -0
- package/dist/tools/securityPolicyInfo.js +49 -0
- package/dist/tools/securityPolicyInfo.js.map +1 -0
- package/dist/tools/securityPrivilegeXml.d.ts +21 -0
- package/dist/tools/securityPrivilegeXml.d.ts.map +1 -0
- package/dist/tools/securityPrivilegeXml.js +61 -0
- package/dist/tools/securityPrivilegeXml.js.map +1 -0
- package/dist/tools/serviceInfo.d.ts +25 -0
- package/dist/tools/serviceInfo.d.ts.map +1 -0
- package/dist/tools/serviceInfo.js +93 -0
- package/dist/tools/serviceInfo.js.map +1 -0
- package/dist/tools/suggestEdt.d.ts +15 -0
- package/dist/tools/suggestEdt.d.ts.map +1 -0
- package/dist/tools/suggestEdt.js +348 -0
- package/dist/tools/suggestEdt.js.map +1 -0
- package/dist/tools/suggestImplementation.d.ts +20 -0
- package/dist/tools/suggestImplementation.d.ts.map +1 -0
- package/dist/tools/suggestImplementation.js +144 -0
- package/dist/tools/suggestImplementation.js.map +1 -0
- package/dist/tools/sysTestRunner.d.ts +14 -0
- package/dist/tools/sysTestRunner.d.ts.map +1 -0
- package/dist/tools/sysTestRunner.js +145 -0
- package/dist/tools/sysTestRunner.js.map +1 -0
- package/dist/tools/tableExtensionInfo.d.ts +91 -0
- package/dist/tools/tableExtensionInfo.d.ts.map +1 -0
- package/dist/tools/tableExtensionInfo.js +305 -0
- package/dist/tools/tableExtensionInfo.js.map +1 -0
- package/dist/tools/tableInfo.d.ts +23 -0
- package/dist/tools/tableInfo.d.ts.map +1 -0
- package/dist/tools/tableInfo.js +125 -0
- package/dist/tools/tableInfo.js.map +1 -0
- package/dist/tools/toolHandler.d.ts +4 -0
- package/dist/tools/toolHandler.d.ts.map +1 -0
- package/dist/tools/toolHandler.js +508 -0
- package/dist/tools/toolHandler.js.map +1 -0
- package/dist/tools/undoLastModification.d.ts +15 -0
- package/dist/tools/undoLastModification.d.ts.map +1 -0
- package/dist/tools/undoLastModification.js +147 -0
- package/dist/tools/undoLastModification.js.map +1 -0
- package/dist/tools/updateSymbolIndex.d.ts +15 -0
- package/dist/tools/updateSymbolIndex.d.ts.map +1 -0
- package/dist/tools/updateSymbolIndex.js +520 -0
- package/dist/tools/updateSymbolIndex.js.map +1 -0
- package/dist/tools/validateCode.d.ts +24 -0
- package/dist/tools/validateCode.d.ts.map +1 -0
- package/dist/tools/validateCode.js +201 -0
- package/dist/tools/validateCode.js.map +1 -0
- package/dist/tools/validateFormPattern.d.ts +51 -0
- package/dist/tools/validateFormPattern.d.ts.map +1 -0
- package/dist/tools/validateFormPattern.js +201 -0
- package/dist/tools/validateFormPattern.js.map +1 -0
- package/dist/tools/validateObjectNaming.d.ts +21 -0
- package/dist/tools/validateObjectNaming.d.ts.map +1 -0
- package/dist/tools/validateObjectNaming.js +319 -0
- package/dist/tools/validateObjectNaming.js.map +1 -0
- package/dist/tools/validateXpp.d.ts +79 -0
- package/dist/tools/validateXpp.d.ts.map +1 -0
- package/dist/tools/validateXpp.js +705 -0
- package/dist/tools/validateXpp.js.map +1 -0
- package/dist/tools/verifyD365Project.d.ts +21 -0
- package/dist/tools/verifyD365Project.d.ts.map +1 -0
- package/dist/tools/verifyD365Project.js +299 -0
- package/dist/tools/verifyD365Project.js.map +1 -0
- package/dist/tools/viewInfo.d.ts +17 -0
- package/dist/tools/viewInfo.d.ts.map +1 -0
- package/dist/tools/viewInfo.js +46 -0
- package/dist/tools/viewInfo.js.map +1 -0
- package/dist/tools/xppKnowledge.d.ts +45 -0
- package/dist/tools/xppKnowledge.d.ts.map +1 -0
- package/dist/tools/xppKnowledge.js +2815 -0
- package/dist/tools/xppKnowledge.js.map +1 -0
- package/dist/types/context.d.ts +56 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +5 -0
- package/dist/types/context.js.map +1 -0
- package/dist/utils/callDedup.d.ts +29 -0
- package/dist/utils/callDedup.d.ts.map +1 -0
- package/dist/utils/callDedup.js +87 -0
- package/dist/utils/callDedup.js.map +1 -0
- package/dist/utils/configManager.d.ts +307 -0
- package/dist/utils/configManager.d.ts.map +1 -0
- package/dist/utils/configManager.js +1169 -0
- package/dist/utils/configManager.js.map +1 -0
- package/dist/utils/d365XmlNormalizer.d.ts +9 -0
- package/dist/utils/d365XmlNormalizer.d.ts.map +1 -0
- package/dist/utils/d365XmlNormalizer.js +24 -0
- package/dist/utils/d365XmlNormalizer.js.map +1 -0
- package/dist/utils/edtExtensionValidator.d.ts +110 -0
- package/dist/utils/edtExtensionValidator.d.ts.map +1 -0
- package/dist/utils/edtExtensionValidator.js +367 -0
- package/dist/utils/edtExtensionValidator.js.map +1 -0
- package/dist/utils/eolUtils.d.ts +15 -0
- package/dist/utils/eolUtils.d.ts.map +1 -0
- package/dist/utils/eolUtils.js +21 -0
- package/dist/utils/eolUtils.js.map +1 -0
- package/dist/utils/extractManifest.d.ts +34 -0
- package/dist/utils/extractManifest.d.ts.map +1 -0
- package/dist/utils/extractManifest.js +43 -0
- package/dist/utils/extractManifest.js.map +1 -0
- package/dist/utils/fieldControlTypes.d.ts +44 -0
- package/dist/utils/fieldControlTypes.d.ts.map +1 -0
- package/dist/utils/fieldControlTypes.js +97 -0
- package/dist/utils/fieldControlTypes.js.map +1 -0
- package/dist/utils/formCloner.d.ts +77 -0
- package/dist/utils/formCloner.d.ts.map +1 -0
- package/dist/utils/formCloner.js +364 -0
- package/dist/utils/formCloner.js.map +1 -0
- package/dist/utils/formControlExpander.d.ts +68 -0
- package/dist/utils/formControlExpander.d.ts.map +1 -0
- package/dist/utils/formControlExpander.js +207 -0
- package/dist/utils/formControlExpander.js.map +1 -0
- package/dist/utils/formControlRepair.d.ts +81 -0
- package/dist/utils/formControlRepair.d.ts.map +1 -0
- package/dist/utils/formControlRepair.js +203 -0
- package/dist/utils/formControlRepair.js.map +1 -0
- package/dist/utils/formExtensionShapeValidator.d.ts +44 -0
- package/dist/utils/formExtensionShapeValidator.d.ts.map +1 -0
- package/dist/utils/formExtensionShapeValidator.js +99 -0
- package/dist/utils/formExtensionShapeValidator.js.map +1 -0
- package/dist/utils/formPatternTemplates.d.ts +77 -0
- package/dist/utils/formPatternTemplates.d.ts.map +1 -0
- package/dist/utils/formPatternTemplates.js +1917 -0
- package/dist/utils/formPatternTemplates.js.map +1 -0
- package/dist/utils/fsExtensionScanner.d.ts +76 -0
- package/dist/utils/fsExtensionScanner.d.ts.map +1 -0
- package/dist/utils/fsExtensionScanner.js +271 -0
- package/dist/utils/fsExtensionScanner.js.map +1 -0
- package/dist/utils/fuzzyMatching.d.ts +41 -0
- package/dist/utils/fuzzyMatching.d.ts.map +1 -0
- package/dist/utils/fuzzyMatching.js +186 -0
- package/dist/utils/fuzzyMatching.js.map +1 -0
- package/dist/utils/indexStaleness.d.ts +30 -0
- package/dist/utils/indexStaleness.d.ts.map +1 -0
- package/dist/utils/indexStaleness.js +104 -0
- package/dist/utils/indexStaleness.js.map +1 -0
- package/dist/utils/loadEnv.d.ts +32 -0
- package/dist/utils/loadEnv.d.ts.map +1 -0
- package/dist/utils/loadEnv.js +83 -0
- package/dist/utils/loadEnv.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +11 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metadataResolver.d.ts +155 -0
- package/dist/utils/metadataResolver.d.ts.map +1 -0
- package/dist/utils/metadataResolver.js +277 -0
- package/dist/utils/metadataResolver.js.map +1 -0
- package/dist/utils/modelClassifier.d.ts +180 -0
- package/dist/utils/modelClassifier.d.ts.map +1 -0
- package/dist/utils/modelClassifier.js +373 -0
- package/dist/utils/modelClassifier.js.map +1 -0
- package/dist/utils/operationLocks.d.ts +26 -0
- package/dist/utils/operationLocks.d.ts.map +1 -0
- package/dist/utils/operationLocks.js +182 -0
- package/dist/utils/operationLocks.js.map +1 -0
- package/dist/utils/packageResolver.d.ts +52 -0
- package/dist/utils/packageResolver.d.ts.map +1 -0
- package/dist/utils/packageResolver.js +174 -0
- package/dist/utils/packageResolver.js.map +1 -0
- package/dist/utils/pathContainment.d.ts +60 -0
- package/dist/utils/pathContainment.d.ts.map +1 -0
- package/dist/utils/pathContainment.js +270 -0
- package/dist/utils/pathContainment.js.map +1 -0
- package/dist/utils/projectUtils.d.ts +14 -0
- package/dist/utils/projectUtils.d.ts.map +1 -0
- package/dist/utils/projectUtils.js +48 -0
- package/dist/utils/projectUtils.js.map +1 -0
- package/dist/utils/provenanceStore.d.ts +54 -0
- package/dist/utils/provenanceStore.d.ts.map +1 -0
- package/dist/utils/provenanceStore.js +203 -0
- package/dist/utils/provenanceStore.js.map +1 -0
- package/dist/utils/richContext.d.ts +45 -0
- package/dist/utils/richContext.d.ts.map +1 -0
- package/dist/utils/richContext.js +316 -0
- package/dist/utils/richContext.js.map +1 -0
- package/dist/utils/smartXmlBuilder.d.ts +187 -0
- package/dist/utils/smartXmlBuilder.d.ts.map +1 -0
- package/dist/utils/smartXmlBuilder.js +504 -0
- package/dist/utils/smartXmlBuilder.js.map +1 -0
- package/dist/utils/stdioSessionInfo.d.ts +53 -0
- package/dist/utils/stdioSessionInfo.d.ts.map +1 -0
- package/dist/utils/stdioSessionInfo.js +47 -0
- package/dist/utils/stdioSessionInfo.js.map +1 -0
- package/dist/utils/suggestionEngine.d.ts +20 -0
- package/dist/utils/suggestionEngine.d.ts.map +1 -0
- package/dist/utils/suggestionEngine.js +145 -0
- package/dist/utils/suggestionEngine.js.map +1 -0
- package/dist/utils/symbolLookup.d.ts +60 -0
- package/dist/utils/symbolLookup.d.ts.map +1 -0
- package/dist/utils/symbolLookup.js +0 -0
- package/dist/utils/symbolLookup.js.map +1 -0
- package/dist/utils/terminalUi.d.ts +85 -0
- package/dist/utils/terminalUi.d.ts.map +1 -0
- package/dist/utils/terminalUi.js +182 -0
- package/dist/utils/terminalUi.js.map +1 -0
- package/dist/utils/toolMetrics.d.ts +32 -0
- package/dist/utils/toolMetrics.d.ts.map +1 -0
- package/dist/utils/toolMetrics.js +89 -0
- package/dist/utils/toolMetrics.js.map +1 -0
- package/dist/utils/toolProgressMessage.d.ts +8 -0
- package/dist/utils/toolProgressMessage.d.ts.map +1 -0
- package/dist/utils/toolProgressMessage.js +182 -0
- package/dist/utils/toolProgressMessage.js.map +1 -0
- package/dist/utils/workspaceDetector.d.ts +51 -0
- package/dist/utils/workspaceDetector.d.ts.map +1 -0
- package/dist/utils/workspaceDetector.js +328 -0
- package/dist/utils/workspaceDetector.js.map +1 -0
- package/dist/utils/xppConfigProvider.d.ts +48 -0
- package/dist/utils/xppConfigProvider.d.ts.map +1 -0
- package/dist/utils/xppConfigProvider.js +121 -0
- package/dist/utils/xppConfigProvider.js.map +1 -0
- package/dist/utils/xppDocGen.d.ts +39 -0
- package/dist/utils/xppDocGen.d.ts.map +1 -0
- package/dist/utils/xppDocGen.js +518 -0
- package/dist/utils/xppDocGen.js.map +1 -0
- package/dist/utils/xppFormat.d.ts +21 -0
- package/dist/utils/xppFormat.d.ts.map +1 -0
- package/dist/utils/xppFormat.js +102 -0
- package/dist/utils/xppFormat.js.map +1 -0
- package/dist/utils/xppSelectLint.d.ts +18 -0
- package/dist/utils/xppSelectLint.d.ts.map +1 -0
- package/dist/utils/xppSelectLint.js +80 -0
- package/dist/utils/xppSelectLint.js.map +1 -0
- package/dist/validation/formPatternValidator.d.ts +53 -0
- package/dist/validation/formPatternValidator.d.ts.map +1 -0
- package/dist/validation/formPatternValidator.js +454 -0
- package/dist/validation/formPatternValidator.js.map +1 -0
- package/dist/workspace/contextRanker.d.ts +58 -0
- package/dist/workspace/contextRanker.d.ts.map +1 -0
- package/dist/workspace/contextRanker.js +216 -0
- package/dist/workspace/contextRanker.js.map +1 -0
- package/dist/workspace/contextSnapshot.d.ts +68 -0
- package/dist/workspace/contextSnapshot.d.ts.map +1 -0
- package/dist/workspace/contextSnapshot.js +193 -0
- package/dist/workspace/contextSnapshot.js.map +1 -0
- package/dist/workspace/hybridSearch.d.ts +39 -0
- package/dist/workspace/hybridSearch.d.ts.map +1 -0
- package/dist/workspace/hybridSearch.js +96 -0
- package/dist/workspace/hybridSearch.js.map +1 -0
- package/dist/workspace/workspaceScanner.d.ts +95 -0
- package/dist/workspace/workspaceScanner.d.ts.map +1 -0
- package/dist/workspace/workspaceScanner.js +247 -0
- package/dist/workspace/workspaceScanner.js.map +1 -0
- package/dist/workspace/workspaceUtils.d.ts +23 -0
- package/dist/workspace/workspaceUtils.d.ts.map +1 -0
- package/dist/workspace/workspaceUtils.js +77 -0
- package/dist/workspace/workspaceUtils.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,761 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Label Tool
|
|
3
|
+
* Adds a new label to an existing AxLabelFile in a custom model.
|
|
4
|
+
*
|
|
5
|
+
* For each language that has a .label.txt file in the model, the tool:
|
|
6
|
+
* 1. Checks that the label ID does not already exist
|
|
7
|
+
* 2. Inserts the label in alphabetical order
|
|
8
|
+
* 3. Writes the updated file back to disk
|
|
9
|
+
* 4. Updates the SQLite label index
|
|
10
|
+
*
|
|
11
|
+
* If the AxLabelFile does not exist yet (new label file), the tool also
|
|
12
|
+
* creates the XML descriptor files and directory structure.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { promises as fs } from 'fs';
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
import { getConfigManager } from '../utils/configManager.js';
|
|
18
|
+
import { PackageResolver } from '../utils/packageResolver.js';
|
|
19
|
+
import { detectEol } from '../utils/eolUtils.js';
|
|
20
|
+
import { isExtensionLabelFile } from '../metadata/labelParser.js';
|
|
21
|
+
import { ProjectFileManager, ProjectFileFinder } from './createD365File.js';
|
|
22
|
+
const UTF8_BOM = '\uFEFF';
|
|
23
|
+
// Input schema
|
|
24
|
+
const TranslationSchema = z.object({
|
|
25
|
+
language: z.string().describe('Locale code (e.g. en-US, cs, de, sk)'),
|
|
26
|
+
text: z.string().describe('Translated label text for this language'),
|
|
27
|
+
comment: z.string().optional().describe('Optional developer comment for this language'),
|
|
28
|
+
});
|
|
29
|
+
const CreateLabelArgsSchema = z.object({
|
|
30
|
+
labelId: z
|
|
31
|
+
.string()
|
|
32
|
+
.regex(/^[A-Za-z][A-Za-z0-9_]*$/, 'Label ID must be alphanumeric (no spaces)')
|
|
33
|
+
.describe('Label identifier — must be unique within the label file. ' +
|
|
34
|
+
'⛔ NEVER add a model/object prefix to label IDs. ' +
|
|
35
|
+
'Label IDs describe the meaning of the text, NOT the owning object. ' +
|
|
36
|
+
'Good examples: "CustomerName", "InvoiceDate", "ErrorAmountNegative". ' +
|
|
37
|
+
'Bad examples (with prefix): "MyModelCustomerName", "ContosoExtInvoiceDate".'),
|
|
38
|
+
labelFileId: z
|
|
39
|
+
.string()
|
|
40
|
+
.describe('Label file ID to add the label to (e.g. ContosoExt). Must exist in the model, or be creatable ' +
|
|
41
|
+
'(createLabelFileIfMissing=true, default). ⛔ For a NEW label file this ID is the MODEL name — ' +
|
|
42
|
+
'never the bare EXTENSION_PREFIX (e.g. use "ContosoExt", not "Con"). The file lives inside the ' +
|
|
43
|
+
'model directory regardless of prefix, so an ID that is not the model name will not resolve.'),
|
|
44
|
+
model: z
|
|
45
|
+
.string()
|
|
46
|
+
.describe('Model name that owns the label file (e.g. ContosoExt, ApplicationSuite)'),
|
|
47
|
+
packageName: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe('Package name for the model. Auto-resolved if omitted.'),
|
|
51
|
+
translations: z
|
|
52
|
+
.array(TranslationSchema)
|
|
53
|
+
.min(1)
|
|
54
|
+
.describe('Label text for each language. At minimum provide en-US. ' +
|
|
55
|
+
'For languages without a translation the en-US text is used as fallback.'),
|
|
56
|
+
languages: z
|
|
57
|
+
.array(z.string())
|
|
58
|
+
.optional()
|
|
59
|
+
.describe('Restrict which language .label.txt files are written/created. ' +
|
|
60
|
+
'When provided, the label is created ONLY for these locales (e.g. ["en-US"] for an ' +
|
|
61
|
+
'English-only customization), creating the folders if needed. This avoids leaking the ' +
|
|
62
|
+
'label into locales that exist only because OTHER label files in the same model ship ' +
|
|
63
|
+
'them (LabelResources is shared across the whole model). ' +
|
|
64
|
+
'When omitted or empty, the label is written to every language folder already present ' +
|
|
65
|
+
'in the model (default behavior).'),
|
|
66
|
+
description: z
|
|
67
|
+
.string()
|
|
68
|
+
.optional()
|
|
69
|
+
.describe('Label description written as the comment line in .label.txt. ' +
|
|
70
|
+
'Defaults to the VS project name (from .rnrproj) when omitted, ' +
|
|
71
|
+
'then falls back to labelFileId. Per-translation comment and defaultComment take priority over this.'),
|
|
72
|
+
defaultComment: z
|
|
73
|
+
.string()
|
|
74
|
+
.optional()
|
|
75
|
+
.describe('Developer comment used for languages that have no explicit comment'),
|
|
76
|
+
packagePath: z
|
|
77
|
+
.string()
|
|
78
|
+
.optional()
|
|
79
|
+
.describe('Root packages path. Auto-detected from environment config if omitted.'),
|
|
80
|
+
projectPath: z
|
|
81
|
+
.string()
|
|
82
|
+
.optional()
|
|
83
|
+
.describe('Path to the .rnrproj project file. Auto-detected from .mcp.json if omitted.'),
|
|
84
|
+
solutionPath: z
|
|
85
|
+
.string()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe('Path to the .sln solution directory. Used as fallback to find .rnrproj if projectPath is not set.'),
|
|
88
|
+
addToProject: z
|
|
89
|
+
.boolean()
|
|
90
|
+
.optional()
|
|
91
|
+
.default(true)
|
|
92
|
+
.describe('Add label file XML descriptors to the VS project (.rnrproj) so builds detect them (default: true)'),
|
|
93
|
+
createLabelFileIfMissing: z
|
|
94
|
+
.boolean()
|
|
95
|
+
.optional()
|
|
96
|
+
.default(true)
|
|
97
|
+
.describe('If true (default) and the AxLabelFile does not exist yet, create it with the provided ' +
|
|
98
|
+
'translations. A wrong-path guard still fails loudly when the model directory is not found, ' +
|
|
99
|
+
'so this never produces a phantom label file. Set to false to fail fast instead of creating.'),
|
|
100
|
+
allowExtensionLabelFile: z
|
|
101
|
+
.boolean()
|
|
102
|
+
.optional()
|
|
103
|
+
.default(false)
|
|
104
|
+
.describe('Escape hatch to allow writing into a label file EXTENSION (a labelFileId ' +
|
|
105
|
+
'carrying the "_Extension" marker). Off by default: new labels belong in the ' +
|
|
106
|
+
"model's own ORIGINAL label file, not in an extension. Only set true if you " +
|
|
107
|
+
'genuinely intend to add labels to an extension label file.'),
|
|
108
|
+
updateIndex: z
|
|
109
|
+
.boolean()
|
|
110
|
+
.optional()
|
|
111
|
+
.default(true)
|
|
112
|
+
.describe('Update the MCP label index after writing files (default: true)'),
|
|
113
|
+
sortLabels: z
|
|
114
|
+
.boolean()
|
|
115
|
+
.optional()
|
|
116
|
+
.describe('Sort labels alphabetically when writing .label.txt files. ' +
|
|
117
|
+
'When false, new labels are appended at the end preserving existing file order. ' +
|
|
118
|
+
'Defaults to the LABEL_SORT_ORDER env var ("alphabetical" = true, "append" = false), or true if not set.'),
|
|
119
|
+
overwriteExisting: z
|
|
120
|
+
.boolean()
|
|
121
|
+
.optional()
|
|
122
|
+
.default(false)
|
|
123
|
+
.describe('Update mode (set automatically by labels(action="update")): overwrite the text of an ' +
|
|
124
|
+
'existing label instead of skipping it. When the label is absent in a target language it ' +
|
|
125
|
+
'is created (upsert). Off by default so create never clobbers existing text.'),
|
|
126
|
+
});
|
|
127
|
+
// Helpers
|
|
128
|
+
/** Parse a .label.txt file into an ordered map: labelId → { text, comment } */
|
|
129
|
+
function parseLabelMap(content) {
|
|
130
|
+
const map = new Map();
|
|
131
|
+
const lines = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
|
|
132
|
+
let lastId = null;
|
|
133
|
+
for (const line of lines) {
|
|
134
|
+
if (line === '')
|
|
135
|
+
continue;
|
|
136
|
+
if (line.startsWith(' ;') || line.startsWith('\t;')) {
|
|
137
|
+
if (lastId) {
|
|
138
|
+
const existing = map.get(lastId);
|
|
139
|
+
const commentText = line.replace(/^[ \t];/, '').trim();
|
|
140
|
+
existing.comment = existing.comment
|
|
141
|
+
? `${existing.comment} ${commentText}`
|
|
142
|
+
: commentText;
|
|
143
|
+
}
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const eqIdx = line.indexOf('=');
|
|
147
|
+
if (eqIdx > 0) {
|
|
148
|
+
const labelId = line.substring(0, eqIdx).trim();
|
|
149
|
+
const text = line.substring(eqIdx + 1);
|
|
150
|
+
if (labelId && !/\s/.test(labelId)) {
|
|
151
|
+
map.set(labelId, { text });
|
|
152
|
+
lastId = labelId;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return map;
|
|
157
|
+
}
|
|
158
|
+
/** Case-insensitive ordinal comparison of two label IDs.
|
|
159
|
+
* Matches Visual Studio's ordering of .label.txt entries, where `_` (0x5F) sorts
|
|
160
|
+
* AFTER all letters. A locale-aware comparer (e.g. localeCompare) instead sorts `_`
|
|
161
|
+
* BEFORE letters, which shuffles `word_`-prefixed IDs on every write and produces
|
|
162
|
+
* spurious git diffs. Equivalent to .NET's StringComparer.OrdinalIgnoreCase. */
|
|
163
|
+
function compareLabelIdsOrdinalCI(a, b) {
|
|
164
|
+
const ua = a.toUpperCase();
|
|
165
|
+
const ub = b.toUpperCase();
|
|
166
|
+
return ua < ub ? -1 : ua > ub ? 1 : 0;
|
|
167
|
+
}
|
|
168
|
+
/** Render a label map back to .label.txt content with UTF-8 BOM.
|
|
169
|
+
* When `sort` is true (default), entries are sorted alphabetically by label ID.
|
|
170
|
+
* When `sort` is false, entries are written in insertion order (existing + appended).
|
|
171
|
+
* `eol` should be the line ending detected from the existing file (defaults to CRLF for new files). */
|
|
172
|
+
function serializeLabelMap(map, sort = true, eol = '\r\n') {
|
|
173
|
+
const entries = sort
|
|
174
|
+
? [...map.entries()].sort(([a], [b]) => compareLabelIdsOrdinalCI(a, b))
|
|
175
|
+
: [...map.entries()];
|
|
176
|
+
const lines = [];
|
|
177
|
+
for (const [id, { text, comment }] of entries) {
|
|
178
|
+
lines.push(`${id}=${text}`);
|
|
179
|
+
if (comment)
|
|
180
|
+
lines.push(` ;${comment}`);
|
|
181
|
+
}
|
|
182
|
+
// End with a newline, prepend UTF-8 BOM for D365FO compatibility
|
|
183
|
+
return UTF8_BOM + lines.join(eol) + eol;
|
|
184
|
+
}
|
|
185
|
+
/** Write file with UTF-8 BOM signature */
|
|
186
|
+
async function writeFileWithBom(filePath, content) {
|
|
187
|
+
// Ensure content starts with BOM
|
|
188
|
+
const contentWithBom = content.startsWith(UTF8_BOM) ? content : UTF8_BOM + content;
|
|
189
|
+
await fs.writeFile(filePath, contentWithBom, 'utf-8');
|
|
190
|
+
}
|
|
191
|
+
/** XML descriptor content for a new AxLabelFile locale */
|
|
192
|
+
function buildAxLabelFileXml(labelFileId, language, packageName, model) {
|
|
193
|
+
// D365FO requires <Language> for every locale except en-US (which is the implicit default).
|
|
194
|
+
const languageElement = language !== 'en-US' ? `\t<Language>${language}</Language>\n` : '';
|
|
195
|
+
return (`<?xml version="1.0" encoding="utf-8"?>\n` +
|
|
196
|
+
`<AxLabelFile xmlns:i="http://www.w3.org/2001/XMLSchema-instance">\n` +
|
|
197
|
+
`\t<Name>${labelFileId}_${language}</Name>\n` +
|
|
198
|
+
`\t<LabelContentFileName>${labelFileId}.${language}.label.txt</LabelContentFileName>\n` +
|
|
199
|
+
`\t<LabelFileId>${labelFileId}</LabelFileId>\n` +
|
|
200
|
+
languageElement +
|
|
201
|
+
`\t<RelativeUriInModelStore>${packageName}\\${model}\\AxLabelFile\\LabelResources\\${language}\\${labelFileId}.${language}.label.txt</RelativeUriInModelStore>\n` +
|
|
202
|
+
`</AxLabelFile>\n`);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Normalize common parameter-name variants before validation.
|
|
206
|
+
* Some MCP clients guess the schema and send `labelFile` instead of `labelFileId`,
|
|
207
|
+
* or a scalar `value`/`text`/`label` instead of the `translations` array.
|
|
208
|
+
* This keeps those calls working while the canonical names stay the source of truth.
|
|
209
|
+
*/
|
|
210
|
+
function normalizeCreateLabelArgs(raw) {
|
|
211
|
+
if (raw === null || typeof raw !== 'object')
|
|
212
|
+
return {};
|
|
213
|
+
const args = { ...raw };
|
|
214
|
+
// labelFile / labelfile → labelFileId
|
|
215
|
+
if (args.labelFileId === undefined) {
|
|
216
|
+
const alias = args.labelFile ?? args.labelfile ?? args.labelFileID;
|
|
217
|
+
if (typeof alias === 'string')
|
|
218
|
+
args.labelFileId = alias;
|
|
219
|
+
}
|
|
220
|
+
delete args.labelFile;
|
|
221
|
+
delete args.labelfile;
|
|
222
|
+
delete args.labelFileID;
|
|
223
|
+
// model defaults to labelFileId (they are typically identical)
|
|
224
|
+
if (args.model === undefined && typeof args.labelFileId === 'string') {
|
|
225
|
+
args.model = args.labelFileId;
|
|
226
|
+
}
|
|
227
|
+
// scalar value / text / label → translations: [{ language: 'en-US', text }]
|
|
228
|
+
if (args.translations === undefined) {
|
|
229
|
+
const scalar = args.value ?? args.text ?? args.label;
|
|
230
|
+
if (typeof scalar === 'string') {
|
|
231
|
+
const language = typeof args.language === 'string' ? args.language : 'en-US';
|
|
232
|
+
args.translations = [{ language, text: scalar }];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
delete args.value;
|
|
236
|
+
delete args.text;
|
|
237
|
+
delete args.label;
|
|
238
|
+
return args;
|
|
239
|
+
}
|
|
240
|
+
// Bulk fan-out
|
|
241
|
+
/**
|
|
242
|
+
* Pull a `labels: [...]` array off the raw args, if present and non-empty.
|
|
243
|
+
* Bulk callers pass shared fields (labelFileId, model, paths…) at the top level
|
|
244
|
+
* and one entry per label ({ labelId, translations, … }). Returns null for the
|
|
245
|
+
* ordinary single-label shape so the normal path runs unchanged.
|
|
246
|
+
*/
|
|
247
|
+
export function extractBulkLabels(raw) {
|
|
248
|
+
if (raw === null || typeof raw !== 'object')
|
|
249
|
+
return null;
|
|
250
|
+
const arr = raw.labels;
|
|
251
|
+
if (!Array.isArray(arr) || arr.length === 0)
|
|
252
|
+
return null;
|
|
253
|
+
return arr.filter((e) => e !== null && typeof e === 'object');
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Create many labels in one call. Each entry is merged over the shared top-level
|
|
257
|
+
* fields and routed through the single-label path (which keeps validation, file
|
|
258
|
+
* creation and indexing identical), then results are aggregated into one report.
|
|
259
|
+
* Continues past per-label failures so one bad entry doesn't abort the batch.
|
|
260
|
+
*/
|
|
261
|
+
export async function createLabelsBulk(entries, raw, context, runSingle = createLabelTool) {
|
|
262
|
+
// Shared fields = everything except the per-entry array and any top-level
|
|
263
|
+
// labelId/translations (each entry owns those).
|
|
264
|
+
const shared = { ...raw };
|
|
265
|
+
delete shared.labels;
|
|
266
|
+
delete shared.labelId;
|
|
267
|
+
delete shared.translations;
|
|
268
|
+
const lines = [];
|
|
269
|
+
let created = 0;
|
|
270
|
+
let failed = 0;
|
|
271
|
+
for (let i = 0; i < entries.length; i++) {
|
|
272
|
+
const entry = entries[i];
|
|
273
|
+
const mergedArgs = { ...shared, ...entry };
|
|
274
|
+
const labelId = typeof entry.labelId === 'string' ? entry.labelId : `(entry ${i + 1})`;
|
|
275
|
+
const subRequest = {
|
|
276
|
+
method: 'tools/call',
|
|
277
|
+
params: { name: 'create_label', arguments: mergedArgs },
|
|
278
|
+
};
|
|
279
|
+
// Recurses into the single-label path: mergedArgs carries no `labels` array,
|
|
280
|
+
// so extractBulkLabels returns null and the normal handler runs.
|
|
281
|
+
const res = await runSingle(subRequest, context);
|
|
282
|
+
const text = res?.content?.[0]?.text ?? '(no output)';
|
|
283
|
+
if (res?.isError) {
|
|
284
|
+
failed++;
|
|
285
|
+
lines.push(`🔴 ${labelId}: ${text.split('\n')[0]}`);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
created++;
|
|
289
|
+
lines.push(`🟢 ${labelId}: ${text.split('\n')[0]}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
const header = `${failed === 0 ? '✅' : '⚠️'} labels(action="create", labels=[…]): ` +
|
|
293
|
+
`${created} created, ${failed} failed (of ${entries.length}).`;
|
|
294
|
+
return {
|
|
295
|
+
content: [{ type: 'text', text: [header, '', ...lines].join('\n') }],
|
|
296
|
+
isError: failed > 0,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
// Tool implementation
|
|
300
|
+
export async function createLabelTool(request, context) {
|
|
301
|
+
// Bulk shape: a `labels` array fans out to one single-label create per entry.
|
|
302
|
+
const bulk = extractBulkLabels(request.params.arguments);
|
|
303
|
+
if (bulk) {
|
|
304
|
+
return createLabelsBulk(bulk, request.params.arguments, context);
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
const parsed = CreateLabelArgsSchema.safeParse(normalizeCreateLabelArgs(request.params.arguments));
|
|
308
|
+
if (!parsed.success) {
|
|
309
|
+
const issues = parsed.error.issues
|
|
310
|
+
.map(i => `${i.path.join('.') || '(root)'}: ${i.message}`)
|
|
311
|
+
.join('; ');
|
|
312
|
+
// Detect the common mistake of passing the label-file shape
|
|
313
|
+
// (labelFileId + top-level `language`) instead of labelId + translations[].
|
|
314
|
+
const raw = (request.params.arguments ?? {});
|
|
315
|
+
const wrongShape = (raw.language !== undefined || raw.labelFileId !== undefined) &&
|
|
316
|
+
raw.labelId === undefined &&
|
|
317
|
+
raw.translations === undefined &&
|
|
318
|
+
raw.text === undefined && raw.value === undefined && raw.label === undefined;
|
|
319
|
+
const shapeHint = wrongShape
|
|
320
|
+
? `\n\n⚠️ It looks like you passed \`language\`/\`labelFileId\` but no \`labelId\` or \`translations\`. ` +
|
|
321
|
+
`\`language\` is NOT a top-level create param — put each language inside \`translations\`. ` +
|
|
322
|
+
`\`labelFileId\` is the file that HOLDS the label; \`labelId\` is the label itself (both are required).`
|
|
323
|
+
: '';
|
|
324
|
+
return {
|
|
325
|
+
content: [{
|
|
326
|
+
type: 'text',
|
|
327
|
+
text: `❌ labels(action="create"/"update"): invalid arguments — ${issues}.\n` +
|
|
328
|
+
`Required: labelId, labelFileId, model, translations:[{language, text}]. Example:\n` +
|
|
329
|
+
` labels(action="create", labelId="EquipmentName", labelFileId="ContosoExt", model="ContosoExt", ` +
|
|
330
|
+
`translations=[{language:"en-US", text:"Equipment name"}])` +
|
|
331
|
+
shapeHint,
|
|
332
|
+
}],
|
|
333
|
+
isError: true,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
const args = parsed.data;
|
|
337
|
+
const { labelId, labelFileId, model, translations, description, defaultComment, packagePath, createLabelFileIfMissing, updateIndex, } = args;
|
|
338
|
+
// New labels must go in the model's own original label file, not an extension
|
|
339
|
+
// (…_Extension). Opt out explicitly with allowExtensionLabelFile=true.
|
|
340
|
+
if (isExtensionLabelFile(labelFileId) && !args.allowExtensionLabelFile) {
|
|
341
|
+
return {
|
|
342
|
+
content: [
|
|
343
|
+
{
|
|
344
|
+
type: 'text',
|
|
345
|
+
text: `❌ "${labelFileId}" is a label file EXTENSION, not an original label file.\n\n` +
|
|
346
|
+
`New labels must be created in the model's own (original) label file — ` +
|
|
347
|
+
`extensions (…_Extension…) only extend a base label file owned by another model, ` +
|
|
348
|
+
`and adding new labels there leads to wrongly prefixed label IDs.\n\n` +
|
|
349
|
+
`➡️ Use the model's original label file instead. List the candidates with:\n` +
|
|
350
|
+
` labels(action="info", model="${model}")\n` +
|
|
351
|
+
` then re-run with that original labelFileId, e.g.:\n` +
|
|
352
|
+
` labels(action="create", labelId="${labelId}", labelFileId="<OriginalLabelFileId>", model="${model}", ...)\n\n` +
|
|
353
|
+
`If you really must add labels to this extension, pass allowExtensionLabelFile=true.\n` +
|
|
354
|
+
`Nothing was written.`,
|
|
355
|
+
},
|
|
356
|
+
],
|
|
357
|
+
isError: true,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
// Resolve sortLabels: explicit param → LABEL_SORT_ORDER env → true (alphabetical)
|
|
361
|
+
const envSortOrder = process.env.LABEL_SORT_ORDER?.toLowerCase();
|
|
362
|
+
const shouldSort = args.sortLabels ?? (envSortOrder === 'append' ? false : true);
|
|
363
|
+
// Description fallback: explicit description → VS project name → labelFileId
|
|
364
|
+
// Model name is not useful here — it's typically identical to labelFileId.
|
|
365
|
+
const configManager = getConfigManager();
|
|
366
|
+
await configManager.ensureLoaded();
|
|
367
|
+
let projectName = null;
|
|
368
|
+
try {
|
|
369
|
+
const projPath = args.projectPath || await configManager.getProjectPath() || null;
|
|
370
|
+
if (projPath) {
|
|
371
|
+
// Use split on both separators for cross-platform safety (path.basename
|
|
372
|
+
// treats backslash as literal on POSIX, breaking Windows-style paths)
|
|
373
|
+
const segments = projPath.split(/[\\/]/);
|
|
374
|
+
const baseName = segments[segments.length - 1] || segments[segments.length - 2] || '';
|
|
375
|
+
projectName = baseName.replace(/\.rnrproj$/i, '') || null;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch { /* non-fatal */ }
|
|
379
|
+
const effectiveDescription = description ?? projectName ?? labelFileId;
|
|
380
|
+
const { symbolIndex } = context;
|
|
381
|
+
// 0. Cross-label-file collision check — warn when the same labelId exists in
|
|
382
|
+
// another label file (especially Microsoft's standard label files).
|
|
383
|
+
const MICROSOFT_LABEL_FILES = new Set([
|
|
384
|
+
'SYS', 'SYP', 'CAM', 'ACC', 'GLS', 'PRJ', 'PDS', 'PUR', 'BANK', 'TAX',
|
|
385
|
+
'FMT', 'WHSMobile', 'RET', 'RETAIL', 'MCR', 'WMS', 'TMS', 'HRM', 'PSA',
|
|
386
|
+
'PROD', 'KAN', 'PCL', 'PROD', 'PLMT', 'EWH',
|
|
387
|
+
]);
|
|
388
|
+
let collisionWarning = '';
|
|
389
|
+
try {
|
|
390
|
+
const existing = symbolIndex.labelsDb
|
|
391
|
+
.prepare(`SELECT label_id, label_file_id, model, text FROM labels
|
|
392
|
+
WHERE label_id = ? AND language = 'en-US' AND label_file_id != ?
|
|
393
|
+
LIMIT 10`)
|
|
394
|
+
.all(labelId, labelFileId);
|
|
395
|
+
if (existing.length > 0) {
|
|
396
|
+
const msCollisions = existing.filter(r => MICROSOFT_LABEL_FILES.has(r.label_file_id.toUpperCase()));
|
|
397
|
+
const lines = [
|
|
398
|
+
`⚠️ Label ID "${labelId}" already exists in ${existing.length} other label file(s):`,
|
|
399
|
+
];
|
|
400
|
+
for (const r of existing) {
|
|
401
|
+
const flag = MICROSOFT_LABEL_FILES.has(r.label_file_id.toUpperCase()) ? ' ← Microsoft standard' : '';
|
|
402
|
+
lines.push(` @${r.label_file_id}:${labelId} [${r.model}] "${r.text}"${flag}`);
|
|
403
|
+
}
|
|
404
|
+
if (msCollisions.length > 0) {
|
|
405
|
+
lines.push('');
|
|
406
|
+
lines.push(' ⛔ Collision with Microsoft standard label file detected! ' +
|
|
407
|
+
'Consider reusing the existing label instead of creating a new one, ' +
|
|
408
|
+
'or use a more specific ID to avoid naming conflicts.');
|
|
409
|
+
}
|
|
410
|
+
collisionWarning = lines.join('\n') + '\n\n';
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
catch { /* labelsDb may not have the label yet — not fatal */ }
|
|
414
|
+
// 1. Resolve model directory
|
|
415
|
+
// Package name can differ from model name in any environment (not just UDE).
|
|
416
|
+
const envType = await configManager.getDevEnvironmentType();
|
|
417
|
+
let resolvedPackagePath;
|
|
418
|
+
let resolvedPackageName;
|
|
419
|
+
if (args.packageName) {
|
|
420
|
+
// Explicit packageName always wins, regardless of environment type
|
|
421
|
+
resolvedPackageName = args.packageName;
|
|
422
|
+
if (envType === 'ude') {
|
|
423
|
+
const customPath = await configManager.getCustomPackagesPath();
|
|
424
|
+
resolvedPackagePath = packagePath || customPath || configManager.getPackagePath() || 'K:\\AosService\\PackagesLocalDirectory';
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
resolvedPackagePath = packagePath || configManager.getPackagePath() || 'K:\\AosService\\PackagesLocalDirectory';
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
else if (envType === 'ude') {
|
|
431
|
+
// UDE mode: auto-resolve package name via descriptor scan
|
|
432
|
+
const customPath = await configManager.getCustomPackagesPath();
|
|
433
|
+
const msPath = await configManager.getMicrosoftPackagesPath();
|
|
434
|
+
const roots = [customPath, msPath].filter(Boolean);
|
|
435
|
+
resolvedPackagePath = packagePath || customPath || 'K:\\AosService\\PackagesLocalDirectory';
|
|
436
|
+
const resolver = new PackageResolver(roots);
|
|
437
|
+
const resolved = await resolver.resolve(model);
|
|
438
|
+
resolvedPackageName = resolved?.packageName || model;
|
|
439
|
+
if (resolved?.rootPath)
|
|
440
|
+
resolvedPackagePath = resolved.rootPath;
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
// Traditional mode without explicit packageName: assume package == model
|
|
444
|
+
resolvedPackagePath = packagePath || configManager.getPackagePath() || 'K:\\AosService\\PackagesLocalDirectory';
|
|
445
|
+
resolvedPackageName = model;
|
|
446
|
+
}
|
|
447
|
+
const modelDir = path.join(resolvedPackagePath, resolvedPackageName, model);
|
|
448
|
+
const axLabelDir = path.join(modelDir, 'AxLabelFile');
|
|
449
|
+
const labelResourcesDir = path.join(axLabelDir, 'LabelResources');
|
|
450
|
+
// Build a quick lookup: language → translation entry
|
|
451
|
+
const translationMap = new Map();
|
|
452
|
+
for (const tr of translations) {
|
|
453
|
+
translationMap.set(tr.language, { text: tr.text, comment: tr.comment ?? defaultComment ?? effectiveDescription });
|
|
454
|
+
}
|
|
455
|
+
const enUsText = translationMap.get('en-US')?.text ?? translations[0].text;
|
|
456
|
+
// 2. Discover the language folders that already exist in the model.
|
|
457
|
+
// NOTE: LabelResources/ is shared by EVERY label file in the model, so this lists
|
|
458
|
+
// locales owned by sibling label files too. The `languages` arg scopes the writes.
|
|
459
|
+
const requestedLanguages = (args.languages ?? [])
|
|
460
|
+
.map(l => l.trim())
|
|
461
|
+
.filter(Boolean);
|
|
462
|
+
let discoveredLanguages = [];
|
|
463
|
+
try {
|
|
464
|
+
discoveredLanguages = await fs.readdir(labelResourcesDir);
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
// LabelResources dir does not exist yet
|
|
468
|
+
}
|
|
469
|
+
// Helper: create directory structure + XML descriptor for a single new language
|
|
470
|
+
const createLangDirectory = async (lang) => {
|
|
471
|
+
const langDir = path.join(labelResourcesDir, lang);
|
|
472
|
+
await fs.mkdir(langDir, { recursive: true });
|
|
473
|
+
// Create the empty .label.txt with UTF-8 BOM (will be populated in step 4)
|
|
474
|
+
const txtPath = path.join(langDir, `${labelFileId}.${lang}.label.txt`);
|
|
475
|
+
try {
|
|
476
|
+
await fs.access(txtPath);
|
|
477
|
+
}
|
|
478
|
+
catch {
|
|
479
|
+
await writeFileWithBom(txtPath, '');
|
|
480
|
+
}
|
|
481
|
+
// Create XML descriptor
|
|
482
|
+
const xmlPath = path.join(axLabelDir, `${labelFileId}_${lang}.xml`);
|
|
483
|
+
try {
|
|
484
|
+
await fs.access(xmlPath);
|
|
485
|
+
}
|
|
486
|
+
catch {
|
|
487
|
+
await fs.writeFile(xmlPath, buildAxLabelFileXml(labelFileId, lang, resolvedPackageName, model), 'utf-8');
|
|
488
|
+
}
|
|
489
|
+
};
|
|
490
|
+
// 3. Determine the target language set and create any missing folders.
|
|
491
|
+
// A brand-new label file (no locales at all anywhere in the model) is still guarded
|
|
492
|
+
// by createLabelFileIfMissing regardless of which mode we're in.
|
|
493
|
+
const labelFileMissing = discoveredLanguages.length === 0;
|
|
494
|
+
if (labelFileMissing && !createLabelFileIfMissing) {
|
|
495
|
+
return {
|
|
496
|
+
content: [
|
|
497
|
+
{
|
|
498
|
+
type: 'text',
|
|
499
|
+
text: `AxLabelFile "${labelFileId}" not found in model "${model}" ` +
|
|
500
|
+
`(expected path: ${labelResourcesDir}).\n\n` +
|
|
501
|
+
`Set createLabelFileIfMissing=true to create the label file from scratch, ` +
|
|
502
|
+
`or use d365fo_file(action="create") to scaffold the label file first.`,
|
|
503
|
+
},
|
|
504
|
+
],
|
|
505
|
+
isError: true,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
// Guard against silently scaffolding a brand-new label file at the WRONG path.
|
|
509
|
+
// When the label file is missing AND we're about to create it, verify the model
|
|
510
|
+
// directory actually exists at the resolved location. If it doesn't, the package
|
|
511
|
+
// path/name almost certainly points to the default PackagesLocalDirectory while the
|
|
512
|
+
// model's metadata lives somewhere else (e.g. a repo checkout) — creating the file
|
|
513
|
+
// here would "succeed" but write to a location D365FO never reads. Fail loudly with
|
|
514
|
+
// guidance instead of producing a phantom label file.
|
|
515
|
+
if (labelFileMissing && createLabelFileIfMissing) {
|
|
516
|
+
let modelDirExists = false;
|
|
517
|
+
try {
|
|
518
|
+
await fs.access(modelDir);
|
|
519
|
+
modelDirExists = true;
|
|
520
|
+
}
|
|
521
|
+
catch { /* missing */ }
|
|
522
|
+
if (!modelDirExists) {
|
|
523
|
+
return {
|
|
524
|
+
content: [
|
|
525
|
+
{
|
|
526
|
+
type: 'text',
|
|
527
|
+
text: `❌ Cannot create label file "${labelFileId}" — the model directory does not exist at the resolved path:\n` +
|
|
528
|
+
` ${modelDir}\n\n` +
|
|
529
|
+
`Resolved package: "${resolvedPackageName}" | packages root: "${resolvedPackagePath}"\n\n` +
|
|
530
|
+
`This usually means the model's metadata lives somewhere other than the default ` +
|
|
531
|
+
`PackagesLocalDirectory (e.g. a repo checkout). Re-run with the correct location, for example:\n` +
|
|
532
|
+
` labels(action="create", labelId="${labelId}", labelFileId="${labelFileId}", model="${model}",\n` +
|
|
533
|
+
` packageName="<ActualPackageFolder>", packagePath="<root that contains it>", createLabelFileIfMissing=true)\n\n` +
|
|
534
|
+
`Nothing was written.`,
|
|
535
|
+
},
|
|
536
|
+
],
|
|
537
|
+
isError: true,
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
let existingLanguages;
|
|
542
|
+
if (requestedLanguages.length > 0) {
|
|
543
|
+
// Explicit scope: write ONLY to the requested locales, creating folders as needed.
|
|
544
|
+
// Prevents the label from leaking into locales owned by sibling label files.
|
|
545
|
+
//
|
|
546
|
+
// Use a case-insensitive map from lowercase → actual on-disk name so that
|
|
547
|
+
// callers passing BCP-47 standard casing (en-US) match Linux-unzipped
|
|
548
|
+
// directories stored in lowercase (en-us). Without this, the write path
|
|
549
|
+
// would build LabelResources/en-US/... next to an existing en-us/ folder,
|
|
550
|
+
// creating a duplicate locale tree on case-sensitive filesystems.
|
|
551
|
+
const discoveredMap = new Map(discoveredLanguages.map(l => [l.toLowerCase(), l]));
|
|
552
|
+
for (const lang of requestedLanguages) {
|
|
553
|
+
if (!discoveredMap.has(lang.toLowerCase())) {
|
|
554
|
+
await createLangDirectory(lang);
|
|
555
|
+
discoveredMap.set(lang.toLowerCase(), lang);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
// Resolve each requested locale to its actual on-disk name; fall back to the
|
|
559
|
+
// caller-provided value for newly-created folders (not yet on disk).
|
|
560
|
+
existingLanguages = requestedLanguages.map(l => discoveredMap.get(l.toLowerCase()) ?? l);
|
|
561
|
+
}
|
|
562
|
+
else if (labelFileMissing) {
|
|
563
|
+
// No explicit scope and nothing exists yet — seed the folders from the translations.
|
|
564
|
+
existingLanguages = [];
|
|
565
|
+
for (const [lang] of translationMap) {
|
|
566
|
+
await createLangDirectory(lang);
|
|
567
|
+
existingLanguages.push(lang);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
// No explicit scope — default behavior: write to every language folder that already
|
|
572
|
+
// exists in the model, plus any new languages supplied via translations.
|
|
573
|
+
existingLanguages = [...discoveredLanguages];
|
|
574
|
+
const existingSet = new Set(existingLanguages.map(l => l.toLowerCase()));
|
|
575
|
+
for (const [lang] of translationMap) {
|
|
576
|
+
if (!existingSet.has(lang.toLowerCase())) {
|
|
577
|
+
await createLangDirectory(lang);
|
|
578
|
+
existingLanguages.push(lang);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
// 4. Process each existing language
|
|
583
|
+
const written = [];
|
|
584
|
+
const skipped = [];
|
|
585
|
+
const indexEntries = [];
|
|
586
|
+
for (const lang of existingLanguages) {
|
|
587
|
+
const langDir = path.join(labelResourcesDir, lang);
|
|
588
|
+
const txtPath = path.join(langDir, `${labelFileId}.${lang}.label.txt`);
|
|
589
|
+
// Read existing content (may not exist for newly-created langs)
|
|
590
|
+
let content = '';
|
|
591
|
+
try {
|
|
592
|
+
content = await fs.readFile(txtPath, 'utf-8');
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
// File doesn't exist yet — start empty
|
|
596
|
+
}
|
|
597
|
+
// Preserve the existing file's line endings so VCS diffs only show the new label.
|
|
598
|
+
const eol = detectEol(content);
|
|
599
|
+
const labelMap = parseLabelMap(content);
|
|
600
|
+
// Duplicate check — create skips an existing label, update overwrites it.
|
|
601
|
+
if (labelMap.has(labelId) && !args.overwriteExisting) {
|
|
602
|
+
skipped.push(`${lang} (already exists: "${labelMap.get(labelId).text}")`);
|
|
603
|
+
continue;
|
|
604
|
+
}
|
|
605
|
+
// Determine text for this language
|
|
606
|
+
const entry = translationMap.get(lang) ?? { text: enUsText, comment: defaultComment ?? effectiveDescription };
|
|
607
|
+
labelMap.set(labelId, entry);
|
|
608
|
+
// Ensure the directory exists
|
|
609
|
+
await fs.mkdir(langDir, { recursive: true });
|
|
610
|
+
// Write updated file with UTF-8 BOM, preserving the original EOL style
|
|
611
|
+
const newContent = serializeLabelMap(labelMap, shouldSort, eol);
|
|
612
|
+
await writeFileWithBom(txtPath, newContent);
|
|
613
|
+
written.push(lang);
|
|
614
|
+
// Prepare index update
|
|
615
|
+
if (updateIndex) {
|
|
616
|
+
indexEntries.push({
|
|
617
|
+
labelId,
|
|
618
|
+
labelFileId,
|
|
619
|
+
model,
|
|
620
|
+
language: lang,
|
|
621
|
+
text: entry.text,
|
|
622
|
+
comment: entry.comment,
|
|
623
|
+
filePath: txtPath,
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
// Ensure XML descriptor exists for this language
|
|
627
|
+
const xmlPath = path.join(axLabelDir, `${labelFileId}_${lang}.xml`);
|
|
628
|
+
try {
|
|
629
|
+
await fs.access(xmlPath);
|
|
630
|
+
}
|
|
631
|
+
catch {
|
|
632
|
+
await fs.writeFile(xmlPath, buildAxLabelFileXml(labelFileId, lang, resolvedPackageName, model), 'utf-8');
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
// 5. Update SQLite index (skip immediate FTS rebuild — schedule debounced)
|
|
636
|
+
if (updateIndex && indexEntries.length > 0) {
|
|
637
|
+
symbolIndex.bulkAddLabels(indexEntries, { skipFtsRebuild: true });
|
|
638
|
+
symbolIndex.scheduleLabelsFtsRebuild();
|
|
639
|
+
}
|
|
640
|
+
// 5b. Add label file descriptors to VS project (.rnrproj) so builds detect them
|
|
641
|
+
const addedToProject = [];
|
|
642
|
+
let projectWarning = '';
|
|
643
|
+
let projectAlreadyOk = false;
|
|
644
|
+
if (args.addToProject && (written.length > 0 || existingLanguages.length > 0)) {
|
|
645
|
+
// Resolve projectPath with the same fallback chain as create_d365fo_file:
|
|
646
|
+
// 1. Explicit arg 2. configManager 3. solutionPath + ProjectFileFinder scan
|
|
647
|
+
let projectPath = args.projectPath || await configManager.getProjectPath() || null;
|
|
648
|
+
if (!projectPath) {
|
|
649
|
+
const solutionPath = args.solutionPath || await configManager.getSolutionPath() || null;
|
|
650
|
+
if (solutionPath) {
|
|
651
|
+
console.error(`[create_label] projectPath not found, scanning solution: ${solutionPath}`);
|
|
652
|
+
projectPath = await ProjectFileFinder.findProjectInSolution(solutionPath, model);
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
if (projectPath) {
|
|
656
|
+
const pfm = new ProjectFileManager();
|
|
657
|
+
// Collect all languages that have an XML descriptor
|
|
658
|
+
const allLangs = [...new Set([...written, ...existingLanguages])];
|
|
659
|
+
console.error(`[create_label] Adding label to project: ${projectPath} | labelFileId=${labelFileId} | langs=${allLangs.join(',')}`);
|
|
660
|
+
try {
|
|
661
|
+
const added = await pfm.addLabelToProject(projectPath, labelFileId, allLangs);
|
|
662
|
+
addedToProject.push(...added);
|
|
663
|
+
if (added.length === 0) {
|
|
664
|
+
projectAlreadyOk = true;
|
|
665
|
+
console.error(`[create_label] All label entries already in project — no write needed`);
|
|
666
|
+
}
|
|
667
|
+
else {
|
|
668
|
+
console.error(`[create_label] Added ${added.length} descriptor(s) to project`);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
catch (projErr) {
|
|
672
|
+
const errMsg = projErr instanceof Error ? projErr.message : String(projErr);
|
|
673
|
+
const isLocked = errMsg.includes('EBUSY') || errMsg.includes('EPERM') || errMsg.includes('EACCES');
|
|
674
|
+
console.error(`[create_label] Failed to add label entries to project: ${errMsg}`);
|
|
675
|
+
projectWarning =
|
|
676
|
+
`\n⚠️ Label created but failed to add to VS project:\n${errMsg}\n` +
|
|
677
|
+
(isLocked
|
|
678
|
+
? 'This usually means Visual Studio has the .rnrproj file locked.\n' +
|
|
679
|
+
'Close Visual Studio (or unload the project), re-run the tool, then reopen.\n'
|
|
680
|
+
: `Verify that projectPath exists: ${projectPath}\n`);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
else {
|
|
684
|
+
console.error('[create_label] projectPath is null — label descriptors will NOT be added to .rnrproj.');
|
|
685
|
+
projectWarning =
|
|
686
|
+
'\n⚠️ Could not add label descriptors to VS project — projectPath not resolved.\n' +
|
|
687
|
+
'Add projectPath to .mcp.json, pass it as a tool argument, or set solutionPath.\n' +
|
|
688
|
+
'Example: { "servers": { "context": { "projectPath": "K:\\\\VSProjects\\\\MyModel\\\\MyModel.rnrproj" } } }\n';
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
// 6. Build result summary
|
|
692
|
+
if (written.length === 0 && skipped.length > 0) {
|
|
693
|
+
const skipLines = [
|
|
694
|
+
`⚠️ Label "${labelId}" already exists in all languages:\n` +
|
|
695
|
+
skipped.map(s => ` - ${s}`).join('\n') +
|
|
696
|
+
`\n\nLocation: ${labelResourcesDir}` +
|
|
697
|
+
`\nPackage : ${resolvedPackageName} @ ${resolvedPackagePath}` +
|
|
698
|
+
'\n\nNo label text changes were made.',
|
|
699
|
+
];
|
|
700
|
+
if (addedToProject.length > 0) {
|
|
701
|
+
skipLines.push('\nAdded to VS project:');
|
|
702
|
+
skipLines.push(...addedToProject.map(n => ` ✔ ${n}`));
|
|
703
|
+
}
|
|
704
|
+
else if (projectAlreadyOk) {
|
|
705
|
+
skipLines.push('\n✅ Label file entries already in VS project.');
|
|
706
|
+
}
|
|
707
|
+
if (projectWarning)
|
|
708
|
+
skipLines.push(projectWarning);
|
|
709
|
+
return {
|
|
710
|
+
content: [{ type: 'text', text: skipLines.join('\n') }],
|
|
711
|
+
};
|
|
712
|
+
}
|
|
713
|
+
const ref = `@${labelFileId}:${labelId}`;
|
|
714
|
+
const lines = [
|
|
715
|
+
...(collisionWarning ? [collisionWarning] : []),
|
|
716
|
+
`✅ Label "${ref}" ${args.overwriteExisting ? 'updated' : 'created'} successfully!`,
|
|
717
|
+
'',
|
|
718
|
+
`Label ID : ${labelId}`,
|
|
719
|
+
`Label File : ${labelFileId} (model: ${model})`,
|
|
720
|
+
`Package : ${resolvedPackageName} @ ${resolvedPackagePath}`,
|
|
721
|
+
`Location : ${labelResourcesDir}`,
|
|
722
|
+
'',
|
|
723
|
+
'Written to languages:',
|
|
724
|
+
...written.map(l => ` ✔ ${l} → ${translationMap.get(l)?.text ?? enUsText}`),
|
|
725
|
+
];
|
|
726
|
+
if (skipped.length > 0) {
|
|
727
|
+
lines.push('');
|
|
728
|
+
lines.push('Skipped (already existed):');
|
|
729
|
+
lines.push(...skipped.map(s => ` ⚠ ${s}`));
|
|
730
|
+
}
|
|
731
|
+
if (addedToProject.length > 0) {
|
|
732
|
+
lines.push('');
|
|
733
|
+
lines.push('Added to VS project:');
|
|
734
|
+
lines.push(...addedToProject.map(n => ` ✔ ${n}`));
|
|
735
|
+
}
|
|
736
|
+
else if (projectAlreadyOk) {
|
|
737
|
+
lines.push('');
|
|
738
|
+
lines.push('✅ Label file entries already in VS project.');
|
|
739
|
+
}
|
|
740
|
+
if (projectWarning) {
|
|
741
|
+
lines.push(projectWarning);
|
|
742
|
+
}
|
|
743
|
+
lines.push('');
|
|
744
|
+
lines.push('Use in X++:');
|
|
745
|
+
lines.push(` literalStr("${ref}")`);
|
|
746
|
+
lines.push('');
|
|
747
|
+
lines.push('Use in metadata XML:');
|
|
748
|
+
lines.push(` <Label>${ref}</Label>`);
|
|
749
|
+
lines.push(` <HelpText>${ref}</HelpText>`);
|
|
750
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
751
|
+
}
|
|
752
|
+
catch (err) {
|
|
753
|
+
return {
|
|
754
|
+
content: [{ type: 'text', text: `Error creating label: ${err.message}` }],
|
|
755
|
+
isError: true,
|
|
756
|
+
};
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
// Tool registration (name, description, inputSchema) lives inline in
|
|
760
|
+
// src/server/mcpServer.ts - the single source of truth for tool instructions.
|
|
761
|
+
//# sourceMappingURL=createLabel.js.map
|