@microsoft/teamsfx-core 3.1.4 → 3.1.5-alpha.3256bba3fe.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 (238) hide show
  1. package/README.md +4 -0
  2. package/build/common/featureFlags.d.ts +5 -0
  3. package/build/common/featureFlags.d.ts.map +1 -1
  4. package/build/common/featureFlags.js +5 -0
  5. package/build/common/featureFlags.js.map +1 -1
  6. package/build/common/telemetry.d.ts +2 -1
  7. package/build/common/telemetry.d.ts.map +1 -1
  8. package/build/common/telemetry.js +1 -0
  9. package/build/common/telemetry.js.map +1 -1
  10. package/build/common/templates-config.json +2 -2
  11. package/build/common/wrappedAxiosClient.d.ts +5 -0
  12. package/build/common/wrappedAxiosClient.d.ts.map +1 -1
  13. package/build/common/wrappedAxiosClient.js +95 -4
  14. package/build/common/wrappedAxiosClient.js.map +1 -1
  15. package/build/component/configManager/actionInjector.d.ts +1 -1
  16. package/build/component/configManager/actionInjector.d.ts.map +1 -1
  17. package/build/component/configManager/actionInjector.js +2 -2
  18. package/build/component/configManager/actionInjector.js.map +1 -1
  19. package/build/component/driver/copilotAgent/publish.d.ts.map +1 -1
  20. package/build/component/driver/copilotAgent/publish.js +1 -1
  21. package/build/component/driver/copilotAgent/publish.js.map +1 -1
  22. package/build/component/driver/dcr/create.d.ts.map +1 -1
  23. package/build/component/driver/dcr/create.js +47 -14
  24. package/build/component/driver/dcr/create.js.map +1 -1
  25. package/build/component/driver/dcr/interface/createDcrArgs.d.ts +4 -1
  26. package/build/component/driver/dcr/interface/createDcrArgs.d.ts.map +1 -1
  27. package/build/component/driver/index.d.ts +0 -1
  28. package/build/component/driver/index.d.ts.map +1 -1
  29. package/build/component/driver/index.js +0 -1
  30. package/build/component/driver/index.js.map +1 -1
  31. package/build/component/driver/m365/acquire.d.ts.map +1 -1
  32. package/build/component/driver/m365/acquire.js +2 -2
  33. package/build/component/driver/m365/acquire.js.map +1 -1
  34. package/build/component/driver/oauth/create.d.ts.map +1 -1
  35. package/build/component/driver/oauth/create.js +16 -2
  36. package/build/component/driver/oauth/create.js.map +1 -1
  37. package/build/component/driver/oauth/error/oauthSupportedAccountTypesUnsupportedCloud.d.ts +5 -0
  38. package/build/component/driver/oauth/error/oauthSupportedAccountTypesUnsupportedCloud.d.ts.map +1 -0
  39. package/build/component/driver/oauth/error/oauthSupportedAccountTypesUnsupportedCloud.js +13 -0
  40. package/build/component/driver/oauth/error/oauthSupportedAccountTypesUnsupportedCloud.js.map +1 -0
  41. package/build/component/driver/oauth/interface/createOauthArgs.d.ts +1 -0
  42. package/build/component/driver/oauth/interface/createOauthArgs.d.ts.map +1 -1
  43. package/build/component/driver/oauth/interface/updateOauthArgs.d.ts +1 -0
  44. package/build/component/driver/oauth/interface/updateOauthArgs.d.ts.map +1 -1
  45. package/build/component/driver/oauth/update.d.ts.map +1 -1
  46. package/build/component/driver/oauth/update.js +26 -4
  47. package/build/component/driver/oauth/update.js.map +1 -1
  48. package/build/component/driver/oauth/utility/supportedAccountTypes.d.ts +6 -0
  49. package/build/component/driver/oauth/utility/supportedAccountTypes.d.ts.map +1 -0
  50. package/build/component/driver/oauth/utility/supportedAccountTypes.js +31 -0
  51. package/build/component/driver/oauth/utility/supportedAccountTypes.js.map +1 -0
  52. package/build/component/driver/teamsApp/constants.d.ts +5 -0
  53. package/build/component/driver/teamsApp/constants.d.ts.map +1 -1
  54. package/build/component/driver/teamsApp/constants.js +5 -0
  55. package/build/component/driver/teamsApp/constants.js.map +1 -1
  56. package/build/component/driver/teamsApp/interfaces/DcrRegistration.d.ts +5 -2
  57. package/build/component/driver/teamsApp/interfaces/DcrRegistration.d.ts.map +1 -1
  58. package/build/component/driver/teamsApp/interfaces/OauthRegistration.d.ts +6 -0
  59. package/build/component/driver/teamsApp/interfaces/OauthRegistration.d.ts.map +1 -1
  60. package/build/component/driver/teamsApp/interfaces/OauthRegistration.js +5 -1
  61. package/build/component/driver/teamsApp/interfaces/OauthRegistration.js.map +1 -1
  62. package/build/component/generator/generatorProvider.d.ts.map +1 -1
  63. package/build/component/generator/generatorProvider.js +0 -3
  64. package/build/component/generator/generatorProvider.js.map +1 -1
  65. package/build/component/generator/templates/templateNames.d.ts +1 -1
  66. package/build/component/generator/templates/templateNames.d.ts.map +1 -1
  67. package/build/component/m365/packageService.d.ts +4 -3
  68. package/build/component/m365/packageService.d.ts.map +1 -1
  69. package/build/component/m365/packageService.js +34 -30
  70. package/build/component/m365/packageService.js.map +1 -1
  71. package/build/component/m365/serviceConstant.d.ts.map +1 -1
  72. package/build/component/m365/serviceConstant.js +5 -0
  73. package/build/component/m365/serviceConstant.js.map +1 -1
  74. package/build/component/m365/skills/graphSkillFileStore.d.ts +14 -0
  75. package/build/component/m365/skills/graphSkillFileStore.d.ts.map +1 -0
  76. package/build/component/m365/skills/graphSkillFileStore.js +164 -0
  77. package/build/component/m365/skills/graphSkillFileStore.js.map +1 -0
  78. package/build/component/m365/skills/incrementalSkillUpload.d.ts +6 -0
  79. package/build/component/m365/skills/incrementalSkillUpload.d.ts.map +1 -0
  80. package/build/component/m365/skills/incrementalSkillUpload.js +70 -0
  81. package/build/component/m365/skills/incrementalSkillUpload.js.map +1 -0
  82. package/build/component/m365/skills/skillDirectoryClient.d.ts +12 -0
  83. package/build/component/m365/skills/skillDirectoryClient.d.ts.map +1 -0
  84. package/build/component/m365/skills/skillDirectoryClient.js +150 -0
  85. package/build/component/m365/skills/skillDirectoryClient.js.map +1 -0
  86. package/build/component/m365/skills/skillFileSync.d.ts +35 -0
  87. package/build/component/m365/skills/skillFileSync.d.ts.map +1 -0
  88. package/build/component/m365/skills/skillFileSync.js +256 -0
  89. package/build/component/m365/skills/skillFileSync.js.map +1 -0
  90. package/build/component/m365/skills/skillPackage.d.ts +40 -0
  91. package/build/component/m365/skills/skillPackage.d.ts.map +1 -0
  92. package/build/component/m365/skills/skillPackage.js +471 -0
  93. package/build/component/m365/skills/skillPackage.js.map +1 -0
  94. package/build/component/m365/skills/skillRequest.d.ts +7 -0
  95. package/build/component/m365/skills/skillRequest.d.ts.map +1 -0
  96. package/build/component/m365/skills/skillRequest.js +91 -0
  97. package/build/component/m365/skills/skillRequest.js.map +1 -0
  98. package/build/component/utils/mcpAuthScaffolder.d.ts +5 -20
  99. package/build/component/utils/mcpAuthScaffolder.d.ts.map +1 -1
  100. package/build/component/utils/mcpAuthScaffolder.js +9 -24
  101. package/build/component/utils/mcpAuthScaffolder.js.map +1 -1
  102. package/build/core/FxCore.d.ts +2 -4
  103. package/build/core/FxCore.d.ts.map +1 -1
  104. package/build/core/FxCore.js +7 -22
  105. package/build/core/FxCore.js.map +1 -1
  106. package/build/question/create.d.ts +0 -6
  107. package/build/question/create.d.ts.map +1 -1
  108. package/build/question/create.js +119 -281
  109. package/build/question/create.js.map +1 -1
  110. package/build/question/generator.js +0 -2
  111. package/build/question/generator.js.map +1 -1
  112. package/build/question/index.d.ts +0 -1
  113. package/build/question/index.d.ts.map +1 -1
  114. package/build/question/index.js +0 -3
  115. package/build/question/index.js.map +1 -1
  116. package/build/question/inputs/index.d.ts +0 -1
  117. package/build/question/inputs/index.d.ts.map +1 -1
  118. package/build/question/inputs/index.js +0 -1
  119. package/build/question/inputs/index.js.map +1 -1
  120. package/build/question/options/CreateProjectOptions.d.ts.map +1 -1
  121. package/build/question/options/CreateProjectOptions.js +0 -1
  122. package/build/question/options/CreateProjectOptions.js.map +1 -1
  123. package/build/question/options/index.d.ts +0 -1
  124. package/build/question/options/index.d.ts.map +1 -1
  125. package/build/question/options/index.js +0 -1
  126. package/build/question/options/index.js.map +1 -1
  127. package/build/question/other.d.ts +0 -1
  128. package/build/question/other.d.ts.map +1 -1
  129. package/build/question/other.js +158 -214
  130. package/build/question/other.js.map +1 -1
  131. package/build/question/scaffold/vsc/CapabilityOptions.d.ts +0 -1
  132. package/build/question/scaffold/vsc/CapabilityOptions.d.ts.map +1 -1
  133. package/build/question/scaffold/vsc/CapabilityOptions.js +0 -9
  134. package/build/question/scaffold/vsc/CapabilityOptions.js.map +1 -1
  135. package/build/question/scaffold/vsc/teamsProjectTypeNode.d.ts.map +1 -1
  136. package/build/question/scaffold/vsc/teamsProjectTypeNode.js +0 -24
  137. package/build/question/scaffold/vsc/teamsProjectTypeNode.js.map +1 -1
  138. package/build/v4/mcp/mcpAuthAction.d.ts +0 -1
  139. package/build/v4/mcp/mcpAuthAction.d.ts.map +1 -1
  140. package/build/v4/mcp/mcpAuthAction.js +5 -7
  141. package/build/v4/mcp/mcpAuthAction.js.map +1 -1
  142. package/build/v4/mcp/mcpAuthScaffold.d.ts.map +1 -1
  143. package/build/v4/mcp/mcpAuthScaffold.js +4 -12
  144. package/build/v4/mcp/mcpAuthScaffold.js.map +1 -1
  145. package/package.json +11 -8
  146. package/resource/package.nls.cs.json +72 -68
  147. package/resource/package.nls.de.json +72 -68
  148. package/resource/package.nls.es.json +72 -68
  149. package/resource/package.nls.fr.json +72 -68
  150. package/resource/package.nls.it.json +72 -68
  151. package/resource/package.nls.ja.json +72 -68
  152. package/resource/package.nls.json +15 -58
  153. package/resource/package.nls.ko.json +72 -68
  154. package/resource/package.nls.pl.json +72 -68
  155. package/resource/package.nls.pt-BR.json +72 -68
  156. package/resource/package.nls.ru.json +72 -68
  157. package/resource/package.nls.tr.json +72 -68
  158. package/resource/package.nls.zh-Hans.json +72 -68
  159. package/resource/package.nls.zh-Hant.json +72 -68
  160. package/resource/yaml-schema/v1.13/yaml.schema.json +71 -33
  161. package/resource/yaml-schema/yaml.schema.json +71 -33
  162. package/templates/fallback/common.zip +0 -0
  163. package/templates/fallback/csharp.zip +0 -0
  164. package/templates/fallback/js.zip +0 -0
  165. package/templates/fallback/python.zip +0 -0
  166. package/templates/fallback/ts.zip +0 -0
  167. package/templates/metadata.zip +0 -0
  168. package/templates/v4/floor.json +1 -1
  169. package/templates/v4/templates-metadata.zip +0 -0
  170. package/templates/v4/templates.zip +0 -0
  171. package/build/common/treatmentVariables.d.ts +0 -5
  172. package/build/common/treatmentVariables.d.ts.map +0 -1
  173. package/build/common/treatmentVariables.js +0 -10
  174. package/build/common/treatmentVariables.js.map +0 -1
  175. package/build/component/driver/add/addWebPart.d.ts +0 -12
  176. package/build/component/driver/add/addWebPart.d.ts.map +0 -1
  177. package/build/component/driver/add/addWebPart.js +0 -109
  178. package/build/component/driver/add/addWebPart.js.map +0 -1
  179. package/build/component/driver/add/error/noConfigurationError.d.ts +0 -5
  180. package/build/component/driver/add/error/noConfigurationError.d.ts.map +0 -1
  181. package/build/component/driver/add/error/noConfigurationError.js +0 -22
  182. package/build/component/driver/add/error/noConfigurationError.js.map +0 -1
  183. package/build/component/driver/add/interface/AddWebPartArgs.d.ts +0 -27
  184. package/build/component/driver/add/interface/AddWebPartArgs.d.ts.map +0 -1
  185. package/build/component/driver/add/interface/AddWebPartArgs.js +0 -5
  186. package/build/component/driver/add/interface/AddWebPartArgs.js.map +0 -1
  187. package/build/component/driver/add/utility/constants.d.ts +0 -8
  188. package/build/component/driver/add/utility/constants.d.ts.map +0 -1
  189. package/build/component/driver/add/utility/constants.js +0 -14
  190. package/build/component/driver/add/utility/constants.js.map +0 -1
  191. package/build/component/generator/spfx/depsChecker/dependencyChecker.d.ts +0 -4
  192. package/build/component/generator/spfx/depsChecker/dependencyChecker.d.ts.map +0 -1
  193. package/build/component/generator/spfx/depsChecker/dependencyChecker.js +0 -5
  194. package/build/component/generator/spfx/depsChecker/dependencyChecker.js.map +0 -1
  195. package/build/component/generator/spfx/depsChecker/generatorChecker.d.ts +0 -20
  196. package/build/component/generator/spfx/depsChecker/generatorChecker.d.ts.map +0 -1
  197. package/build/component/generator/spfx/depsChecker/generatorChecker.js +0 -129
  198. package/build/component/generator/spfx/depsChecker/generatorChecker.js.map +0 -1
  199. package/build/component/generator/spfx/depsChecker/yoChecker.d.ts +0 -20
  200. package/build/component/generator/spfx/depsChecker/yoChecker.d.ts.map +0 -1
  201. package/build/component/generator/spfx/depsChecker/yoChecker.js +0 -143
  202. package/build/component/generator/spfx/depsChecker/yoChecker.js.map +0 -1
  203. package/build/component/generator/spfx/error.d.ts +0 -15
  204. package/build/component/generator/spfx/error.d.ts.map +0 -1
  205. package/build/component/generator/spfx/error.js +0 -124
  206. package/build/component/generator/spfx/error.js.map +0 -1
  207. package/build/component/generator/spfx/spfxGenerator.d.ts +0 -30
  208. package/build/component/generator/spfx/spfxGenerator.d.ts.map +0 -1
  209. package/build/component/generator/spfx/spfxGenerator.js +0 -684
  210. package/build/component/generator/spfx/spfxGenerator.js.map +0 -1
  211. package/build/component/generator/spfx/utils/constants.d.ts +0 -45
  212. package/build/component/generator/spfx/utils/constants.d.ts.map +0 -1
  213. package/build/component/generator/spfx/utils/constants.js +0 -56
  214. package/build/component/generator/spfx/utils/constants.js.map +0 -1
  215. package/build/component/generator/spfx/utils/progress-helper.d.ts +0 -9
  216. package/build/component/generator/spfx/utils/progress-helper.d.ts.map +0 -1
  217. package/build/component/generator/spfx/utils/progress-helper.js +0 -22
  218. package/build/component/generator/spfx/utils/progress-helper.js.map +0 -1
  219. package/build/component/generator/spfx/utils/telemetry-helper.d.ts +0 -14
  220. package/build/component/generator/spfx/utils/telemetry-helper.d.ts.map +0 -1
  221. package/build/component/generator/spfx/utils/telemetry-helper.js +0 -31
  222. package/build/component/generator/spfx/utils/telemetry-helper.js.map +0 -1
  223. package/build/component/generator/spfx/utils/telemetryEvents.d.ts +0 -20
  224. package/build/component/generator/spfx/utils/telemetryEvents.d.ts.map +0 -1
  225. package/build/component/generator/spfx/utils/telemetryEvents.js +0 -27
  226. package/build/component/generator/spfx/utils/telemetryEvents.js.map +0 -1
  227. package/build/component/generator/spfx/utils/utils.d.ts +0 -19
  228. package/build/component/generator/spfx/utils/utils.d.ts.map +0 -1
  229. package/build/component/generator/spfx/utils/utils.js +0 -184
  230. package/build/component/generator/spfx/utils/utils.js.map +0 -1
  231. package/build/question/inputs/SPFxAddWebpartInputs.d.ts +0 -20
  232. package/build/question/inputs/SPFxAddWebpartInputs.d.ts.map +0 -1
  233. package/build/question/inputs/SPFxAddWebpartInputs.js +0 -5
  234. package/build/question/inputs/SPFxAddWebpartInputs.js.map +0 -1
  235. package/build/question/options/SPFxAddWebpartOptions.d.ts +0 -10
  236. package/build/question/options/SPFxAddWebpartOptions.d.ts.map +0 -1
  237. package/build/question/options/SPFxAddWebpartOptions.js +0 -50
  238. package/build/question/options/SPFxAddWebpartOptions.js.map +0 -1
@@ -0,0 +1,471 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT license.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.buildSkillTransportPackage = buildSkillTransportPackage;
6
+ exports.validateSkillTransportPackage = validateSkillTransportPackage;
7
+ exports.readSkillPackage = readSkillPackage;
8
+ const tslib_1 = require("tslib");
9
+ const teamsfx_api_1 = require("@microsoft/teamsfx-api");
10
+ const adm_zip_1 = tslib_1.__importDefault(require("adm-zip"));
11
+ const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
12
+ const path_1 = require("path");
13
+ const util_1 = require("util");
14
+ const localizeUtils_1 = require("../../../common/localizeUtils");
15
+ /** Build the verified MOS reference package without changing the portable source package. */
16
+ function buildSkillTransportPackage(source, folders) {
17
+ return processSkillTransportPackage(source, folders);
18
+ }
19
+ /** Validate before remote mutations; remote-GUID associations require the final builder mapping. */
20
+ function validateSkillTransportPackage(source) {
21
+ return processSkillTransportPackage(source).map(() => undefined);
22
+ }
23
+ function processSkillTransportPackage(input, folders) {
24
+ try {
25
+ if (folders) {
26
+ if (folders.size !== input.skills.length)
27
+ return invalidPackage();
28
+ const remoteIds = new Set();
29
+ for (const skill of input.skills) {
30
+ const remote = folders.get(skill.folder);
31
+ if (!remote || !isGuid(remote) || remoteIds.has(remote.toLowerCase())) {
32
+ return invalidPackage();
33
+ }
34
+ remoteIds.add(remote.toLowerCase());
35
+ }
36
+ }
37
+ if (input.skills.length === 0)
38
+ return (0, teamsfx_api_1.ok)(Buffer.from(input.data));
39
+ const zip = new adm_zip_1.default(input.data);
40
+ const entries = new Map();
41
+ for (const entry of zip.getEntries()) {
42
+ const path = confinedPath(entry.entryName);
43
+ if (!path || path.toLowerCase().startsWith("packagemetadata.json/")) {
44
+ return invalidPackage();
45
+ }
46
+ entries.set(path, entry);
47
+ }
48
+ // Do not create a second, differently cased metadata entry or replace a directory.
49
+ const metadataEntry = [...entries].find(([path]) => path.toLowerCase() === "packagemetadata.json");
50
+ let metadata = {};
51
+ if (metadataEntry) {
52
+ if (metadataEntry[0] !== "packageMetadata.json" || metadataEntry[1].isDirectory) {
53
+ return invalidPackage();
54
+ }
55
+ const parsed = JSON.parse(decodeText(metadataEntry[1].getData()));
56
+ if (!isRecord(parsed))
57
+ return invalidPackage();
58
+ metadata = parsed;
59
+ }
60
+ if (metadata.builderInfo !== undefined && !isRecord(metadata.builderInfo)) {
61
+ return invalidPackage();
62
+ }
63
+ if (metadata.skills !== undefined && !Array.isArray(metadata.skills)) {
64
+ return invalidPackage();
65
+ }
66
+ const existingSkills = new Map();
67
+ const deferredSkills = [];
68
+ const metadataFolders = new Set();
69
+ const metadataNames = new Set();
70
+ if (Array.isArray(metadata.skills)) {
71
+ if (metadata.skills.length > input.skills.length)
72
+ return invalidPackage();
73
+ for (const existing of metadata.skills) {
74
+ if (!isRecord(existing) || typeof existing.folder !== "string")
75
+ return invalidPackage();
76
+ const existingFolder = existing.folder;
77
+ const folder = confinedPath(existingFolder);
78
+ if (!folder ||
79
+ metadataFolders.has(folder.toLowerCase()) ||
80
+ (existing.name !== undefined &&
81
+ (typeof existing.name !== "string" ||
82
+ !input.skills.some((skill) => skill.name === existing.name) ||
83
+ metadataNames.has(existing.name))) ||
84
+ (existing.description !== undefined &&
85
+ (typeof existing.description !== "string" ||
86
+ !existing.description.trim() ||
87
+ existing.description.length > 1024))) {
88
+ return invalidPackage();
89
+ }
90
+ metadataFolders.add(folder.toLowerCase());
91
+ if (typeof existing.name === "string")
92
+ metadataNames.add(existing.name);
93
+ const matches = input.skills.filter((skill) => skill.folder === folder ||
94
+ folders?.get(skill.folder)?.toLowerCase() === existingFolder.toLowerCase());
95
+ if (!folders && matches.length === 0 && isGuid(existingFolder)) {
96
+ deferredSkills.push(existing);
97
+ continue;
98
+ }
99
+ const match = matches[0];
100
+ if (matches.length !== 1 ||
101
+ !match ||
102
+ existingSkills.has(match.folder) ||
103
+ (existing.name !== undefined && existing.name !== match.name)) {
104
+ return invalidPackage();
105
+ }
106
+ existingSkills.set(match.folder, existing);
107
+ }
108
+ }
109
+ const transportMetadata = {
110
+ ...metadata,
111
+ builderInfo: {
112
+ ...(isRecord(metadata.builderInfo) ? metadata.builderInfo : {}),
113
+ builderName: "TeamsToolKit",
114
+ },
115
+ skills: [
116
+ ...input.skills.map((skill) => ({
117
+ ...existingSkills.get(skill.folder),
118
+ folder: folders?.get(skill.folder),
119
+ name: skill.name,
120
+ description: skill.description,
121
+ })),
122
+ ...deferredSkills,
123
+ ],
124
+ };
125
+ const changedManifests = new Map();
126
+ for (const reference of input.references) {
127
+ const manifest = changedManifests.get(reference.manifestPath) ??
128
+ (reference.manifestPath === "manifest.json"
129
+ ? input.manifest
130
+ : input.declarativeAgents.find((candidate) => candidate.path === reference.manifestPath)
131
+ ?.manifest);
132
+ if (!manifest)
133
+ return invalidPackage();
134
+ const skills = manifest[reference.property];
135
+ if (!Array.isArray(skills) || !isRecord(skills[reference.index]))
136
+ return invalidPackage();
137
+ const updatedSkills = [...skills];
138
+ updatedSkills[reference.index] = {
139
+ ...skills[reference.index],
140
+ folder: folders?.get(reference.folder),
141
+ };
142
+ changedManifests.set(reference.manifestPath, {
143
+ ...manifest,
144
+ [reference.property]: updatedSkills,
145
+ });
146
+ }
147
+ const roots = input.skills.map((skill) => skill.folder.toLowerCase());
148
+ const documents = new Map([
149
+ ["manifest.json", changedManifests.get("manifest.json") ?? input.manifest],
150
+ ["packageMetadata.json", transportMetadata],
151
+ ...input.declarativeAgents.map((agent) => [
152
+ agent.path,
153
+ changedManifests.get(agent.path) ?? agent.manifest,
154
+ ]),
155
+ ]);
156
+ if (!safeRemainingReferences(documents, entries, roots))
157
+ return invalidPackage();
158
+ if (!folders)
159
+ return (0, teamsfx_api_1.ok)(input.data);
160
+ for (const [path, manifest] of changedManifests) {
161
+ const entry = entries.get(path);
162
+ if (!entry)
163
+ return invalidPackage();
164
+ zip.updateFile(entry, Buffer.from(JSON.stringify(manifest, undefined, 2)));
165
+ }
166
+ if (metadataEntry) {
167
+ zip.updateFile(metadataEntry[1], Buffer.from(JSON.stringify(transportMetadata, undefined, 2)));
168
+ }
169
+ else {
170
+ zip.addFile("packageMetadata.json", Buffer.from(JSON.stringify(transportMetadata, undefined, 2)));
171
+ }
172
+ for (const [path, entry] of entries) {
173
+ if (insideSkillRoot(path, roots))
174
+ zip.deleteFile(entry);
175
+ }
176
+ return (0, teamsfx_api_1.ok)(zip.toBuffer());
177
+ }
178
+ catch {
179
+ return invalidPackage();
180
+ }
181
+ }
182
+ function isGuid(value) {
183
+ return /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i.test(value);
184
+ }
185
+ function insideSkillRoot(path, roots) {
186
+ const lower = path.toLowerCase();
187
+ return roots.some((root) => lower === root || lower.startsWith(`${root}/`));
188
+ }
189
+ /** Follow local JSON/YAML artifact references, not remote URLs or arbitrary unreferenced files. */
190
+ function safeRemainingReferences(documents, entries, roots) {
191
+ const byLowerPath = new Map([...entries].map(([path, entry]) => [path.toLowerCase(), entry]));
192
+ for (const [documentPath, document] of documents) {
193
+ if (insideSkillRoot(documentPath, roots))
194
+ return false;
195
+ const pending = [document];
196
+ const visited = new Set();
197
+ while (pending.length) {
198
+ const value = pending.pop();
199
+ if (typeof value === "object" && value !== null) {
200
+ if (visited.has(value))
201
+ continue;
202
+ visited.add(value);
203
+ }
204
+ if (Array.isArray(value)) {
205
+ pending.push(...value);
206
+ }
207
+ else if (isRecord(value)) {
208
+ pending.push(...Object.values(value));
209
+ }
210
+ else if (typeof value === "string") {
211
+ const reference = value.match(/^\$\[file\(['"](.+)['"]\)\]$/)?.[1] ?? value;
212
+ if (/^[a-z][a-z0-9+.-]*:/i.test(reference))
213
+ continue;
214
+ let decoded;
215
+ try {
216
+ decoded = decodeURIComponent(reference);
217
+ }
218
+ catch {
219
+ decoded = reference;
220
+ }
221
+ const path = decoded.replace(/\\/g, "/").split(/[?#]/)[0];
222
+ const candidates = [
223
+ path_1.posix.normalize(path).replace(/^\.\//, ""),
224
+ path_1.posix.normalize(path_1.posix.join(path_1.posix.dirname(documentPath), path)),
225
+ ];
226
+ for (const candidate of candidates) {
227
+ if (insideSkillRoot(candidate, roots))
228
+ return false;
229
+ const entry = byLowerPath.get(candidate.toLowerCase());
230
+ if (!entry || entry.isDirectory || !/\.(json|ya?ml)$/i.test(candidate))
231
+ continue;
232
+ const entryPath = confinedPath(entry.entryName);
233
+ if (!entryPath || documents.has(entryPath))
234
+ continue;
235
+ const text = decodeText(entry.getData());
236
+ const parsed = /\.json$/i.test(candidate) ? JSON.parse(text) : js_yaml_1.default.load(text);
237
+ documents.set(entryPath, parsed);
238
+ }
239
+ }
240
+ }
241
+ }
242
+ return true;
243
+ }
244
+ /** Inventory and validate only; this function never extracts files or performs remote I/O. */
245
+ function readSkillPackage(data) {
246
+ try {
247
+ const entries = readPackageEntries(new adm_zip_1.default(data));
248
+ if (entries.isErr())
249
+ return (0, teamsfx_api_1.err)(entries.error);
250
+ const root = readRootManifest(entries.value);
251
+ if (root.isErr())
252
+ return (0, teamsfx_api_1.err)(root.error);
253
+ const agents = readAgentManifests(entries.value, root.value.manifest);
254
+ if (agents.isErr())
255
+ return (0, teamsfx_api_1.err)(agents.error);
256
+ const rootReferences = readSkillReferences(root.value.manifest, "manifest.json", "agentSkills");
257
+ if (rootReferences.isErr())
258
+ return (0, teamsfx_api_1.err)(rootReferences.error);
259
+ const references = rootReferences.value;
260
+ const properties = ["agent_skills", "x-agent_skills"];
261
+ for (const agent of agents.value) {
262
+ for (const property of properties) {
263
+ const agentReferences = readSkillReferences(agent.manifest, agent.path, property);
264
+ if (agentReferences.isErr())
265
+ return (0, teamsfx_api_1.err)(agentReferences.error);
266
+ references.push(...agentReferences.value);
267
+ }
268
+ }
269
+ const skills = readLocalSkills(entries.value, references);
270
+ if (skills.isErr())
271
+ return (0, teamsfx_api_1.err)(skills.error);
272
+ return (0, teamsfx_api_1.ok)({
273
+ data: Buffer.from(data),
274
+ ...root.value,
275
+ declarativeAgents: agents.value,
276
+ references,
277
+ skills: skills.value,
278
+ });
279
+ }
280
+ catch {
281
+ // Parser errors may contain entire manifest/frontmatter values. Do not expose those values.
282
+ return invalidPackage();
283
+ }
284
+ }
285
+ function readPackageEntries(zip) {
286
+ const entries = new Map();
287
+ const paths = new Map();
288
+ for (const entry of zip.getEntries()) {
289
+ const path = confinedPath(entry.entryName);
290
+ const mode = (entry.attr >>> 16) & 0xf000;
291
+ if (!path || entries.has(path) || (mode !== 0 && mode !== 0x8000 && mode !== 0x4000)) {
292
+ return invalidPackage();
293
+ }
294
+ const segments = path.split("/");
295
+ for (let index = 0; index < segments.length; index++) {
296
+ const prefix = segments.slice(0, index + 1).join("/");
297
+ const directory = index < segments.length - 1 || entry.isDirectory;
298
+ const existing = paths.get(prefix.toLowerCase());
299
+ if (existing && (existing.path !== prefix || existing.directory !== directory)) {
300
+ return invalidPackage();
301
+ }
302
+ paths.set(prefix.toLowerCase(), { path: prefix, directory });
303
+ }
304
+ entries.set(path, entry);
305
+ }
306
+ return (0, teamsfx_api_1.ok)(entries);
307
+ }
308
+ function readRootManifest(entries) {
309
+ const entry = entries.get("manifest.json");
310
+ if (!entry || entry.isDirectory)
311
+ return invalidPackage();
312
+ const manifest = JSON.parse(decodeText(entry.getData()));
313
+ if (!isRecord(manifest) ||
314
+ typeof manifest.id !== "string" ||
315
+ !isGuid(manifest.id) ||
316
+ typeof manifest.version !== "string" ||
317
+ !manifest.version.trim() ||
318
+ typeof manifest.manifestVersion !== "string" ||
319
+ !manifest.manifestVersion.trim()) {
320
+ return invalidPackage();
321
+ }
322
+ // Guards cover future schemas; validate the two agent-list spellings separately below.
323
+ teamsfx_api_1.TeamsManifestConverter.jsonToManifest(JSON.stringify({ ...manifest, copilotAgents: undefined, copilotExtensions: undefined }));
324
+ return (0, teamsfx_api_1.ok)({ manifest, agentId: manifest.id });
325
+ }
326
+ function readAgentManifests(entries, manifest) {
327
+ const result = [];
328
+ const agentPaths = new Set();
329
+ const agentLists = [
330
+ { container: manifest.copilotAgents, property: "declarativeAgents" },
331
+ { container: manifest.copilotExtensions, property: "declarativeCopilots" },
332
+ ];
333
+ for (const { container, property } of agentLists) {
334
+ if (container === undefined)
335
+ continue;
336
+ if (!isRecord(container))
337
+ return invalidPackage();
338
+ const agents = container[property];
339
+ if (agents === undefined)
340
+ continue;
341
+ if (!Array.isArray(agents))
342
+ return invalidPackage();
343
+ for (const agent of agents) {
344
+ if (!isRecord(agent) ||
345
+ typeof agent.id !== "string" ||
346
+ !agent.id.trim() ||
347
+ typeof agent.file !== "string") {
348
+ return invalidPackage();
349
+ }
350
+ const path = confinedPath(agent.file);
351
+ if (!path)
352
+ return invalidPackage();
353
+ const entry = entries.get(path);
354
+ if (!entry || entry.isDirectory)
355
+ return invalidPackage();
356
+ if (agentPaths.has(path))
357
+ continue;
358
+ agentPaths.add(path);
359
+ const text = decodeText(entry.getData());
360
+ const agentManifest = JSON.parse(text);
361
+ if (!isRecord(agentManifest) ||
362
+ typeof agentManifest.version !== "string" ||
363
+ !agentManifest.version.trim() ||
364
+ typeof agentManifest.name !== "string" ||
365
+ !agentManifest.name.trim()) {
366
+ return invalidPackage();
367
+ }
368
+ teamsfx_api_1.DeclarativeAgentManifestConverter.jsonToManifest(text);
369
+ result.push({ path, manifest: agentManifest });
370
+ }
371
+ }
372
+ return (0, teamsfx_api_1.ok)(result);
373
+ }
374
+ function readLocalSkills(entries, references) {
375
+ const skills = [];
376
+ const folders = new Set();
377
+ const names = new Set();
378
+ for (const { folder } of references) {
379
+ if (folders.has(folder))
380
+ continue;
381
+ const name = folder.split("/").pop();
382
+ if (!name ||
383
+ name.length > 64 ||
384
+ !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name) ||
385
+ names.has(name) ||
386
+ [...folders].some((existing) => existing.toLowerCase() === folder.toLowerCase() ||
387
+ existing.toLowerCase().startsWith(`${folder.toLowerCase()}/`) ||
388
+ folder.toLowerCase().startsWith(`${existing.toLowerCase()}/`))) {
389
+ return invalidPackage();
390
+ }
391
+ const skillMd = entries.get(`${folder}/SKILL.md`);
392
+ if (!skillMd || skillMd.isDirectory)
393
+ return invalidPackage();
394
+ const match = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(decodeText(skillMd.getData()));
395
+ if (!match)
396
+ return invalidPackage();
397
+ const metadata = js_yaml_1.default.load(match[1]);
398
+ if (!isRecord(metadata) ||
399
+ metadata.name !== name ||
400
+ typeof metadata.description !== "string" ||
401
+ !metadata.description.trim() ||
402
+ metadata.description.length > 1024) {
403
+ return invalidPackage();
404
+ }
405
+ const files = [];
406
+ for (const [path, entry] of entries) {
407
+ if (path.startsWith(`${folder}/`) && !entry.isDirectory) {
408
+ files.push({ path: path.slice(folder.length + 1), content: entry.getData() });
409
+ }
410
+ }
411
+ files.sort((left, right) => (left.path < right.path ? -1 : left.path > right.path ? 1 : 0));
412
+ skills.push({ folder, name, description: metadata.description, files });
413
+ folders.add(folder);
414
+ names.add(name);
415
+ }
416
+ return (0, teamsfx_api_1.ok)(skills);
417
+ }
418
+ function readSkillReferences(manifest, manifestPath, property) {
419
+ const skills = manifest[property];
420
+ if (skills === undefined)
421
+ return (0, teamsfx_api_1.ok)([]);
422
+ if (!Array.isArray(skills))
423
+ return invalidPackage();
424
+ const references = [];
425
+ for (const [index, skill] of skills.entries()) {
426
+ if (!isRecord(skill))
427
+ return invalidPackage();
428
+ // DA references without a local folder belong to the existing package submission path.
429
+ if (property !== "agentSkills" && !Object.prototype.hasOwnProperty.call(skill, "folder")) {
430
+ continue;
431
+ }
432
+ if (typeof skill.folder !== "string")
433
+ return invalidPackage();
434
+ const folder = confinedPath(skill.folder);
435
+ if (!folder)
436
+ return invalidPackage();
437
+ references.push({ manifestPath, property, index, folder });
438
+ }
439
+ return (0, teamsfx_api_1.ok)(references);
440
+ }
441
+ function isRecord(value) {
442
+ return typeof value === "object" && value !== null && !Array.isArray(value);
443
+ }
444
+ function decodeText(content) {
445
+ return new util_1.TextDecoder("utf-8", { fatal: true }).decode(content);
446
+ }
447
+ function confinedPath(value) {
448
+ if (!value ||
449
+ value.startsWith("/") ||
450
+ /[\\:\u0000-\u001f\u007f<>"|?*]/.test(value) ||
451
+ /%(?:2e|2f|5c)/i.test(value)) {
452
+ return undefined;
453
+ }
454
+ const segments = value.normalize("NFC").split("/");
455
+ if (segments.some((segment) => segment === ".." ||
456
+ (segment !== "." && /[. ]$/.test(segment)) ||
457
+ /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i.test(segment))) {
458
+ return undefined;
459
+ }
460
+ return segments.filter((segment) => segment !== "" && segment !== ".").join("/") || undefined;
461
+ }
462
+ function invalidPackage() {
463
+ const key = "error.m365.skills.invalidPackage";
464
+ return (0, teamsfx_api_1.err)(new teamsfx_api_1.UserError({
465
+ source: "M365",
466
+ name: "InvalidSkillPackage",
467
+ message: (0, localizeUtils_1.getDefaultString)(key),
468
+ displayMessage: (0, localizeUtils_1.getLocalizedString)(key),
469
+ }));
470
+ }
471
+ //# sourceMappingURL=skillPackage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillPackage.js","sourceRoot":"","sources":["../../../../src/component/m365/skills/skillPackage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { FxError, Result } from "@microsoft/teamsfx-api";
2
+ /**
3
+ * Use "never" for directory creation and final package submission.
4
+ * Retried HTTP calls must also set a finite request timeout.
5
+ */
6
+ export declare function requestSkillOperation<T>(request: () => Promise<T>, replaySafe?: boolean | "never"): Promise<Result<T, FxError>>;
7
+ //# sourceMappingURL=skillRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillRequest.d.ts","sourceRoot":"","sources":["../../../../src/component/m365/skills/skillRequest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAO,OAAO,EAAM,MAAM,EAA0B,MAAM,wBAAwB,CAAC;AAQ1F;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,UAAU,GAAE,OAAO,GAAG,OAAc,GACnC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAgE7B"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT license.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.requestSkillOperation = requestSkillOperation;
6
+ const tslib_1 = require("tslib");
7
+ const teamsfx_api_1 = require("@microsoft/teamsfx-api");
8
+ const axios_1 = tslib_1.__importDefault(require("axios"));
9
+ const localizeUtils_1 = require("../../../common/localizeUtils");
10
+ const retryableStatuses = new Set([429, 502, 503, 504]);
11
+ const retryableTransportCodes = new Set(["ECONNRESET", "ETIMEDOUT", "ECONNABORTED", "EAI_AGAIN"]);
12
+ const retryDeadlineMs = 5 * 60 * 1000;
13
+ /**
14
+ * Use "never" for directory creation and final package submission.
15
+ * Retried HTTP calls must also set a finite request timeout.
16
+ */
17
+ async function requestSkillOperation(request, replaySafe = true) {
18
+ const deadline = Date.now() + retryDeadlineMs;
19
+ for (let attempt = 0;; attempt++) {
20
+ try {
21
+ return (0, teamsfx_api_1.ok)(await request());
22
+ }
23
+ catch (error) {
24
+ const status = axios_1.default.isAxiosError(error) ? error.response?.status : undefined;
25
+ const transportCode = axios_1.default.isAxiosError(error) ? error.code : undefined;
26
+ const retryable = replaySafe !== "never" &&
27
+ (status === 429 ||
28
+ (replaySafe === true &&
29
+ ((status !== undefined && retryableStatuses.has(status)) ||
30
+ (status === undefined &&
31
+ transportCode !== undefined &&
32
+ retryableTransportCodes.has(transportCode)))));
33
+ const fallback = 1000 * 2 ** attempt + Math.floor(Math.random() * 250);
34
+ const header = axios_1.default.isAxiosError(error)
35
+ ? error.response?.headers?.["retry-after"]
36
+ : undefined;
37
+ const delay = retryAfterMs(header) ?? fallback;
38
+ if (retryable && attempt < 5 && Date.now() + delay < deadline) {
39
+ await new Promise((resolve) => setTimeout(resolve, delay));
40
+ continue;
41
+ }
42
+ const authorization = status === 401 || status === 403;
43
+ const conflict = status === 409 || status === 412;
44
+ const name = authorization
45
+ ? "SkillUploadAuthorizationFailed"
46
+ : conflict
47
+ ? "SkillUploadConflict"
48
+ : retryable
49
+ ? "SkillUploadRetryExhausted"
50
+ : "SkillUploadRequestFailed";
51
+ const key = authorization
52
+ ? "error.m365.skills.authorization"
53
+ : conflict
54
+ ? "error.m365.skills.conflict"
55
+ : retryable
56
+ ? "error.m365.skills.retryExhausted"
57
+ : "error.m365.skills.requestFailed";
58
+ const options = {
59
+ source: "M365",
60
+ name,
61
+ message: (0, localizeUtils_1.getDefaultString)(key),
62
+ displayMessage: (0, localizeUtils_1.getLocalizedString)(key),
63
+ // Axios errors carry bearer headers and credential-bearing URLs.
64
+ telemetryProperties: {
65
+ status: status?.toString() ?? "transport",
66
+ attempts: (attempt + 1).toString(),
67
+ transportCode: transportCode && retryableTransportCodes.has(transportCode) ? transportCode : "",
68
+ },
69
+ };
70
+ return (0, teamsfx_api_1.err)(authorization ||
71
+ conflict ||
72
+ (status !== undefined && status >= 400 && status < 500 && status !== 429)
73
+ ? new teamsfx_api_1.UserError(options)
74
+ : new teamsfx_api_1.SystemError(options));
75
+ }
76
+ }
77
+ }
78
+ function retryAfterMs(value) {
79
+ if (typeof value !== "string" && typeof value !== "number")
80
+ return undefined;
81
+ const text = String(value).trim();
82
+ if (/^\d+$/.test(text)) {
83
+ const seconds = Number(text);
84
+ return Number.isFinite(seconds) ? seconds * 1000 : undefined;
85
+ }
86
+ if (!/^[A-Za-z]{3},/.test(text))
87
+ return undefined;
88
+ const date = Date.parse(text);
89
+ return Number.isFinite(date) ? Math.max(0, date - Date.now()) : undefined;
90
+ }
91
+ //# sourceMappingURL=skillRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillRequest.js","sourceRoot":"","sources":["../../../../src/component/m365/skills/skillRequest.ts"],"names":[],"mappings":"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"}