gitlab-docs-mcp 1.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 (118) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +130 -0
  3. package/data/gitlab-docs/documents.json +38252 -0
  4. package/data/gitlab-docs/index_meta.json +6 -0
  5. package/dist/bin.js +2 -0
  6. package/dist/config.d.ts +24 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +54 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/content/cache.d.ts +51 -0
  11. package/dist/content/cache.d.ts.map +1 -0
  12. package/dist/content/cache.js +60 -0
  13. package/dist/content/cache.js.map +1 -0
  14. package/dist/content/cache.test.d.ts +2 -0
  15. package/dist/content/cache.test.d.ts.map +1 -0
  16. package/dist/content/cache.test.js +58 -0
  17. package/dist/content/cache.test.js.map +1 -0
  18. package/dist/content/index.d.ts +3 -0
  19. package/dist/content/index.d.ts.map +1 -0
  20. package/dist/content/index.js +3 -0
  21. package/dist/content/index.js.map +1 -0
  22. package/dist/content/parser.d.ts +32 -0
  23. package/dist/content/parser.d.ts.map +1 -0
  24. package/dist/content/parser.js +72 -0
  25. package/dist/content/parser.js.map +1 -0
  26. package/dist/content/parser.test.d.ts +2 -0
  27. package/dist/content/parser.test.d.ts.map +1 -0
  28. package/dist/content/parser.test.js +71 -0
  29. package/dist/content/parser.test.js.map +1 -0
  30. package/dist/index.d.ts +3 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +92 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/search/document.d.ts +11 -0
  35. package/dist/search/document.d.ts.map +1 -0
  36. package/dist/search/document.js +47 -0
  37. package/dist/search/document.js.map +1 -0
  38. package/dist/search/engine.d.ts +41 -0
  39. package/dist/search/engine.d.ts.map +1 -0
  40. package/dist/search/engine.js +200 -0
  41. package/dist/search/engine.js.map +1 -0
  42. package/dist/search/flexsearch-wrapper.d.ts +51 -0
  43. package/dist/search/flexsearch-wrapper.d.ts.map +1 -0
  44. package/dist/search/flexsearch-wrapper.js +55 -0
  45. package/dist/search/flexsearch-wrapper.js.map +1 -0
  46. package/dist/search/index.d.ts +4 -0
  47. package/dist/search/index.d.ts.map +1 -0
  48. package/dist/search/index.js +4 -0
  49. package/dist/search/index.js.map +1 -0
  50. package/dist/tools/getDocPage.d.ts +8 -0
  51. package/dist/tools/getDocPage.d.ts.map +1 -0
  52. package/dist/tools/getDocPage.js +48 -0
  53. package/dist/tools/getDocPage.js.map +1 -0
  54. package/dist/tools/index.d.ts +5 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +5 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/listDocSections.d.ts +8 -0
  59. package/dist/tools/listDocSections.d.ts.map +1 -0
  60. package/dist/tools/listDocSections.js +17 -0
  61. package/dist/tools/listDocSections.js.map +1 -0
  62. package/dist/tools/registry.d.ts +14 -0
  63. package/dist/tools/registry.d.ts.map +1 -0
  64. package/dist/tools/registry.js +64 -0
  65. package/dist/tools/registry.js.map +1 -0
  66. package/dist/tools/registry.test.d.ts +2 -0
  67. package/dist/tools/registry.test.d.ts.map +1 -0
  68. package/dist/tools/registry.test.js +45 -0
  69. package/dist/tools/registry.test.js.map +1 -0
  70. package/dist/tools/searchGitLabDocs.d.ts +19 -0
  71. package/dist/tools/searchGitLabDocs.d.ts.map +1 -0
  72. package/dist/tools/searchGitLabDocs.js +25 -0
  73. package/dist/tools/searchGitLabDocs.js.map +1 -0
  74. package/dist/types/index.d.ts +2 -0
  75. package/dist/types/index.d.ts.map +1 -0
  76. package/dist/types/index.js +2 -0
  77. package/dist/types/index.js.map +1 -0
  78. package/dist/types/models.d.ts +57 -0
  79. package/dist/types/models.d.ts.map +1 -0
  80. package/dist/types/models.js +41 -0
  81. package/dist/types/models.js.map +1 -0
  82. package/dist/utils/constants.d.ts +31 -0
  83. package/dist/utils/constants.d.ts.map +1 -0
  84. package/dist/utils/constants.js +38 -0
  85. package/dist/utils/constants.js.map +1 -0
  86. package/dist/utils/constants.test.d.ts +2 -0
  87. package/dist/utils/constants.test.d.ts.map +1 -0
  88. package/dist/utils/constants.test.js +16 -0
  89. package/dist/utils/constants.test.js.map +1 -0
  90. package/dist/utils/errors.d.ts +22 -0
  91. package/dist/utils/errors.d.ts.map +1 -0
  92. package/dist/utils/errors.js +43 -0
  93. package/dist/utils/errors.js.map +1 -0
  94. package/dist/utils/errors.test.d.ts +2 -0
  95. package/dist/utils/errors.test.d.ts.map +1 -0
  96. package/dist/utils/errors.test.js +55 -0
  97. package/dist/utils/errors.test.js.map +1 -0
  98. package/dist/utils/index.d.ts +5 -0
  99. package/dist/utils/index.d.ts.map +1 -0
  100. package/dist/utils/index.js +5 -0
  101. package/dist/utils/index.js.map +1 -0
  102. package/dist/utils/logger.d.ts +23 -0
  103. package/dist/utils/logger.d.ts.map +1 -0
  104. package/dist/utils/logger.js +44 -0
  105. package/dist/utils/logger.js.map +1 -0
  106. package/dist/utils/logger.test.d.ts +2 -0
  107. package/dist/utils/logger.test.d.ts.map +1 -0
  108. package/dist/utils/logger.test.js +71 -0
  109. package/dist/utils/logger.test.js.map +1 -0
  110. package/dist/utils/performance.d.ts +53 -0
  111. package/dist/utils/performance.d.ts.map +1 -0
  112. package/dist/utils/performance.js +130 -0
  113. package/dist/utils/performance.js.map +1 -0
  114. package/dist/utils/performance.test.d.ts +2 -0
  115. package/dist/utils/performance.test.d.ts.map +1 -0
  116. package/dist/utils/performance.test.js +75 -0
  117. package/dist/utils/performance.test.js.map +1 -0
  118. package/package.json +75 -0
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Logging utility for MCP server
3
+ * Provides structured logging with levels
4
+ */
5
+ export var LogLevel;
6
+ (function (LogLevel) {
7
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
8
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
9
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
10
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
11
+ LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
12
+ })(LogLevel || (LogLevel = {}));
13
+ class Logger {
14
+ level;
15
+ constructor(level = LogLevel.INFO) {
16
+ this.level = level;
17
+ }
18
+ setLevel(level) {
19
+ this.level = level;
20
+ }
21
+ debug(message, ...args) {
22
+ if (this.level <= LogLevel.DEBUG) {
23
+ console.error('[DEBUG]', message, ...args);
24
+ }
25
+ }
26
+ info(message, ...args) {
27
+ if (this.level <= LogLevel.INFO) {
28
+ console.error('[INFO]', message, ...args);
29
+ }
30
+ }
31
+ warn(message, ...args) {
32
+ if (this.level <= LogLevel.WARN) {
33
+ console.error('[WARN]', message, ...args);
34
+ }
35
+ }
36
+ error(message, ...args) {
37
+ if (this.level <= LogLevel.ERROR) {
38
+ console.error('[ERROR]', message, ...args);
39
+ }
40
+ }
41
+ }
42
+ // Singleton instance
43
+ export const logger = new Logger(process.env.LOG_LEVEL ? parseInt(process.env.LOG_LEVEL) : LogLevel.INFO);
44
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,2CAAU,CAAA;AACZ,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED,MAAM,MAAM;IACF,KAAK,CAAW;IAExB,YAAY,QAAkB,QAAQ,CAAC,IAAI;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,CAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CACxE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../src/utils/logger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { logger, LogLevel } from '../utils/logger.js';
3
+ describe('Logger', () => {
4
+ let consoleErrorSpy;
5
+ beforeEach(() => {
6
+ consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
7
+ logger.setLevel(LogLevel.DEBUG);
8
+ });
9
+ afterEach(() => {
10
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
11
+ consoleErrorSpy.mockRestore();
12
+ });
13
+ describe('debug', () => {
14
+ it('should log when level is DEBUG', () => {
15
+ logger.setLevel(LogLevel.DEBUG);
16
+ logger.debug('Test message');
17
+ expect(consoleErrorSpy).toHaveBeenCalledWith('[DEBUG]', 'Test message');
18
+ });
19
+ it('should not log when level is INFO', () => {
20
+ logger.setLevel(LogLevel.INFO);
21
+ logger.debug('Test message');
22
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
23
+ });
24
+ });
25
+ describe('info', () => {
26
+ it('should log when level is INFO', () => {
27
+ logger.setLevel(LogLevel.INFO);
28
+ logger.info('Test message');
29
+ expect(consoleErrorSpy).toHaveBeenCalledWith('[INFO]', 'Test message');
30
+ });
31
+ it('should not log when level is WARN', () => {
32
+ logger.setLevel(LogLevel.WARN);
33
+ logger.info('Test message');
34
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
35
+ });
36
+ });
37
+ describe('warn', () => {
38
+ it('should log when level is WARN', () => {
39
+ logger.setLevel(LogLevel.WARN);
40
+ logger.warn('Test message');
41
+ expect(consoleErrorSpy).toHaveBeenCalledWith('[WARN]', 'Test message');
42
+ });
43
+ it('should not log when level is ERROR', () => {
44
+ logger.setLevel(LogLevel.ERROR);
45
+ logger.warn('Test message');
46
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
47
+ });
48
+ });
49
+ describe('error', () => {
50
+ it('should log when level is ERROR', () => {
51
+ logger.setLevel(LogLevel.ERROR);
52
+ logger.error('Test message');
53
+ expect(consoleErrorSpy).toHaveBeenCalledWith('[ERROR]', 'Test message');
54
+ });
55
+ it('should not log when level is SILENT', () => {
56
+ logger.setLevel(LogLevel.SILENT);
57
+ logger.error('Test message');
58
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
59
+ });
60
+ });
61
+ describe('setLevel', () => {
62
+ it('should change logging level', () => {
63
+ logger.setLevel(LogLevel.ERROR);
64
+ logger.info('Should not log');
65
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
66
+ logger.error('Should log');
67
+ expect(consoleErrorSpy).toHaveBeenCalledWith('[ERROR]', 'Should log');
68
+ });
69
+ });
70
+ });
71
+ //# sourceMappingURL=logger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../src/utils/logger.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Simple performance monitoring utilities
3
+ */
4
+ export interface PerformanceMetrics {
5
+ operation: string;
6
+ durationMs: number;
7
+ timestamp: Date;
8
+ metadata?: Record<string, unknown>;
9
+ }
10
+ declare class PerformanceMonitor {
11
+ private metrics;
12
+ private maxMetrics;
13
+ /**
14
+ * Measure the execution time of an async operation
15
+ */
16
+ measure<T>(operation: string, fn: () => Promise<T>, metadata?: Record<string, unknown>): Promise<T>;
17
+ /**
18
+ * Measure synchronous operation
19
+ */
20
+ measureSync<T>(operation: string, fn: () => T, metadata?: Record<string, unknown>): T;
21
+ /**
22
+ * Record a metric
23
+ */
24
+ private recordMetric;
25
+ /**
26
+ * Get metrics for a specific operation
27
+ */
28
+ getMetricsFor(operation: string): PerformanceMetrics[];
29
+ /**
30
+ * Get average duration for an operation
31
+ */
32
+ getAverageDuration(operation: string): number;
33
+ /**
34
+ * Get all metrics
35
+ */
36
+ getAllMetrics(): PerformanceMetrics[];
37
+ /**
38
+ * Clear all metrics
39
+ */
40
+ clear(): void;
41
+ /**
42
+ * Get summary statistics
43
+ */
44
+ getSummary(): Record<string, {
45
+ count: number;
46
+ avgMs: number;
47
+ minMs: number;
48
+ maxMs: number;
49
+ }>;
50
+ }
51
+ export declare const performanceMonitor: PerformanceMonitor;
52
+ export {};
53
+ //# sourceMappingURL=performance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/utils/performance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,cAAM,kBAAkB;IACtB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,UAAU,CAAQ;IAE1B;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC;IA0Bb;;OAEG;IACH,WAAW,CAAC,CAAC,EACX,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,CAAC,EACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,CAAC;IA0BJ;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAItD;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAU7C;;OAEG;IACH,aAAa,IAAI,kBAAkB,EAAE;IAIrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CA4B7F;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Simple performance monitoring utilities
3
+ */
4
+ class PerformanceMonitor {
5
+ metrics = [];
6
+ maxMetrics = 1000; // Keep last 1000 metrics
7
+ /**
8
+ * Measure the execution time of an async operation
9
+ */
10
+ async measure(operation, fn, metadata) {
11
+ const start = performance.now();
12
+ try {
13
+ const result = await fn();
14
+ const durationMs = performance.now() - start;
15
+ this.recordMetric({
16
+ operation,
17
+ durationMs,
18
+ timestamp: new Date(),
19
+ metadata,
20
+ });
21
+ return result;
22
+ }
23
+ catch (error) {
24
+ const durationMs = performance.now() - start;
25
+ this.recordMetric({
26
+ operation,
27
+ durationMs,
28
+ timestamp: new Date(),
29
+ metadata: { ...metadata, error: true },
30
+ });
31
+ throw error;
32
+ }
33
+ }
34
+ /**
35
+ * Measure synchronous operation
36
+ */
37
+ measureSync(operation, fn, metadata) {
38
+ const start = performance.now();
39
+ try {
40
+ const result = fn();
41
+ const durationMs = performance.now() - start;
42
+ this.recordMetric({
43
+ operation,
44
+ durationMs,
45
+ timestamp: new Date(),
46
+ metadata,
47
+ });
48
+ return result;
49
+ }
50
+ catch (error) {
51
+ const durationMs = performance.now() - start;
52
+ this.recordMetric({
53
+ operation,
54
+ durationMs,
55
+ timestamp: new Date(),
56
+ metadata: { ...metadata, error: true },
57
+ });
58
+ throw error;
59
+ }
60
+ }
61
+ /**
62
+ * Record a metric
63
+ */
64
+ recordMetric(metric) {
65
+ this.metrics.push(metric);
66
+ // Keep only the last N metrics
67
+ if (this.metrics.length > this.maxMetrics) {
68
+ this.metrics.shift();
69
+ }
70
+ }
71
+ /**
72
+ * Get metrics for a specific operation
73
+ */
74
+ getMetricsFor(operation) {
75
+ return this.metrics.filter((m) => m.operation === operation);
76
+ }
77
+ /**
78
+ * Get average duration for an operation
79
+ */
80
+ getAverageDuration(operation) {
81
+ const metrics = this.getMetricsFor(operation);
82
+ if (metrics.length === 0) {
83
+ return 0;
84
+ }
85
+ const sum = metrics.reduce((acc, m) => acc + m.durationMs, 0);
86
+ return sum / metrics.length;
87
+ }
88
+ /**
89
+ * Get all metrics
90
+ */
91
+ getAllMetrics() {
92
+ return [...this.metrics];
93
+ }
94
+ /**
95
+ * Clear all metrics
96
+ */
97
+ clear() {
98
+ this.metrics = [];
99
+ }
100
+ /**
101
+ * Get summary statistics
102
+ */
103
+ getSummary() {
104
+ const summary = {};
105
+ for (const metric of this.metrics) {
106
+ if (!summary[metric.operation]) {
107
+ summary[metric.operation] = {
108
+ count: 0,
109
+ avgMs: 0,
110
+ minMs: Infinity,
111
+ maxMs: -Infinity,
112
+ };
113
+ }
114
+ const stats = summary[metric.operation];
115
+ stats.count++;
116
+ stats.minMs = Math.min(stats.minMs, metric.durationMs);
117
+ stats.maxMs = Math.max(stats.maxMs, metric.durationMs);
118
+ }
119
+ // Calculate averages
120
+ for (const operation in summary) {
121
+ const metrics = this.getMetricsFor(operation);
122
+ const sum = metrics.reduce((acc, m) => acc + m.durationMs, 0);
123
+ summary[operation].avgMs = sum / metrics.length;
124
+ }
125
+ return summary;
126
+ }
127
+ }
128
+ // Singleton instance
129
+ export const performanceMonitor = new PerformanceMonitor();
130
+ //# sourceMappingURL=performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/utils/performance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=performance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.test.d.ts","sourceRoot":"","sources":["../../src/utils/performance.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { performanceMonitor } from './performance.js';
3
+ describe('PerformanceMonitor', () => {
4
+ it('should measure async operations', async () => {
5
+ const result = await performanceMonitor.measure('test-async', async () => {
6
+ await new Promise((resolve) => setTimeout(resolve, 10));
7
+ return 'success';
8
+ });
9
+ expect(result).toBe('success');
10
+ const metrics = performanceMonitor.getMetricsFor('test-async');
11
+ expect(metrics.length).toBeGreaterThan(0);
12
+ expect(metrics[0].operation).toBe('test-async');
13
+ expect(metrics[0].durationMs).toBeGreaterThan(0);
14
+ });
15
+ it('should measure sync operations', () => {
16
+ const result = performanceMonitor.measureSync('test-sync', () => {
17
+ let sum = 0;
18
+ for (let i = 0; i < 1000; i++) {
19
+ sum += i;
20
+ }
21
+ return sum;
22
+ });
23
+ expect(result).toBe(499500);
24
+ const metrics = performanceMonitor.getMetricsFor('test-sync');
25
+ expect(metrics.length).toBeGreaterThan(0);
26
+ expect(metrics[0].operation).toBe('test-sync');
27
+ });
28
+ it('should calculate average duration', async () => {
29
+ performanceMonitor.clear();
30
+ await performanceMonitor.measure('avg-test', async () => {
31
+ await new Promise((resolve) => setTimeout(resolve, 5));
32
+ });
33
+ await performanceMonitor.measure('avg-test', async () => {
34
+ await new Promise((resolve) => setTimeout(resolve, 15));
35
+ });
36
+ const avgDuration = performanceMonitor.getAverageDuration('avg-test');
37
+ expect(avgDuration).toBeGreaterThan(0);
38
+ });
39
+ it('should track metadata', () => {
40
+ performanceMonitor.clear();
41
+ performanceMonitor.measureSync('metadata-test', () => {
42
+ return 'result';
43
+ }, { userId: 'test-user', operation: 'search' });
44
+ const metrics = performanceMonitor.getMetricsFor('metadata-test');
45
+ expect(metrics[0].metadata).toEqual({ userId: 'test-user', operation: 'search' });
46
+ });
47
+ it('should handle errors and track them', async () => {
48
+ performanceMonitor.clear();
49
+ await expect(performanceMonitor.measure('error-test', () => {
50
+ throw new Error('Test error');
51
+ })).rejects.toThrow('Test error');
52
+ const metrics = performanceMonitor.getMetricsFor('error-test');
53
+ expect(metrics[0].metadata?.error).toBe(true);
54
+ });
55
+ it('should generate summary statistics', async () => {
56
+ performanceMonitor.clear();
57
+ await performanceMonitor.measure('summary-test', async () => { });
58
+ await performanceMonitor.measure('summary-test', async () => { });
59
+ await performanceMonitor.measure('other-test', async () => { });
60
+ const summary = performanceMonitor.getSummary();
61
+ expect(summary['summary-test']).toBeDefined();
62
+ expect(summary['summary-test'].count).toBe(2);
63
+ expect(summary['summary-test'].avgMs).toBeGreaterThanOrEqual(0);
64
+ expect(summary['summary-test'].minMs).toBeGreaterThanOrEqual(0);
65
+ expect(summary['summary-test'].maxMs).toBeGreaterThanOrEqual(0);
66
+ expect(summary['other-test']).toBeDefined();
67
+ expect(summary['other-test'].count).toBe(1);
68
+ });
69
+ it('should clear all metrics', () => {
70
+ performanceMonitor.clear();
71
+ const metrics = performanceMonitor.getAllMetrics();
72
+ expect(metrics.length).toBe(0);
73
+ });
74
+ });
75
+ //# sourceMappingURL=performance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.test.js","sourceRoot":"","sources":["../../src/utils/performance.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "gitlab-docs-mcp",
3
+ "version": "1.0.0",
4
+ "author": "Ozan Mutlu",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/ozanmutlu/Gitlab-Docs-MCP.git"
9
+ },
10
+ "description": "GitLab documentation search for AI assistants via Model Context Protocol (MCP)",
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "bin": {
14
+ "gitlab-docs-mcp": "./dist/bin.js"
15
+ },
16
+ "engines": {
17
+ "node": ">=18.0.0"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "watch": "tsc --watch",
22
+ "dev": "tsx src/index.ts",
23
+ "build-index": "tsx scripts/build-index.ts",
24
+ "prepare": "npm run build",
25
+ "test": "vitest",
26
+ "test:coverage": "vitest --coverage",
27
+ "test:watch": "vitest --watch",
28
+ "lint": "eslint src --max-warnings 0",
29
+ "lint:fix": "eslint src --fix",
30
+ "format": "prettier --write \"src/**/*.ts\" \"scripts/**/*.ts\"",
31
+ "format:check": "prettier --check \"src/**/*.ts\" \"scripts/**/*.ts\"",
32
+ "typecheck": "tsc --noEmit",
33
+ "clean": "rm -rf dist coverage",
34
+ "validate": "npm run typecheck && npm run lint && npm run test"
35
+ },
36
+ "keywords": [
37
+ "gitlab",
38
+ "mcp",
39
+ "model-context-protocol",
40
+ "ai-assistant",
41
+ "documentation",
42
+ "search",
43
+ "claude",
44
+ "copilot"
45
+ ],
46
+ "files": [
47
+ "dist/",
48
+ "data/gitlab-docs/",
49
+ "README.md",
50
+ "LICENSE"
51
+ ],
52
+ "dependencies": {
53
+ "@modelcontextprotocol/sdk": "^1.24.3",
54
+ "dotenv": "^17.2.3",
55
+ "flexsearch": "^0.8.212",
56
+ "lru-cache": "^11.2.4",
57
+ "remark": "^15.0.1",
58
+ "remark-gfm": "^4.0.1",
59
+ "remark-stringify": "^11.0.0",
60
+ "unified": "^11.0.5",
61
+ "zod": "^4.1.13"
62
+ },
63
+ "devDependencies": {
64
+ "@eslint/js": "^9.39.1",
65
+ "@types/node": "^24.10.1",
66
+ "@vitest/coverage-v8": "^4.0.15",
67
+ "eslint": "^9.39.1",
68
+ "globals": "^16.5.0",
69
+ "prettier": "^3.7.4",
70
+ "tsx": "^4.21.0",
71
+ "typescript": "^5.9.3",
72
+ "typescript-eslint": "^8.48.1",
73
+ "vitest": "^4.0.15"
74
+ }
75
+ }