@structured-world/gitlab-mcp 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +486 -0
  3. package/dist/config.d.ts +31 -0
  4. package/dist/config.js +115 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/entities/core/index.d.ts +7 -0
  7. package/dist/entities/core/index.js +31 -0
  8. package/dist/entities/core/index.js.map +1 -0
  9. package/dist/entities/core/registry.d.ts +5 -0
  10. package/dist/entities/core/registry.js +584 -0
  11. package/dist/entities/core/registry.js.map +1 -0
  12. package/dist/entities/core/schema-readonly.d.ts +302 -0
  13. package/dist/entities/core/schema-readonly.js +364 -0
  14. package/dist/entities/core/schema-readonly.js.map +1 -0
  15. package/dist/entities/core/schema.d.ts +87 -0
  16. package/dist/entities/core/schema.js +143 -0
  17. package/dist/entities/core/schema.js.map +1 -0
  18. package/dist/entities/files/index.d.ts +7 -0
  19. package/dist/entities/files/index.js +31 -0
  20. package/dist/entities/files/index.js.map +1 -0
  21. package/dist/entities/files/registry.d.ts +5 -0
  22. package/dist/entities/files/registry.js +199 -0
  23. package/dist/entities/files/registry.js.map +1 -0
  24. package/dist/entities/files/schema-readonly.d.ts +78 -0
  25. package/dist/entities/files/schema-readonly.js +50 -0
  26. package/dist/entities/files/schema-readonly.js.map +1 -0
  27. package/dist/entities/files/schema.d.ts +42 -0
  28. package/dist/entities/files/schema.js +38 -0
  29. package/dist/entities/files/schema.js.map +1 -0
  30. package/dist/entities/index.d.ts +10 -0
  31. package/dist/entities/index.js +27 -0
  32. package/dist/entities/index.js.map +1 -0
  33. package/dist/entities/labels/index.d.ts +7 -0
  34. package/dist/entities/labels/index.js +31 -0
  35. package/dist/entities/labels/index.js.map +1 -0
  36. package/dist/entities/labels/registry.d.ts +5 -0
  37. package/dist/entities/labels/registry.js +186 -0
  38. package/dist/entities/labels/registry.js.map +1 -0
  39. package/dist/entities/labels/schema-readonly.d.ts +16 -0
  40. package/dist/entities/labels/schema-readonly.js +29 -0
  41. package/dist/entities/labels/schema-readonly.js.map +1 -0
  42. package/dist/entities/labels/schema.d.ts +26 -0
  43. package/dist/entities/labels/schema.js +50 -0
  44. package/dist/entities/labels/schema.js.map +1 -0
  45. package/dist/entities/milestones/index.d.ts +7 -0
  46. package/dist/entities/milestones/index.js +31 -0
  47. package/dist/entities/milestones/index.js.map +1 -0
  48. package/dist/entities/milestones/registry.d.ts +5 -0
  49. package/dist/entities/milestones/registry.js +316 -0
  50. package/dist/entities/milestones/registry.js.map +1 -0
  51. package/dist/entities/milestones/schema-readonly.d.ts +63 -0
  52. package/dist/entities/milestones/schema-readonly.js +68 -0
  53. package/dist/entities/milestones/schema-readonly.js.map +1 -0
  54. package/dist/entities/milestones/schema.d.ts +36 -0
  55. package/dist/entities/milestones/schema.js +52 -0
  56. package/dist/entities/milestones/schema.js.map +1 -0
  57. package/dist/entities/mrs/index.d.ts +7 -0
  58. package/dist/entities/mrs/index.js +31 -0
  59. package/dist/entities/mrs/index.js.map +1 -0
  60. package/dist/entities/mrs/registry.d.ts +5 -0
  61. package/dist/entities/mrs/registry.js +629 -0
  62. package/dist/entities/mrs/registry.js.map +1 -0
  63. package/dist/entities/mrs/schema-readonly.d.ts +127 -0
  64. package/dist/entities/mrs/schema-readonly.js +213 -0
  65. package/dist/entities/mrs/schema-readonly.js.map +1 -0
  66. package/dist/entities/mrs/schema.d.ts +285 -0
  67. package/dist/entities/mrs/schema.js +161 -0
  68. package/dist/entities/mrs/schema.js.map +1 -0
  69. package/dist/entities/pipelines/index.d.ts +7 -0
  70. package/dist/entities/pipelines/index.js +31 -0
  71. package/dist/entities/pipelines/index.js.map +1 -0
  72. package/dist/entities/pipelines/registry.d.ts +5 -0
  73. package/dist/entities/pipelines/registry.js +369 -0
  74. package/dist/entities/pipelines/registry.js.map +1 -0
  75. package/dist/entities/pipelines/schema-readonly.d.ts +238 -0
  76. package/dist/entities/pipelines/schema-readonly.js +257 -0
  77. package/dist/entities/pipelines/schema-readonly.js.map +1 -0
  78. package/dist/entities/pipelines/schema.d.ts +49 -0
  79. package/dist/entities/pipelines/schema.js +44 -0
  80. package/dist/entities/pipelines/schema.js.map +1 -0
  81. package/dist/entities/shared.d.ts +291 -0
  82. package/dist/entities/shared.js +277 -0
  83. package/dist/entities/shared.js.map +1 -0
  84. package/dist/entities/utils.d.ts +3 -0
  85. package/dist/entities/utils.js +22 -0
  86. package/dist/entities/utils.js.map +1 -0
  87. package/dist/entities/variables/index.d.ts +7 -0
  88. package/dist/entities/variables/index.js +31 -0
  89. package/dist/entities/variables/index.js.map +1 -0
  90. package/dist/entities/variables/registry.d.ts +5 -0
  91. package/dist/entities/variables/registry.js +192 -0
  92. package/dist/entities/variables/registry.js.map +1 -0
  93. package/dist/entities/variables/schema-readonly.d.ts +17 -0
  94. package/dist/entities/variables/schema-readonly.js +35 -0
  95. package/dist/entities/variables/schema-readonly.js.map +1 -0
  96. package/dist/entities/variables/schema.d.ts +45 -0
  97. package/dist/entities/variables/schema.js +127 -0
  98. package/dist/entities/variables/schema.js.map +1 -0
  99. package/dist/entities/wiki/index.d.ts +7 -0
  100. package/dist/entities/wiki/index.js +31 -0
  101. package/dist/entities/wiki/index.js.map +1 -0
  102. package/dist/entities/wiki/registry.d.ts +5 -0
  103. package/dist/entities/wiki/registry.js +195 -0
  104. package/dist/entities/wiki/registry.js.map +1 -0
  105. package/dist/entities/wiki/schema-readonly.d.ts +24 -0
  106. package/dist/entities/wiki/schema-readonly.js +34 -0
  107. package/dist/entities/wiki/schema-readonly.js.map +1 -0
  108. package/dist/entities/wiki/schema.d.ts +24 -0
  109. package/dist/entities/wiki/schema.js +37 -0
  110. package/dist/entities/wiki/schema.js.map +1 -0
  111. package/dist/entities/workitems/index.d.ts +7 -0
  112. package/dist/entities/workitems/index.js +31 -0
  113. package/dist/entities/workitems/index.js.map +1 -0
  114. package/dist/entities/workitems/registry.d.ts +5 -0
  115. package/dist/entities/workitems/registry.js +183 -0
  116. package/dist/entities/workitems/registry.js.map +1 -0
  117. package/dist/entities/workitems/schema-readonly.d.ts +46 -0
  118. package/dist/entities/workitems/schema-readonly.js +38 -0
  119. package/dist/entities/workitems/schema-readonly.js.map +1 -0
  120. package/dist/entities/workitems/schema.d.ts +37 -0
  121. package/dist/entities/workitems/schema.js +29 -0
  122. package/dist/entities/workitems/schema.js.map +1 -0
  123. package/dist/graphql/DynamicWorkItemsQuery.d.ts +56 -0
  124. package/dist/graphql/DynamicWorkItemsQuery.js +190 -0
  125. package/dist/graphql/DynamicWorkItemsQuery.js.map +1 -0
  126. package/dist/graphql/client.d.ts +15 -0
  127. package/dist/graphql/client.js +50 -0
  128. package/dist/graphql/client.js.map +1 -0
  129. package/dist/graphql/index.d.ts +2 -0
  130. package/dist/graphql/index.js +21 -0
  131. package/dist/graphql/index.js.map +1 -0
  132. package/dist/graphql/workItems.d.ts +430 -0
  133. package/dist/graphql/workItems.js +559 -0
  134. package/dist/graphql/workItems.js.map +1 -0
  135. package/dist/handlers.d.ts +2 -0
  136. package/dist/handlers.js +132 -0
  137. package/dist/handlers.js.map +1 -0
  138. package/dist/http-client.d.ts +1 -0
  139. package/dist/http-client.js +13 -0
  140. package/dist/http-client.js.map +1 -0
  141. package/dist/logger.d.ts +2 -0
  142. package/dist/logger.js +21 -0
  143. package/dist/logger.js.map +1 -0
  144. package/dist/main.d.ts +2 -0
  145. package/dist/main.js +10 -0
  146. package/dist/main.js.map +1 -0
  147. package/dist/registry-manager.d.ts +25 -0
  148. package/dist/registry-manager.js +176 -0
  149. package/dist/registry-manager.js.map +1 -0
  150. package/dist/server.d.ts +25 -0
  151. package/dist/server.js +129 -0
  152. package/dist/server.js.map +1 -0
  153. package/dist/services/ConnectionManager.d.ts +27 -0
  154. package/dist/services/ConnectionManager.js +144 -0
  155. package/dist/services/ConnectionManager.js.map +1 -0
  156. package/dist/services/GitLabVersionDetector.d.ts +53 -0
  157. package/dist/services/GitLabVersionDetector.js +216 -0
  158. package/dist/services/GitLabVersionDetector.js.map +1 -0
  159. package/dist/services/SchemaIntrospector.d.ts +39 -0
  160. package/dist/services/SchemaIntrospector.js +188 -0
  161. package/dist/services/SchemaIntrospector.js.map +1 -0
  162. package/dist/services/ToolAvailability.d.ts +18 -0
  163. package/dist/services/ToolAvailability.js +373 -0
  164. package/dist/services/ToolAvailability.js.map +1 -0
  165. package/dist/services/WidgetAvailability.d.ts +14 -0
  166. package/dist/services/WidgetAvailability.js +84 -0
  167. package/dist/services/WidgetAvailability.js.map +1 -0
  168. package/dist/structured-world-gitlab-mcp-4.0.0.tgz +0 -0
  169. package/dist/tsconfig.build.tsbuildinfo +1 -0
  170. package/dist/types.d.ts +21 -0
  171. package/dist/types.js +10 -0
  172. package/dist/types.js.map +1 -0
  173. package/dist/utils/fetch.d.ts +9 -0
  174. package/dist/utils/fetch.js +164 -0
  175. package/dist/utils/fetch.js.map +1 -0
  176. package/package.json +90 -0
@@ -0,0 +1,53 @@
1
+ import { GraphQLClient } from '../graphql/client';
2
+ export type GitLabTier = 'free' | 'premium' | 'ultimate';
3
+ export interface GitLabFeatures {
4
+ workItems: boolean;
5
+ epics: boolean;
6
+ iterations: boolean;
7
+ roadmaps: boolean;
8
+ portfolioManagement: boolean;
9
+ advancedSearch: boolean;
10
+ codeReview: boolean;
11
+ securityDashboard: boolean;
12
+ complianceFramework: boolean;
13
+ valueStreamAnalytics: boolean;
14
+ customFields: boolean;
15
+ okrs: boolean;
16
+ healthStatus: boolean;
17
+ weight: boolean;
18
+ multiLevelEpics: boolean;
19
+ serviceDesk: boolean;
20
+ requirements: boolean;
21
+ qualityManagement: boolean;
22
+ timeTracking: boolean;
23
+ crmContacts: boolean;
24
+ vulnerabilities: boolean;
25
+ errorTracking: boolean;
26
+ designManagement: boolean;
27
+ linkedResources: boolean;
28
+ emailParticipants: boolean;
29
+ }
30
+ export interface GitLabInstanceInfo {
31
+ version: string;
32
+ tier: GitLabTier;
33
+ features: GitLabFeatures;
34
+ detectedAt: Date;
35
+ }
36
+ export declare class GitLabVersionDetector {
37
+ private client;
38
+ private cachedInfo;
39
+ private testGroupPath;
40
+ constructor(client: GraphQLClient);
41
+ getCachedInfo(): GitLabInstanceInfo | null;
42
+ detectInstance(): Promise<GitLabInstanceInfo>;
43
+ private detectVersion;
44
+ private detectVersionFallback;
45
+ private detectTier;
46
+ private detectTierByFeatures;
47
+ private determineFeatures;
48
+ private parseVersion;
49
+ private isRecentCache;
50
+ isFeatureAvailable(feature: keyof GitLabFeatures): boolean;
51
+ getTier(): GitLabTier;
52
+ getVersion(): string;
53
+ }
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GitLabVersionDetector = void 0;
4
+ const graphql_tag_1 = require("graphql-tag");
5
+ const fetch_1 = require("../utils/fetch");
6
+ const logger_1 = require("../logger");
7
+ const VERSION_QUERY = (0, graphql_tag_1.gql) `
8
+ query GetVersionInfo {
9
+ metadata {
10
+ version
11
+ revision
12
+ kas {
13
+ enabled
14
+ version
15
+ }
16
+ enterprise
17
+ }
18
+ currentUser {
19
+ id
20
+ username
21
+ name
22
+ }
23
+ }
24
+ `;
25
+ const LICENSE_QUERY = (0, graphql_tag_1.gql) `
26
+ query GetLicenseInfo {
27
+ currentLicense {
28
+ id
29
+ type
30
+ plan
31
+ expiresAt
32
+ activatedAt
33
+ lastSync
34
+ billableUsersCount
35
+ maximumUserCount
36
+ usersInLicenseCount
37
+ }
38
+ }
39
+ `;
40
+ const FEATURE_DETECTION_QUERY = (0, graphql_tag_1.gql) `
41
+ query DetectFeatures($groupPath: String!) {
42
+ group(fullPath: $groupPath) {
43
+ id
44
+ epicsEnabled
45
+ iterationsEnabled: iterationCadences(first: 1) {
46
+ nodes {
47
+ id
48
+ }
49
+ }
50
+ workItemTypesEnabled: workItemTypes {
51
+ nodes {
52
+ id
53
+ name
54
+ }
55
+ }
56
+ }
57
+ }
58
+ `;
59
+ class GitLabVersionDetector {
60
+ client;
61
+ cachedInfo = null;
62
+ testGroupPath = 'test';
63
+ constructor(client) {
64
+ this.client = client;
65
+ }
66
+ getCachedInfo() {
67
+ return this.cachedInfo;
68
+ }
69
+ async detectInstance() {
70
+ if (this.cachedInfo && this.isRecentCache(this.cachedInfo.detectedAt)) {
71
+ return this.cachedInfo;
72
+ }
73
+ const version = await this.detectVersion();
74
+ const tier = await this.detectTier();
75
+ const features = this.determineFeatures(version, tier);
76
+ this.cachedInfo = {
77
+ version,
78
+ tier,
79
+ features,
80
+ detectedAt: new Date(),
81
+ };
82
+ return this.cachedInfo;
83
+ }
84
+ async detectVersion() {
85
+ try {
86
+ const response = await this.client.request(VERSION_QUERY);
87
+ return response.metadata.version;
88
+ }
89
+ catch (error) {
90
+ logger_1.logger.warn(`Failed to detect GitLab version via GraphQL, trying alternative methods: ${error instanceof Error ? error.message : String(error)}`);
91
+ return await this.detectVersionFallback();
92
+ }
93
+ }
94
+ async detectVersionFallback() {
95
+ try {
96
+ const baseUrl = this.client.endpoint.replace('/api/graphql', '');
97
+ const response = await (0, fetch_1.enhancedFetch)(`${baseUrl}/api/v4/version`);
98
+ if (response.ok) {
99
+ const data = (await response.json());
100
+ return data.version;
101
+ }
102
+ }
103
+ catch (error) {
104
+ logger_1.logger.warn(`Failed to detect version via REST API: ${error instanceof Error ? error.message : String(error)}`);
105
+ }
106
+ return 'unknown';
107
+ }
108
+ async detectTier() {
109
+ try {
110
+ const response = await this.client.request(LICENSE_QUERY);
111
+ if (response.currentLicense) {
112
+ const plan = response.currentLicense.plan?.toLowerCase() ?? '';
113
+ if (plan.includes('ultimate') || plan.includes('gold')) {
114
+ return 'ultimate';
115
+ }
116
+ else if (plan.includes('premium') || plan.includes('silver')) {
117
+ return 'premium';
118
+ }
119
+ }
120
+ }
121
+ catch (error) {
122
+ logger_1.logger.debug(`License query not available, attempting feature detection: ${error instanceof Error ? error.message : String(error)}`);
123
+ }
124
+ return await this.detectTierByFeatures();
125
+ }
126
+ async detectTierByFeatures() {
127
+ try {
128
+ const response = await this.client.request(FEATURE_DETECTION_QUERY, {
129
+ groupPath: this.testGroupPath,
130
+ });
131
+ const group = response.group;
132
+ if (group?.epicsEnabled) {
133
+ const hasIterations = (group.iterationsEnabled?.nodes?.length ?? 0) > 0;
134
+ const hasAdvancedWorkItems = group.workItemTypesEnabled?.nodes?.some((type) => ['OBJECTIVE', 'KEY_RESULT', 'REQUIREMENT'].includes(type.name)) ?? false;
135
+ if (hasAdvancedWorkItems) {
136
+ return 'ultimate';
137
+ }
138
+ else if (hasIterations) {
139
+ return 'premium';
140
+ }
141
+ else {
142
+ return 'premium';
143
+ }
144
+ }
145
+ }
146
+ catch (error) {
147
+ logger_1.logger.debug(`Feature detection failed, assuming free tier: ${error instanceof Error ? error.message : String(error)}`);
148
+ }
149
+ return 'free';
150
+ }
151
+ determineFeatures(version, tier) {
152
+ const versionNumber = this.parseVersion(version);
153
+ const features = {
154
+ workItems: versionNumber >= 15.0,
155
+ epics: tier !== 'free' && versionNumber >= 10.2,
156
+ iterations: tier !== 'free' && versionNumber >= 13.1,
157
+ roadmaps: tier !== 'free' && versionNumber >= 10.8,
158
+ portfolioManagement: tier === 'ultimate' && versionNumber >= 12.0,
159
+ advancedSearch: tier !== 'free' && versionNumber >= 11.0,
160
+ codeReview: tier !== 'free' && versionNumber >= 11.0,
161
+ securityDashboard: tier === 'ultimate' && versionNumber >= 11.1,
162
+ complianceFramework: tier === 'ultimate' && versionNumber >= 13.0,
163
+ valueStreamAnalytics: tier !== 'free' && versionNumber >= 12.3,
164
+ customFields: tier === 'ultimate' && versionNumber >= 17.0,
165
+ okrs: tier === 'ultimate' && versionNumber >= 15.7,
166
+ healthStatus: tier === 'ultimate' && versionNumber >= 13.1,
167
+ weight: tier !== 'free' && versionNumber >= 12.0,
168
+ multiLevelEpics: tier === 'ultimate' && versionNumber >= 11.7,
169
+ serviceDesk: tier !== 'free' && versionNumber >= 9.1,
170
+ requirements: tier === 'ultimate' && versionNumber >= 13.1,
171
+ qualityManagement: tier === 'ultimate' && versionNumber >= 13.0,
172
+ timeTracking: tier !== 'free' && versionNumber >= 8.14,
173
+ crmContacts: tier === 'ultimate' && versionNumber >= 14.0,
174
+ vulnerabilities: tier === 'ultimate' && versionNumber >= 12.5,
175
+ errorTracking: tier === 'ultimate' && versionNumber >= 12.7,
176
+ designManagement: tier !== 'free' && versionNumber >= 12.2,
177
+ linkedResources: tier !== 'free' && versionNumber >= 16.5,
178
+ emailParticipants: tier !== 'free' && versionNumber >= 16.0,
179
+ };
180
+ return features;
181
+ }
182
+ parseVersion(version) {
183
+ if (!version || version === 'unknown')
184
+ return 0;
185
+ const match = version.match(/^(\d+)\.(\d+)/);
186
+ if (!match)
187
+ return 0;
188
+ const major = parseInt(match[1], 10);
189
+ const minor = parseInt(match[2], 10);
190
+ return major + minor / 10;
191
+ }
192
+ isRecentCache(detectedAt) {
193
+ const cacheLifetime = 24 * 60 * 60 * 1000;
194
+ return Date.now() - detectedAt.getTime() < cacheLifetime;
195
+ }
196
+ isFeatureAvailable(feature) {
197
+ if (!this.cachedInfo) {
198
+ throw new Error('Instance info not detected yet. Call detectInstance() first.');
199
+ }
200
+ return this.cachedInfo.features[feature];
201
+ }
202
+ getTier() {
203
+ if (!this.cachedInfo) {
204
+ throw new Error('Instance info not detected yet. Call detectInstance() first.');
205
+ }
206
+ return this.cachedInfo.tier;
207
+ }
208
+ getVersion() {
209
+ if (!this.cachedInfo) {
210
+ throw new Error('Instance info not detected yet. Call detectInstance() first.');
211
+ }
212
+ return this.cachedInfo.version;
213
+ }
214
+ }
215
+ exports.GitLabVersionDetector = GitLabVersionDetector;
216
+ //# sourceMappingURL=GitLabVersionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLabVersionDetector.js","sourceRoot":"","sources":["../../src/services/GitLabVersionDetector.ts"],"names":[],"mappings":";;;AACA,6CAAkC;AAClC,0CAA+C;AAC/C,sCAAmC;AAoDnC,MAAM,aAAa,GAAG,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;CAiBxB,CAAC;AAEF,MAAM,aAAa,GAAG,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;CAcxB,CAAC;AAEF,MAAM,uBAAuB,GAAG,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;CAkBlC,CAAC;AAEF,MAAa,qBAAqB;IACxB,MAAM,CAAgB;IACtB,UAAU,GAA8B,IAAI,CAAC;IAC7C,aAAa,GAAW,MAAM,CAAC;IAEvC,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,GAAG;YAChB,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,UAAU,EAAE,IAAI,IAAI,EAAE;SACvB,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAgC,aAAa,CAAC,CAAC;YACzF,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CACT,4EAA4E,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrI,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAa,EAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;gBAC5D,OAAO,IAAI,CAAC,OAAO,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CACT,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnG,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YAMH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAkB,aAAa,CAAC,CAAC;YAE3E,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;gBAE/D,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvD,OAAO,UAAU,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/D,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,8DAA8D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACvH,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,IAAI,CAAC;YAUH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAkB,uBAAuB,EAAE;gBACnF,SAAS,EAAE,IAAI,CAAC,aAAa;aAC9B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAE7B,IAAI,KAAK,EAAE,YAAY,EAAE,CAAC;gBACxB,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAExE,MAAM,oBAAoB,GACxB,KAAK,CAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/C,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/D,IAAI,KAAK,CAAC;gBAEb,IAAI,oBAAoB,EAAE,CAAC;oBACzB,OAAO,UAAU,CAAC;gBACpB,CAAC;qBAAM,IAAI,aAAa,EAAE,CAAC;oBACzB,OAAO,SAAS,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,iDAAiD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1G,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,OAAe,EAAE,IAAgB;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAmB;YAE/B,SAAS,EAAE,aAAa,IAAI,IAAI;YAChC,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YAC/C,UAAU,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YACpD,QAAQ,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YAClD,mBAAmB,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YACjE,cAAc,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YACxD,UAAU,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YACpD,iBAAiB,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAC/D,mBAAmB,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YACjE,oBAAoB,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YAC9D,YAAY,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAC1D,IAAI,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAClD,YAAY,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAC1D,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YAChD,eAAe,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAC7D,WAAW,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,GAAG;YACpD,YAAY,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAC1D,iBAAiB,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAG/D,YAAY,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YACtD,WAAW,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YACzD,eAAe,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAC7D,aAAa,EAAE,IAAI,KAAK,UAAU,IAAI,aAAa,IAAI,IAAI;YAC3D,gBAAgB,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YAC1D,eAAe,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;YACzD,iBAAiB,EAAE,IAAI,KAAK,MAAM,IAAI,aAAa,IAAI,IAAI;SAC5D,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAErC,OAAO,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC;IAC5B,CAAC;IAEO,aAAa,CAAC,UAAgB;QACpC,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC;IAC3D,CAAC;IAEM,kBAAkB,CAAC,OAA6B;QACrD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;CACF;AA/MD,sDA+MC"}
@@ -0,0 +1,39 @@
1
+ import { GraphQLClient } from '../graphql/client';
2
+ export interface FieldInfo {
3
+ name: string;
4
+ type: {
5
+ name: string | null;
6
+ kind: string;
7
+ ofType?: {
8
+ name: string | null;
9
+ kind: string;
10
+ } | null;
11
+ };
12
+ }
13
+ export interface TypeInfo {
14
+ name: string;
15
+ fields: FieldInfo[] | null;
16
+ enumValues?: Array<{
17
+ name: string;
18
+ description?: string;
19
+ }> | null;
20
+ }
21
+ export interface SchemaInfo {
22
+ workItemWidgetTypes: string[];
23
+ typeDefinitions: Map<string, TypeInfo>;
24
+ availableFeatures: Set<string>;
25
+ }
26
+ export declare class SchemaIntrospector {
27
+ private client;
28
+ private cachedSchema;
29
+ constructor(client: GraphQLClient);
30
+ introspectSchema(): Promise<SchemaInfo>;
31
+ isWidgetTypeAvailable(widgetType: string): boolean;
32
+ getFieldsForType(typeName: string): FieldInfo[];
33
+ hasField(typeName: string, fieldName: string): boolean;
34
+ getAvailableWidgetTypes(): string[];
35
+ generateSafeWidgetQuery(requestedWidgets: string[]): string;
36
+ private generateSafeFieldSelections;
37
+ getCachedSchema(): SchemaInfo | null;
38
+ clearCache(): void;
39
+ }
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaIntrospector = void 0;
4
+ const graphql_tag_1 = require("graphql-tag");
5
+ const logger_1 = require("../logger");
6
+ const INTROSPECTION_QUERY = (0, graphql_tag_1.gql) `
7
+ query IntrospectSchema {
8
+ __schema {
9
+ types {
10
+ name
11
+ kind
12
+ fields {
13
+ name
14
+ type {
15
+ name
16
+ kind
17
+ ofType {
18
+ name
19
+ kind
20
+ }
21
+ }
22
+ }
23
+ enumValues {
24
+ name
25
+ description
26
+ }
27
+ }
28
+ }
29
+ }
30
+ `;
31
+ class SchemaIntrospector {
32
+ client;
33
+ cachedSchema = null;
34
+ constructor(client) {
35
+ this.client = client;
36
+ }
37
+ async introspectSchema() {
38
+ if (this.cachedSchema) {
39
+ return this.cachedSchema;
40
+ }
41
+ try {
42
+ logger_1.logger.debug('🔍 Introspecting GitLab GraphQL schema...');
43
+ const result = await this.client.request(INTROSPECTION_QUERY);
44
+ const types = result.__schema.types;
45
+ const workItemWidgetType = types.find((type) => type.name === 'WorkItemWidgetType');
46
+ const workItemWidgetTypes = workItemWidgetType?.enumValues?.map((value) => value.name) ?? [];
47
+ const typeDefinitions = new Map();
48
+ const relevantTypes = types.filter((type) => type.name &&
49
+ (type.name.startsWith('WorkItem') ||
50
+ type.name.includes('Widget') ||
51
+ type.name === 'AwardEmoji' ||
52
+ type.name === 'Milestone' ||
53
+ type.name === 'User' ||
54
+ type.name === 'Label'));
55
+ for (const type of relevantTypes) {
56
+ typeDefinitions.set(type.name, {
57
+ name: type.name,
58
+ fields: type.fields ?? null,
59
+ enumValues: type.enumValues ?? null,
60
+ });
61
+ }
62
+ const availableFeatures = new Set();
63
+ for (const widgetType of workItemWidgetTypes) {
64
+ availableFeatures.add(widgetType);
65
+ }
66
+ this.cachedSchema = {
67
+ workItemWidgetTypes,
68
+ typeDefinitions,
69
+ availableFeatures,
70
+ };
71
+ logger_1.logger.info({
72
+ widgetTypes: workItemWidgetTypes.length,
73
+ typeDefinitions: typeDefinitions.size,
74
+ features: availableFeatures.size,
75
+ }, '✅ GraphQL schema introspection completed');
76
+ return this.cachedSchema;
77
+ }
78
+ catch (error) {
79
+ logger_1.logger.warn({ err: error }, '⚠️ Schema introspection failed, using fallback schema info');
80
+ this.cachedSchema = {
81
+ workItemWidgetTypes: [
82
+ 'ASSIGNEES',
83
+ 'LABELS',
84
+ 'MILESTONE',
85
+ 'DESCRIPTION',
86
+ 'START_AND_DUE_DATE',
87
+ 'WEIGHT',
88
+ 'TIME_TRACKING',
89
+ 'HEALTH_STATUS',
90
+ 'COLOR',
91
+ 'NOTIFICATIONS',
92
+ 'NOTES',
93
+ ],
94
+ typeDefinitions: new Map(),
95
+ availableFeatures: new Set(['workItems', 'epics', 'issues']),
96
+ };
97
+ return this.cachedSchema;
98
+ }
99
+ }
100
+ isWidgetTypeAvailable(widgetType) {
101
+ if (!this.cachedSchema) {
102
+ throw new Error('Schema not introspected yet. Call introspectSchema() first.');
103
+ }
104
+ return this.cachedSchema.availableFeatures.has(widgetType);
105
+ }
106
+ getFieldsForType(typeName) {
107
+ if (!this.cachedSchema) {
108
+ throw new Error('Schema not introspected yet. Call introspectSchema() first.');
109
+ }
110
+ const typeInfo = this.cachedSchema.typeDefinitions.get(typeName);
111
+ if (typeInfo?.fields) {
112
+ return typeInfo.fields;
113
+ }
114
+ if (typeName === 'WorkItemWidgetAssignees') {
115
+ return [{ name: 'assignees', type: { name: 'UserConnection', kind: 'OBJECT' } }];
116
+ }
117
+ if (typeName === 'WorkItemWidgetLabels') {
118
+ return [{ name: 'labels', type: { name: 'LabelConnection', kind: 'OBJECT' } }];
119
+ }
120
+ if (typeName === 'WorkItemWidgetMilestone') {
121
+ return [{ name: 'milestone', type: { name: 'Milestone', kind: 'OBJECT' } }];
122
+ }
123
+ return [];
124
+ }
125
+ hasField(typeName, fieldName) {
126
+ const fields = this.getFieldsForType(typeName);
127
+ return fields.some((field) => field.name === fieldName);
128
+ }
129
+ getAvailableWidgetTypes() {
130
+ if (!this.cachedSchema) {
131
+ throw new Error('Schema not introspected yet. Call introspectSchema() first.');
132
+ }
133
+ return this.cachedSchema.workItemWidgetTypes;
134
+ }
135
+ generateSafeWidgetQuery(requestedWidgets) {
136
+ if (!this.cachedSchema) {
137
+ throw new Error('Schema not introspected yet. Call introspectSchema() first.');
138
+ }
139
+ const safeWidgets = [];
140
+ for (const widget of requestedWidgets) {
141
+ if (this.isWidgetTypeAvailable(widget)) {
142
+ const widgetTypeName = `WorkItemWidget${widget.charAt(0) +
143
+ widget
144
+ .slice(1)
145
+ .toLowerCase()
146
+ .replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())}`;
147
+ const fields = this.getFieldsForType(widgetTypeName);
148
+ const safeFields = this.generateSafeFieldSelections(fields);
149
+ if (safeFields.length > 0) {
150
+ safeWidgets.push(`
151
+ ... on ${widgetTypeName} {
152
+ ${safeFields.join('\n ')}
153
+ }
154
+ `);
155
+ }
156
+ }
157
+ }
158
+ return safeWidgets.join('\n');
159
+ }
160
+ generateSafeFieldSelections(fields) {
161
+ const safeFields = [];
162
+ for (const field of fields) {
163
+ if (field.type.kind === 'SCALAR' || field.type.kind === 'ENUM') {
164
+ safeFields.push(field.name);
165
+ }
166
+ else if (field.type.kind === 'OBJECT' && field.name !== 'type') {
167
+ if (field.name === 'milestone') {
168
+ safeFields.push(`${field.name} { id title state }`);
169
+ }
170
+ else if (field.name === 'assignees' || field.name === 'participants') {
171
+ safeFields.push(`${field.name} { nodes { id username } }`);
172
+ }
173
+ else if (field.name === 'labels') {
174
+ safeFields.push(`${field.name} { nodes { id title color } }`);
175
+ }
176
+ }
177
+ }
178
+ return safeFields;
179
+ }
180
+ getCachedSchema() {
181
+ return this.cachedSchema;
182
+ }
183
+ clearCache() {
184
+ this.cachedSchema = null;
185
+ }
186
+ }
187
+ exports.SchemaIntrospector = SchemaIntrospector;
188
+ //# sourceMappingURL=SchemaIntrospector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaIntrospector.js","sourceRoot":"","sources":["../../src/services/SchemaIntrospector.ts"],"names":[],"mappings":";;;AACA,6CAAkC;AAClC,sCAAmC;AAuCnC,MAAM,mBAAmB,GAAG,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;CAwB9B,CAAC;AAEF,MAAa,kBAAkB;IACrB,MAAM,CAAgB;IACtB,YAAY,GAAsB,IAAI,CAAC;IAE/C,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAC3B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC;YACH,eAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB,mBAAmB,CAAC,CAAC;YACnF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAGpC,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC;YACpF,MAAM,mBAAmB,GAAG,kBAAkB,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAG7F,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;YAGpD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI;gBACT,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC5B,IAAI,CAAC,IAAI,KAAK,YAAY;oBAC1B,IAAI,CAAC,IAAI,KAAK,WAAW;oBACzB,IAAI,CAAC,IAAI,KAAK,MAAM;oBACpB,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAC3B,CAAC;YAEF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;oBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;oBAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;iBACpC,CAAC,CAAC;YACL,CAAC;YAGD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;YAC5C,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE,CAAC;gBAC7C,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,YAAY,GAAG;gBAClB,mBAAmB;gBACnB,eAAe;gBACf,iBAAiB;aAClB,CAAC;YAEF,eAAM,CAAC,IAAI,CACT;gBACE,WAAW,EAAE,mBAAmB,CAAC,MAAM;gBACvC,eAAe,EAAE,eAAe,CAAC,IAAI;gBACrC,QAAQ,EAAE,iBAAiB,CAAC,IAAI;aACjC,EACD,0CAA0C,CAC3C,CAAC;YAEF,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,KAAc,EAAE,EACvB,4DAA4D,CAC7D,CAAC;YAGF,IAAI,CAAC,YAAY,GAAG;gBAClB,mBAAmB,EAAE;oBACnB,WAAW;oBACX,QAAQ;oBACR,WAAW;oBACX,aAAa;oBACb,oBAAoB;oBACpB,QAAQ;oBACR,eAAe;oBACf,eAAe;oBACf,OAAO;oBACP,eAAe;oBACf,OAAO;iBACR;gBACD,eAAe,EAAE,IAAI,GAAG,EAAE;gBAC1B,iBAAiB,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;aAC7D,CAAC;YAEF,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,qBAAqB,CAAC,UAAkB;QAC7C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAEM,gBAAgB,CAAC,QAAgB;QACtC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QAGD,IAAI,QAAQ,KAAK,yBAAyB,EAAE,CAAC;YAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;YACxC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,QAAQ,KAAK,yBAAyB,EAAE,CAAC;YAC3C,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,QAAQ,CAAC,QAAgB,EAAE,SAAiB;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC1D,CAAC;IAEM,uBAAuB;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;IAC/C,CAAC;IAEM,uBAAuB,CAAC,gBAA0B;QACvD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,cAAc,GAAG,iBACrB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBAChB,MAAM;yBACH,KAAK,CAAC,CAAC,CAAC;yBACR,WAAW,EAAE;yBACb,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CACrE,EAAE,CAAC;gBAGH,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;gBAE5D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,WAAW,CAAC,IAAI,CAAC;qBACN,cAAc;gBACnB,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;;WAExC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEO,2BAA2B,CAAC,MAAmB;QACrD,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAE3B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC/D,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAEjE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC/B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,qBAAqB,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACvE,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,4BAA4B,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,+BAA+B,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;CACF;AA3MD,gDA2MC"}
@@ -0,0 +1,18 @@
1
+ interface ToolRequirement {
2
+ minVersion: number;
3
+ requiredTier: 'free' | 'premium' | 'ultimate';
4
+ notes?: string;
5
+ }
6
+ export declare class ToolAvailability {
7
+ private static toolRequirements;
8
+ static isToolAvailable(toolName: string): boolean;
9
+ static getAvailableTools(): string[];
10
+ static getToolRequirement(toolName: string): ToolRequirement | undefined;
11
+ static getUnavailableReason(toolName: string): string | null;
12
+ private static parseVersion;
13
+ private static isTierSufficient;
14
+ static filterToolsByAvailability(tools: string[]): string[];
15
+ static getToolsByTier(tier: 'free' | 'premium' | 'ultimate'): string[];
16
+ static getToolsByMinVersion(minVersion: number): string[];
17
+ }
18
+ export {};