@structured-world/gitlab-mcp 6.16.0 → 6.18.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 (47) hide show
  1. package/README.md +49 -0
  2. package/dist/src/cli/list-tools.js +25 -8
  3. package/dist/src/cli/list-tools.js.map +1 -1
  4. package/dist/src/cli-utils.d.ts +4 -0
  5. package/dist/src/cli-utils.js +26 -0
  6. package/dist/src/cli-utils.js.map +1 -1
  7. package/dist/src/discovery/auto.d.ts +22 -0
  8. package/dist/src/discovery/auto.js +170 -0
  9. package/dist/src/discovery/auto.js.map +1 -0
  10. package/dist/src/discovery/git-remote.d.ts +19 -0
  11. package/dist/src/discovery/git-remote.js +197 -0
  12. package/dist/src/discovery/git-remote.js.map +1 -0
  13. package/dist/src/discovery/index.d.ts +3 -0
  14. package/dist/src/discovery/index.js +16 -0
  15. package/dist/src/discovery/index.js.map +1 -0
  16. package/dist/src/discovery/profile-matcher.d.ts +8 -0
  17. package/dist/src/discovery/profile-matcher.js +40 -0
  18. package/dist/src/discovery/profile-matcher.js.map +1 -0
  19. package/dist/src/entities/core/schema-readonly.d.ts +6 -6
  20. package/dist/src/entities/mrs/registry.js +19 -1
  21. package/dist/src/entities/mrs/registry.js.map +1 -1
  22. package/dist/src/entities/mrs/schema.d.ts +13 -1
  23. package/dist/src/entities/mrs/schema.js +16 -0
  24. package/dist/src/entities/mrs/schema.js.map +1 -1
  25. package/dist/src/entities/workitems/schema-readonly.d.ts +2 -2
  26. package/dist/src/entities/workitems/schema.d.ts +1 -1
  27. package/dist/src/handlers.d.ts +4 -0
  28. package/dist/src/handlers.js +76 -1
  29. package/dist/src/handlers.js.map +1 -1
  30. package/dist/src/logger.js +8 -4
  31. package/dist/src/logger.js.map +1 -1
  32. package/dist/src/main.js +93 -11
  33. package/dist/src/main.js.map +1 -1
  34. package/dist/src/services/ToolAvailability.d.ts +12 -2
  35. package/dist/src/services/ToolAvailability.js +200 -3
  36. package/dist/src/services/ToolAvailability.js.map +1 -1
  37. package/dist/src/utils/error-handler.d.ts +69 -0
  38. package/dist/src/utils/error-handler.js +518 -0
  39. package/dist/src/utils/error-handler.js.map +1 -0
  40. package/dist/src/utils/fetch.js.map +1 -1
  41. package/dist/src/utils/namespace.d.ts +1 -0
  42. package/dist/src/utils/namespace.js +11 -0
  43. package/dist/src/utils/namespace.js.map +1 -1
  44. package/dist/structured-world-gitlab-mcp-6.18.0.tgz +0 -0
  45. package/dist/tsconfig.build.tsbuildinfo +1 -1
  46. package/package.json +1 -1
  47. package/dist/structured-world-gitlab-mcp-6.16.0.tgz +0 -0
@@ -33,10 +33,70 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseGitLabApiError = parseGitLabApiError;
36
37
  exports.setupHandlers = setupHandlers;
37
38
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
38
39
  const ConnectionManager_1 = require("./services/ConnectionManager");
39
40
  const logger_1 = require("./logger");
41
+ const error_handler_1 = require("./utils/error-handler");
42
+ function parseGitLabApiError(errorMessage) {
43
+ const match = errorMessage.match(/GitLab API error:\s*(\d+)(?:\s+([\w\s]+?))?(?:\s+-\s+(.*))?$/);
44
+ if (!match)
45
+ return null;
46
+ const status = parseInt(match[1], 10);
47
+ const statusText = match[2]?.trim() ?? "";
48
+ const details = match[3]?.trim() ?? "";
49
+ let message;
50
+ if (statusText && details) {
51
+ message = `${status} ${statusText} - ${details}`;
52
+ }
53
+ else if (statusText) {
54
+ message = `${status} ${statusText}`;
55
+ }
56
+ else if (details) {
57
+ message = `${status} - ${details}`;
58
+ }
59
+ else {
60
+ message = `${status}`;
61
+ }
62
+ return { status, message };
63
+ }
64
+ function hasAction(value) {
65
+ return (typeof value === "object" &&
66
+ value !== null &&
67
+ "action" in value &&
68
+ typeof value.action === "string");
69
+ }
70
+ function extractActionFromError(error) {
71
+ if (hasAction(error)) {
72
+ return error.action;
73
+ }
74
+ const cause = error.cause;
75
+ if (hasAction(cause)) {
76
+ return cause.action;
77
+ }
78
+ return undefined;
79
+ }
80
+ function toStructuredError(error, toolName, toolArgs) {
81
+ if ((0, error_handler_1.isStructuredToolError)(error)) {
82
+ return error.structuredError;
83
+ }
84
+ const cause = error.cause;
85
+ if ((0, error_handler_1.isStructuredToolError)(cause)) {
86
+ return cause.structuredError;
87
+ }
88
+ if (!(error instanceof Error))
89
+ return null;
90
+ const parsed = parseGitLabApiError(error.message);
91
+ if (!parsed)
92
+ return null;
93
+ let action = extractActionFromError(error);
94
+ if (!action && toolArgs && typeof toolArgs.action === "string") {
95
+ action = toolArgs.action;
96
+ }
97
+ action ??= "unknown";
98
+ return (0, error_handler_1.handleGitLabError)({ status: parsed.status, message: parsed.message }, toolName, action, toolArgs);
99
+ }
40
100
  async function setupHandlers(server) {
41
101
  const connectionManager = ConnectionManager_1.ConnectionManager.getInstance();
42
102
  try {
@@ -170,11 +230,26 @@ async function setupHandlers(server) {
170
230
  }
171
231
  catch (error) {
172
232
  const errorMessage = error instanceof Error ? error.message : String(error);
173
- throw new Error(`Failed to execute tool '${toolName}': ${errorMessage}`);
233
+ throw new Error(`Failed to execute tool '${toolName}': ${errorMessage}`, { cause: error });
174
234
  }
175
235
  }
176
236
  catch (error) {
177
237
  logger_1.logger.error(`Error in tool handler: ${error instanceof Error ? error.message : String(error)}`);
238
+ const toolName = request.params.name;
239
+ const toolArgs = request.params.arguments;
240
+ const structuredError = toStructuredError(error, toolName, toolArgs);
241
+ if (structuredError) {
242
+ logger_1.logger.debug({ structuredError }, "Returning structured error response");
243
+ return {
244
+ content: [
245
+ {
246
+ type: "text",
247
+ text: JSON.stringify(structuredError, null, 2),
248
+ },
249
+ ],
250
+ isError: true,
251
+ };
252
+ }
178
253
  const errorMessage = error instanceof Error ? error.message : String(error);
179
254
  return {
180
255
  content: [
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/handlers.ts"],"names":[],"mappings":"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"}
@@ -2,19 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.logger = exports.createLogger = void 0;
4
4
  const pino_1 = require("pino");
5
+ const isTestEnv = process.env.NODE_ENV === "test" || process.env.JEST_WORKER_ID !== undefined;
5
6
  const createLogger = (name) => {
6
- return (0, pino_1.pino)({
7
+ const options = {
7
8
  name,
8
9
  level: process.env.LOG_LEVEL ?? "info",
9
- transport: {
10
+ };
11
+ if (!isTestEnv) {
12
+ options.transport = {
10
13
  target: "pino-pretty",
11
14
  options: {
12
15
  colorize: true,
13
16
  translateTime: true,
14
17
  ignore: "pid,hostname",
15
18
  },
16
- },
17
- });
19
+ };
20
+ }
21
+ return (0, pino_1.pino)(options);
18
22
  };
19
23
  exports.createLogger = createLogger;
20
24
  exports.logger = (0, exports.createLogger)("gitlab-mcp");
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAErB,MAAM,YAAY,GAAG,CAAC,IAAa,EAAE,EAAE;IAC5C,OAAO,IAAA,WAAI,EAAC;QACV,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,cAAc;aACvB;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAbW,QAAA,YAAY,gBAavB;AAEW,QAAA,MAAM,GAAG,IAAA,oBAAY,EAAC,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":";;;AAAA,+BAAgD;AAEhD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC;AAEvF,MAAM,YAAY,GAAG,CAAC,IAAa,EAAE,EAAE;IAC5C,MAAM,OAAO,GAAkB;QAC7B,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;KACvC,CAAC;IAIF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,SAAS,GAAG;YAClB,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,cAAc;aACvB;SACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAA,WAAI,EAAC,OAAO,CAAC,CAAC;AACvB,CAAC,CAAC;AApBW,QAAA,YAAY,gBAoBvB;AAEW,QAAA,MAAM,GAAG,IAAA,oBAAY,EAAC,YAAY,CAAC,CAAC"}
package/dist/src/main.js CHANGED
@@ -5,6 +5,8 @@ const server_1 = require("./server");
5
5
  const logger_1 = require("./logger");
6
6
  const profiles_1 = require("./profiles");
7
7
  const cli_utils_1 = require("./cli-utils");
8
+ const discovery_1 = require("./discovery");
9
+ const namespace_1 = require("./utils/namespace");
8
10
  async function main() {
9
11
  const cliArgs = (0, cli_utils_1.parseCliArgs)();
10
12
  if (cliArgs.showProjectConfig) {
@@ -19,21 +21,90 @@ async function main() {
19
21
  process.exit(1);
20
22
  }
21
23
  }
22
- try {
23
- const result = await (0, profiles_1.tryApplyProfileFromEnv)(cliArgs.profileName);
24
- if (result) {
25
- if ("profileName" in result) {
26
- logger_1.logger.info({ profile: result.profileName, host: result.host }, "Using configuration profile");
24
+ let autoDiscoveryResult = null;
25
+ if (cliArgs.auto) {
26
+ try {
27
+ autoDiscoveryResult = await (0, discovery_1.autoDiscover)({
28
+ repoPath: cliArgs.cwd,
29
+ remoteName: cliArgs.remoteName,
30
+ noProjectConfig: true,
31
+ dryRun: cliArgs.dryRun,
32
+ });
33
+ if (autoDiscoveryResult) {
34
+ if (cliArgs.dryRun) {
35
+ console.log((0, discovery_1.formatDiscoveryResult)(autoDiscoveryResult));
36
+ process.exit(0);
37
+ }
38
+ logger_1.logger.info({
39
+ host: autoDiscoveryResult.host,
40
+ project: autoDiscoveryResult.projectPath,
41
+ profile: autoDiscoveryResult.matchedProfile?.profileName,
42
+ }, "Auto-discovery detected GitLab configuration");
27
43
  }
28
44
  else {
29
- logger_1.logger.info({ preset: result.presetName }, "Using configuration preset");
45
+ logger_1.logger.warn("Auto-discovery failed: not in a git repository or no remote found");
46
+ }
47
+ }
48
+ catch (error) {
49
+ const message = error instanceof Error ? error.message : String(error);
50
+ logger_1.logger.error({ error: message }, "Auto-discovery failed");
51
+ process.exit(1);
52
+ }
53
+ }
54
+ if (cliArgs.profileName) {
55
+ try {
56
+ const result = await (0, profiles_1.tryApplyProfileFromEnv)(cliArgs.profileName);
57
+ if (result) {
58
+ if ("profileName" in result) {
59
+ logger_1.logger.info({ profile: result.profileName, host: result.host }, "Using CLI-specified profile");
60
+ }
61
+ else {
62
+ logger_1.logger.info({ preset: result.presetName }, "Using CLI-specified preset");
63
+ }
64
+ if (autoDiscoveryResult?.matchedProfile &&
65
+ autoDiscoveryResult.matchedProfile.profileName !== cliArgs.profileName) {
66
+ logger_1.logger.warn({
67
+ cliProfile: cliArgs.profileName,
68
+ autoProfile: autoDiscoveryResult.matchedProfile.profileName,
69
+ }, "Auto-discovered profile ignored: --profile takes precedence");
70
+ }
71
+ }
72
+ }
73
+ catch (error) {
74
+ const message = error instanceof Error ? error.message : String(error);
75
+ logger_1.logger.error({ error: message }, "Failed to load profile");
76
+ process.exit(1);
77
+ }
78
+ }
79
+ else if (autoDiscoveryResult?.matchedProfile) {
80
+ try {
81
+ const result = await (0, profiles_1.tryApplyProfileFromEnv)(autoDiscoveryResult.matchedProfile.profileName);
82
+ if (result && "profileName" in result) {
83
+ logger_1.logger.info({ profile: result.profileName, host: result.host }, "Using auto-discovered profile");
30
84
  }
31
85
  }
86
+ catch (error) {
87
+ const message = error instanceof Error ? error.message : String(error);
88
+ logger_1.logger.warn({ error: message }, "Failed to apply auto-discovered profile");
89
+ }
32
90
  }
33
- catch (error) {
34
- const message = error instanceof Error ? error.message : String(error);
35
- logger_1.logger.error({ error: message }, "Failed to load profile");
36
- process.exit(1);
91
+ else {
92
+ try {
93
+ const result = await (0, profiles_1.tryApplyProfileFromEnv)();
94
+ if (result) {
95
+ if ("profileName" in result) {
96
+ logger_1.logger.info({ profile: result.profileName, host: result.host }, "Using configuration profile");
97
+ }
98
+ else {
99
+ logger_1.logger.info({ preset: result.presetName }, "Using configuration preset");
100
+ }
101
+ }
102
+ }
103
+ catch (error) {
104
+ const message = error instanceof Error ? error.message : String(error);
105
+ logger_1.logger.error({ error: message }, "Failed to load profile");
106
+ process.exit(1);
107
+ }
37
108
  }
38
109
  if (!cliArgs.noProjectConfig) {
39
110
  try {
@@ -44,7 +115,7 @@ async function main() {
44
115
  path: projectConfig.configPath,
45
116
  preset: summary.presetSummary,
46
117
  profile: summary.profileSummary,
47
- }, "Loaded project configuration");
118
+ }, "Loaded project configuration (restrictions applied)");
48
119
  }
49
120
  }
50
121
  catch (error) {
@@ -52,6 +123,17 @@ async function main() {
52
123
  logger_1.logger.warn({ error: message }, "Failed to load project config, continuing without it");
53
124
  }
54
125
  }
126
+ if (autoDiscoveryResult) {
127
+ process.env.GITLAB_DEFAULT_PROJECT ??= autoDiscoveryResult.projectPath;
128
+ const namespace = (0, namespace_1.extractNamespaceFromPath)(autoDiscoveryResult.projectPath);
129
+ if (namespace) {
130
+ process.env.GITLAB_DEFAULT_NAMESPACE ??= namespace;
131
+ }
132
+ logger_1.logger.debug({
133
+ defaultProject: process.env.GITLAB_DEFAULT_PROJECT,
134
+ defaultNamespace: process.env.GITLAB_DEFAULT_NAMESPACE,
135
+ }, "Default context set from auto-discovery");
136
+ }
55
137
  await (0, server_1.startServer)();
56
138
  }
57
139
  main().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,21 @@ interface ToolRequirement {
3
3
  requiredTier: "free" | "premium" | "ultimate";
4
4
  notes?: string;
5
5
  }
6
+ interface ActionRequirement {
7
+ tier: "free" | "premium" | "ultimate";
8
+ minVersion: number;
9
+ notes?: string;
10
+ }
6
11
  export declare class ToolAvailability {
12
+ private static readonly TIER_ORDER;
7
13
  private static toolRequirements;
8
- static isToolAvailable(toolName: string): boolean;
14
+ private static actionRequirements;
15
+ static getActionRequirement(toolName: string, action?: string): ActionRequirement | undefined;
16
+ static getHighestTier(toolName: string): "free" | "premium" | "ultimate";
17
+ static getTierRestrictedActions(toolName: string, tier: "premium" | "ultimate"): string[];
18
+ static isToolAvailable(toolName: string, action?: string): boolean;
9
19
  static getAvailableTools(): string[];
10
- static getToolRequirement(toolName: string): ToolRequirement | undefined;
20
+ static getToolRequirement(toolName: string, action?: string): ToolRequirement | undefined;
11
21
  static getUnavailableReason(toolName: string): string | null;
12
22
  private static parseVersion;
13
23
  private static isTierSufficient;
@@ -4,6 +4,11 @@ exports.ToolAvailability = void 0;
4
4
  const ConnectionManager_1 = require("./ConnectionManager");
5
5
  const logger_1 = require("../logger");
6
6
  class ToolAvailability {
7
+ static TIER_ORDER = {
8
+ free: 0,
9
+ premium: 1,
10
+ ultimate: 2,
11
+ };
7
12
  static toolRequirements = {
8
13
  list_projects: { minVersion: 8.0, requiredTier: "free" },
9
14
  get_project: { minVersion: 8.0, requiredTier: "free" },
@@ -313,7 +318,179 @@ class ToolAvailability {
313
318
  protect_repository_tag: { minVersion: 11.3, requiredTier: "free" },
314
319
  unprotect_repository_tag: { minVersion: 11.3, requiredTier: "free" },
315
320
  };
316
- static isToolAvailable(toolName) {
321
+ static actionRequirements = {
322
+ browse_projects: {
323
+ default: { tier: "free", minVersion: 8.0 },
324
+ },
325
+ browse_namespaces: {
326
+ default: { tier: "free", minVersion: 9.0 },
327
+ },
328
+ browse_commits: {
329
+ default: { tier: "free", minVersion: 8.0 },
330
+ },
331
+ browse_events: {
332
+ default: { tier: "free", minVersion: 9.0 },
333
+ },
334
+ create_branch: {
335
+ default: { tier: "free", minVersion: 8.0 },
336
+ },
337
+ create_group: {
338
+ default: { tier: "free", minVersion: 8.0 },
339
+ },
340
+ manage_repository: {
341
+ default: { tier: "free", minVersion: 8.0 },
342
+ },
343
+ get_users: {
344
+ default: { tier: "free", minVersion: 8.0 },
345
+ },
346
+ browse_merge_requests: {
347
+ default: { tier: "free", minVersion: 8.0 },
348
+ actions: {
349
+ approvals: { tier: "premium", minVersion: 10.6, notes: "MR approvals" },
350
+ },
351
+ },
352
+ browse_mr_discussions: {
353
+ default: { tier: "free", minVersion: 8.0 },
354
+ },
355
+ manage_merge_request: {
356
+ default: { tier: "free", minVersion: 8.0 },
357
+ },
358
+ manage_mr_discussion: {
359
+ default: { tier: "free", minVersion: 8.0 },
360
+ actions: {
361
+ comment: { tier: "free", minVersion: 8.0 },
362
+ thread: { tier: "free", minVersion: 11.0 },
363
+ reply: { tier: "free", minVersion: 11.0 },
364
+ update: { tier: "free", minVersion: 8.0 },
365
+ apply_suggestion: { tier: "free", minVersion: 13.0 },
366
+ apply_suggestions: { tier: "free", minVersion: 13.0 },
367
+ },
368
+ },
369
+ manage_draft_notes: {
370
+ default: { tier: "free", minVersion: 13.2 },
371
+ },
372
+ browse_work_items: {
373
+ default: { tier: "free", minVersion: 15.0 },
374
+ },
375
+ manage_work_item: {
376
+ default: { tier: "free", minVersion: 15.0 },
377
+ },
378
+ browse_labels: {
379
+ default: { tier: "free", minVersion: 8.0 },
380
+ },
381
+ manage_label: {
382
+ default: { tier: "free", minVersion: 8.0 },
383
+ },
384
+ browse_wiki: {
385
+ default: { tier: "free", minVersion: 9.0 },
386
+ },
387
+ manage_wiki: {
388
+ default: { tier: "free", minVersion: 9.0 },
389
+ },
390
+ browse_pipelines: {
391
+ default: { tier: "free", minVersion: 9.0 },
392
+ },
393
+ manage_pipeline: {
394
+ default: { tier: "free", minVersion: 9.0 },
395
+ },
396
+ manage_pipeline_job: {
397
+ default: { tier: "free", minVersion: 9.0 },
398
+ },
399
+ browse_variables: {
400
+ default: { tier: "free", minVersion: 9.0 },
401
+ },
402
+ manage_variable: {
403
+ default: { tier: "free", minVersion: 9.0 },
404
+ },
405
+ browse_milestones: {
406
+ default: { tier: "free", minVersion: 8.0 },
407
+ actions: {
408
+ burndown: { tier: "premium", minVersion: 12.0, notes: "Burndown charts" },
409
+ },
410
+ },
411
+ manage_milestone: {
412
+ default: { tier: "free", minVersion: 8.0 },
413
+ },
414
+ browse_files: {
415
+ default: { tier: "free", minVersion: 8.0 },
416
+ },
417
+ manage_files: {
418
+ default: { tier: "free", minVersion: 8.0 },
419
+ },
420
+ browse_snippets: {
421
+ default: { tier: "free", minVersion: 8.15 },
422
+ },
423
+ manage_snippet: {
424
+ default: { tier: "free", minVersion: 8.15 },
425
+ },
426
+ list_webhooks: {
427
+ default: { tier: "free", minVersion: 8.0, notes: "Project webhooks" },
428
+ },
429
+ manage_webhook: {
430
+ default: { tier: "free", minVersion: 8.0, notes: "Project webhooks" },
431
+ actions: {
432
+ create_group: { tier: "premium", minVersion: 10.4, notes: "Group webhooks" },
433
+ update_group: { tier: "premium", minVersion: 10.4, notes: "Group webhooks" },
434
+ delete_group: { tier: "premium", minVersion: 10.4, notes: "Group webhooks" },
435
+ },
436
+ },
437
+ list_integrations: {
438
+ default: { tier: "free", minVersion: 8.0 },
439
+ },
440
+ manage_integration: {
441
+ default: { tier: "free", minVersion: 8.0 },
442
+ },
443
+ list_todos: {
444
+ default: { tier: "free", minVersion: 8.0 },
445
+ },
446
+ manage_todos: {
447
+ default: { tier: "free", minVersion: 8.0 },
448
+ },
449
+ list_project_members: {
450
+ default: { tier: "free", minVersion: 8.0 },
451
+ },
452
+ list_group_iterations: {
453
+ default: { tier: "premium", minVersion: 13.1, notes: "Iterations/Sprints" },
454
+ },
455
+ download_attachment: {
456
+ default: { tier: "free", minVersion: 10.0 },
457
+ },
458
+ };
459
+ static getActionRequirement(toolName, action) {
460
+ const toolReq = this.actionRequirements[toolName];
461
+ if (!toolReq)
462
+ return undefined;
463
+ if (action && toolReq.actions?.[action]) {
464
+ return toolReq.actions[action];
465
+ }
466
+ return toolReq.default;
467
+ }
468
+ static getHighestTier(toolName) {
469
+ const toolReq = this.actionRequirements[toolName];
470
+ if (!toolReq) {
471
+ const legacy = this.toolRequirements[toolName];
472
+ return legacy?.requiredTier ?? "free";
473
+ }
474
+ let highest = toolReq.default.tier;
475
+ if (toolReq.actions) {
476
+ for (const actionReq of Object.values(toolReq.actions)) {
477
+ if (this.TIER_ORDER[actionReq.tier] > this.TIER_ORDER[highest]) {
478
+ highest = actionReq.tier;
479
+ }
480
+ }
481
+ }
482
+ return highest;
483
+ }
484
+ static getTierRestrictedActions(toolName, tier) {
485
+ const toolReq = this.actionRequirements[toolName];
486
+ if (!toolReq?.actions)
487
+ return [];
488
+ const minLevel = this.TIER_ORDER[tier];
489
+ return Object.entries(toolReq.actions)
490
+ .filter(([, req]) => this.TIER_ORDER[req.tier] >= minLevel)
491
+ .map(([action]) => action);
492
+ }
493
+ static isToolAvailable(toolName, action) {
317
494
  const connectionManager = ConnectionManager_1.ConnectionManager.getInstance();
318
495
  if (!connectionManager) {
319
496
  logger_1.logger.debug(`Tool availability check for '${toolName}': ConnectionManager instance is null`);
@@ -321,6 +498,14 @@ class ToolAvailability {
321
498
  }
322
499
  try {
323
500
  const instanceInfo = connectionManager.getInstanceInfo();
501
+ const actionReq = this.getActionRequirement(toolName, action);
502
+ if (actionReq) {
503
+ const version = this.parseVersion(instanceInfo.version);
504
+ if (version < actionReq.minVersion) {
505
+ return false;
506
+ }
507
+ return this.isTierSufficient(instanceInfo.tier, actionReq.tier);
508
+ }
324
509
  const requirement = this.toolRequirements[toolName];
325
510
  if (!requirement) {
326
511
  logger_1.logger.debug(`Tool '${toolName}' not found in requirements database`);
@@ -343,9 +528,21 @@ class ToolAvailability {
343
528
  }
344
529
  }
345
530
  static getAvailableTools() {
346
- return Object.keys(this.toolRequirements).filter(tool => this.isToolAvailable(tool));
531
+ const allTools = new Set([
532
+ ...Object.keys(this.toolRequirements),
533
+ ...Object.keys(this.actionRequirements),
534
+ ]);
535
+ return Array.from(allTools).filter(tool => this.isToolAvailable(tool));
347
536
  }
348
- static getToolRequirement(toolName) {
537
+ static getToolRequirement(toolName, action) {
538
+ const actionReq = this.getActionRequirement(toolName, action);
539
+ if (actionReq) {
540
+ return {
541
+ minVersion: actionReq.minVersion,
542
+ requiredTier: actionReq.tier,
543
+ notes: actionReq.notes,
544
+ };
545
+ }
349
546
  return this.toolRequirements[toolName];
350
547
  }
351
548
  static getUnavailableReason(toolName) {