oh-my-claude-sisyphus 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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +416 -0
  3. package/dist/agents/definitions.d.ts +48 -0
  4. package/dist/agents/definitions.d.ts.map +1 -0
  5. package/dist/agents/definitions.js +271 -0
  6. package/dist/agents/definitions.js.map +1 -0
  7. package/dist/agents/index.d.ts +5 -0
  8. package/dist/agents/index.d.ts.map +1 -0
  9. package/dist/agents/index.js +5 -0
  10. package/dist/agents/index.js.map +1 -0
  11. package/dist/cli/index.d.ts +13 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +280 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/config/index.d.ts +5 -0
  16. package/dist/config/index.d.ts.map +1 -0
  17. package/dist/config/index.js +5 -0
  18. package/dist/config/index.js.map +1 -0
  19. package/dist/config/loader.d.ts +49 -0
  20. package/dist/config/loader.d.ts.map +1 -0
  21. package/dist/config/loader.js +329 -0
  22. package/dist/config/loader.js.map +1 -0
  23. package/dist/features/continuation-enforcement.d.ts +34 -0
  24. package/dist/features/continuation-enforcement.d.ts.map +1 -0
  25. package/dist/features/continuation-enforcement.js +142 -0
  26. package/dist/features/continuation-enforcement.js.map +1 -0
  27. package/dist/features/index.d.ts +6 -0
  28. package/dist/features/index.d.ts.map +1 -0
  29. package/dist/features/index.js +6 -0
  30. package/dist/features/index.js.map +1 -0
  31. package/dist/features/magic-keywords.d.ts +22 -0
  32. package/dist/features/magic-keywords.d.ts.map +1 -0
  33. package/dist/features/magic-keywords.js +189 -0
  34. package/dist/features/magic-keywords.js.map +1 -0
  35. package/dist/index.d.ts +105 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +146 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mcp/index.d.ts +6 -0
  40. package/dist/mcp/index.d.ts.map +1 -0
  41. package/dist/mcp/index.js +5 -0
  42. package/dist/mcp/index.js.map +1 -0
  43. package/dist/mcp/servers.d.ts +77 -0
  44. package/dist/mcp/servers.d.ts.map +1 -0
  45. package/dist/mcp/servers.js +122 -0
  46. package/dist/mcp/servers.js.map +1 -0
  47. package/dist/shared/index.d.ts +5 -0
  48. package/dist/shared/index.d.ts.map +1 -0
  49. package/dist/shared/index.js +5 -0
  50. package/dist/shared/index.js.map +1 -0
  51. package/dist/shared/types.d.ts +133 -0
  52. package/dist/shared/types.d.ts.map +1 -0
  53. package/dist/shared/types.js +5 -0
  54. package/dist/shared/types.js.map +1 -0
  55. package/dist/tools/ast-tools.d.ts +63 -0
  56. package/dist/tools/ast-tools.d.ts.map +1 -0
  57. package/dist/tools/ast-tools.js +349 -0
  58. package/dist/tools/ast-tools.js.map +1 -0
  59. package/dist/tools/index.d.ts +52 -0
  60. package/dist/tools/index.d.ts.map +1 -0
  61. package/dist/tools/index.js +120 -0
  62. package/dist/tools/index.js.map +1 -0
  63. package/dist/tools/lsp/client.d.ts +201 -0
  64. package/dist/tools/lsp/client.d.ts.map +1 -0
  65. package/dist/tools/lsp/client.js +454 -0
  66. package/dist/tools/lsp/client.js.map +1 -0
  67. package/dist/tools/lsp/index.d.ts +9 -0
  68. package/dist/tools/lsp/index.d.ts.map +1 -0
  69. package/dist/tools/lsp/index.js +7 -0
  70. package/dist/tools/lsp/index.js.map +1 -0
  71. package/dist/tools/lsp/servers.d.ts +37 -0
  72. package/dist/tools/lsp/servers.d.ts.map +1 -0
  73. package/dist/tools/lsp/servers.js +148 -0
  74. package/dist/tools/lsp/servers.js.map +1 -0
  75. package/dist/tools/lsp/utils.d.ts +58 -0
  76. package/dist/tools/lsp/utils.d.ts.map +1 -0
  77. package/dist/tools/lsp/utils.js +236 -0
  78. package/dist/tools/lsp/utils.js.map +1 -0
  79. package/dist/tools/lsp-tools.d.ts +151 -0
  80. package/dist/tools/lsp-tools.d.ts.map +1 -0
  81. package/dist/tools/lsp-tools.js +358 -0
  82. package/dist/tools/lsp-tools.js.map +1 -0
  83. package/package.json +75 -0
  84. package/scripts/install.sh +765 -0
  85. package/scripts/uninstall.sh +47 -0
@@ -0,0 +1,201 @@
1
+ /**
2
+ * LSP Client Implementation
3
+ *
4
+ * Manages connections to language servers using JSON-RPC 2.0 over stdio.
5
+ * Handles server lifecycle, message buffering, and request/response matching.
6
+ */
7
+ import type { LspServerConfig } from './servers.js';
8
+ export interface Position {
9
+ line: number;
10
+ character: number;
11
+ }
12
+ export interface Range {
13
+ start: Position;
14
+ end: Position;
15
+ }
16
+ export interface Location {
17
+ uri: string;
18
+ range: Range;
19
+ }
20
+ export interface TextDocumentIdentifier {
21
+ uri: string;
22
+ }
23
+ export interface TextDocumentPositionParams {
24
+ textDocument: TextDocumentIdentifier;
25
+ position: Position;
26
+ }
27
+ export interface Hover {
28
+ contents: string | {
29
+ kind: string;
30
+ value: string;
31
+ } | Array<string | {
32
+ kind: string;
33
+ value: string;
34
+ }>;
35
+ range?: Range;
36
+ }
37
+ export interface Diagnostic {
38
+ range: Range;
39
+ severity?: number;
40
+ code?: string | number;
41
+ source?: string;
42
+ message: string;
43
+ }
44
+ export interface DocumentSymbol {
45
+ name: string;
46
+ kind: number;
47
+ range: Range;
48
+ selectionRange: Range;
49
+ children?: DocumentSymbol[];
50
+ }
51
+ export interface SymbolInformation {
52
+ name: string;
53
+ kind: number;
54
+ location: Location;
55
+ containerName?: string;
56
+ }
57
+ export interface WorkspaceEdit {
58
+ changes?: Record<string, Array<{
59
+ range: Range;
60
+ newText: string;
61
+ }>>;
62
+ documentChanges?: Array<{
63
+ textDocument: TextDocumentIdentifier;
64
+ edits: Array<{
65
+ range: Range;
66
+ newText: string;
67
+ }>;
68
+ }>;
69
+ }
70
+ export interface CodeAction {
71
+ title: string;
72
+ kind?: string;
73
+ diagnostics?: Diagnostic[];
74
+ isPreferred?: boolean;
75
+ edit?: WorkspaceEdit;
76
+ command?: {
77
+ title: string;
78
+ command: string;
79
+ arguments?: unknown[];
80
+ };
81
+ }
82
+ /**
83
+ * LSP Client class
84
+ */
85
+ export declare class LspClient {
86
+ private process;
87
+ private requestId;
88
+ private pendingRequests;
89
+ private buffer;
90
+ private openDocuments;
91
+ private diagnostics;
92
+ private workspaceRoot;
93
+ private serverConfig;
94
+ private initialized;
95
+ constructor(workspaceRoot: string, serverConfig: LspServerConfig);
96
+ /**
97
+ * Start the LSP server and initialize the connection
98
+ */
99
+ connect(): Promise<void>;
100
+ /**
101
+ * Disconnect from the LSP server
102
+ */
103
+ disconnect(): Promise<void>;
104
+ /**
105
+ * Handle incoming data from the server
106
+ */
107
+ private handleData;
108
+ /**
109
+ * Handle a parsed JSON-RPC message
110
+ */
111
+ private handleMessage;
112
+ /**
113
+ * Handle server notifications
114
+ */
115
+ private handleNotification;
116
+ /**
117
+ * Send a request to the server
118
+ */
119
+ private request;
120
+ /**
121
+ * Send a notification to the server (no response expected)
122
+ */
123
+ private notify;
124
+ /**
125
+ * Initialize the LSP connection
126
+ */
127
+ private initialize;
128
+ /**
129
+ * Open a document for editing
130
+ */
131
+ openDocument(filePath: string): Promise<void>;
132
+ /**
133
+ * Close a document
134
+ */
135
+ closeDocument(filePath: string): void;
136
+ /**
137
+ * Get the language ID for a file
138
+ */
139
+ private getLanguageId;
140
+ /**
141
+ * Convert file path to URI and ensure document is open
142
+ */
143
+ private prepareDocument;
144
+ /**
145
+ * Get hover information at a position
146
+ */
147
+ hover(filePath: string, line: number, character: number): Promise<Hover | null>;
148
+ /**
149
+ * Go to definition
150
+ */
151
+ definition(filePath: string, line: number, character: number): Promise<Location | Location[] | null>;
152
+ /**
153
+ * Find all references
154
+ */
155
+ references(filePath: string, line: number, character: number, includeDeclaration?: boolean): Promise<Location[] | null>;
156
+ /**
157
+ * Get document symbols
158
+ */
159
+ documentSymbols(filePath: string): Promise<DocumentSymbol[] | SymbolInformation[] | null>;
160
+ /**
161
+ * Search workspace symbols
162
+ */
163
+ workspaceSymbols(query: string): Promise<SymbolInformation[] | null>;
164
+ /**
165
+ * Get diagnostics for a file
166
+ */
167
+ getDiagnostics(filePath: string): Diagnostic[];
168
+ /**
169
+ * Prepare rename (check if rename is valid)
170
+ */
171
+ prepareRename(filePath: string, line: number, character: number): Promise<Range | null>;
172
+ /**
173
+ * Rename a symbol
174
+ */
175
+ rename(filePath: string, line: number, character: number, newName: string): Promise<WorkspaceEdit | null>;
176
+ /**
177
+ * Get code actions
178
+ */
179
+ codeActions(filePath: string, range: Range, diagnostics?: Diagnostic[]): Promise<CodeAction[] | null>;
180
+ }
181
+ /**
182
+ * Client manager - maintains a pool of LSP clients per workspace/server
183
+ */
184
+ declare class LspClientManager {
185
+ private clients;
186
+ /**
187
+ * Get or create a client for a file
188
+ */
189
+ getClientForFile(filePath: string): Promise<LspClient | null>;
190
+ /**
191
+ * Find the workspace root for a file
192
+ */
193
+ private findWorkspaceRoot;
194
+ /**
195
+ * Disconnect all clients
196
+ */
197
+ disconnectAll(): Promise<void>;
198
+ }
199
+ export declare const lspClientManager: LspClientManager;
200
+ export {};
201
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/tools/lsp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,454 @@
1
+ /**
2
+ * LSP Client Implementation
3
+ *
4
+ * Manages connections to language servers using JSON-RPC 2.0 over stdio.
5
+ * Handles server lifecycle, message buffering, and request/response matching.
6
+ */
7
+ import { spawn } from 'child_process';
8
+ import { readFileSync, existsSync } from 'fs';
9
+ import { resolve, dirname } from 'path';
10
+ import { getServerForFile, commandExists } from './servers.js';
11
+ /**
12
+ * LSP Client class
13
+ */
14
+ export class LspClient {
15
+ process = null;
16
+ requestId = 0;
17
+ pendingRequests = new Map();
18
+ buffer = '';
19
+ openDocuments = new Set();
20
+ diagnostics = new Map();
21
+ workspaceRoot;
22
+ serverConfig;
23
+ initialized = false;
24
+ constructor(workspaceRoot, serverConfig) {
25
+ this.workspaceRoot = resolve(workspaceRoot);
26
+ this.serverConfig = serverConfig;
27
+ }
28
+ /**
29
+ * Start the LSP server and initialize the connection
30
+ */
31
+ async connect() {
32
+ if (this.process) {
33
+ return; // Already connected
34
+ }
35
+ if (!commandExists(this.serverConfig.command)) {
36
+ throw new Error(`Language server '${this.serverConfig.command}' not found.\n` +
37
+ `Install with: ${this.serverConfig.installHint}`);
38
+ }
39
+ return new Promise((resolve, reject) => {
40
+ this.process = spawn(this.serverConfig.command, this.serverConfig.args, {
41
+ cwd: this.workspaceRoot,
42
+ stdio: ['pipe', 'pipe', 'pipe']
43
+ });
44
+ this.process.stdout?.on('data', (data) => {
45
+ this.handleData(data.toString());
46
+ });
47
+ this.process.stderr?.on('data', (data) => {
48
+ // Log stderr for debugging but don't fail
49
+ console.error(`LSP stderr: ${data.toString()}`);
50
+ });
51
+ this.process.on('error', (error) => {
52
+ reject(new Error(`Failed to start LSP server: ${error.message}`));
53
+ });
54
+ this.process.on('exit', (code) => {
55
+ this.process = null;
56
+ this.initialized = false;
57
+ if (code !== 0) {
58
+ console.error(`LSP server exited with code ${code}`);
59
+ }
60
+ });
61
+ // Send initialize request
62
+ this.initialize()
63
+ .then(() => {
64
+ this.initialized = true;
65
+ resolve();
66
+ })
67
+ .catch(reject);
68
+ });
69
+ }
70
+ /**
71
+ * Disconnect from the LSP server
72
+ */
73
+ async disconnect() {
74
+ if (!this.process)
75
+ return;
76
+ try {
77
+ await this.request('shutdown', null);
78
+ this.notify('exit', null);
79
+ }
80
+ catch {
81
+ // Ignore errors during shutdown
82
+ }
83
+ this.process.kill();
84
+ this.process = null;
85
+ this.initialized = false;
86
+ this.pendingRequests.clear();
87
+ this.openDocuments.clear();
88
+ this.diagnostics.clear();
89
+ }
90
+ /**
91
+ * Handle incoming data from the server
92
+ */
93
+ handleData(data) {
94
+ this.buffer += data;
95
+ while (true) {
96
+ // Look for Content-Length header
97
+ const headerEnd = this.buffer.indexOf('\r\n\r\n');
98
+ if (headerEnd === -1)
99
+ break;
100
+ const header = this.buffer.slice(0, headerEnd);
101
+ const contentLengthMatch = header.match(/Content-Length: (\d+)/i);
102
+ if (!contentLengthMatch) {
103
+ // Invalid header, try to recover
104
+ this.buffer = this.buffer.slice(headerEnd + 4);
105
+ continue;
106
+ }
107
+ const contentLength = parseInt(contentLengthMatch[1], 10);
108
+ const messageStart = headerEnd + 4;
109
+ const messageEnd = messageStart + contentLength;
110
+ if (this.buffer.length < messageEnd) {
111
+ break; // Not enough data yet
112
+ }
113
+ const messageJson = this.buffer.slice(messageStart, messageEnd);
114
+ this.buffer = this.buffer.slice(messageEnd);
115
+ try {
116
+ const message = JSON.parse(messageJson);
117
+ this.handleMessage(message);
118
+ }
119
+ catch {
120
+ // Invalid JSON, skip
121
+ }
122
+ }
123
+ }
124
+ /**
125
+ * Handle a parsed JSON-RPC message
126
+ */
127
+ handleMessage(message) {
128
+ if ('id' in message && message.id !== undefined) {
129
+ // Response to a request
130
+ const pending = this.pendingRequests.get(message.id);
131
+ if (pending) {
132
+ clearTimeout(pending.timeout);
133
+ this.pendingRequests.delete(message.id);
134
+ if (message.error) {
135
+ pending.reject(new Error(message.error.message));
136
+ }
137
+ else {
138
+ pending.resolve(message.result);
139
+ }
140
+ }
141
+ }
142
+ else if ('method' in message) {
143
+ // Notification from server
144
+ this.handleNotification(message);
145
+ }
146
+ }
147
+ /**
148
+ * Handle server notifications
149
+ */
150
+ handleNotification(notification) {
151
+ if (notification.method === 'textDocument/publishDiagnostics') {
152
+ const params = notification.params;
153
+ this.diagnostics.set(params.uri, params.diagnostics);
154
+ }
155
+ // Handle other notifications as needed
156
+ }
157
+ /**
158
+ * Send a request to the server
159
+ */
160
+ async request(method, params, timeout = 15000) {
161
+ if (!this.process?.stdin) {
162
+ throw new Error('LSP server not connected');
163
+ }
164
+ const id = ++this.requestId;
165
+ const request = {
166
+ jsonrpc: '2.0',
167
+ id,
168
+ method,
169
+ params
170
+ };
171
+ const content = JSON.stringify(request);
172
+ const message = `Content-Length: ${Buffer.byteLength(content)}\r\n\r\n${content}`;
173
+ return new Promise((resolve, reject) => {
174
+ const timeoutHandle = setTimeout(() => {
175
+ this.pendingRequests.delete(id);
176
+ reject(new Error(`LSP request '${method}' timed out after ${timeout}ms`));
177
+ }, timeout);
178
+ this.pendingRequests.set(id, {
179
+ resolve: resolve,
180
+ reject,
181
+ timeout: timeoutHandle
182
+ });
183
+ this.process?.stdin?.write(message);
184
+ });
185
+ }
186
+ /**
187
+ * Send a notification to the server (no response expected)
188
+ */
189
+ notify(method, params) {
190
+ if (!this.process?.stdin)
191
+ return;
192
+ const notification = {
193
+ jsonrpc: '2.0',
194
+ method,
195
+ params
196
+ };
197
+ const content = JSON.stringify(notification);
198
+ const message = `Content-Length: ${Buffer.byteLength(content)}\r\n\r\n${content}`;
199
+ this.process.stdin.write(message);
200
+ }
201
+ /**
202
+ * Initialize the LSP connection
203
+ */
204
+ async initialize() {
205
+ await this.request('initialize', {
206
+ processId: process.pid,
207
+ rootUri: `file://${this.workspaceRoot}`,
208
+ rootPath: this.workspaceRoot,
209
+ capabilities: {
210
+ textDocument: {
211
+ hover: { contentFormat: ['markdown', 'plaintext'] },
212
+ definition: { linkSupport: true },
213
+ references: {},
214
+ documentSymbol: { hierarchicalDocumentSymbolSupport: true },
215
+ codeAction: { codeActionLiteralSupport: { codeActionKind: { valueSet: [] } } },
216
+ rename: { prepareSupport: true }
217
+ },
218
+ workspace: {
219
+ symbol: {},
220
+ workspaceFolders: true
221
+ }
222
+ },
223
+ initializationOptions: this.serverConfig.initializationOptions || {}
224
+ });
225
+ this.notify('initialized', {});
226
+ }
227
+ /**
228
+ * Open a document for editing
229
+ */
230
+ async openDocument(filePath) {
231
+ const uri = `file://${resolve(filePath)}`;
232
+ if (this.openDocuments.has(uri))
233
+ return;
234
+ if (!existsSync(filePath)) {
235
+ throw new Error(`File not found: ${filePath}`);
236
+ }
237
+ const content = readFileSync(filePath, 'utf-8');
238
+ const languageId = this.getLanguageId(filePath);
239
+ this.notify('textDocument/didOpen', {
240
+ textDocument: {
241
+ uri,
242
+ languageId,
243
+ version: 1,
244
+ text: content
245
+ }
246
+ });
247
+ this.openDocuments.add(uri);
248
+ // Wait a bit for the server to process the document
249
+ await new Promise(resolve => setTimeout(resolve, 100));
250
+ }
251
+ /**
252
+ * Close a document
253
+ */
254
+ closeDocument(filePath) {
255
+ const uri = `file://${resolve(filePath)}`;
256
+ if (!this.openDocuments.has(uri))
257
+ return;
258
+ this.notify('textDocument/didClose', {
259
+ textDocument: { uri }
260
+ });
261
+ this.openDocuments.delete(uri);
262
+ }
263
+ /**
264
+ * Get the language ID for a file
265
+ */
266
+ getLanguageId(filePath) {
267
+ const ext = filePath.split('.').pop()?.toLowerCase() || '';
268
+ const langMap = {
269
+ 'ts': 'typescript',
270
+ 'tsx': 'typescriptreact',
271
+ 'js': 'javascript',
272
+ 'jsx': 'javascriptreact',
273
+ 'mts': 'typescript',
274
+ 'cts': 'typescript',
275
+ 'mjs': 'javascript',
276
+ 'cjs': 'javascript',
277
+ 'py': 'python',
278
+ 'rs': 'rust',
279
+ 'go': 'go',
280
+ 'c': 'c',
281
+ 'h': 'c',
282
+ 'cpp': 'cpp',
283
+ 'cc': 'cpp',
284
+ 'hpp': 'cpp',
285
+ 'java': 'java',
286
+ 'json': 'json',
287
+ 'html': 'html',
288
+ 'css': 'css',
289
+ 'scss': 'scss',
290
+ 'yaml': 'yaml',
291
+ 'yml': 'yaml'
292
+ };
293
+ return langMap[ext] || ext;
294
+ }
295
+ /**
296
+ * Convert file path to URI and ensure document is open
297
+ */
298
+ async prepareDocument(filePath) {
299
+ await this.openDocument(filePath);
300
+ return `file://${resolve(filePath)}`;
301
+ }
302
+ // LSP Request Methods
303
+ /**
304
+ * Get hover information at a position
305
+ */
306
+ async hover(filePath, line, character) {
307
+ const uri = await this.prepareDocument(filePath);
308
+ return this.request('textDocument/hover', {
309
+ textDocument: { uri },
310
+ position: { line, character }
311
+ });
312
+ }
313
+ /**
314
+ * Go to definition
315
+ */
316
+ async definition(filePath, line, character) {
317
+ const uri = await this.prepareDocument(filePath);
318
+ return this.request('textDocument/definition', {
319
+ textDocument: { uri },
320
+ position: { line, character }
321
+ });
322
+ }
323
+ /**
324
+ * Find all references
325
+ */
326
+ async references(filePath, line, character, includeDeclaration = true) {
327
+ const uri = await this.prepareDocument(filePath);
328
+ return this.request('textDocument/references', {
329
+ textDocument: { uri },
330
+ position: { line, character },
331
+ context: { includeDeclaration }
332
+ });
333
+ }
334
+ /**
335
+ * Get document symbols
336
+ */
337
+ async documentSymbols(filePath) {
338
+ const uri = await this.prepareDocument(filePath);
339
+ return this.request('textDocument/documentSymbol', {
340
+ textDocument: { uri }
341
+ });
342
+ }
343
+ /**
344
+ * Search workspace symbols
345
+ */
346
+ async workspaceSymbols(query) {
347
+ return this.request('workspace/symbol', { query });
348
+ }
349
+ /**
350
+ * Get diagnostics for a file
351
+ */
352
+ getDiagnostics(filePath) {
353
+ const uri = `file://${resolve(filePath)}`;
354
+ return this.diagnostics.get(uri) || [];
355
+ }
356
+ /**
357
+ * Prepare rename (check if rename is valid)
358
+ */
359
+ async prepareRename(filePath, line, character) {
360
+ const uri = await this.prepareDocument(filePath);
361
+ try {
362
+ const result = await this.request('textDocument/prepareRename', {
363
+ textDocument: { uri },
364
+ position: { line, character }
365
+ });
366
+ if (!result)
367
+ return null;
368
+ return 'range' in result ? result.range : result;
369
+ }
370
+ catch {
371
+ return null;
372
+ }
373
+ }
374
+ /**
375
+ * Rename a symbol
376
+ */
377
+ async rename(filePath, line, character, newName) {
378
+ const uri = await this.prepareDocument(filePath);
379
+ return this.request('textDocument/rename', {
380
+ textDocument: { uri },
381
+ position: { line, character },
382
+ newName
383
+ });
384
+ }
385
+ /**
386
+ * Get code actions
387
+ */
388
+ async codeActions(filePath, range, diagnostics = []) {
389
+ const uri = await this.prepareDocument(filePath);
390
+ return this.request('textDocument/codeAction', {
391
+ textDocument: { uri },
392
+ range,
393
+ context: { diagnostics }
394
+ });
395
+ }
396
+ }
397
+ /**
398
+ * Client manager - maintains a pool of LSP clients per workspace/server
399
+ */
400
+ class LspClientManager {
401
+ clients = new Map();
402
+ /**
403
+ * Get or create a client for a file
404
+ */
405
+ async getClientForFile(filePath) {
406
+ const serverConfig = getServerForFile(filePath);
407
+ if (!serverConfig) {
408
+ return null;
409
+ }
410
+ // Find workspace root
411
+ const workspaceRoot = this.findWorkspaceRoot(filePath);
412
+ const key = `${workspaceRoot}:${serverConfig.command}`;
413
+ let client = this.clients.get(key);
414
+ if (!client) {
415
+ client = new LspClient(workspaceRoot, serverConfig);
416
+ try {
417
+ await client.connect();
418
+ this.clients.set(key, client);
419
+ }
420
+ catch (error) {
421
+ throw error;
422
+ }
423
+ }
424
+ return client;
425
+ }
426
+ /**
427
+ * Find the workspace root for a file
428
+ */
429
+ findWorkspaceRoot(filePath) {
430
+ let dir = dirname(resolve(filePath));
431
+ const markers = ['package.json', 'tsconfig.json', 'pyproject.toml', 'Cargo.toml', 'go.mod', '.git'];
432
+ while (dir !== '/') {
433
+ for (const marker of markers) {
434
+ if (existsSync(`${dir}/${marker}`)) {
435
+ return dir;
436
+ }
437
+ }
438
+ dir = dirname(dir);
439
+ }
440
+ return dirname(resolve(filePath));
441
+ }
442
+ /**
443
+ * Disconnect all clients
444
+ */
445
+ async disconnectAll() {
446
+ for (const client of this.clients.values()) {
447
+ await client.disconnect();
448
+ }
449
+ this.clients.clear();
450
+ }
451
+ }
452
+ // Export a singleton instance
453
+ export const lspClientManager = new LspClientManager();
454
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/tools/lsp/client.ts"],"names":[],"mappings":"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"}