@microsoft/teamsfx-core 3.0.13 → 3.0.14-alpha.0890e15c35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. package/build/client/teamsDevPortalClient.d.ts +7 -2
  2. package/build/client/teamsDevPortalClient.d.ts.map +1 -1
  3. package/build/client/teamsDevPortalClient.js +63 -59
  4. package/build/client/teamsDevPortalClient.js.map +1 -1
  5. package/build/client/teamsGraphClient.d.ts +6 -3
  6. package/build/client/teamsGraphClient.d.ts.map +1 -1
  7. package/build/client/teamsGraphClient.js +20 -3
  8. package/build/client/teamsGraphClient.js.map +1 -1
  9. package/build/common/daSpecParser.d.ts +16 -1
  10. package/build/common/daSpecParser.d.ts.map +1 -1
  11. package/build/common/daSpecParser.js +34 -21
  12. package/build/common/daSpecParser.js.map +1 -1
  13. package/build/common/featureFlags.d.ts +22 -2
  14. package/build/common/featureFlags.d.ts.map +1 -1
  15. package/build/common/featureFlags.js +31 -3
  16. package/build/common/featureFlags.js.map +1 -1
  17. package/build/common/fetchHelper.d.ts.map +1 -1
  18. package/build/common/fetchHelper.js +41 -3
  19. package/build/common/fetchHelper.js.map +1 -1
  20. package/build/common/kiotaClient.d.ts +3 -3
  21. package/build/common/kiotaClient.d.ts.map +1 -1
  22. package/build/common/kiotaClient.js +10 -10
  23. package/build/common/kiotaClient.js.map +1 -1
  24. package/build/common/projectSettingsHelper.d.ts +0 -2
  25. package/build/common/projectSettingsHelper.d.ts.map +1 -1
  26. package/build/common/projectSettingsHelper.js +1 -56
  27. package/build/common/projectSettingsHelper.js.map +1 -1
  28. package/build/common/telemetry.d.ts +4 -15
  29. package/build/common/telemetry.d.ts.map +1 -1
  30. package/build/common/telemetry.js +7 -20
  31. package/build/common/telemetry.js.map +1 -1
  32. package/build/common/templates-config.json +9 -2
  33. package/build/common/tools.d.ts +6 -1
  34. package/build/common/tools.d.ts.map +1 -1
  35. package/build/common/tools.js +13 -8
  36. package/build/common/tools.js.map +1 -1
  37. package/build/common/wrappedAxiosClient.d.ts +1 -1
  38. package/build/common/wrappedAxiosClient.d.ts.map +1 -1
  39. package/build/common/wrappedAxiosClient.js +12 -13
  40. package/build/common/wrappedAxiosClient.js.map +1 -1
  41. package/build/component/configManager/actionInjector.d.ts +16 -1
  42. package/build/component/configManager/actionInjector.d.ts.map +1 -1
  43. package/build/component/configManager/actionInjector.js +106 -1
  44. package/build/component/configManager/actionInjector.js.map +1 -1
  45. package/build/component/configManager/validator.d.ts.map +1 -1
  46. package/build/component/configManager/validator.js +2 -0
  47. package/build/component/configManager/validator.js.map +1 -1
  48. package/build/component/coordinator/index.d.ts +4 -0
  49. package/build/component/coordinator/index.d.ts.map +1 -1
  50. package/build/component/coordinator/index.js +10 -3
  51. package/build/component/coordinator/index.js.map +1 -1
  52. package/build/component/deps-checker/internal/funcToolChecker.d.ts +6 -0
  53. package/build/component/deps-checker/internal/funcToolChecker.d.ts.map +1 -1
  54. package/build/component/deps-checker/internal/funcToolChecker.js +15 -12
  55. package/build/component/deps-checker/internal/funcToolChecker.js.map +1 -1
  56. package/build/component/deps-checker/internal/nodeChecker.js +1 -1
  57. package/build/component/deps-checker/internal/nodeChecker.js.map +1 -1
  58. package/build/component/deps-checker/internal/testToolChecker.d.ts +12 -0
  59. package/build/component/deps-checker/internal/testToolChecker.d.ts.map +1 -1
  60. package/build/component/deps-checker/internal/testToolChecker.js +23 -14
  61. package/build/component/deps-checker/internal/testToolChecker.js.map +1 -1
  62. package/build/component/developerPortalScaffoldUtils.d.ts +11 -1
  63. package/build/component/developerPortalScaffoldUtils.d.ts.map +1 -1
  64. package/build/component/developerPortalScaffoldUtils.js +21 -12
  65. package/build/component/developerPortalScaffoldUtils.js.map +1 -1
  66. package/build/component/driver/aad/utility/aadManifestHelper.d.ts +1 -1
  67. package/build/component/driver/aad/utility/aadManifestHelper.d.ts.map +1 -1
  68. package/build/component/driver/aad/utility/aadManifestHelper.js +7 -4
  69. package/build/component/driver/aad/utility/aadManifestHelper.js.map +1 -1
  70. package/build/component/driver/add/addWebPart.d.ts +9 -0
  71. package/build/component/driver/add/addWebPart.d.ts.map +1 -1
  72. package/build/component/driver/add/addWebPart.js +13 -7
  73. package/build/component/driver/add/addWebPart.js.map +1 -1
  74. package/build/component/driver/arm/util/handleError.d.ts +5 -0
  75. package/build/component/driver/arm/util/handleError.d.ts.map +1 -1
  76. package/build/component/driver/arm/util/handleError.js +10 -5
  77. package/build/component/driver/arm/util/handleError.js.map +1 -1
  78. package/build/component/driver/copilotAgent/interfaces/PublishArgs.d.ts +14 -0
  79. package/build/component/driver/copilotAgent/interfaces/PublishArgs.d.ts.map +1 -0
  80. package/build/component/driver/copilotAgent/interfaces/PublishArgs.js +5 -0
  81. package/build/component/driver/copilotAgent/interfaces/PublishArgs.js.map +1 -0
  82. package/build/component/driver/copilotAgent/publish.d.ts +16 -0
  83. package/build/component/driver/copilotAgent/publish.d.ts.map +1 -0
  84. package/build/component/driver/copilotAgent/publish.js +175 -0
  85. package/build/component/driver/copilotAgent/publish.js.map +1 -0
  86. package/build/component/driver/dcr/create.d.ts +10 -0
  87. package/build/component/driver/dcr/create.d.ts.map +1 -0
  88. package/build/component/driver/dcr/create.js +142 -0
  89. package/build/component/driver/dcr/create.js.map +1 -0
  90. package/build/component/driver/dcr/error/dcrNameTooLong.d.ts +5 -0
  91. package/build/component/driver/dcr/error/dcrNameTooLong.d.ts.map +1 -0
  92. package/build/component/driver/dcr/error/dcrNameTooLong.js +21 -0
  93. package/build/component/driver/dcr/error/dcrNameTooLong.js.map +1 -0
  94. package/build/component/driver/dcr/error/dcrWellKnownInvalid.d.ts +5 -0
  95. package/build/component/driver/dcr/error/dcrWellKnownInvalid.d.ts.map +1 -0
  96. package/build/component/driver/dcr/error/dcrWellKnownInvalid.js +21 -0
  97. package/build/component/driver/dcr/error/dcrWellKnownInvalid.js.map +1 -0
  98. package/build/component/driver/dcr/interface/createDcrArgs.d.ts +9 -0
  99. package/build/component/driver/dcr/interface/createDcrArgs.d.ts.map +1 -0
  100. package/build/component/driver/dcr/interface/createDcrArgs.js +5 -0
  101. package/build/component/driver/dcr/interface/createDcrArgs.js.map +1 -0
  102. package/build/component/driver/dcr/interface/createDcrOutputs.d.ts +7 -0
  103. package/build/component/driver/dcr/interface/createDcrOutputs.d.ts.map +1 -0
  104. package/build/component/driver/dcr/interface/createDcrOutputs.js +10 -0
  105. package/build/component/driver/dcr/interface/createDcrOutputs.js.map +1 -0
  106. package/build/component/driver/dcr/utility/constants.d.ts +7 -0
  107. package/build/component/driver/dcr/utility/constants.d.ts.map +1 -0
  108. package/build/component/driver/dcr/utility/constants.js +12 -0
  109. package/build/component/driver/dcr/utility/constants.js.map +1 -0
  110. package/build/component/driver/deploy/azure/azureStaticWebAppGetDeploymentTokenDriver.d.ts +8 -1
  111. package/build/component/driver/deploy/azure/azureStaticWebAppGetDeploymentTokenDriver.d.ts.map +1 -1
  112. package/build/component/driver/deploy/azure/azureStaticWebAppGetDeploymentTokenDriver.js +15 -10
  113. package/build/component/driver/deploy/azure/azureStaticWebAppGetDeploymentTokenDriver.js.map +1 -1
  114. package/build/component/driver/devTool/httpClient.d.ts +4 -0
  115. package/build/component/driver/devTool/httpClient.d.ts.map +1 -1
  116. package/build/component/driver/devTool/httpClient.js +6 -3
  117. package/build/component/driver/devTool/httpClient.js.map +1 -1
  118. package/build/component/driver/index.d.ts +2 -0
  119. package/build/component/driver/index.d.ts.map +1 -1
  120. package/build/component/driver/index.js +2 -0
  121. package/build/component/driver/index.js.map +1 -1
  122. package/build/component/driver/m365/acquire.d.ts +13 -1
  123. package/build/component/driver/m365/acquire.d.ts.map +1 -1
  124. package/build/component/driver/m365/acquire.js +16 -8
  125. package/build/component/driver/m365/acquire.js.map +1 -1
  126. package/build/component/driver/oauth/update.d.ts +6 -0
  127. package/build/component/driver/oauth/update.d.ts.map +1 -1
  128. package/build/component/driver/oauth/update.js +8 -4
  129. package/build/component/driver/oauth/update.js.map +1 -1
  130. package/build/component/driver/script/scriptDriver.d.ts +6 -0
  131. package/build/component/driver/script/scriptDriver.d.ts.map +1 -1
  132. package/build/component/driver/script/scriptDriver.js +9 -4
  133. package/build/component/driver/script/scriptDriver.js.map +1 -1
  134. package/build/component/driver/share/utils.d.ts.map +1 -1
  135. package/build/component/driver/share/utils.js +9 -7
  136. package/build/component/driver/share/utils.js.map +1 -1
  137. package/build/component/driver/teamsApp/constants.d.ts +4 -3
  138. package/build/component/driver/teamsApp/constants.d.ts.map +1 -1
  139. package/build/component/driver/teamsApp/constants.js +4 -3
  140. package/build/component/driver/teamsApp/constants.js.map +1 -1
  141. package/build/component/driver/teamsApp/createAppPackage.d.ts +8 -0
  142. package/build/component/driver/teamsApp/createAppPackage.d.ts.map +1 -1
  143. package/build/component/driver/teamsApp/createAppPackage.js +113 -13
  144. package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
  145. package/build/component/driver/teamsApp/interfaces/DcrRegistration.d.ts +10 -0
  146. package/build/component/driver/teamsApp/interfaces/DcrRegistration.d.ts.map +1 -0
  147. package/build/component/driver/teamsApp/interfaces/DcrRegistration.js +5 -0
  148. package/build/component/driver/teamsApp/interfaces/DcrRegistration.js.map +1 -0
  149. package/build/component/driver/teamsApp/interfaces/ValidationResult.d.ts +6 -0
  150. package/build/component/driver/teamsApp/interfaces/ValidationResult.d.ts.map +1 -1
  151. package/build/component/driver/teamsApp/publishAppPackage.d.ts +4 -2
  152. package/build/component/driver/teamsApp/publishAppPackage.d.ts.map +1 -1
  153. package/build/component/driver/teamsApp/publishAppPackage.js +9 -55
  154. package/build/component/driver/teamsApp/publishAppPackage.js.map +1 -1
  155. package/build/component/driver/teamsApp/syncManifest.d.ts +16 -3
  156. package/build/component/driver/teamsApp/syncManifest.d.ts.map +1 -1
  157. package/build/component/driver/teamsApp/syncManifest.js +28 -18
  158. package/build/component/driver/teamsApp/syncManifest.js.map +1 -1
  159. package/build/component/driver/teamsApp/teamsappMgr.d.ts +4 -0
  160. package/build/component/driver/teamsApp/teamsappMgr.d.ts.map +1 -1
  161. package/build/component/driver/teamsApp/teamsappMgr.js +6 -3
  162. package/build/component/driver/teamsApp/teamsappMgr.js.map +1 -1
  163. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.d.ts +2 -0
  164. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.d.ts.map +1 -1
  165. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js +113 -1
  166. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js.map +1 -1
  167. package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts +5 -1
  168. package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts.map +1 -1
  169. package/build/component/driver/teamsApp/utils/ManifestUtils.js +14 -3
  170. package/build/component/driver/teamsApp/utils/ManifestUtils.js.map +1 -1
  171. package/build/component/driver/teamsApp/utils/McpCertVerification.d.ts +17 -0
  172. package/build/component/driver/teamsApp/utils/McpCertVerification.d.ts.map +1 -0
  173. package/build/component/driver/teamsApp/utils/McpCertVerification.js +72 -0
  174. package/build/component/driver/teamsApp/utils/McpCertVerification.js.map +1 -0
  175. package/build/component/driver/teamsApp/utils/telemetry.d.ts +1 -0
  176. package/build/component/driver/teamsApp/utils/telemetry.d.ts.map +1 -1
  177. package/build/component/driver/teamsApp/utils/telemetry.js +1 -0
  178. package/build/component/driver/teamsApp/utils/telemetry.js.map +1 -1
  179. package/build/component/driver/teamsApp/validate.d.ts.map +1 -1
  180. package/build/component/driver/teamsApp/validate.js +12 -2
  181. package/build/component/driver/teamsApp/validate.js.map +1 -1
  182. package/build/component/driver/teamsApp/validateTestCases.d.ts +12 -0
  183. package/build/component/driver/teamsApp/validateTestCases.d.ts.map +1 -1
  184. package/build/component/driver/teamsApp/validateTestCases.js +17 -8
  185. package/build/component/driver/teamsApp/validateTestCases.js.map +1 -1
  186. package/build/component/driver/typeSpec/compile.d.ts +9 -0
  187. package/build/component/driver/typeSpec/compile.d.ts.map +1 -1
  188. package/build/component/driver/typeSpec/compile.js +16 -10
  189. package/build/component/driver/typeSpec/compile.js.map +1 -1
  190. package/build/component/generator/declarativeAgent/generator.d.ts +8 -0
  191. package/build/component/generator/declarativeAgent/generator.d.ts.map +1 -1
  192. package/build/component/generator/declarativeAgent/generator.js +16 -10
  193. package/build/component/generator/declarativeAgent/generator.js.map +1 -1
  194. package/build/component/generator/declarativeAgent/helper.d.ts +31 -0
  195. package/build/component/generator/declarativeAgent/helper.d.ts.map +1 -1
  196. package/build/component/generator/declarativeAgent/helper.js +237 -34
  197. package/build/component/generator/declarativeAgent/helper.js.map +1 -1
  198. package/build/component/generator/defaultGenerator.d.ts.map +1 -1
  199. package/build/component/generator/defaultGenerator.js +14 -1
  200. package/build/component/generator/defaultGenerator.js.map +1 -1
  201. package/build/component/generator/error.d.ts +3 -0
  202. package/build/component/generator/error.d.ts.map +1 -1
  203. package/build/component/generator/error.js +7 -1
  204. package/build/component/generator/error.js.map +1 -1
  205. package/build/component/generator/generatorAction.d.ts +9 -0
  206. package/build/component/generator/generatorAction.d.ts.map +1 -1
  207. package/build/component/generator/generatorAction.js +16 -8
  208. package/build/component/generator/generatorAction.js.map +1 -1
  209. package/build/component/generator/officeAddin/generator.d.ts +12 -0
  210. package/build/component/generator/officeAddin/generator.d.ts.map +1 -1
  211. package/build/component/generator/officeAddin/generator.js +53 -3
  212. package/build/component/generator/officeAddin/generator.js.map +1 -1
  213. package/build/component/generator/officeAddin/helperMethods.d.ts +4 -0
  214. package/build/component/generator/officeAddin/helperMethods.d.ts.map +1 -1
  215. package/build/component/generator/officeAddin/helperMethods.js +6 -3
  216. package/build/component/generator/officeAddin/helperMethods.js.map +1 -1
  217. package/build/component/generator/openApiSpec/customEngineAgentGenerator.d.ts +9 -0
  218. package/build/component/generator/openApiSpec/customEngineAgentGenerator.d.ts.map +1 -1
  219. package/build/component/generator/openApiSpec/customEngineAgentGenerator.js +11 -5
  220. package/build/component/generator/openApiSpec/customEngineAgentGenerator.js.map +1 -1
  221. package/build/component/generator/openPlugin/authorParser.d.ts +8 -0
  222. package/build/component/generator/openPlugin/authorParser.d.ts.map +1 -0
  223. package/build/component/generator/openPlugin/authorParser.js +49 -0
  224. package/build/component/generator/openPlugin/authorParser.js.map +1 -0
  225. package/build/component/generator/openPlugin/deterministicId.d.ts +6 -0
  226. package/build/component/generator/openPlugin/deterministicId.d.ts.map +1 -0
  227. package/build/component/generator/openPlugin/deterministicId.js +31 -0
  228. package/build/component/generator/openPlugin/deterministicId.js.map +1 -0
  229. package/build/component/generator/openPlugin/exporter.d.ts +18 -0
  230. package/build/component/generator/openPlugin/exporter.d.ts.map +1 -0
  231. package/build/component/generator/openPlugin/exporter.js +233 -0
  232. package/build/component/generator/openPlugin/exporter.js.map +1 -0
  233. package/build/component/generator/openPlugin/iconStrategy.d.ts +8 -0
  234. package/build/component/generator/openPlugin/iconStrategy.d.ts.map +1 -0
  235. package/build/component/generator/openPlugin/iconStrategy.js +62 -0
  236. package/build/component/generator/openPlugin/iconStrategy.js.map +1 -0
  237. package/build/component/generator/openPlugin/importer.d.ts +25 -0
  238. package/build/component/generator/openPlugin/importer.d.ts.map +1 -0
  239. package/build/component/generator/openPlugin/importer.js +140 -0
  240. package/build/component/generator/openPlugin/importer.js.map +1 -0
  241. package/build/component/generator/openPlugin/mapper.d.ts +6 -0
  242. package/build/component/generator/openPlugin/mapper.d.ts.map +1 -0
  243. package/build/component/generator/openPlugin/mapper.js +141 -0
  244. package/build/component/generator/openPlugin/mapper.js.map +1 -0
  245. package/build/component/generator/openPlugin/parser.d.ts +3 -0
  246. package/build/component/generator/openPlugin/parser.d.ts.map +1 -0
  247. package/build/component/generator/openPlugin/parser.js +153 -0
  248. package/build/component/generator/openPlugin/parser.js.map +1 -0
  249. package/build/component/generator/openPlugin/placeholderPng.d.ts +6 -0
  250. package/build/component/generator/openPlugin/placeholderPng.d.ts.map +1 -0
  251. package/build/component/generator/openPlugin/placeholderPng.js +71 -0
  252. package/build/component/generator/openPlugin/placeholderPng.js.map +1 -0
  253. package/build/component/generator/openPlugin/textUtils.d.ts +12 -0
  254. package/build/component/generator/openPlugin/textUtils.d.ts.map +1 -0
  255. package/build/component/generator/openPlugin/textUtils.js +43 -0
  256. package/build/component/generator/openPlugin/textUtils.js.map +1 -0
  257. package/build/component/generator/openPlugin/types.d.ts +128 -0
  258. package/build/component/generator/openPlugin/types.d.ts.map +1 -0
  259. package/build/component/generator/openPlugin/types.js.map +1 -0
  260. package/build/component/generator/spfx/utils/constants.d.ts +1 -1
  261. package/build/component/generator/spfx/utils/constants.js +1 -1
  262. package/build/component/generator/templateHelper.d.ts +15 -0
  263. package/build/component/generator/templateHelper.d.ts.map +1 -1
  264. package/build/component/generator/templateHelper.js +28 -0
  265. package/build/component/generator/templateHelper.js.map +1 -1
  266. package/build/component/generator/templates/metadata/index.d.ts.map +1 -1
  267. package/build/component/generator/templates/metadata/index.js +12 -5
  268. package/build/component/generator/templates/metadata/index.js.map +1 -1
  269. package/build/component/generator/templates/templateNames.d.ts +4 -1
  270. package/build/component/generator/templates/templateNames.d.ts.map +1 -1
  271. package/build/component/generator/templates/templateNames.js +5 -0
  272. package/build/component/generator/templates/templateNames.js.map +1 -1
  273. package/build/component/generator/templates/templateReplaceMap.d.ts.map +1 -1
  274. package/build/component/generator/templates/templateReplaceMap.js +4 -1
  275. package/build/component/generator/templates/templateReplaceMap.js.map +1 -1
  276. package/build/component/generator/utils.js +8 -8
  277. package/build/component/generator/utils.js.map +1 -1
  278. package/build/component/generator/v4MetadataSource.d.ts +23 -0
  279. package/build/component/generator/v4MetadataSource.d.ts.map +1 -0
  280. package/build/component/generator/v4MetadataSource.js +42 -0
  281. package/build/component/generator/v4MetadataSource.js.map +1 -0
  282. package/build/component/generator/v4TemplateBridge.d.ts +40 -0
  283. package/build/component/generator/v4TemplateBridge.d.ts.map +1 -0
  284. package/build/component/generator/v4TemplateBridge.js +125 -0
  285. package/build/component/generator/v4TemplateBridge.js.map +1 -0
  286. package/build/component/local/localCertificateManager.d.ts +17 -1
  287. package/build/component/local/localCertificateManager.d.ts.map +1 -1
  288. package/build/component/local/localCertificateManager.js +48 -31
  289. package/build/component/local/localCertificateManager.js.map +1 -1
  290. package/build/component/m365/packageService.d.ts +10 -0
  291. package/build/component/m365/packageService.d.ts.map +1 -1
  292. package/build/component/m365/packageService.js +55 -13
  293. package/build/component/m365/packageService.js.map +1 -1
  294. package/build/component/middleware/envMW.d.ts.map +1 -1
  295. package/build/component/middleware/envMW.js +5 -0
  296. package/build/component/middleware/envMW.js.map +1 -1
  297. package/build/component/utils/ResourceGroupHelper.d.ts +4 -0
  298. package/build/component/utils/ResourceGroupHelper.d.ts.map +1 -1
  299. package/build/component/utils/ResourceGroupHelper.js +7 -4
  300. package/build/component/utils/ResourceGroupHelper.js.map +1 -1
  301. package/build/component/utils/charsetUtils.js +3 -3
  302. package/build/component/utils/charsetUtils.js.map +1 -1
  303. package/build/component/utils/fileOperation.d.ts +10 -0
  304. package/build/component/utils/fileOperation.d.ts.map +1 -1
  305. package/build/component/utils/fileOperation.js +27 -17
  306. package/build/component/utils/fileOperation.js.map +1 -1
  307. package/build/component/utils/mcpAuthScaffolder.d.ts +106 -0
  308. package/build/component/utils/mcpAuthScaffolder.d.ts.map +1 -0
  309. package/build/component/utils/mcpAuthScaffolder.js +153 -0
  310. package/build/component/utils/mcpAuthScaffolder.js.map +1 -0
  311. package/build/component/utils/mcpToolFetcher.d.ts +12 -1
  312. package/build/component/utils/mcpToolFetcher.d.ts.map +1 -1
  313. package/build/component/utils/mcpToolFetcher.js +23 -3
  314. package/build/component/utils/mcpToolFetcher.js.map +1 -1
  315. package/build/component/utils/metadataGraphPermssion.d.ts +4 -0
  316. package/build/component/utils/metadataGraphPermssion.d.ts.map +1 -1
  317. package/build/component/utils/metadataGraphPermssion.js +7 -4
  318. package/build/component/utils/metadataGraphPermssion.js.map +1 -1
  319. package/build/component/utils/odrProvider.d.ts +6 -0
  320. package/build/component/utils/odrProvider.d.ts.map +1 -1
  321. package/build/component/utils/odrProvider.js +9 -4
  322. package/build/component/utils/odrProvider.js.map +1 -1
  323. package/build/core/FxCore.d.ts +46 -4
  324. package/build/core/FxCore.d.ts.map +1 -1
  325. package/build/core/FxCore.declarativeAgent.d.ts +9 -0
  326. package/build/core/FxCore.declarativeAgent.d.ts.map +1 -1
  327. package/build/core/FxCore.declarativeAgent.js +286 -174
  328. package/build/core/FxCore.declarativeAgent.js.map +1 -1
  329. package/build/core/FxCore.js +443 -140
  330. package/build/core/FxCore.js.map +1 -1
  331. package/build/core/FxCore.openPlugin.d.ts +29 -0
  332. package/build/core/FxCore.openPlugin.d.ts.map +1 -0
  333. package/build/core/FxCore.openPlugin.js +135 -0
  334. package/build/core/FxCore.openPlugin.js.map +1 -0
  335. package/build/core/collaborator.d.ts +4 -0
  336. package/build/core/collaborator.d.ts.map +1 -1
  337. package/build/core/collaborator.js +6 -3
  338. package/build/core/collaborator.js.map +1 -1
  339. package/build/core/middleware/concurrentLocker.d.ts +9 -0
  340. package/build/core/middleware/concurrentLocker.d.ts.map +1 -1
  341. package/build/core/middleware/concurrentLocker.js +14 -11
  342. package/build/core/middleware/concurrentLocker.js.map +1 -1
  343. package/build/core/middleware/errorHandler.d.ts.map +1 -1
  344. package/build/core/middleware/errorHandler.js +9 -0
  345. package/build/core/middleware/errorHandler.js.map +1 -1
  346. package/build/core/middleware/fileLocker.d.ts +6 -0
  347. package/build/core/middleware/fileLocker.d.ts.map +1 -1
  348. package/build/core/middleware/fileLocker.js +11 -6
  349. package/build/core/middleware/fileLocker.js.map +1 -1
  350. package/build/core/middleware/utils/v3MigrationUtils.d.ts +1 -34
  351. package/build/core/middleware/utils/v3MigrationUtils.d.ts.map +1 -1
  352. package/build/core/middleware/utils/v3MigrationUtils.js +6 -245
  353. package/build/core/middleware/utils/v3MigrationUtils.js.map +1 -1
  354. package/build/error/teamsApp.d.ts +3 -0
  355. package/build/error/teamsApp.d.ts.map +1 -1
  356. package/build/error/teamsApp.js +15 -1
  357. package/build/error/teamsApp.js.map +1 -1
  358. package/build/question/constants.d.ts.map +1 -1
  359. package/build/question/constants.js +1 -6
  360. package/build/question/constants.js.map +1 -1
  361. package/build/question/create.d.ts +8 -1
  362. package/build/question/create.d.ts.map +1 -1
  363. package/build/question/create.js +24 -15
  364. package/build/question/create.js.map +1 -1
  365. package/build/question/index.d.ts +1 -0
  366. package/build/question/index.d.ts.map +1 -1
  367. package/build/question/index.js +3 -0
  368. package/build/question/index.js.map +1 -1
  369. package/build/question/inputs/AddPluginInputs.d.ts +1 -1
  370. package/build/question/inputs/AddPluginInputs.d.ts.map +1 -1
  371. package/build/question/inputs/AddSkillInputs.d.ts +10 -0
  372. package/build/question/inputs/AddSkillInputs.d.ts.map +1 -0
  373. package/build/question/inputs/AddSkillInputs.js +5 -0
  374. package/build/question/inputs/AddSkillInputs.js.map +1 -0
  375. package/build/question/inputs/CreateProjectInputs.d.ts +7 -1
  376. package/build/question/inputs/CreateProjectInputs.d.ts.map +1 -1
  377. package/build/question/inputs/ExportOpenPluginInputs.d.ts +10 -0
  378. package/build/question/inputs/ExportOpenPluginInputs.d.ts.map +1 -0
  379. package/build/question/inputs/ExportOpenPluginInputs.js +5 -0
  380. package/build/question/inputs/ExportOpenPluginInputs.js.map +1 -0
  381. package/build/question/inputs/ImportOpenPluginInputs.d.ts +28 -0
  382. package/build/question/inputs/ImportOpenPluginInputs.d.ts.map +1 -0
  383. package/build/question/inputs/ImportOpenPluginInputs.js +5 -0
  384. package/build/question/inputs/ImportOpenPluginInputs.js.map +1 -0
  385. package/build/question/inputs/index.d.ts +3 -0
  386. package/build/question/inputs/index.d.ts.map +1 -1
  387. package/build/question/inputs/index.js +3 -0
  388. package/build/question/inputs/index.js.map +1 -1
  389. package/build/question/options/AddPluginOptions.js +1 -1
  390. package/build/question/options/AddPluginOptions.js.map +1 -1
  391. package/build/question/options/AddSkillOptions.d.ts +4 -0
  392. package/build/question/options/AddSkillOptions.d.ts.map +1 -0
  393. package/build/question/options/AddSkillOptions.js +47 -0
  394. package/build/question/options/AddSkillOptions.js.map +1 -0
  395. package/build/question/options/CreateProjectOptions.d.ts.map +1 -1
  396. package/build/question/options/CreateProjectOptions.js +17 -2
  397. package/build/question/options/CreateProjectOptions.js.map +1 -1
  398. package/build/question/options/ExportOpenPluginOptions.d.ts +4 -0
  399. package/build/question/options/ExportOpenPluginOptions.d.ts.map +1 -0
  400. package/build/question/options/ExportOpenPluginOptions.js +29 -0
  401. package/build/question/options/ExportOpenPluginOptions.js.map +1 -0
  402. package/build/question/options/ImportOpenPluginOptions.d.ts +4 -0
  403. package/build/question/options/ImportOpenPluginOptions.d.ts.map +1 -0
  404. package/build/question/options/ImportOpenPluginOptions.js +54 -0
  405. package/build/question/options/ImportOpenPluginOptions.js.map +1 -0
  406. package/build/question/options/index.d.ts +3 -0
  407. package/build/question/options/index.d.ts.map +1 -1
  408. package/build/question/options/index.js +3 -0
  409. package/build/question/options/index.js.map +1 -1
  410. package/build/question/other.d.ts +1 -0
  411. package/build/question/other.d.ts.map +1 -1
  412. package/build/question/other.js +152 -35
  413. package/build/question/other.js.map +1 -1
  414. package/build/question/questionNames.d.ts +10 -1
  415. package/build/question/questionNames.d.ts.map +1 -1
  416. package/build/question/questionNames.js +9 -0
  417. package/build/question/questionNames.js.map +1 -1
  418. package/build/question/scaffold/vsc/CapabilityOptions.d.ts +1 -0
  419. package/build/question/scaffold/vsc/CapabilityOptions.d.ts.map +1 -1
  420. package/build/question/scaffold/vsc/CapabilityOptions.js +11 -0
  421. package/build/question/scaffold/vsc/CapabilityOptions.js.map +1 -1
  422. package/build/question/scaffold/vsc/ProjectTypeOptions.d.ts +2 -0
  423. package/build/question/scaffold/vsc/ProjectTypeOptions.d.ts.map +1 -1
  424. package/build/question/scaffold/vsc/ProjectTypeOptions.js +9 -0
  425. package/build/question/scaffold/vsc/ProjectTypeOptions.js.map +1 -1
  426. package/build/question/scaffold/vsc/daProjectTypeNode.d.ts.map +1 -1
  427. package/build/question/scaffold/vsc/daProjectTypeNode.js +1 -3
  428. package/build/question/scaffold/vsc/daProjectTypeNode.js.map +1 -1
  429. package/build/question/scaffold/vsc/rootNode.js +6 -4
  430. package/build/question/scaffold/vsc/rootNode.js.map +1 -1
  431. package/build/question/scaffold/vsc/teamsProjectTypeNode.d.ts +32 -0
  432. package/build/question/scaffold/vsc/teamsProjectTypeNode.d.ts.map +1 -1
  433. package/build/question/scaffold/vsc/teamsProjectTypeNode.js +136 -36
  434. package/build/question/scaffold/vsc/teamsProjectTypeNode.js.map +1 -1
  435. package/build/question/share.d.ts +7 -0
  436. package/build/question/share.d.ts.map +1 -1
  437. package/build/question/share.js +7 -3
  438. package/build/question/share.js.map +1 -1
  439. package/build/v4/distribution/bundledFloor.d.ts +12 -0
  440. package/build/v4/distribution/bundledFloor.d.ts.map +1 -0
  441. package/build/v4/distribution/bundledFloor.js +80 -0
  442. package/build/v4/distribution/bundledFloor.js.map +1 -0
  443. package/build/v4/distribution/templateConfig.d.ts +79 -0
  444. package/build/v4/distribution/templateConfig.d.ts.map +1 -0
  445. package/build/v4/distribution/templateConfig.js +81 -0
  446. package/build/v4/distribution/templateConfig.js.map +1 -0
  447. package/build/v4/distribution/templatePackage.d.ts +29 -0
  448. package/build/v4/distribution/templatePackage.d.ts.map +1 -0
  449. package/build/v4/distribution/templatePackage.js +82 -0
  450. package/build/v4/distribution/templatePackage.js.map +1 -0
  451. package/build/v4/distribution/templateSource.d.ts +67 -0
  452. package/build/v4/distribution/templateSource.d.ts.map +1 -0
  453. package/build/v4/distribution/templateSource.js +220 -0
  454. package/build/v4/distribution/templateSource.js.map +1 -0
  455. package/build/v4/distribution/templateSourcePort.d.ts +50 -0
  456. package/build/v4/distribution/templateSourcePort.d.ts.map +1 -0
  457. package/build/v4/distribution/templateSourcePort.js +207 -0
  458. package/build/v4/distribution/templateSourcePort.js.map +1 -0
  459. package/build/v4/index.d.ts +13 -0
  460. package/build/v4/index.d.ts.map +1 -0
  461. package/build/v4/index.js +18 -0
  462. package/build/v4/index.js.map +1 -0
  463. package/package.json +18 -79
  464. package/resource/package.nls.cs.json +42 -14
  465. package/resource/package.nls.de.json +43 -15
  466. package/resource/package.nls.es.json +42 -14
  467. package/resource/package.nls.fr.json +42 -14
  468. package/resource/package.nls.it.json +43 -15
  469. package/resource/package.nls.ja.json +42 -14
  470. package/resource/package.nls.json +64 -14
  471. package/resource/package.nls.ko.json +42 -14
  472. package/resource/package.nls.pl.json +43 -15
  473. package/resource/package.nls.pt-BR.json +42 -14
  474. package/resource/package.nls.ru.json +43 -15
  475. package/resource/package.nls.tr.json +44 -16
  476. package/resource/package.nls.zh-Hans.json +42 -14
  477. package/resource/package.nls.zh-Hant.json +54 -26
  478. package/resource/templates/package.nls.cs.json +2 -0
  479. package/resource/templates/package.nls.de.json +2 -0
  480. package/resource/templates/package.nls.es.json +2 -0
  481. package/resource/templates/package.nls.fr.json +2 -0
  482. package/resource/templates/package.nls.it.json +2 -0
  483. package/resource/templates/package.nls.ja.json +2 -0
  484. package/resource/templates/package.nls.json +5 -0
  485. package/resource/templates/package.nls.ko.json +2 -0
  486. package/resource/templates/package.nls.pl.json +2 -0
  487. package/resource/templates/package.nls.pt-BR.json +2 -0
  488. package/resource/templates/package.nls.ru.json +2 -0
  489. package/resource/templates/package.nls.tr.json +2 -0
  490. package/resource/templates/package.nls.zh-Hans.json +2 -0
  491. package/resource/templates/package.nls.zh-Hant.json +2 -0
  492. package/resource/yaml-schema/v1.12/yaml.schema.json +2132 -0
  493. package/resource/yaml-schema/v1.13/yaml.schema.json +2193 -0
  494. package/resource/yaml-schema/yaml.schema.json +124 -2
  495. package/templates/fallback/common.zip +0 -0
  496. package/templates/fallback/csharp.zip +0 -0
  497. package/templates/fallback/js.zip +0 -0
  498. package/templates/fallback/python.zip +0 -0
  499. package/templates/fallback/ts.zip +0 -0
  500. package/templates/metadata/allTemplates.json +16 -0
  501. package/templates/metadata/defaultGeneratorTemplates.json +8 -0
  502. package/templates/metadata.zip +0 -0
  503. package/templates/ui/tdpNode.json +8 -2
  504. package/templates/ui/wizardNode.json +34 -2
  505. package/templates/v4/floor.json +3 -0
  506. package/templates/v4/templates.zip +0 -0
  507. package/build/core/middleware/projectMigratorV3.d.ts +0 -39
  508. package/build/core/middleware/projectMigratorV3.d.ts.map +0 -1
  509. package/build/core/middleware/projectMigratorV3.js +0 -694
  510. package/build/core/middleware/projectMigratorV3.js.map +0 -1
  511. package/build/core/middleware/projectVersionChecker.d.ts +0 -3
  512. package/build/core/middleware/projectVersionChecker.d.ts.map +0 -1
  513. package/build/core/middleware/projectVersionChecker.js +0 -60
  514. package/build/core/middleware/projectVersionChecker.js.map +0 -1
  515. package/build/core/middleware/types.d.ts +0 -9
  516. package/build/core/middleware/types.d.ts.map +0 -1
  517. package/build/core/middleware/types.js.map +0 -1
  518. package/build/core/middleware/utils/MigrationUtils.d.ts +0 -13
  519. package/build/core/middleware/utils/MigrationUtils.d.ts.map +0 -1
  520. package/build/core/middleware/utils/MigrationUtils.js +0 -212
  521. package/build/core/middleware/utils/MigrationUtils.js.map +0 -1
  522. package/build/core/middleware/utils/appYmlGenerator.d.ts +0 -34
  523. package/build/core/middleware/utils/appYmlGenerator.d.ts.map +0 -1
  524. package/build/core/middleware/utils/appYmlGenerator.js +0 -158
  525. package/build/core/middleware/utils/appYmlGenerator.js.map +0 -1
  526. package/build/core/middleware/utils/debug/appLocalYmlGenerator.d.ts +0 -65
  527. package/build/core/middleware/utils/debug/appLocalYmlGenerator.d.ts.map +0 -1
  528. package/build/core/middleware/utils/debug/appLocalYmlGenerator.js +0 -61
  529. package/build/core/middleware/utils/debug/appLocalYmlGenerator.js.map +0 -1
  530. package/build/core/middleware/utils/debug/constants.d.ts +0 -20
  531. package/build/core/middleware/utils/debug/constants.d.ts.map +0 -1
  532. package/build/core/middleware/utils/debug/constants.js +0 -28
  533. package/build/core/middleware/utils/debug/constants.js.map +0 -1
  534. package/build/core/middleware/utils/debug/debugMigrationContext.d.ts +0 -14
  535. package/build/core/middleware/utils/debug/debugMigrationContext.d.ts.map +0 -1
  536. package/build/core/middleware/utils/debug/debugMigrationContext.js +0 -23
  537. package/build/core/middleware/utils/debug/debugMigrationContext.js.map +0 -1
  538. package/build/core/middleware/utils/debug/debugV3MigrationUtils.d.ts +0 -37
  539. package/build/core/middleware/utils/debug/debugV3MigrationUtils.d.ts.map +0 -1
  540. package/build/core/middleware/utils/debug/debugV3MigrationUtils.js +0 -291
  541. package/build/core/middleware/utils/debug/debugV3MigrationUtils.js.map +0 -1
  542. package/build/core/middleware/utils/debug/taskMigrator.d.ts +0 -22
  543. package/build/core/middleware/utils/debug/taskMigrator.d.ts.map +0 -1
  544. package/build/core/middleware/utils/debug/taskMigrator.js +0 -935
  545. package/build/core/middleware/utils/debug/taskMigrator.js.map +0 -1
  546. package/build/core/middleware/utils/migrationContext.d.ts +0 -32
  547. package/build/core/middleware/utils/migrationContext.d.ts.map +0 -1
  548. package/build/core/middleware/utils/migrationContext.js +0 -104
  549. package/build/core/middleware/utils/migrationContext.js.map +0 -1
  550. /package/build/{core/middleware → component/generator/openPlugin}/types.js +0 -0
@@ -2,7 +2,7 @@
2
2
  // Copyright (c) Microsoft Corporation.
3
3
  // Licensed under the MIT license.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.FxCoreDeclarativeAgentPart = void 0;
5
+ exports.FxCoreDeclarativeAgentPart = exports.fxCoreDeclarativeAgentDeps = void 0;
6
6
  const tslib_1 = require("tslib");
7
7
  const hooks_1 = require("@feathersjs/hooks");
8
8
  const m365_spec_parser_1 = require("@microsoft/m365-spec-parser");
@@ -14,7 +14,7 @@ const globalVars_1 = require("../common/globalVars");
14
14
  const localizeUtils_1 = require("../common/localizeUtils");
15
15
  const telemetry_1 = require("../common/telemetry");
16
16
  const versionMetadata_1 = require("../common/versionMetadata");
17
- const actionInjector_1 = require("../component/configManager/actionInjector");
17
+ const featureFlags_1 = require("../common/featureFlags");
18
18
  const constants_1 = require("../component/constants");
19
19
  const errors_1 = require("../component/driver/teamsApp/errors");
20
20
  const results_1 = require("../component/driver/teamsApp/results");
@@ -26,7 +26,7 @@ const helper_1 = require("../component/generator/declarativeAgent/helper");
26
26
  const helper_2 = require("../component/generator/openApiSpec/helper");
27
27
  const questionMW_1 = require("../component/middleware/questionMW");
28
28
  const common_1 = require("../component/utils/common");
29
- const mcpToolFetcher_1 = require("../component/utils/mcpToolFetcher");
29
+ const mcpAuthScaffolder_1 = require("../component/utils/mcpAuthScaffolder");
30
30
  const pathUtils_1 = require("../component/utils/pathUtils");
31
31
  const common_2 = require("../error/common");
32
32
  const constants_2 = require("../question/constants");
@@ -35,6 +35,13 @@ const concurrentLocker_1 = require("./middleware/concurrentLocker");
35
35
  const errorHandler_1 = require("./middleware/errorHandler");
36
36
  // Non-translatable CLI command template used in warning messages
37
37
  const mcpAddActionHint = "atk add action --api-plugin-type mcp --mcp-da-server-url <server-url> --mcp-tools-file-path <path-to-tools-json> --interactive false";
38
+ exports.fxCoreDeclarativeAgentDeps = {
39
+ addExistingPlugin: helper_1.addExistingPlugin,
40
+ createNewActionPluginManifest: helper_1.createNewActionPluginManifest,
41
+ deriveMCPServerNameFromUrl: helper_1.deriveMCPServerNameFromUrl,
42
+ generateFromApiSpec: helper_2.generateFromApiSpec,
43
+ generateScaffoldingSummary: helper_2.generateScaffoldingSummary,
44
+ };
38
45
  class FxCoreDeclarativeAgentPart {
39
46
  async updateActionWithMCP(inputs) {
40
47
  const context = (0, globalVars_1.createContext)();
@@ -60,7 +67,7 @@ class FxCoreDeclarativeAgentPart {
60
67
  return (0, teamsfx_api_1.err)(results_1.AppStudioResultFactory.UserError(errors_1.AppStudioError.TeamsAppRequiredPropertyMissingError.name, errors_1.AppStudioError.TeamsAppRequiredPropertyMissingError.message("declarativeAgents", teamsManifestPath)));
61
68
  }
62
69
  const declarativeAgentManifestPath = path.join(projectPath, teamsfx_api_1.AppPackageFolderName, declarativeAgentRelativePath);
63
- const createRes = await (0, helper_1.createNewActionPluginManifest)(projectPath, desiredFileName, declarativeAgentManifestPath);
70
+ const createRes = await exports.fxCoreDeclarativeAgentDeps.createNewActionPluginManifest(projectPath, desiredFileName, declarativeAgentManifestPath);
64
71
  if (createRes.isErr()) {
65
72
  return (0, teamsfx_api_1.err)(createRes.error);
66
73
  }
@@ -76,19 +83,12 @@ class FxCoreDeclarativeAgentPart {
76
83
  const serverName = inputs[constants_2.QuestionNames.MCPForDAServerName];
77
84
  const mcpAuth = inputs[constants_2.QuestionNames.MCPForDAAuth];
78
85
  const authType = inputs[constants_2.QuestionNames.MCPForDAAuthType];
79
- let oauthAuthorizationUrl = undefined;
80
- let oauthTokenUrl = undefined;
81
- let oauthRefreshUrl = undefined;
86
+ let mcpAuthEndpoints = {};
82
87
  let registrationId = undefined;
83
88
  if (mcpAuth === "OAuthPluginVault") {
84
89
  try {
85
90
  registrationId = `MCP_DA_AUTH_ID_${serverName.toUpperCase()}`;
86
- if (authType === "oauth") {
87
- const metadata = await (0, mcpToolFetcher_1.resolveMCPOAuthMetadata)(inputs[constants_2.QuestionNames.MCPForDAAuthMetadataUrl], inputs[constants_2.QuestionNames.MCPForDAAuthWellKnownUrl]);
88
- oauthAuthorizationUrl = metadata.authorizationUrl;
89
- oauthTokenUrl = metadata.tokenUrl;
90
- oauthRefreshUrl = metadata.refreshUrl;
91
- }
91
+ mcpAuthEndpoints = await (0, mcpAuthScaffolder_1.resolveMCPAuthEndpoints)(authType, inputs);
92
92
  }
93
93
  catch (error) {
94
94
  void context.userInteraction.showMessage("error", (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.mcpAuthMetadataMissingError", error.message), false);
@@ -181,19 +181,21 @@ class FxCoreDeclarativeAgentPart {
181
181
  },
182
182
  },
183
183
  run_for_functions: mcpToolsSelected,
184
- auth: mcpAuth === "OAuthPluginVault" && !!registrationId
185
- ? {
186
- type: "OAuthPluginVault",
187
- reference_id: `$\{\{${registrationId}\}\}`,
188
- }
189
- : {
190
- type: "None",
191
- },
184
+ auth: (0, mcpAuthScaffolder_1.deriveMCPManifestOAuth)(authType, registrationId) ?? {
185
+ type: "None",
186
+ },
192
187
  });
193
188
  }
194
189
  if (mcpAuth === "OAuthPluginVault" && !!registrationId) {
195
190
  // insert oauth info in teamsapp.yaml
196
- await actionInjector_1.ActionInjector.injectCreateOAuthActionForMCP(pathUtils_1.pathUtils.getYmlFilePath(projectPath), authType, serverName, registrationId, mcpServerUrl, oauthAuthorizationUrl, oauthTokenUrl, oauthRefreshUrl);
191
+ await (0, mcpAuthScaffolder_1.injectMCPAuthActionToYml)({
192
+ ymlPath: pathUtils_1.pathUtils.getYmlFilePath(projectPath),
193
+ authType,
194
+ authName: serverName,
195
+ registrationId,
196
+ mcpServerUrl,
197
+ endpoints: mcpAuthEndpoints,
198
+ });
197
199
  }
198
200
  void context.userInteraction
199
201
  .showMessage("info", (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.updatePluginManifest", aiPluginFilePathRelative), false, "Provision")
@@ -238,10 +240,21 @@ class FxCoreDeclarativeAgentPart {
238
240
  // The CLI flow (below) keeps the original non-interactive behavior of
239
241
  // probing the MCP server, fetching tools and writing ai-plugin.json + yaml
240
242
  // OAuth registration, since the CLI has no equivalent notification UX.
241
- if (isGenerateFromMCP && inputs.platform === teamsfx_api_1.Platform.VSCode) {
243
+ //
244
+ // Under the Dynamic Tool Discovery (DT) flag this early redirect is skipped
245
+ // so that VS Code runs the same inline scaffolder as the CLI — the
246
+ // CodeLens "fetch action" hop is absorbed into add-action itself.
247
+ if (isGenerateFromMCP &&
248
+ inputs.platform === teamsfx_api_1.Platform.VSCode &&
249
+ !featureFlags_1.featureFlagManager.getBooleanValue(featureFlags_1.FeatureFlags.MCPForDADT)) {
242
250
  return await this.addPluginFromMCP(inputs, context);
243
251
  }
244
- const teamsManifestPath = inputs[constants_2.QuestionNames.ManifestPath];
252
+ // VS Code MCP inline flow (DT on) skips the Teams-manifest picker; infer
253
+ // the path from `projectPath/appPackage/manifest.json` to match the leaner
254
+ // `updateActionWithMCP` UX. CLI and non-MCP flows still supply ManifestPath
255
+ // via the question tree / `--manifest-file`.
256
+ const teamsManifestPath = inputs[constants_2.QuestionNames.ManifestPath] ??
257
+ path.join(inputs.projectPath, teamsfx_api_1.AppPackageFolderName, teamsfx_api_1.ManifestTemplateFileName);
245
258
  const appPackageFolder = path.dirname(teamsManifestPath);
246
259
  // validate the project is valid for adding plugin
247
260
  const manifestRes = await ManifestUtils_1.manifestUtils._readAppManifest(teamsManifestPath);
@@ -265,7 +278,13 @@ class FxCoreDeclarativeAgentPart {
265
278
  return (0, teamsfx_api_1.err)(declarativeCopilotManifesRes.error);
266
279
  }
267
280
  const declarativeCopilotManifest = declarativeCopilotManifesRes.value;
268
- let confirmMessage = (0, localizeUtils_1.getLocalizedString)("core.addApi.confirm", path.relative(inputs.projectPath, appPackageFolder));
281
+ const mcpAuthTypeChoice = inputs[constants_2.QuestionNames.MCPForDAAuthType];
282
+ const mcpTouchesYml = isGenerateFromMCP && mcpAuthTypeChoice && mcpAuthTypeChoice !== "none";
283
+ let confirmMessage = (0, localizeUtils_1.getLocalizedString)(isGenerateFromMCP
284
+ ? mcpTouchesYml
285
+ ? "core.addApi.confirm.mcp.teamsYaml"
286
+ : "core.addApi.confirm.mcp"
287
+ : "core.addApi.confirm", path.relative(inputs.projectPath, appPackageFolder), ...(mcpTouchesYml ? [versionMetadata_1.MetadataV4.configFile] : []));
269
288
  // Will be used if generating from API spec
270
289
  let specParser = undefined;
271
290
  let authNameAndSchemes = [];
@@ -281,12 +300,20 @@ class FxCoreDeclarativeAgentPart {
281
300
  }
282
301
  }
283
302
  // confirm
284
- const confirmRes = await context.userInteraction.showMessage("warn", confirmMessage, true, (0, localizeUtils_1.getLocalizedString)("core.addApi.continue"));
285
- if (confirmRes.isErr()) {
286
- return (0, teamsfx_api_1.err)(confirmRes.error);
287
- }
288
- else if (confirmRes.value !== (0, localizeUtils_1.getLocalizedString)("core.addApi.continue")) {
289
- return (0, teamsfx_api_1.err)(new common_2.UserCancelError());
303
+ // VS Code MCP inline flow (DT on) skips the confirmation modal to match
304
+ // the leaner `updateActionWithMCP` UX; writes happen as soon as the last
305
+ // required answer is provided. CLI interactive and other flows still show it.
306
+ const skipConfirmModal = isGenerateFromMCP &&
307
+ inputs.platform === teamsfx_api_1.Platform.VSCode &&
308
+ featureFlags_1.featureFlagManager.getBooleanValue(featureFlags_1.FeatureFlags.MCPForDADT);
309
+ if (!skipConfirmModal) {
310
+ const confirmRes = await context.userInteraction.showMessage("warn", confirmMessage, true, (0, localizeUtils_1.getLocalizedString)("core.addApi.continue"));
311
+ if (confirmRes.isErr()) {
312
+ return (0, teamsfx_api_1.err)(confirmRes.error);
313
+ }
314
+ else if (confirmRes.value !== (0, localizeUtils_1.getLocalizedString)("core.addApi.continue")) {
315
+ return (0, teamsfx_api_1.err)(new common_2.UserCancelError());
316
+ }
290
317
  }
291
318
  // find the next available action id
292
319
  let actionId = "";
@@ -303,7 +330,7 @@ class FxCoreDeclarativeAgentPart {
303
330
  destinationPluginManifestPath =
304
331
  await CopilotGptManifestUtils_1.copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath(appPackageFolder, undefined);
305
332
  const destinationApiSpecPath = await PluginManifestUtils_1.pluginManifestUtils.getDefaultNextAvailableApiSpecPath(inputs[constants_2.QuestionNames.ApiSpecLocation].trim(), path.join(appPackageFolder, teamsfx_api_1.DefaultApiSpecFolderName));
306
- const generateRes = await (0, helper_2.generateFromApiSpec)(specParser, teamsManifestPath, inputs, context, teamsfx_api_1.Stage.addPlugin, m365_spec_parser_1.ProjectType.Copilot, {
333
+ const generateRes = await exports.fxCoreDeclarativeAgentDeps.generateFromApiSpec(specParser, teamsManifestPath, inputs, context, teamsfx_api_1.Stage.addPlugin, m365_spec_parser_1.ProjectType.Copilot, {
307
334
  destinationApiSpecFilePath: destinationApiSpecPath,
308
335
  pluginManifestFilePath: destinationPluginManifestPath,
309
336
  }, inputs[constants_2.QuestionNames.ApiSpecLocation].trim());
@@ -312,7 +339,7 @@ class FxCoreDeclarativeAgentPart {
312
339
  }
313
340
  const warnings = generateRes.value.warnings;
314
341
  if (warnings && warnings.length > 0) {
315
- const warnSummary = await (0, helper_2.generateScaffoldingSummary)(warnings, manifestRes.value, path.relative(inputs.projectPath, destinationApiSpecPath), path.relative(inputs.projectPath, destinationPluginManifestPath), inputs.projectPath);
342
+ const warnSummary = await exports.fxCoreDeclarativeAgentDeps.generateScaffoldingSummary(warnings, manifestRes.value, path.relative(inputs.projectPath, destinationApiSpecPath), path.relative(inputs.projectPath, destinationPluginManifestPath), inputs.projectPath);
316
343
  context.logProvider.info(warnSummary + "\n");
317
344
  }
318
345
  const addActionRes = await CopilotGptManifestUtils_1.copilotGptManifestUtils.addAction(declarativeCopilotManifestPath, actionId, (0, utils_1.normalizePath)(path.relative(appPackageFolder, destinationPluginManifestPath), true));
@@ -333,175 +360,260 @@ class FxCoreDeclarativeAgentPart {
333
360
  if (!mcpServerUrl) {
334
361
  return (0, teamsfx_api_1.err)(new teamsfx_api_1.UserError(teamsfx_api_1.Stage.addPlugin, "MissingMCPServerUrl", (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.missingServerUrl"), (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.missingServerUrl")));
335
362
  }
336
- // Load tools from file if provided and not yet loaded
337
- const existingTools = inputs[constants_2.QuestionNames.MCPForDAAvailableTools];
338
- if (toolsFilePath && (!existingTools || existingTools.length === 0)) {
339
- try {
340
- const { readMCPToolsFromFile } = await Promise.resolve().then(() => tslib_1.__importStar(require("../component/utils/mcpToolFetcher")));
341
- const fileTools = await readMCPToolsFromFile(toolsFilePath);
342
- inputs[constants_2.QuestionNames.MCPForDAAvailableTools] = fileTools;
343
- if (!inputs[constants_2.QuestionNames.MCPForDAPreFetchTools]) {
344
- inputs[constants_2.QuestionNames.MCPForDAPreFetchTools] = fileTools.map((t) => t.name);
345
- }
346
- }
347
- catch {
348
- mcpWarnings.push({
349
- type: "mcpToolsFileReadError",
350
- content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.toolsFileReadError", toolsFilePath, mcpAddActionHint),
351
- });
363
+ // Dynamic Tool Discovery flow: skip static tool fetching entirely;
364
+ // write ai-plugin.json with a `ModelContextProtocol` runtime that the
365
+ // agent host probes for tools at runtime, then inject the OAuth/DCR step.
366
+ if (featureFlags_1.featureFlagManager.getBooleanValue(featureFlags_1.FeatureFlags.MCPForDADT)) {
367
+ destinationPluginManifestPath =
368
+ await CopilotGptManifestUtils_1.copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath(appPackageFolder, undefined);
369
+ // Namespace the action by the MCP server host (shared rule with the
370
+ // create flow) so actions targeting different MCP servers get distinct
371
+ // namespaces. The derived value is alphanumeric + lowercase, satisfying
372
+ // the plugin manifest schema (which rejects `_` and other punctuation).
373
+ const namespace = (0, helper_1.deriveMCPNamespaceFromUrl)(mcpServerUrl);
374
+ const pluginManifest = {
375
+ $schema: "https://developer.microsoft.com/json-schemas/copilot/plugin/v2.4/schema.json",
376
+ schema_version: "v2.4",
377
+ name_for_human: "MCP Action",
378
+ description_for_human: "Action powered by MCP server",
379
+ contact_email: "publisher-email@example.com",
380
+ namespace,
381
+ functions: [],
382
+ runtimes: [
383
+ {
384
+ type: "RemoteMCPServer",
385
+ spec: { url: mcpServerUrl },
386
+ run_for_functions: ["*"],
387
+ },
388
+ ],
389
+ };
390
+ const authType = inputs[constants_2.QuestionNames.MCPForDAAuthType];
391
+ if (authType === "none") {
392
+ pluginManifest.runtimes[0].auth = { type: "None" };
352
393
  }
353
- }
354
- // Probe auth if tools were loaded from file but auth not yet detected
355
- if (inputs[constants_2.QuestionNames.MCPForDAAvailableTools]?.length > 0 &&
356
- !inputs[constants_2.QuestionNames.MCPForDAAuth] &&
357
- mcpServerUrl) {
358
- try {
359
- const { probeMCPServerAuth } = await Promise.resolve().then(() => tslib_1.__importStar(require("../component/utils/mcpToolFetcher")));
360
- const authProbe = await probeMCPServerAuth(mcpServerUrl);
361
- if (authProbe.requiresAuth) {
362
- inputs[constants_2.QuestionNames.MCPForDAAuth] = "OAuthPluginVault";
363
- if (authProbe.authMetadataUrl) {
364
- inputs[constants_2.QuestionNames.MCPForDAAuthMetadataUrl] = authProbe.authMetadataUrl;
365
- }
394
+ else if (authType) {
395
+ const serverName = (0, helper_1.deriveMCPServerNameFromUrl)(mcpServerUrl).toUpperCase();
396
+ const registrationId = (0, helper_1.deriveMCPRegistrationIdFromUrl)(mcpServerUrl);
397
+ const manifestOAuth = (0, mcpAuthScaffolder_1.deriveMCPManifestOAuth)(authType, registrationId);
398
+ if (manifestOAuth) {
399
+ pluginManifest.runtimes[0].auth = manifestOAuth;
366
400
  }
367
- }
368
- catch {
369
- // Auth probe failed - continue without auth
370
- }
371
- }
372
- // Auto-fetch tools if not yet loaded (CLI flow for no-auth servers)
373
- const currentTools = inputs[constants_2.QuestionNames.MCPForDAAvailableTools];
374
- if ((!currentTools || currentTools.length === 0) && mcpServerUrl) {
375
- try {
376
- const { fetchMCPTools } = await Promise.resolve().then(() => tslib_1.__importStar(require("../component/utils/mcpToolFetcher")));
377
- const result = await fetchMCPTools(mcpServerUrl);
378
- if (!result.requiresAuth && result.tools.length > 0) {
379
- inputs[constants_2.QuestionNames.MCPForDAAvailableTools] = result.tools;
380
- if (!inputs[constants_2.QuestionNames.MCPForDAPreFetchTools]) {
381
- inputs[constants_2.QuestionNames.MCPForDAPreFetchTools] = result.tools.map((t) => t.name);
382
- }
383
- }
384
- else if (result.requiresAuth) {
385
- // Store auth metadata for later use
386
- inputs[constants_2.QuestionNames.MCPForDAAuth] = "OAuthPluginVault";
387
- if (result.authMetadataUrl) {
388
- inputs[constants_2.QuestionNames.MCPForDAAuthMetadataUrl] = result.authMetadataUrl;
401
+ try {
402
+ const endpoints = await (0, mcpAuthScaffolder_1.resolveMCPAuthEndpoints)(authType, inputs);
403
+ const ymlPath = pathUtils_1.pathUtils.getYmlFilePath(inputs.projectPath);
404
+ if (ymlPath) {
405
+ await (0, mcpAuthScaffolder_1.injectMCPAuthActionToYml)({
406
+ ymlPath,
407
+ authType,
408
+ // Per SCN-DA-CREATE-WITH-MCP-SERVER the `name:` of the injected
409
+ // oauth/dcr step matches the ai-plugin.json `namespace`, not the
410
+ // declarativeAgent action id (which stays the template default).
411
+ authName: namespace,
412
+ registrationId,
413
+ mcpServerUrl,
414
+ endpoints,
415
+ persistCredentialEnvRefs: true,
416
+ serverName,
417
+ });
389
418
  }
390
- mcpWarnings.push({
391
- type: "mcpAuthRequired",
392
- content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.authRequired", mcpServerUrl, mcpAddActionHint),
419
+ await (0, mcpAuthScaffolder_1.persistMCPAuthCredentialEnvVars)({
420
+ projectPath: inputs.projectPath,
421
+ authType,
422
+ serverName,
423
+ clientId: inputs[constants_2.QuestionNames.MCPForDAClientId],
424
+ clientSecret: inputs[constants_2.QuestionNames.MCPForDAClientSecret],
425
+ scopes: inputs[constants_2.QuestionNames.MCPForDAScopes],
393
426
  });
394
427
  }
395
- else {
428
+ catch (error) {
396
429
  mcpWarnings.push({
397
- type: "mcpNoToolsFetched",
398
- content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.noToolsFetched", mcpServerUrl, mcpAddActionHint),
430
+ type: "mcpAuthMetadataError",
431
+ content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.mcpAuthMetadataMissingError", error.message),
399
432
  });
400
433
  }
401
434
  }
402
- catch {
403
- mcpWarnings.push({
404
- type: "mcpFetchError",
405
- content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.fetchError", mcpServerUrl, mcpAddActionHint),
406
- });
435
+ await fs_extra_1.default.ensureFile(destinationPluginManifestPath);
436
+ await fs_extra_1.default.writeJSON(destinationPluginManifestPath, pluginManifest, { spaces: 4 });
437
+ const addActionRes = await CopilotGptManifestUtils_1.copilotGptManifestUtils.addAction(declarativeCopilotManifestPath, actionId, (0, utils_1.normalizePath)(path.relative(appPackageFolder, destinationPluginManifestPath), true));
438
+ if (addActionRes.isErr()) {
439
+ return (0, teamsfx_api_1.err)(addActionRes.error);
407
440
  }
408
- }
409
- // If no tools available (auth required or fetch failed), skip creating plugin - just warn
410
- const mcpTools = inputs[constants_2.QuestionNames.MCPForDAAvailableTools];
411
- const mcpToolsSelected = inputs[constants_2.QuestionNames.MCPForDAPreFetchTools] || [];
412
- if (!mcpTools || mcpTools.length === 0 || mcpToolsSelected.length === 0) {
413
441
  if (mcpWarnings.length > 0) {
414
442
  for (const warning of mcpWarnings) {
415
443
  context.logProvider.warning(warning.content);
416
444
  }
417
445
  }
418
- return (0, teamsfx_api_1.ok)(undefined);
419
446
  }
420
- destinationPluginManifestPath =
421
- await CopilotGptManifestUtils_1.copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath(appPackageFolder, undefined);
422
- const pluginManifest = {
423
- $schema: "https://developer.microsoft.com/json-schemas/copilot/plugin/v2.4/schema.json",
424
- schema_version: "v2.4",
425
- name_for_human: "MCP Action",
426
- description_for_human: "Action powered by MCP server",
427
- contact_email: "publisher-email@example.com",
428
- namespace: "mcpAction",
429
- functions: [],
430
- runtimes: [],
431
- };
432
- if (mcpTools && mcpTools.length > 0 && mcpToolsSelected.length > 0) {
433
- const selectedTools = mcpTools.filter((tool) => mcpToolsSelected.includes(tool.name));
434
- pluginManifest.functions = selectedTools.map((tool) => ({
435
- name: tool.name,
436
- description: tool.description || "",
437
- }));
438
- // Write mcp-tools file with full tool definitions (no field filtering)
439
- const mcpToolsFile = `mcp-tools-${suffix}.json`;
440
- const mcpToolsOutputPath = path.join(appPackageFolder, mcpToolsFile);
441
- await fs_extra_1.default.writeJSON(mcpToolsOutputPath, { tools: selectedTools }, { spaces: 4 });
442
- pluginManifest.runtimes = [
443
- {
444
- type: "RemoteMCPServer",
445
- spec: {
446
- url: mcpServerUrl,
447
- mcp_tool_description: {
448
- file: mcpToolsFile,
449
- },
450
- },
451
- run_for_functions: pluginManifest.functions.map((f) => f.name),
452
- },
453
- ];
454
- // Auth handling
455
- const mcpAuth = inputs[constants_2.QuestionNames.MCPForDAAuth];
456
- if (mcpAuth === "OAuthPluginVault") {
457
- const authType = inputs[constants_2.QuestionNames.MCPForDAAuthType];
458
- if (!authType) {
459
- return (0, teamsfx_api_1.err)(new teamsfx_api_1.UserError(teamsfx_api_1.Stage.addPlugin, "MissingMCPAuthType", (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.missingAuthType"), (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.missingAuthType")));
447
+ else {
448
+ // Load tools from file if provided and not yet loaded
449
+ const existingTools = inputs[constants_2.QuestionNames.MCPForDAAvailableTools];
450
+ if (toolsFilePath && (!existingTools || existingTools.length === 0)) {
451
+ try {
452
+ const { readMCPToolsFromFile } = await Promise.resolve().then(() => tslib_1.__importStar(require("../component/utils/mcpToolFetcher")));
453
+ const fileTools = await readMCPToolsFromFile(toolsFilePath);
454
+ inputs[constants_2.QuestionNames.MCPForDAAvailableTools] = fileTools;
455
+ if (!inputs[constants_2.QuestionNames.MCPForDAPreFetchTools]) {
456
+ inputs[constants_2.QuestionNames.MCPForDAPreFetchTools] = fileTools.map((t) => t.name);
457
+ }
460
458
  }
461
- const registrationId = `MCP_DA_AUTH_ID_${actionId.toUpperCase()}`;
462
- pluginManifest.runtimes[0].auth = {
463
- type: "OAuthPluginVault",
464
- reference_id: `$\{\{${registrationId}\}\}`,
465
- };
466
- // Resolve OAuth metadata and inject oauth/register into m365agents.yml
459
+ catch {
460
+ mcpWarnings.push({
461
+ type: "mcpToolsFileReadError",
462
+ content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.toolsFileReadError", toolsFilePath, mcpAddActionHint),
463
+ });
464
+ }
465
+ }
466
+ // Probe auth if tools were loaded from file but auth not yet detected
467
+ if (inputs[constants_2.QuestionNames.MCPForDAAvailableTools]?.length > 0 &&
468
+ !inputs[constants_2.QuestionNames.MCPForDAAuth] &&
469
+ mcpServerUrl) {
467
470
  try {
468
- let authorizationUrl;
469
- let tokenUrl;
470
- let refreshUrl;
471
- if (authType === "oauth") {
472
- const metadata = await (0, mcpToolFetcher_1.resolveMCPOAuthMetadata)(inputs[constants_2.QuestionNames.MCPForDAAuthMetadataUrl]);
473
- authorizationUrl = metadata.authorizationUrl;
474
- tokenUrl = metadata.tokenUrl;
475
- refreshUrl = metadata.refreshUrl;
471
+ const { probeMCPServerAuth } = await Promise.resolve().then(() => tslib_1.__importStar(require("../component/utils/mcpToolFetcher")));
472
+ const authProbe = await probeMCPServerAuth(mcpServerUrl);
473
+ if (authProbe.requiresAuth) {
474
+ inputs[constants_2.QuestionNames.MCPForDAAuth] = "OAuthPluginVault";
475
+ if (authProbe.authMetadataUrl) {
476
+ inputs[constants_2.QuestionNames.MCPForDAAuthMetadataUrl] = authProbe.authMetadataUrl;
477
+ }
476
478
  }
477
- const ymlPath = pathUtils_1.pathUtils.getYmlFilePath(inputs.projectPath);
478
- if (ymlPath) {
479
- await actionInjector_1.ActionInjector.injectCreateOAuthActionForMCP(ymlPath, authType, actionId, registrationId, mcpServerUrl, authorizationUrl, tokenUrl, refreshUrl);
479
+ }
480
+ catch {
481
+ // Auth probe failed - continue without auth
482
+ }
483
+ }
484
+ // Auto-fetch tools if not yet loaded (CLI flow for no-auth servers)
485
+ const currentTools = inputs[constants_2.QuestionNames.MCPForDAAvailableTools];
486
+ if ((!currentTools || currentTools.length === 0) && mcpServerUrl) {
487
+ try {
488
+ const { fetchMCPTools } = await Promise.resolve().then(() => tslib_1.__importStar(require("../component/utils/mcpToolFetcher")));
489
+ const result = await fetchMCPTools(mcpServerUrl);
490
+ if (!result.requiresAuth && result.tools.length > 0) {
491
+ inputs[constants_2.QuestionNames.MCPForDAAvailableTools] = result.tools;
492
+ if (!inputs[constants_2.QuestionNames.MCPForDAPreFetchTools]) {
493
+ inputs[constants_2.QuestionNames.MCPForDAPreFetchTools] = result.tools.map((t) => t.name);
494
+ }
495
+ }
496
+ else if (result.requiresAuth) {
497
+ // Store auth metadata for later use
498
+ inputs[constants_2.QuestionNames.MCPForDAAuth] = "OAuthPluginVault";
499
+ if (result.authMetadataUrl) {
500
+ inputs[constants_2.QuestionNames.MCPForDAAuthMetadataUrl] = result.authMetadataUrl;
501
+ }
502
+ mcpWarnings.push({
503
+ type: "mcpAuthRequired",
504
+ content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.authRequired", mcpServerUrl, mcpAddActionHint),
505
+ });
506
+ }
507
+ else {
508
+ mcpWarnings.push({
509
+ type: "mcpNoToolsFetched",
510
+ content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.noToolsFetched", mcpServerUrl, mcpAddActionHint),
511
+ });
480
512
  }
481
513
  }
482
- catch (error) {
514
+ catch {
483
515
  mcpWarnings.push({
484
- type: "mcpAuthMetadataError",
485
- content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.mcpAuthMetadataMissingError", error.message),
516
+ type: "mcpFetchError",
517
+ content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.fetchError", mcpServerUrl, mcpAddActionHint),
486
518
  });
487
519
  }
488
520
  }
489
- }
490
- await fs_extra_1.default.ensureFile(destinationPluginManifestPath);
491
- await fs_extra_1.default.writeJSON(destinationPluginManifestPath, pluginManifest, { spaces: 4 });
492
- const addActionRes = await CopilotGptManifestUtils_1.copilotGptManifestUtils.addAction(declarativeCopilotManifestPath, actionId, (0, utils_1.normalizePath)(path.relative(appPackageFolder, destinationPluginManifestPath), true));
493
- if (addActionRes.isErr()) {
494
- return (0, teamsfx_api_1.err)(addActionRes.error);
495
- }
496
- // Surface warnings for CLI
497
- if (mcpWarnings.length > 0) {
498
- for (const warning of mcpWarnings) {
499
- context.logProvider.warning(warning.content);
521
+ // If no tools available (auth required or fetch failed), skip creating plugin - just warn
522
+ const mcpTools = inputs[constants_2.QuestionNames.MCPForDAAvailableTools];
523
+ const mcpToolsSelected = inputs[constants_2.QuestionNames.MCPForDAPreFetchTools] || [];
524
+ if (!mcpTools || mcpTools.length === 0 || mcpToolsSelected.length === 0) {
525
+ if (mcpWarnings.length > 0) {
526
+ for (const warning of mcpWarnings) {
527
+ context.logProvider.warning(warning.content);
528
+ }
529
+ }
530
+ return (0, teamsfx_api_1.ok)(undefined);
531
+ }
532
+ destinationPluginManifestPath =
533
+ await CopilotGptManifestUtils_1.copilotGptManifestUtils.getDefaultNextAvailablePluginManifestPath(appPackageFolder, undefined);
534
+ const pluginManifest = {
535
+ $schema: "https://developer.microsoft.com/json-schemas/copilot/plugin/v2.4/schema.json",
536
+ schema_version: "v2.4",
537
+ name_for_human: "MCP Action",
538
+ description_for_human: "Action powered by MCP server",
539
+ contact_email: "publisher-email@example.com",
540
+ namespace: "mcpAction",
541
+ functions: [],
542
+ runtimes: [],
543
+ };
544
+ if (mcpTools && mcpTools.length > 0 && mcpToolsSelected.length > 0) {
545
+ const selectedTools = mcpTools.filter((tool) => mcpToolsSelected.includes(tool.name));
546
+ pluginManifest.functions = selectedTools.map((tool) => ({
547
+ name: tool.name,
548
+ description: tool.description || "",
549
+ }));
550
+ // Write mcp-tools file with full tool definitions (no field filtering)
551
+ const mcpToolsFile = `mcp-tools-${suffix}.json`;
552
+ const mcpToolsOutputPath = path.join(appPackageFolder, mcpToolsFile);
553
+ await fs_extra_1.default.writeJSON(mcpToolsOutputPath, { tools: selectedTools }, { spaces: 4 });
554
+ pluginManifest.runtimes = [
555
+ {
556
+ type: "RemoteMCPServer",
557
+ spec: {
558
+ url: mcpServerUrl,
559
+ mcp_tool_description: {
560
+ file: mcpToolsFile,
561
+ },
562
+ },
563
+ run_for_functions: pluginManifest.functions.map((f) => f.name),
564
+ },
565
+ ];
566
+ // Auth handling
567
+ const mcpAuth = inputs[constants_2.QuestionNames.MCPForDAAuth];
568
+ if (mcpAuth === "OAuthPluginVault") {
569
+ const authType = inputs[constants_2.QuestionNames.MCPForDAAuthType];
570
+ if (!authType) {
571
+ return (0, teamsfx_api_1.err)(new teamsfx_api_1.UserError(teamsfx_api_1.Stage.addPlugin, "MissingMCPAuthType", (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.missingAuthType"), (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.missingAuthType")));
572
+ }
573
+ const registrationId = `MCP_DA_AUTH_ID_${actionId.toUpperCase()}`;
574
+ const manifestOAuth = (0, mcpAuthScaffolder_1.deriveMCPManifestOAuth)(authType, registrationId);
575
+ if (manifestOAuth) {
576
+ pluginManifest.runtimes[0].auth = manifestOAuth;
577
+ }
578
+ // Resolve OAuth metadata and inject oauth/register into m365agents.yml
579
+ try {
580
+ const endpoints = await (0, mcpAuthScaffolder_1.resolveMCPAuthEndpoints)(authType, inputs);
581
+ const ymlPath = pathUtils_1.pathUtils.getYmlFilePath(inputs.projectPath);
582
+ if (ymlPath) {
583
+ await (0, mcpAuthScaffolder_1.injectMCPAuthActionToYml)({
584
+ ymlPath,
585
+ authType,
586
+ authName: actionId,
587
+ registrationId,
588
+ mcpServerUrl,
589
+ endpoints,
590
+ });
591
+ }
592
+ }
593
+ catch (error) {
594
+ mcpWarnings.push({
595
+ type: "mcpAuthMetadataError",
596
+ content: (0, localizeUtils_1.getLocalizedString)("core.MCPForDA.mcpAuthMetadataMissingError", error.message),
597
+ });
598
+ }
599
+ }
600
+ }
601
+ await fs_extra_1.default.ensureFile(destinationPluginManifestPath);
602
+ await fs_extra_1.default.writeJSON(destinationPluginManifestPath, pluginManifest, { spaces: 4 });
603
+ const addActionRes = await CopilotGptManifestUtils_1.copilotGptManifestUtils.addAction(declarativeCopilotManifestPath, actionId, (0, utils_1.normalizePath)(path.relative(appPackageFolder, destinationPluginManifestPath), true));
604
+ if (addActionRes.isErr()) {
605
+ return (0, teamsfx_api_1.err)(addActionRes.error);
606
+ }
607
+ // Surface warnings for CLI
608
+ if (mcpWarnings.length > 0) {
609
+ for (const warning of mcpWarnings) {
610
+ context.logProvider.warning(warning.content);
611
+ }
500
612
  }
501
613
  }
502
614
  }
503
615
  else {
504
- const addPluginRes = await (0, helper_1.addExistingPlugin)(declarativeCopilotManifestPath, inputs[constants_2.QuestionNames.PluginManifestFilePath].trim(), inputs[constants_2.QuestionNames.PluginOpenApiSpecFilePath].trim(), actionId, context, teamsfx_api_1.Stage.addPlugin);
616
+ const addPluginRes = await exports.fxCoreDeclarativeAgentDeps.addExistingPlugin(declarativeCopilotManifestPath, inputs[constants_2.QuestionNames.PluginManifestFilePath].trim(), inputs[constants_2.QuestionNames.PluginOpenApiSpecFilePath].trim(), actionId, context, teamsfx_api_1.Stage.addPlugin);
505
617
  if (addPluginRes.isErr()) {
506
618
  return (0, teamsfx_api_1.err)(addPluginRes.error);
507
619
  }
@@ -541,7 +653,7 @@ class FxCoreDeclarativeAgentPart {
541
653
  }
542
654
  // Derive a server entry name from the URL host using the same logic as the
543
655
  // "DA with MCP" scaffolding template variable `ServerName`.
544
- const serverName = (0, helper_1.deriveMCPServerNameFromUrl)(mcpServerUrl);
656
+ const serverName = exports.fxCoreDeclarativeAgentDeps.deriveMCPServerNameFromUrl(mcpServerUrl);
545
657
  const mcpConfigDir = path.join(projectPath, ".vscode");
546
658
  const mcpConfigPath = path.join(mcpConfigDir, "mcp.json");
547
659
  let mcpConfig = { servers: {} };