@mcp-consultant-tools/azure-devops-admin 35.0.0-beta.1 → 35.0.0-beta.3

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 (58) hide show
  1. package/build/cli/commands/artifact-feed-commands.d.ts +1 -1
  2. package/build/cli/commands/artifact-feed-commands.d.ts.map +1 -1
  3. package/build/cli/commands/artifact-feed-commands.js +65 -1
  4. package/build/cli/commands/artifact-feed-commands.js.map +1 -1
  5. package/build/cli/commands/index.d.ts +1 -0
  6. package/build/cli/commands/index.d.ts.map +1 -1
  7. package/build/cli/commands/index.js +3 -0
  8. package/build/cli/commands/index.js.map +1 -1
  9. package/build/cli/commands/iteration-capacity-commands.d.ts +8 -0
  10. package/build/cli/commands/iteration-capacity-commands.d.ts.map +1 -0
  11. package/build/cli/commands/iteration-capacity-commands.js +121 -0
  12. package/build/cli/commands/iteration-capacity-commands.js.map +1 -0
  13. package/build/cli/commands/pipeline-commands.d.ts.map +1 -1
  14. package/build/cli/commands/pipeline-commands.js +77 -0
  15. package/build/cli/commands/pipeline-commands.js.map +1 -1
  16. package/build/context-factory.d.ts.map +1 -1
  17. package/build/context-factory.js +4 -0
  18. package/build/context-factory.js.map +1 -1
  19. package/build/index.d.ts.map +1 -1
  20. package/build/index.js +4 -0
  21. package/build/index.js.map +1 -1
  22. package/build/services/admin-client.d.ts +13 -0
  23. package/build/services/admin-client.d.ts.map +1 -1
  24. package/build/services/admin-client.js +23 -11
  25. package/build/services/admin-client.js.map +1 -1
  26. package/build/services/artifact-feed-service.d.ts +46 -1
  27. package/build/services/artifact-feed-service.d.ts.map +1 -1
  28. package/build/services/artifact-feed-service.js +179 -0
  29. package/build/services/artifact-feed-service.js.map +1 -1
  30. package/build/services/iteration-capacity-service.d.ts +49 -0
  31. package/build/services/iteration-capacity-service.d.ts.map +1 -0
  32. package/build/services/iteration-capacity-service.js +169 -0
  33. package/build/services/iteration-capacity-service.js.map +1 -0
  34. package/build/services/pipeline-analysis.d.ts +60 -0
  35. package/build/services/pipeline-analysis.d.ts.map +1 -0
  36. package/build/services/pipeline-analysis.js +104 -0
  37. package/build/services/pipeline-analysis.js.map +1 -0
  38. package/build/services/pipeline-service.d.ts +30 -0
  39. package/build/services/pipeline-service.d.ts.map +1 -1
  40. package/build/services/pipeline-service.js +150 -0
  41. package/build/services/pipeline-service.js.map +1 -1
  42. package/build/tools/artifact-feed-tools.d.ts.map +1 -1
  43. package/build/tools/artifact-feed-tools.js +31 -0
  44. package/build/tools/artifact-feed-tools.js.map +1 -1
  45. package/build/tools/index.d.ts +1 -0
  46. package/build/tools/index.d.ts.map +1 -1
  47. package/build/tools/index.js +3 -0
  48. package/build/tools/index.js.map +1 -1
  49. package/build/tools/iteration-capacity-tools.d.ts +7 -0
  50. package/build/tools/iteration-capacity-tools.d.ts.map +1 -0
  51. package/build/tools/iteration-capacity-tools.js +128 -0
  52. package/build/tools/iteration-capacity-tools.js.map +1 -0
  53. package/build/tools/pipeline-tools.d.ts.map +1 -1
  54. package/build/tools/pipeline-tools.js +33 -0
  55. package/build/tools/pipeline-tools.js.map +1 -1
  56. package/build/types.d.ts +4 -0
  57. package/build/types.d.ts.map +1 -1
  58. package/package.json +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"admin-client.d.ts","sourceRoot":"","sources":["../../src/services/admin-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAA4B,MAAM,aAAa,CAAC;AACpF,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE9E,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;gBAEnC,MAAM,EAAE,sBAAsB,EAAE,UAAU,EAAE,aAAa;IA0BrE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOtC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUpC,4CAA4C;IAC5C,IAAI,QAAQ,IAAI,MAAM,CAAmC;IAEzD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAOnC,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAgB,EAC3D,IAAI,CAAC,EAAE,GAAG,EACV,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,CAAC,CAAC;CAoDd"}
1
+ {"version":3,"file":"admin-client.d.ts","sourceRoot":"","sources":["../../src/services/admin-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAA4B,MAAM,aAAa,CAAC;AACpF,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,WAAW,eAAgB,SAAQ,KAAK;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEpE;AAQD,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;gBAEnC,MAAM,EAAE,sBAAsB,EAAE,UAAU,EAAE,aAAa;IA2BrE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOtC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUpC,4CAA4C;IAC5C,IAAI,QAAQ,IAAI,MAAM,CAAmC;IAEzD;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAOnC,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAgB,EAC3D,IAAI,CAAC,EAAE,GAAG,EACV,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,CAAC,CAAC;CAsDd"}
@@ -4,6 +4,16 @@
4
4
  */
5
5
  import axios from 'axios';
6
6
  import { AdoAuthProvider } from '../ado-auth-provider.js';
7
+ /** Read the HTTP status off an error thrown by {@link AdminClient}, if it has one. */
8
+ export function getAdoErrorStatus(error) {
9
+ return error instanceof Error ? error.status : undefined;
10
+ }
11
+ function adoError(message, status) {
12
+ const error = new Error(message);
13
+ if (status !== undefined)
14
+ error.status = status;
15
+ return error;
16
+ }
7
17
  export class AdminClient {
8
18
  config;
9
19
  baseUrl;
@@ -26,6 +36,7 @@ export class AdminClient {
26
36
  enableEnvironmentDelete: config.enableEnvironmentDelete ?? false,
27
37
  enableClassificationNodeUpsert: config.enableClassificationNodeUpsert ?? false,
28
38
  enableClassificationNodeDelete: config.enableClassificationNodeDelete ?? false,
39
+ enableIterationCapacityUpsert: config.enableIterationCapacityUpsert ?? false,
29
40
  enableProjectUpsert: config.enableProjectUpsert ?? false,
30
41
  enableProjectDelete: config.enableProjectDelete ?? false,
31
42
  };
@@ -82,29 +93,30 @@ export class AdminClient {
82
93
  }
83
94
  catch (error) {
84
95
  const errorDetails = error.response?.data?.message || error.response?.data || error.message;
96
+ const status = error.response?.status;
85
97
  console.error('Azure DevOps Admin API request failed:', {
86
98
  endpoint,
87
99
  method,
88
- status: error.response?.status,
100
+ status,
89
101
  statusText: error.response?.statusText,
90
102
  error: errorDetails
91
103
  });
92
- if (error.response?.status === 302) {
93
- throw new Error('Azure DevOps authentication failed (302 redirect to sign-in). ' +
104
+ if (status === 302) {
105
+ throw adoError('Azure DevOps authentication failed (302 redirect to sign-in). ' +
94
106
  'Your PAT may be expired, revoked, or not resolved (e.g. 1Password op:// reference). ' +
95
- 'Restart the MCP server to re-authenticate.');
107
+ 'Restart the MCP server to re-authenticate.', status);
96
108
  }
97
- if (error.response?.status === 401) {
98
- throw new Error('Azure DevOps authentication failed. Please check your PAT token or Entra ID credentials and permissions.');
109
+ if (status === 401) {
110
+ throw adoError('Azure DevOps authentication failed. Please check your PAT token or Entra ID credentials and permissions.', status);
99
111
  }
100
- if (error.response?.status === 403) {
112
+ if (status === 403) {
101
113
  const detail = typeof errorDetails === 'string' ? errorDetails : '';
102
- throw new Error(`Azure DevOps access denied: ${detail || 'Please check your PAT scopes and project permissions.'}`);
114
+ throw adoError(`Azure DevOps access denied: ${detail || 'Please check your PAT scopes and project permissions.'}`, status);
103
115
  }
104
- if (error.response?.status === 404) {
105
- throw new Error(`Azure DevOps resource not found: ${endpoint}`);
116
+ if (status === 404) {
117
+ throw adoError(`Azure DevOps resource not found: ${endpoint}`, status);
106
118
  }
107
- throw new Error(`Azure DevOps Admin API request failed: ${error.message} - ${JSON.stringify(errorDetails)}`);
119
+ throw adoError(`Azure DevOps Admin API request failed: ${error.message} - ${JSON.stringify(errorDetails)}`, status);
108
120
  }
109
121
  }
110
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../../src/services/admin-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../../src/services/admin-client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,16 @@
1
1
  /**
2
2
  * Artifact feed operations for Azure DevOps Admin.
3
+ *
4
+ * Packaging API facts (Microsoft Learn, api-version 7.1):
5
+ * - Feeds live on `feeds.dev.azure.com`, NOT `pkgs.dev.azure.com` (which serves
6
+ * protocol-specific routes only). `AdminClient.feedsUrl` is the right host.
7
+ * - The packages list returns a bare array with NO total count and NO
8
+ * continuation token; counting means paging with `$top`/`$skip`.
9
+ * - Package version PROVENANCE has no GA version — it is `7.1-preview.1` — and
10
+ * exposes no documented build/branch/commit field. Everything of that sort
11
+ * lives in an untyped `data` bag whose keys vary by protocol.
3
12
  */
4
- import type { AdminClient } from './admin-client.js';
13
+ import { type AdminClient } from './admin-client.js';
5
14
  export declare class ArtifactFeedService {
6
15
  private client;
7
16
  constructor(client: AdminClient);
@@ -17,5 +26,41 @@ export declare class ArtifactFeedService {
17
26
  top?: number;
18
27
  includeDelisted?: boolean;
19
28
  }): Promise<any>;
29
+ /** List feeds. Omit `project` for organisation-scoped feeds. */
30
+ listFeeds(project?: string): Promise<any[]>;
31
+ /**
32
+ * Count packages in one feed by paging until a short page arrives.
33
+ *
34
+ * Returns `truncated: true` when `maxPackages` was reached first, in which
35
+ * case `count` is a lower bound. The API exposes no total, so a single
36
+ * unpaged call would silently cap the count.
37
+ */
38
+ private countPackages;
39
+ /**
40
+ * All feeds with their package counts.
41
+ *
42
+ * A feed we could not read is reported under `unreadableFeeds` with its HTTP
43
+ * status — never as a feed with zero packages. The si source caught every
44
+ * error and recorded `packageCount: 0`, so a 403 was indistinguishable from
45
+ * an empty feed.
46
+ */
47
+ getFeedSummaries(options?: {
48
+ project?: string;
49
+ maxPackagesPerFeed?: number;
50
+ }): Promise<any>;
51
+ /**
52
+ * Publish provenance for one package version.
53
+ *
54
+ * Azure DevOps publishes NO structured build/branch/commit field for a package
55
+ * version. `provenanceSource`, `publisherUserIdentity` and `userAgent` are the
56
+ * only typed fields; everything else lives in an untyped `data` bag. We surface
57
+ * `data` verbatim and additionally attempt a best-effort build/branch lookup
58
+ * over known key names, returning `null` — never the string "unknown" — when a
59
+ * key is absent, so an agent cannot mistake absence for a real value.
60
+ */
61
+ getPackageProvenance(feedName: string, packageName: string, version: string, options?: {
62
+ project?: string;
63
+ packageType?: string;
64
+ }): Promise<any>;
20
65
  }
21
66
  //# sourceMappingURL=artifact-feed-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-feed-service.d.ts","sourceRoot":"","sources":["../../src/services/artifact-feed-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEjC,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtF,OAAO,CAAC,GAAG,CAAC;IAkCT,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5F,OAAO,CAAC,GAAG,CAAC;CA0DhB"}
1
+ {"version":3,"file":"artifact-feed-service.d.ts","sourceRoot":"","sources":["../../src/services/artifact-feed-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA4BxE,qBAAa,mBAAmB;IAClB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAEjC,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtF,OAAO,CAAC,GAAG,CAAC;IAkCT,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5F,OAAO,CAAC,GAAG,CAAC;IA2Df,gEAAgE;IAC1D,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAWjD;;;;;;OAMG;YACW,aAAa;IA8B3B;;;;;;;OAOG;IACG,gBAAgB,CACpB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,GAAG,CAAC;IA4Cf;;;;;;;;;OASG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,GAAG,CAAC;CA0EhB"}
@@ -1,3 +1,38 @@
1
+ /**
2
+ * Artifact feed operations for Azure DevOps Admin.
3
+ *
4
+ * Packaging API facts (Microsoft Learn, api-version 7.1):
5
+ * - Feeds live on `feeds.dev.azure.com`, NOT `pkgs.dev.azure.com` (which serves
6
+ * protocol-specific routes only). `AdminClient.feedsUrl` is the right host.
7
+ * - The packages list returns a bare array with NO total count and NO
8
+ * continuation token; counting means paging with `$top`/`$skip`.
9
+ * - Package version PROVENANCE has no GA version — it is `7.1-preview.1` — and
10
+ * exposes no documented build/branch/commit field. Everything of that sort
11
+ * lives in an untyped `data` bag whose keys vary by protocol.
12
+ */
13
+ import { getAdoErrorStatus } from './admin-client.js';
14
+ /** Page size used when counting packages in a feed. */
15
+ const PACKAGE_PAGE_SIZE = 200;
16
+ /**
17
+ * The provenance endpoint has never gone GA. Pinning `7.1` (the client default)
18
+ * would not resolve it, so this route carries its own preview api-version.
19
+ */
20
+ const PROVENANCE_API_VERSION = '7.1-preview.1';
21
+ /**
22
+ * Keys under `provenance.data` that have been observed to carry build/branch
23
+ * information. Undocumented and protocol-dependent: absence means "not exposed",
24
+ * never "unknown build".
25
+ */
26
+ const PROVENANCE_BUILD_KEYS = ['build.id', 'buildId', 'System.DefinitionId'];
27
+ const PROVENANCE_BRANCH_KEYS = ['repository.branch', 'branch', 'Build.SourceBranch'];
28
+ function firstPresent(data, keys) {
29
+ for (const key of keys) {
30
+ const value = data[key];
31
+ if (value !== undefined && value !== null && value !== '')
32
+ return String(value);
33
+ }
34
+ return null;
35
+ }
1
36
  export class ArtifactFeedService {
2
37
  client;
3
38
  constructor(client) {
@@ -79,5 +114,149 @@ export class ArtifactFeedService {
79
114
  })),
80
115
  };
81
116
  }
117
+ /** List feeds. Omit `project` for organisation-scoped feeds. */
118
+ async listFeeds(project) {
119
+ if (project)
120
+ this.client.validateProject(project);
121
+ const projectPrefix = project ? `${project}/` : '';
122
+ const response = await this.client.makeRequest(`${projectPrefix}_apis/packaging/feeds?api-version=${this.client.apiVersion}`, 'GET', undefined, undefined, undefined, this.client.feedsUrl);
123
+ return response.value ?? [];
124
+ }
125
+ /**
126
+ * Count packages in one feed by paging until a short page arrives.
127
+ *
128
+ * Returns `truncated: true` when `maxPackages` was reached first, in which
129
+ * case `count` is a lower bound. The API exposes no total, so a single
130
+ * unpaged call would silently cap the count.
131
+ */
132
+ async countPackages(feedId, project, maxPackages) {
133
+ const projectPrefix = project ? `${project}/` : '';
134
+ let count = 0;
135
+ while (count < maxPackages) {
136
+ const params = new URLSearchParams({
137
+ 'api-version': this.client.apiVersion,
138
+ $top: String(Math.min(PACKAGE_PAGE_SIZE, maxPackages - count)),
139
+ $skip: String(count),
140
+ });
141
+ const response = await this.client.makeRequest(`${projectPrefix}_apis/packaging/Feeds/${encodeURIComponent(feedId)}/packages?${params.toString()}`, 'GET', undefined, undefined, undefined, this.client.feedsUrl);
142
+ const page = response.value ?? [];
143
+ count += page.length;
144
+ // A short page means we reached the end of the feed.
145
+ if (page.length < Number(params.get('$top'))) {
146
+ return { count, truncated: false };
147
+ }
148
+ }
149
+ return { count, truncated: true };
150
+ }
151
+ /**
152
+ * All feeds with their package counts.
153
+ *
154
+ * A feed we could not read is reported under `unreadableFeeds` with its HTTP
155
+ * status — never as a feed with zero packages. The si source caught every
156
+ * error and recorded `packageCount: 0`, so a 403 was indistinguishable from
157
+ * an empty feed.
158
+ */
159
+ async getFeedSummaries(options) {
160
+ const maxPackagesPerFeed = options?.maxPackagesPerFeed ?? 1000;
161
+ const feeds = await this.listFeeds(options?.project);
162
+ const summaries = [];
163
+ const unreadableFeeds = [];
164
+ for (const feed of feeds) {
165
+ const feedProject = feed.project?.name ?? options?.project;
166
+ try {
167
+ const { count, truncated } = await this.countPackages(feed.id, feedProject, maxPackagesPerFeed);
168
+ summaries.push({
169
+ id: feed.id,
170
+ name: feed.name,
171
+ project: feed.project?.name ?? '(org-scoped)',
172
+ packageCount: count,
173
+ /** When true, packageCount is a lower bound, not a total. */
174
+ packageCountTruncated: truncated,
175
+ });
176
+ }
177
+ catch (error) {
178
+ unreadableFeeds.push({
179
+ id: feed.id,
180
+ name: feed.name,
181
+ project: feed.project?.name ?? '(org-scoped)',
182
+ status: getAdoErrorStatus(error) ?? null,
183
+ reason: error?.message ?? 'unknown error',
184
+ });
185
+ }
186
+ }
187
+ const anyTruncated = summaries.some((feed) => feed.packageCountTruncated);
188
+ return {
189
+ project: options?.project ?? '(org-scoped)',
190
+ feedCount: feeds.length,
191
+ readableFeedCount: summaries.length,
192
+ totalPackages: summaries.reduce((sum, feed) => sum + feed.packageCount, 0),
193
+ /** True when any feed hit its cap, or any feed could not be read. */
194
+ totalPackagesIsLowerBound: anyTruncated || unreadableFeeds.length > 0,
195
+ feeds: summaries,
196
+ unreadableFeeds,
197
+ };
198
+ }
199
+ /**
200
+ * Publish provenance for one package version.
201
+ *
202
+ * Azure DevOps publishes NO structured build/branch/commit field for a package
203
+ * version. `provenanceSource`, `publisherUserIdentity` and `userAgent` are the
204
+ * only typed fields; everything else lives in an untyped `data` bag. We surface
205
+ * `data` verbatim and additionally attempt a best-effort build/branch lookup
206
+ * over known key names, returning `null` — never the string "unknown" — when a
207
+ * key is absent, so an agent cannot mistake absence for a real value.
208
+ */
209
+ async getPackageProvenance(feedName, packageName, version, options) {
210
+ this.client.validateFeed(feedName);
211
+ if (options?.project)
212
+ this.client.validateProject(options.project);
213
+ const projectPrefix = options?.project ? `${options.project}/` : '';
214
+ // Resolve package name -> id.
215
+ const listParams = new URLSearchParams({
216
+ 'api-version': this.client.apiVersion,
217
+ packageNameQuery: packageName,
218
+ });
219
+ if (options?.packageType)
220
+ listParams.append('protocolType', options.packageType);
221
+ const listResponse = await this.client.makeRequest(`${projectPrefix}_apis/packaging/Feeds/${encodeURIComponent(feedName)}/packages?${listParams.toString()}`, 'GET', undefined, undefined, undefined, this.client.feedsUrl);
222
+ const pkg = (listResponse.value ?? []).find((candidate) => String(candidate.name ?? '').toLowerCase() === packageName.toLowerCase());
223
+ if (!pkg) {
224
+ const nearby = (listResponse.value ?? []).map((p) => p.name).slice(0, 10);
225
+ throw new Error(`Package '${packageName}' not found in feed '${feedName}'.` +
226
+ (nearby.length ? ` Similar packages: ${nearby.join(', ')}` : ''));
227
+ }
228
+ // Resolve version string -> version id.
229
+ const versionsResponse = await this.client.makeRequest(`${projectPrefix}_apis/packaging/Feeds/${encodeURIComponent(feedName)}/packages/${pkg.id}/versions?api-version=${this.client.apiVersion}`, 'GET', undefined, undefined, undefined, this.client.feedsUrl);
230
+ const packageVersion = (versionsResponse.value ?? []).find((candidate) => String(candidate.version ?? '').toLowerCase() === version.toLowerCase());
231
+ if (!packageVersion) {
232
+ const nearby = (versionsResponse.value ?? []).map((v) => v.version).slice(0, 10);
233
+ throw new Error(`Version '${version}' not found for package '${packageName}' in feed '${feedName}'.` +
234
+ (nearby.length ? ` Available versions: ${nearby.join(', ')}` : ''));
235
+ }
236
+ const provenance = await this.client.makeRequest(`${projectPrefix}_apis/packaging/Feeds/${encodeURIComponent(feedName)}/Packages/${pkg.id}/Versions/${packageVersion.id}/provenance?api-version=${PROVENANCE_API_VERSION}`, 'GET', undefined, undefined, undefined, this.client.feedsUrl);
237
+ const data = provenance?.provenance?.data ?? provenance?.data ?? {};
238
+ const buildId = firstPresent(data, PROVENANCE_BUILD_KEYS);
239
+ const branch = firstPresent(data, PROVENANCE_BRANCH_KEYS);
240
+ return {
241
+ feed: feedName,
242
+ project: options?.project ?? '(org-scoped)',
243
+ packageName: pkg.name,
244
+ packageId: pkg.id,
245
+ version: packageVersion.version,
246
+ packageVersionId: packageVersion.id,
247
+ protocolType: pkg.protocolType,
248
+ provenanceApiVersion: PROVENANCE_API_VERSION,
249
+ provenanceSource: provenance?.provenanceSource ?? null,
250
+ publisherUserIdentity: provenance?.publisherUserIdentity ?? null,
251
+ userAgent: provenance?.userAgent ?? null,
252
+ /** Best-effort. Null means Azure DevOps did not expose it, not "unknown". */
253
+ buildId,
254
+ branch,
255
+ /** True when neither a build nor a branch could be read from `data`. */
256
+ structuredProvenanceAvailable: buildId !== null || branch !== null,
257
+ /** The raw, untyped provenance bag, verbatim. Keys vary by package protocol. */
258
+ data,
259
+ };
260
+ }
82
261
  }
83
262
  //# sourceMappingURL=artifact-feed-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-feed-service.js","sourceRoot":"","sources":["../../src/services/artifact-feed-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifact-feed-service.js","sourceRoot":"","sources":["../../src/services/artifact-feed-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Team iteration capacity operations for Azure DevOps Admin.
3
+ *
4
+ * Reads and writes per-member capacity (capacity-per-day + days-off) and the
5
+ * team-wide days-off collection for a sprint, plus the team-wide days-off.
6
+ * Writes are FULL REPLACE of the targeted member's activities + days-off.
7
+ *
8
+ * Endpoints (api-version 7.1), team-scoped:
9
+ * {project}/{team}/_apis/work/teamsettings/iterations/{iterationId}/capacities
10
+ * {project}/{team}/_apis/work/teamsettings/iterations/{iterationId}/teamdaysoff
11
+ * Identity resolution (name/email -> GUID):
12
+ * _apis/projects/{project}/teams/{team}/members
13
+ */
14
+ import type { AdminClient } from './admin-client.js';
15
+ export interface DayOff {
16
+ /** ISO date or datetime, e.g. "2026-06-22" or "2026-06-22T00:00:00Z". */
17
+ start: string;
18
+ end: string;
19
+ }
20
+ export interface MemberCapacityInput {
21
+ /** Identity GUID, email, or display name of the team member. */
22
+ member: string;
23
+ capacityPerDay: number;
24
+ /** Activity name; defaults to "" (Unassigned). */
25
+ activityName?: string;
26
+ daysOff?: DayOff[];
27
+ }
28
+ export declare class IterationCapacityService {
29
+ private client;
30
+ constructor(client: AdminClient);
31
+ private capacitiesBase;
32
+ private normalizeDaysOff;
33
+ /** Fetch the team's members (each entry exposes `.identity`). */
34
+ private fetchTeamMembers;
35
+ /** Resolve a member identifier (GUID passes through; else match email then display name). */
36
+ private resolveMemberId;
37
+ private candidateList;
38
+ private ambiguousMsg;
39
+ getIterationCapacities(project: string, team: string, iterationId: string): Promise<any>;
40
+ getTeamDaysOff(project: string, team: string, iterationId: string): Promise<any>;
41
+ /** PATCH one member's capacity-per-day + days-off (full replace). */
42
+ setTeamMemberCapacity(project: string, team: string, iterationId: string, member: string, capacityPerDay: number, activityName?: string, daysOff?: DayOff[]): Promise<any>;
43
+ /** Set capacity for many members in one call (sequential PATCH per member — never wipes unlisted members). */
44
+ setTeamCapacitiesBatch(project: string, team: string, iterationId: string, entries: MemberCapacityInput[]): Promise<any>;
45
+ /** PATCH the team-wide days-off collection (full replace). */
46
+ setTeamDaysOff(project: string, team: string, iterationId: string, daysOff?: DayOff[]): Promise<any>;
47
+ private patchMemberCapacity;
48
+ }
49
+ //# sourceMappingURL=iteration-capacity-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iteration-capacity-service.d.ts","sourceRoot":"","sources":["../../src/services/iteration-capacity-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,MAAM,WAAW,MAAM;IACrB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,wBAAwB;IACvB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,WAAW;IAIvC,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAQxB,iEAAiE;YACnD,gBAAgB;IAO9B,6FAA6F;IAC7F,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAMd,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IA+BxF,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBtF,qEAAqE;IAC/D,qBAAqB,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,YAAY,GAAE,MAAW,EACzB,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,GAAG,CAAC;IAWf,8GAA8G;IACxG,sBAAsB,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC,GAAG,CAAC;IAsCf,8DAA8D;IACxD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;YAgB5F,mBAAmB;CAgClC"}
@@ -0,0 +1,169 @@
1
+ const GUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
2
+ export class IterationCapacityService {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ // ---- helpers -------------------------------------------------------------
8
+ capacitiesBase(project, team, iterationId) {
9
+ const encodedTeam = encodeURIComponent(team);
10
+ return `${project}/${encodedTeam}/_apis/work/teamsettings/iterations/${iterationId}`;
11
+ }
12
+ normalizeDaysOff(daysOff) {
13
+ if (!daysOff || daysOff.length === 0)
14
+ return [];
15
+ return daysOff.map((d) => ({
16
+ start: this.client.formatDateForAdo(d.start),
17
+ end: this.client.formatDateForAdo(d.end),
18
+ }));
19
+ }
20
+ /** Fetch the team's members (each entry exposes `.identity`). */
21
+ async fetchTeamMembers(project, team) {
22
+ // ceiling: single page ($top=1000); paginate if a team ever exceeds that
23
+ const endpoint = `_apis/projects/${encodeURIComponent(project)}/teams/${encodeURIComponent(team)}/members?$top=1000&api-version=${this.client.apiVersion}`;
24
+ const response = await this.client.makeRequest(endpoint);
25
+ return Array.isArray(response?.value) ? response.value : [];
26
+ }
27
+ /** Resolve a member identifier (GUID passes through; else match email then display name). */
28
+ resolveMemberId(members, identifier) {
29
+ if (GUID_RE.test(identifier.trim()))
30
+ return identifier.trim();
31
+ const identities = members.map((m) => m?.identity).filter(Boolean);
32
+ const needle = identifier.trim().toLowerCase();
33
+ const byEmail = identities.filter((i) => (i.uniqueName || '').toLowerCase() === needle);
34
+ if (byEmail.length === 1)
35
+ return byEmail[0].id;
36
+ if (byEmail.length > 1)
37
+ throw new Error(this.ambiguousMsg(identifier, byEmail));
38
+ const byName = identities.filter((i) => (i.displayName || '').toLowerCase() === needle);
39
+ if (byName.length === 1)
40
+ return byName[0].id;
41
+ if (byName.length > 1)
42
+ throw new Error(this.ambiguousMsg(identifier, byName));
43
+ throw new Error(`No team member matching '${identifier}'. Provide an identity GUID, or a display name/email of a team member. ` +
44
+ `Team members: ${this.candidateList(identities) || '(none)'}`);
45
+ }
46
+ candidateList(identities) {
47
+ return identities.map((i) => `${i.displayName} <${i.uniqueName}>`).join('; ');
48
+ }
49
+ ambiguousMsg(identifier, matches) {
50
+ return `Ambiguous team member '${identifier}' — matched ${matches.length}: ${this.candidateList(matches)}. Use the identity GUID to disambiguate.`;
51
+ }
52
+ // ---- reads ---------------------------------------------------------------
53
+ async getIterationCapacities(project, team, iterationId) {
54
+ this.client.validateProject(project);
55
+ const endpoint = `${this.capacitiesBase(project, team, iterationId)}/capacities?api-version=${this.client.apiVersion}`;
56
+ const response = await this.client.makeRequest(endpoint);
57
+ const raw = Array.isArray(response?.teamMembers)
58
+ ? response.teamMembers
59
+ : Array.isArray(response?.value)
60
+ ? response.value
61
+ : [];
62
+ const members = raw.map((m) => ({
63
+ id: m.teamMember?.id,
64
+ displayName: m.teamMember?.displayName,
65
+ uniqueName: m.teamMember?.uniqueName,
66
+ activities: m.activities || [],
67
+ daysOff: m.daysOff || [],
68
+ }));
69
+ return {
70
+ project,
71
+ team,
72
+ iterationId,
73
+ totalCount: members.length,
74
+ totalCapacityPerDay: response?.totalCapacityPerDay,
75
+ totalDaysOff: response?.totalDaysOff,
76
+ members,
77
+ };
78
+ }
79
+ async getTeamDaysOff(project, team, iterationId) {
80
+ this.client.validateProject(project);
81
+ const endpoint = `${this.capacitiesBase(project, team, iterationId)}/teamdaysoff?api-version=${this.client.apiVersion}`;
82
+ const response = await this.client.makeRequest(endpoint);
83
+ return {
84
+ project,
85
+ team,
86
+ iterationId,
87
+ daysOff: response?.daysOff || [],
88
+ daysOffEntries: (response?.daysOff || []).length,
89
+ };
90
+ }
91
+ // ---- writes (full replace) ----------------------------------------------
92
+ /** PATCH one member's capacity-per-day + days-off (full replace). */
93
+ async setTeamMemberCapacity(project, team, iterationId, member, capacityPerDay, activityName = '', daysOff) {
94
+ this.client.validateProject(project);
95
+ // Only hit the team-members API when we actually need to resolve a name/email.
96
+ const teamMemberId = GUID_RE.test(member.trim())
97
+ ? member.trim()
98
+ : this.resolveMemberId(await this.fetchTeamMembers(project, team), member);
99
+ return this.patchMemberCapacity(project, team, iterationId, member, teamMemberId, capacityPerDay, activityName, daysOff);
100
+ }
101
+ /** Set capacity for many members in one call (sequential PATCH per member — never wipes unlisted members). */
102
+ async setTeamCapacitiesBatch(project, team, iterationId, entries) {
103
+ this.client.validateProject(project);
104
+ if (!entries || entries.length === 0) {
105
+ throw new Error('No member capacities supplied.');
106
+ }
107
+ // ceiling: resolve the roster once, then PATCH sequentially; fine for team-sized rosters.
108
+ // Skip the roster fetch entirely when every entry is already a GUID.
109
+ const needsResolution = entries.some((e) => !GUID_RE.test((e.member || '').trim()));
110
+ const members = needsResolution ? await this.fetchTeamMembers(project, team) : [];
111
+ const results = [];
112
+ for (const entry of entries) {
113
+ try {
114
+ const teamMemberId = this.resolveMemberId(members, entry.member);
115
+ const result = await this.patchMemberCapacity(project, team, iterationId, entry.member, teamMemberId, entry.capacityPerDay, entry.activityName ?? '', entry.daysOff);
116
+ results.push({ member: entry.member, status: 'ok', teamMemberId, daysOffEntries: result.daysOffEntries });
117
+ }
118
+ catch (error) {
119
+ results.push({ member: entry.member, status: 'error', error: error.message });
120
+ }
121
+ }
122
+ const succeeded = results.filter((r) => r.status === 'ok').length;
123
+ return {
124
+ project,
125
+ team,
126
+ iterationId,
127
+ total: results.length,
128
+ succeeded,
129
+ failed: results.length - succeeded,
130
+ results,
131
+ };
132
+ }
133
+ /** PATCH the team-wide days-off collection (full replace). */
134
+ async setTeamDaysOff(project, team, iterationId, daysOff) {
135
+ this.client.validateProject(project);
136
+ const normalized = this.normalizeDaysOff(daysOff);
137
+ const endpoint = `${this.capacitiesBase(project, team, iterationId)}/teamdaysoff?api-version=${this.client.apiVersion}`;
138
+ const response = await this.client.makeRequest(endpoint, 'PATCH', { daysOff: normalized }, undefined, 'application/json');
139
+ return {
140
+ project,
141
+ team,
142
+ iterationId,
143
+ daysOff: response?.daysOff ?? normalized,
144
+ daysOffEntries: (response?.daysOff ?? normalized).length,
145
+ };
146
+ }
147
+ async patchMemberCapacity(project, team, iterationId, member, teamMemberId, capacityPerDay, activityName, daysOff) {
148
+ const normalized = this.normalizeDaysOff(daysOff);
149
+ const body = {
150
+ activities: [{ capacityPerDay, name: activityName }],
151
+ daysOff: normalized,
152
+ };
153
+ const endpoint = `${this.capacitiesBase(project, team, iterationId)}/capacities/${teamMemberId}?api-version=${this.client.apiVersion}`;
154
+ const response = await this.client.makeRequest(endpoint, 'PATCH', body, undefined, 'application/json');
155
+ return {
156
+ project,
157
+ team,
158
+ iterationId,
159
+ resolvedFrom: member,
160
+ teamMemberId,
161
+ capacityPerDay,
162
+ activityName,
163
+ daysOff: normalized,
164
+ daysOffEntries: normalized.length,
165
+ activities: response?.activities ?? body.activities,
166
+ };
167
+ }
168
+ }
169
+ //# sourceMappingURL=iteration-capacity-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iteration-capacity-service.js","sourceRoot":"","sources":["../../src/services/iteration-capacity-service.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAiBlF,MAAM,OAAO,wBAAwB;IACf;IAApB,YAAoB,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAE3C,6EAA6E;IAErE,cAAc,CAAC,OAAe,EAAE,IAAY,EAAE,WAAmB;QACvE,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,GAAG,OAAO,IAAI,WAAW,uCAAuC,WAAW,EAAE,CAAC;IACvF,CAAC;IAEO,gBAAgB,CAAC,OAAkB;QACzC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5C,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;SACzC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,iEAAiE;IACzD,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,IAAY;QAC1D,yEAAyE;QACzE,MAAM,QAAQ,GAAG,kBAAkB,kBAAkB,CAAC,OAAO,CAAC,UAAU,kBAAkB,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3J,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAM,QAAQ,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,6FAA6F;IACrF,eAAe,CAAC,OAAc,EAAE,UAAkB;QACxD,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAAE,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC;QAE9D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE/C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAEhF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;QACxF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAE9E,MAAM,IAAI,KAAK,CACb,4BAA4B,UAAU,yEAAyE;YAC/G,iBAAiB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,QAAQ,EAAE,CAC9D,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,UAAiB;QACrC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAEO,YAAY,CAAC,UAAkB,EAAE,OAAc;QACrD,OAAO,0BAA0B,UAAU,eAAe,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,0CAA0C,CAAC;IACrJ,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,sBAAsB,CAAC,OAAe,EAAE,IAAY,EAAE,WAAmB;QAC7E,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,2BAA2B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAM,QAAQ,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC;YAC9C,CAAC,CAAC,QAAQ,CAAC,WAAW;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAC9B,CAAC,CAAC,QAAQ,CAAC,KAAK;gBAChB,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YACnC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE;YACpB,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW;YACtC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU;YACpC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;YAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;SACzB,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO;YACP,IAAI;YACJ,WAAW;YACX,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;YAClD,YAAY,EAAE,QAAQ,EAAE,YAAY;YACpC,OAAO;SACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,IAAY,EAAE,WAAmB;QACrE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,4BAA4B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAM,QAAQ,CAAC,CAAC;QAE9D,OAAO;YACL,OAAO;YACP,IAAI;YACJ,WAAW;YACX,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE;YAChC,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM;SACjD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAE5E,qEAAqE;IACrE,KAAK,CAAC,qBAAqB,CACzB,OAAe,EACf,IAAY,EACZ,WAAmB,EACnB,MAAc,EACd,cAAsB,EACtB,eAAuB,EAAE,EACzB,OAAkB;QAElB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAErC,+EAA+E;QAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9C,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;YACf,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAE7E,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3H,CAAC;IAED,8GAA8G;IAC9G,KAAK,CAAC,sBAAsB,CAC1B,OAAe,EACf,IAAY,EACZ,WAAmB,EACnB,OAA8B;QAE9B,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,0FAA0F;QAC1F,qEAAqE;QACrE,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAElF,MAAM,OAAO,GAAU,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC3C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EACtD,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,KAAK,CAAC,OAAO,CAC9D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YAC5G,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;QAClE,OAAO;YACL,OAAO;YACP,IAAI;YACJ,WAAW;YACX,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,SAAS;YACT,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS;YAClC,OAAO;SACR,CAAC;IACJ,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,IAAY,EAAE,WAAmB,EAAE,OAAkB;QACzF,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,4BAA4B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACxH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAM,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAE/H,OAAO;YACL,OAAO;YACP,IAAI;YACJ,WAAW;YACX,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,UAAU;YACxC,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,IAAI,UAAU,CAAC,CAAC,MAAM;SACzD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,OAAe,EACf,IAAY,EACZ,WAAmB,EACnB,MAAc,EACd,YAAoB,EACpB,cAAsB,EACtB,YAAoB,EACpB,OAAkB;QAElB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG;YACX,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YACpD,OAAO,EAAE,UAAU;SACpB,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,eAAe,YAAY,gBAAgB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAM,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAE5G,OAAO;YACL,OAAO;YACP,IAAI;YACJ,WAAW;YACX,YAAY,EAAE,MAAM;YACpB,YAAY;YACZ,cAAc;YACd,YAAY;YACZ,OAAO,EAAE,UAAU;YACnB,cAAc,EAAE,UAAU,CAAC,MAAM;YACjC,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU;SACpD,CAAC;IACJ,CAAC;CACF"}