@maxanatsko/gemini-mcp-tool 2.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 (119) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +230 -0
  3. package/dist/constants.d.ts +153 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +150 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +188 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/tools/ask-gemini.tool.d.ts +3 -0
  12. package/dist/tools/ask-gemini.tool.d.ts.map +1 -0
  13. package/dist/tools/ask-gemini.tool.js +74 -0
  14. package/dist/tools/ask-gemini.tool.js.map +1 -0
  15. package/dist/tools/brainstorm.tool.d.ts +3 -0
  16. package/dist/tools/brainstorm.tool.d.ts.map +1 -0
  17. package/dist/tools/brainstorm.tool.js +202 -0
  18. package/dist/tools/brainstorm.tool.js.map +1 -0
  19. package/dist/tools/fetch-chunk.tool.d.ts +3 -0
  20. package/dist/tools/fetch-chunk.tool.d.ts.map +1 -0
  21. package/dist/tools/fetch-chunk.tool.js +62 -0
  22. package/dist/tools/fetch-chunk.tool.js.map +1 -0
  23. package/dist/tools/index.d.ts +2 -0
  24. package/dist/tools/index.d.ts.map +1 -0
  25. package/dist/tools/index.js +11 -0
  26. package/dist/tools/index.js.map +1 -0
  27. package/dist/tools/registry.d.ts +25 -0
  28. package/dist/tools/registry.d.ts.map +1 -0
  29. package/dist/tools/registry.js +80 -0
  30. package/dist/tools/registry.js.map +1 -0
  31. package/dist/tools/review-code.tool.d.ts +3 -0
  32. package/dist/tools/review-code.tool.d.ts.map +1 -0
  33. package/dist/tools/review-code.tool.js +186 -0
  34. package/dist/tools/review-code.tool.js.map +1 -0
  35. package/dist/tools/simple-tools.d.ts +4 -0
  36. package/dist/tools/simple-tools.d.ts.map +1 -0
  37. package/dist/tools/simple-tools.js +32 -0
  38. package/dist/tools/simple-tools.js.map +1 -0
  39. package/dist/tools/test-tool.example.d.ts +13 -0
  40. package/dist/tools/test-tool.example.d.ts.map +1 -0
  41. package/dist/tools/test-tool.example.js +32 -0
  42. package/dist/tools/test-tool.example.js.map +1 -0
  43. package/dist/tools/timeout-test.tool.d.ts +3 -0
  44. package/dist/tools/timeout-test.tool.d.ts.map +1 -0
  45. package/dist/tools/timeout-test.tool.js +32 -0
  46. package/dist/tools/timeout-test.tool.js.map +1 -0
  47. package/dist/utils/askGeminiSessionManager.d.ts +57 -0
  48. package/dist/utils/askGeminiSessionManager.d.ts.map +1 -0
  49. package/dist/utils/askGeminiSessionManager.js +110 -0
  50. package/dist/utils/askGeminiSessionManager.js.map +1 -0
  51. package/dist/utils/brainstormSessionManager.d.ts +67 -0
  52. package/dist/utils/brainstormSessionManager.d.ts.map +1 -0
  53. package/dist/utils/brainstormSessionManager.js +165 -0
  54. package/dist/utils/brainstormSessionManager.js.map +1 -0
  55. package/dist/utils/changeModeChunker.d.ts +11 -0
  56. package/dist/utils/changeModeChunker.d.ts.map +1 -0
  57. package/dist/utils/changeModeChunker.js +89 -0
  58. package/dist/utils/changeModeChunker.js.map +1 -0
  59. package/dist/utils/changeModeParser.d.ts +15 -0
  60. package/dist/utils/changeModeParser.d.ts.map +1 -0
  61. package/dist/utils/changeModeParser.js +67 -0
  62. package/dist/utils/changeModeParser.js.map +1 -0
  63. package/dist/utils/changeModeTranslator.d.ts +8 -0
  64. package/dist/utils/changeModeTranslator.d.ts.map +1 -0
  65. package/dist/utils/changeModeTranslator.js +70 -0
  66. package/dist/utils/changeModeTranslator.js.map +1 -0
  67. package/dist/utils/chunkCache.d.ts +22 -0
  68. package/dist/utils/chunkCache.d.ts.map +1 -0
  69. package/dist/utils/chunkCache.js +161 -0
  70. package/dist/utils/chunkCache.js.map +1 -0
  71. package/dist/utils/commandExecutor.d.ts +2 -0
  72. package/dist/utils/commandExecutor.d.ts.map +1 -0
  73. package/dist/utils/commandExecutor.js +74 -0
  74. package/dist/utils/commandExecutor.js.map +1 -0
  75. package/dist/utils/geminiExecutor.d.ts +3 -0
  76. package/dist/utils/geminiExecutor.d.ts.map +1 -0
  77. package/dist/utils/geminiExecutor.js +170 -0
  78. package/dist/utils/geminiExecutor.js.map +1 -0
  79. package/dist/utils/gitStateDetector.d.ts +31 -0
  80. package/dist/utils/gitStateDetector.d.ts.map +1 -0
  81. package/dist/utils/gitStateDetector.js +67 -0
  82. package/dist/utils/gitStateDetector.js.map +1 -0
  83. package/dist/utils/logger.d.ts +13 -0
  84. package/dist/utils/logger.d.ts.map +1 -0
  85. package/dist/utils/logger.js +42 -0
  86. package/dist/utils/logger.js.map +1 -0
  87. package/dist/utils/reviewFormatter.d.ts +35 -0
  88. package/dist/utils/reviewFormatter.d.ts.map +1 -0
  89. package/dist/utils/reviewFormatter.js +198 -0
  90. package/dist/utils/reviewFormatter.js.map +1 -0
  91. package/dist/utils/reviewPromptBuilder.d.ts +35 -0
  92. package/dist/utils/reviewPromptBuilder.d.ts.map +1 -0
  93. package/dist/utils/reviewPromptBuilder.js +146 -0
  94. package/dist/utils/reviewPromptBuilder.js.map +1 -0
  95. package/dist/utils/reviewResponseParser.d.ts +20 -0
  96. package/dist/utils/reviewResponseParser.d.ts.map +1 -0
  97. package/dist/utils/reviewResponseParser.js +149 -0
  98. package/dist/utils/reviewResponseParser.js.map +1 -0
  99. package/dist/utils/reviewSessionCache.d.ts +81 -0
  100. package/dist/utils/reviewSessionCache.d.ts.map +1 -0
  101. package/dist/utils/reviewSessionCache.js +220 -0
  102. package/dist/utils/reviewSessionCache.js.map +1 -0
  103. package/dist/utils/reviewSessionManager.d.ts +52 -0
  104. package/dist/utils/reviewSessionManager.d.ts.map +1 -0
  105. package/dist/utils/reviewSessionManager.js +65 -0
  106. package/dist/utils/reviewSessionManager.js.map +1 -0
  107. package/dist/utils/sessionManager.d.ts +94 -0
  108. package/dist/utils/sessionManager.d.ts.map +1 -0
  109. package/dist/utils/sessionManager.js +374 -0
  110. package/dist/utils/sessionManager.js.map +1 -0
  111. package/dist/utils/sessionSchemas.d.ts +126 -0
  112. package/dist/utils/sessionSchemas.d.ts.map +1 -0
  113. package/dist/utils/sessionSchemas.js +2 -0
  114. package/dist/utils/sessionSchemas.js.map +1 -0
  115. package/dist/utils/timeoutManager.d.ts +2 -0
  116. package/dist/utils/timeoutManager.d.ts.map +1 -0
  117. package/dist/utils/timeoutManager.js +2 -0
  118. package/dist/utils/timeoutManager.js.map +1 -0
  119. package/package.json +71 -0
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @deprecated This file is deprecated. Session management has been migrated to the shared infrastructure.
3
+ *
4
+ * - For session operations, use: src/utils/reviewSessionManager.ts
5
+ * - For type definitions, use: src/utils/sessionSchemas.ts
6
+ *
7
+ * This file is kept only for backward compatibility and type exports (ReviewComment, ReviewRound).
8
+ * The actual session cache functions (save/load/create) have been moved to reviewSessionManager.ts
9
+ */
10
+ import { GitState } from './gitStateDetector.js';
11
+ export interface ReviewComment {
12
+ id: string;
13
+ filePattern: string;
14
+ lineRange?: {
15
+ start: number;
16
+ end: number;
17
+ };
18
+ severity: 'critical' | 'important' | 'suggestion' | 'question';
19
+ comment: string;
20
+ roundGenerated: number;
21
+ status: 'pending' | 'accepted' | 'rejected' | 'modified' | 'deferred';
22
+ resolution?: string;
23
+ }
24
+ export interface ReviewRound {
25
+ roundNumber: number;
26
+ timestamp: number;
27
+ filesReviewed: string[];
28
+ userPrompt: string;
29
+ geminiResponse: string;
30
+ commentsGenerated: ReviewComment[];
31
+ gitState: GitState;
32
+ }
33
+ export interface CodeReviewSession {
34
+ sessionId: string;
35
+ createdAt: number;
36
+ lastAccessedAt: number;
37
+ gitState: GitState;
38
+ currentGitState: GitState;
39
+ rounds: ReviewRound[];
40
+ allComments: ReviewComment[];
41
+ filesTracked: string[];
42
+ focusFiles?: string[];
43
+ reviewScope?: 'full' | 'changes-only' | 'focused';
44
+ totalRounds: number;
45
+ sessionState: 'active' | 'paused' | 'completed';
46
+ }
47
+ /**
48
+ * Saves a review session to the cache
49
+ * @param session The session to save
50
+ */
51
+ export declare function saveReviewSession(session: CodeReviewSession): void;
52
+ /**
53
+ * Loads a review session from the cache
54
+ * @param sessionId The session ID to load
55
+ * @returns The session or null if not found/expired
56
+ */
57
+ export declare function loadReviewSession(sessionId: string): CodeReviewSession | null;
58
+ /**
59
+ * Lists all active review sessions
60
+ * @returns Array of active sessions
61
+ */
62
+ export declare function listActiveSessions(): CodeReviewSession[];
63
+ /**
64
+ * Creates a new review session
65
+ * @param sessionId The session ID
66
+ * @param gitState The initial git state
67
+ * @param focusFiles Optional files to focus on
68
+ * @returns New CodeReviewSession object
69
+ */
70
+ export declare function createNewSession(sessionId: string, gitState: GitState, focusFiles?: string[]): CodeReviewSession;
71
+ /**
72
+ * Gets cache statistics
73
+ * @returns Cache stats object
74
+ */
75
+ export declare function getReviewCacheStats(): {
76
+ size: number;
77
+ ttl: number;
78
+ maxSize: number;
79
+ cacheDir: string;
80
+ };
81
+ //# sourceMappingURL=reviewSessionCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewSessionCache.d.ts","sourceRoot":"","sources":["../../src/utils/reviewSessionCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,QAAQ,CAAC;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;CACjD;AAuBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAqBlE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CA6B7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CA6BxD;AAiED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,iBAAiB,CAgBnB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAeA"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * @deprecated This file is deprecated. Session management has been migrated to the shared infrastructure.
3
+ *
4
+ * - For session operations, use: src/utils/reviewSessionManager.ts
5
+ * - For type definitions, use: src/utils/sessionSchemas.ts
6
+ *
7
+ * This file is kept only for backward compatibility and type exports (ReviewComment, ReviewRound).
8
+ * The actual session cache functions (save/load/create) have been moved to reviewSessionManager.ts
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import * as os from 'os';
13
+ import { Logger } from './logger.js';
14
+ // Use persistent storage in user's home directory instead of tmp for session persistence across reboots
15
+ const REVIEW_CACHE_DIR = path.join(os.homedir(), '.gemini-mcp', 'review-sessions');
16
+ const REVIEW_SESSION_TTL = 24 * 60 * 60 * 1000; // 24 hours (increased from 60 min for better persistence)
17
+ const MAX_REVIEW_SESSIONS = 20;
18
+ /**
19
+ * Ensures the review cache directory exists
20
+ */
21
+ function ensureCacheDir() {
22
+ if (!fs.existsSync(REVIEW_CACHE_DIR)) {
23
+ fs.mkdirSync(REVIEW_CACHE_DIR, { recursive: true });
24
+ Logger.debug(`Created review cache directory: ${REVIEW_CACHE_DIR}`);
25
+ }
26
+ }
27
+ /**
28
+ * Saves a review session to the cache
29
+ * @param session The session to save
30
+ */
31
+ export function saveReviewSession(session) {
32
+ ensureCacheDir();
33
+ cleanExpiredSessions();
34
+ const filePath = path.join(REVIEW_CACHE_DIR, `${session.sessionId}.json`);
35
+ const cacheEntry = {
36
+ session,
37
+ timestamp: Date.now(),
38
+ expiryTime: Date.now() + REVIEW_SESSION_TTL
39
+ };
40
+ try {
41
+ fs.writeFileSync(filePath, JSON.stringify(cacheEntry, null, 2));
42
+ Logger.debug(`Saved review session: ${session.sessionId} (${session.totalRounds} rounds)`);
43
+ }
44
+ catch (error) {
45
+ Logger.error(`Failed to save review session: ${error}`);
46
+ throw new Error(`Failed to save review session: ${error}`);
47
+ }
48
+ enforceSessionLimits();
49
+ }
50
+ /**
51
+ * Loads a review session from the cache
52
+ * @param sessionId The session ID to load
53
+ * @returns The session or null if not found/expired
54
+ */
55
+ export function loadReviewSession(sessionId) {
56
+ const filePath = path.join(REVIEW_CACHE_DIR, `${sessionId}.json`);
57
+ try {
58
+ if (!fs.existsSync(filePath)) {
59
+ Logger.debug(`Session not found: ${sessionId}`);
60
+ return null;
61
+ }
62
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
63
+ const cacheEntry = JSON.parse(fileContent);
64
+ // Check expiry
65
+ if (Date.now() > cacheEntry.expiryTime) {
66
+ fs.unlinkSync(filePath);
67
+ Logger.debug(`Session expired and deleted: ${sessionId}`);
68
+ return null;
69
+ }
70
+ Logger.debug(`Loaded review session: ${sessionId} (${cacheEntry.session.totalRounds} rounds)`);
71
+ return cacheEntry.session;
72
+ }
73
+ catch (error) {
74
+ Logger.error(`Failed to load review session ${sessionId}: ${error}`);
75
+ // Clean up corrupted file
76
+ try {
77
+ fs.unlinkSync(filePath);
78
+ }
79
+ catch { }
80
+ return null;
81
+ }
82
+ }
83
+ /**
84
+ * Lists all active review sessions
85
+ * @returns Array of active sessions
86
+ */
87
+ export function listActiveSessions() {
88
+ ensureCacheDir();
89
+ const sessions = [];
90
+ try {
91
+ const files = fs.readdirSync(REVIEW_CACHE_DIR);
92
+ const now = Date.now();
93
+ for (const file of files) {
94
+ if (!file.endsWith('.json'))
95
+ continue;
96
+ const filePath = path.join(REVIEW_CACHE_DIR, file);
97
+ try {
98
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
99
+ const cacheEntry = JSON.parse(fileContent);
100
+ // Skip expired sessions
101
+ if (now <= cacheEntry.expiryTime) {
102
+ sessions.push(cacheEntry.session);
103
+ }
104
+ }
105
+ catch (error) {
106
+ Logger.debug(`Error reading session file ${file}: ${error}`);
107
+ }
108
+ }
109
+ }
110
+ catch (error) {
111
+ Logger.error(`Failed to list active sessions: ${error}`);
112
+ }
113
+ return sessions;
114
+ }
115
+ /**
116
+ * Cleans up expired session files
117
+ */
118
+ function cleanExpiredSessions() {
119
+ try {
120
+ ensureCacheDir();
121
+ const files = fs.readdirSync(REVIEW_CACHE_DIR);
122
+ const now = Date.now();
123
+ let cleaned = 0;
124
+ for (const file of files) {
125
+ if (!file.endsWith('.json'))
126
+ continue;
127
+ const filePath = path.join(REVIEW_CACHE_DIR, file);
128
+ try {
129
+ const stats = fs.statSync(filePath);
130
+ if (now - stats.mtimeMs > REVIEW_SESSION_TTL) {
131
+ fs.unlinkSync(filePath);
132
+ cleaned++;
133
+ }
134
+ }
135
+ catch (error) {
136
+ Logger.debug(`Error checking session file ${file}: ${error}`);
137
+ }
138
+ }
139
+ if (cleaned > 0) {
140
+ Logger.debug(`Cleaned ${cleaned} expired review sessions`);
141
+ }
142
+ }
143
+ catch (error) {
144
+ Logger.debug(`Session cleanup error: ${error}`);
145
+ }
146
+ }
147
+ /**
148
+ * Enforces the maximum session limit using FIFO
149
+ */
150
+ function enforceSessionLimits() {
151
+ try {
152
+ const files = fs
153
+ .readdirSync(REVIEW_CACHE_DIR)
154
+ .filter(f => f.endsWith('.json'))
155
+ .map(f => ({
156
+ name: f,
157
+ path: path.join(REVIEW_CACHE_DIR, f),
158
+ mtime: fs.statSync(path.join(REVIEW_CACHE_DIR, f)).mtimeMs
159
+ }))
160
+ .sort((a, b) => a.mtime - b.mtime); // Oldest first
161
+ // Remove oldest files if over limit
162
+ if (files.length > MAX_REVIEW_SESSIONS) {
163
+ const toRemove = files.slice(0, files.length - MAX_REVIEW_SESSIONS);
164
+ for (const file of toRemove) {
165
+ try {
166
+ fs.unlinkSync(file.path);
167
+ }
168
+ catch { }
169
+ }
170
+ Logger.debug(`Removed ${toRemove.length} old review sessions to enforce limit`);
171
+ }
172
+ }
173
+ catch (error) {
174
+ Logger.debug(`Error enforcing session limits: ${error}`);
175
+ }
176
+ }
177
+ /**
178
+ * Creates a new review session
179
+ * @param sessionId The session ID
180
+ * @param gitState The initial git state
181
+ * @param focusFiles Optional files to focus on
182
+ * @returns New CodeReviewSession object
183
+ */
184
+ export function createNewSession(sessionId, gitState, focusFiles) {
185
+ const now = Date.now();
186
+ return {
187
+ sessionId,
188
+ createdAt: now,
189
+ lastAccessedAt: now,
190
+ gitState,
191
+ currentGitState: gitState,
192
+ rounds: [],
193
+ allComments: [],
194
+ filesTracked: [],
195
+ focusFiles,
196
+ reviewScope: focusFiles ? 'focused' : 'full',
197
+ totalRounds: 0,
198
+ sessionState: 'active'
199
+ };
200
+ }
201
+ /**
202
+ * Gets cache statistics
203
+ * @returns Cache stats object
204
+ */
205
+ export function getReviewCacheStats() {
206
+ ensureCacheDir();
207
+ let size = 0;
208
+ try {
209
+ const files = fs.readdirSync(REVIEW_CACHE_DIR);
210
+ size = files.filter(f => f.endsWith('.json')).length;
211
+ }
212
+ catch { }
213
+ return {
214
+ size,
215
+ ttl: REVIEW_SESSION_TTL,
216
+ maxSize: MAX_REVIEW_SESSIONS,
217
+ cacheDir: REVIEW_CACHE_DIR
218
+ };
219
+ }
220
+ //# sourceMappingURL=reviewSessionCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewSessionCache.js","sourceRoot":"","sources":["../../src/utils/reviewSessionCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { ReviewCodeSessionData } from './sessionSchemas.js';
2
+ import { GitState } from './gitStateDetector.js';
3
+ /**
4
+ * Specialized session manager for review-code tool
5
+ * Wraps generic SessionManager with review-specific helpers
6
+ * Maintains backward compatibility with reviewSessionCache.ts
7
+ */
8
+ export declare class ReviewSessionManager {
9
+ private sessionManager;
10
+ constructor();
11
+ /**
12
+ * Saves a review session (maintains existing interface)
13
+ */
14
+ saveReviewSession(session: ReviewCodeSessionData): Promise<void>;
15
+ /**
16
+ * Loads a review session (maintains existing interface)
17
+ */
18
+ loadReviewSession(sessionId: string): Promise<ReviewCodeSessionData | null>;
19
+ /**
20
+ * Lists active review sessions
21
+ */
22
+ listActiveSessions(): Promise<ReviewCodeSessionData[]>;
23
+ /**
24
+ * Creates a new review session
25
+ */
26
+ createNewSession(sessionId: string, gitState: GitState, focusFiles?: string[]): ReviewCodeSessionData;
27
+ /**
28
+ * Gets cache statistics
29
+ */
30
+ getReviewCacheStats(): Promise<{
31
+ toolName: string;
32
+ sessionCount: number;
33
+ ttl: number;
34
+ maxSessions: number;
35
+ evictionPolicy: string;
36
+ cacheDir: string;
37
+ }>;
38
+ }
39
+ export declare const reviewSessionManager: ReviewSessionManager;
40
+ export declare const saveReviewSession: (session: ReviewCodeSessionData) => Promise<void>;
41
+ export declare const loadReviewSession: (sessionId: string) => Promise<ReviewCodeSessionData | null>;
42
+ export declare const listActiveSessions: () => Promise<ReviewCodeSessionData[]>;
43
+ export declare const createNewSession: (sessionId: string, gitState: GitState, focusFiles?: string[]) => ReviewCodeSessionData;
44
+ export declare const getReviewCacheStats: () => Promise<{
45
+ toolName: string;
46
+ sessionCount: number;
47
+ ttl: number;
48
+ maxSessions: number;
49
+ evictionPolicy: string;
50
+ cacheDir: string;
51
+ }>;
52
+ //# sourceMappingURL=reviewSessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewSessionManager.d.ts","sourceRoot":"","sources":["../../src/utils/reviewSessionManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,cAAc,CAAwC;;IAM9D;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAIjF;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAI5D;;OAEG;IACH,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,qBAAqB;IAkBxB;;OAEG;IACG,mBAAmB;;;;;;;;CAG1B;AAGD,eAAO,MAAM,oBAAoB,sBAA6B,CAAC;AAG/D,eAAO,MAAM,iBAAiB,GAAU,SAAS,qBAAqB,kBACf,CAAC;AAExD,eAAO,MAAM,iBAAiB,GAAU,WAAW,MAAM,0CACA,CAAC;AAE1D,eAAO,MAAM,kBAAkB,wCACkB,CAAC;AAElD,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,UAAU,QAAQ,EAClB,aAAa,MAAM,EAAE,0BACoD,CAAC;AAE5E,eAAO,MAAM,mBAAmB;;;;;;;EACkB,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { SessionManager } from './sessionManager.js';
2
+ /**
3
+ * Specialized session manager for review-code tool
4
+ * Wraps generic SessionManager with review-specific helpers
5
+ * Maintains backward compatibility with reviewSessionCache.ts
6
+ */
7
+ export class ReviewSessionManager {
8
+ sessionManager;
9
+ constructor() {
10
+ this.sessionManager = new SessionManager('review-code');
11
+ }
12
+ /**
13
+ * Saves a review session (maintains existing interface)
14
+ */
15
+ async saveReviewSession(session) {
16
+ await this.sessionManager.save(session.sessionId, session);
17
+ }
18
+ /**
19
+ * Loads a review session (maintains existing interface)
20
+ */
21
+ async loadReviewSession(sessionId) {
22
+ return await this.sessionManager.load(sessionId);
23
+ }
24
+ /**
25
+ * Lists active review sessions
26
+ */
27
+ async listActiveSessions() {
28
+ return await this.sessionManager.list();
29
+ }
30
+ /**
31
+ * Creates a new review session
32
+ */
33
+ createNewSession(sessionId, gitState, focusFiles) {
34
+ const now = Date.now();
35
+ return {
36
+ sessionId,
37
+ createdAt: now,
38
+ lastAccessedAt: now,
39
+ gitState,
40
+ currentGitState: gitState,
41
+ rounds: [],
42
+ allComments: [],
43
+ filesTracked: [],
44
+ focusFiles,
45
+ reviewScope: focusFiles ? 'focused' : 'full',
46
+ totalRounds: 0,
47
+ sessionState: 'active'
48
+ };
49
+ }
50
+ /**
51
+ * Gets cache statistics
52
+ */
53
+ async getReviewCacheStats() {
54
+ return await this.sessionManager.getStats();
55
+ }
56
+ }
57
+ // Export singleton instance for backward compatibility
58
+ export const reviewSessionManager = new ReviewSessionManager();
59
+ // Export existing function signatures for drop-in replacement
60
+ export const saveReviewSession = async (session) => await reviewSessionManager.saveReviewSession(session);
61
+ export const loadReviewSession = async (sessionId) => await reviewSessionManager.loadReviewSession(sessionId);
62
+ export const listActiveSessions = async () => await reviewSessionManager.listActiveSessions();
63
+ export const createNewSession = (sessionId, gitState, focusFiles) => reviewSessionManager.createNewSession(sessionId, gitState, focusFiles);
64
+ export const getReviewCacheStats = async () => await reviewSessionManager.getReviewCacheStats();
65
+ //# sourceMappingURL=reviewSessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewSessionManager.js","sourceRoot":"","sources":["../../src/utils/reviewSessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IACvB,cAAc,CAAwC;IAE9D;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAwB,aAAa,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAA8B;QACpD,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,gBAAgB,CACd,SAAiB,EACjB,QAAkB,EAClB,UAAqB;QAErB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO;YACL,SAAS;YACT,SAAS,EAAE,GAAG;YACd,cAAc,EAAE,GAAG;YACnB,QAAQ;YACR,eAAe,EAAE,QAAQ;YACzB,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;YAChB,UAAU;YACV,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;YAC5C,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,QAAQ;SACvB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE/D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAA8B,EAAE,EAAE,CACxE,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE,CAC3D,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE,CAC3C,MAAM,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAAiB,EACjB,QAAkB,EAClB,UAAqB,EACrB,EAAE,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE,CAC5C,MAAM,oBAAoB,CAAC,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Base interface that all tool-specific session data must extend
3
+ * Ensures every session has core metadata fields
4
+ */
5
+ export interface SessionData {
6
+ sessionId: string;
7
+ createdAt: number;
8
+ lastAccessedAt: number;
9
+ }
10
+ /**
11
+ * Configuration for a tool's session management
12
+ */
13
+ export interface SessionConfig {
14
+ toolName: string;
15
+ ttl: number;
16
+ maxSessions: number;
17
+ evictionPolicy: 'fifo' | 'lru';
18
+ }
19
+ /**
20
+ * Generic session manager for all MCP tools
21
+ * Type parameter T ensures type safety for tool-specific session data
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const manager = new SessionManager<MySessionData>('my-tool');
26
+ * manager.save('session-1', { sessionId: 'session-1', ... });
27
+ * const session = manager.load('session-1');
28
+ * ```
29
+ */
30
+ export declare class SessionManager<T extends SessionData> {
31
+ private config;
32
+ private cacheDir;
33
+ private initPromise;
34
+ constructor(toolName: string, customConfig?: Partial<SessionConfig>);
35
+ /**
36
+ * Ensures the tool's session directory exists (lazy initialization)
37
+ */
38
+ private ensureCacheDirAsync;
39
+ /**
40
+ * Helper method to quickly get session count without parsing files
41
+ */
42
+ private getSessionCountFast;
43
+ /**
44
+ * Helper method to read and parse a session file
45
+ */
46
+ private readSessionFile;
47
+ /**
48
+ * Saves a session to persistent storage
49
+ * @param sessionId User-provided or generated session ID
50
+ * @param data Tool-specific session data
51
+ */
52
+ save(sessionId: string, data: T): Promise<void>;
53
+ /**
54
+ * Loads a session from storage
55
+ * @param sessionId The session ID to load
56
+ * @returns Session data or null if not found/expired
57
+ */
58
+ load(sessionId: string): Promise<T | null>;
59
+ /**
60
+ * Lists all active sessions for this tool
61
+ * @returns Array of session data
62
+ */
63
+ list(): Promise<T[]>;
64
+ /**
65
+ * Deletes a specific session
66
+ * @param sessionId The session ID to delete
67
+ * @returns true if deleted, false if not found
68
+ */
69
+ delete(sessionId: string): Promise<boolean>;
70
+ /**
71
+ * Cleans up expired sessions
72
+ */
73
+ private cleanExpiredSessions;
74
+ /**
75
+ * Enforces maximum session limits using configured eviction policy
76
+ */
77
+ private enforceSessionLimits;
78
+ /**
79
+ * Gets the file path for a session
80
+ */
81
+ private getSessionFilePath;
82
+ /**
83
+ * Gets statistics about the session cache
84
+ */
85
+ getStats(): Promise<{
86
+ toolName: string;
87
+ sessionCount: number;
88
+ ttl: number;
89
+ maxSessions: number;
90
+ evictionPolicy: string;
91
+ cacheDir: string;
92
+ }>;
93
+ }
94
+ //# sourceMappingURL=sessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/utils/sessionManager.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAWD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,KAAK,CAAC;CAChC;AAmCD;;;;;;;;;;GAUG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,WAAW;IAC/C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAA8B;gBAErC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAanE;;OAEG;YACW,mBAAmB;IAkBjC;;OAEG;YACW,mBAAmB;IASjC;;OAEG;YACW,eAAe;IAS7B;;;;OAIG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCrD;;;;OAIG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAqDhD;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IA8B1B;;;;OAIG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBjD;;OAEG;YACW,oBAAoB;IAwClC;;OAEG;YACW,oBAAoB;IAiDlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CAqBH"}